Skip to content
This repository was archived by the owner on May 6, 2022. It is now read-only.

Commit e5c37ad

Browse files
authored
Add ObservedGeneration and Provisioned into ServiceInstanceStatus (#1748)
* Add ObservedGeneration and ProvisionStatus into ServiceInstanceStatus * Determine reconciled generation based on ObservedGeneration and Ready/Failed conditions
1 parent 9021d8b commit e5c37ad

12 files changed

+456
-115
lines changed

pkg/apis/servicecatalog/types.go

+23
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,15 @@ type ServiceInstanceStatus struct {
537537
// ReconciledGeneration is the 'Generation' of the serviceInstanceSpec that
538538
// was last processed by the controller. The reconciled generation is updated
539539
// even if the controller failed to process the spec.
540+
// Deprecated: use ObservedGeneration with conditions set to true to find
541+
// whether generation was reconciled.
540542
ReconciledGeneration int64
541543

544+
// ObservedGeneration is the 'Generation' of the serviceInstanceSpec that
545+
// was last processed by the controller. The observed generation is updated
546+
// whenever the status is updated regardless of operation result.
547+
ObservedGeneration int64
548+
542549
// OperationStartTime is the time at which the current operation began.
543550
OperationStartTime *metav1.Time
544551

@@ -551,6 +558,9 @@ type ServiceInstanceStatus struct {
551558
// broker knows about.
552559
ExternalProperties *ServiceInstancePropertiesState
553560

561+
// ProvisionStatus describes whether the instance is in the provisioned state.
562+
ProvisionStatus ServiceInstanceProvisionStatus
563+
554564
// DeprovisionStatus describes what has been done to deprovision the
555565
// ServiceInstance.
556566
DeprovisionStatus ServiceInstanceDeprovisionStatus
@@ -653,6 +663,19 @@ const (
653663
ServiceInstanceDeprovisionStatusFailed ServiceInstanceDeprovisionStatus = "Failed"
654664
)
655665

666+
// ServiceInstanceProvisionStatus is the status of provisioning a
667+
// ServiceInstance
668+
type ServiceInstanceProvisionStatus string
669+
670+
const (
671+
// ServiceInstanceProvisionStatusProvisioned indicates that the instance
672+
// was provisioned.
673+
ServiceInstanceProvisionStatusProvisioned ServiceInstanceProvisionStatus = "Provisioned"
674+
// ServiceInstanceProvisionStatusNotProvisioned indicates that the instance
675+
// was not ever provisioned or was deprovisioned.
676+
ServiceInstanceProvisionStatusNotProvisioned ServiceInstanceProvisionStatus = "NotProvisioned"
677+
)
678+
656679
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
657680

658681
// ServiceBindingList is a list of ServiceBindings.

pkg/apis/servicecatalog/v1beta1/types.go

+23
Original file line numberDiff line numberDiff line change
@@ -601,8 +601,15 @@ type ServiceInstanceStatus struct {
601601
// ReconciledGeneration is the 'Generation' of the serviceInstanceSpec that
602602
// was last processed by the controller. The reconciled generation is updated
603603
// even if the controller failed to process the spec.
604+
// Deprecated: use ObservedGeneration with conditions set to true to find
605+
// whether generation was reconciled.
604606
ReconciledGeneration int64 `json:"reconciledGeneration"`
605607

608+
// ObservedGeneration is the 'Generation' of the serviceInstanceSpec that
609+
// was last processed by the controller. The observed generation is updated
610+
// whenever the status is updated regardless of operation result.
611+
ObservedGeneration int64 `json:"observedGeneration"`
612+
606613
// OperationStartTime is the time at which the current operation began.
607614
OperationStartTime *metav1.Time `json:"operationStartTime,omitempty"`
608615

@@ -615,6 +622,9 @@ type ServiceInstanceStatus struct {
615622
// broker knows about.
616623
ExternalProperties *ServiceInstancePropertiesState `json:"externalProperties,omitempty"`
617624

625+
// ProvisionStatus describes whether the instance is in the provisioned state.
626+
ProvisionStatus ServiceInstanceProvisionStatus `json:"provisionStatus"`
627+
618628
// DeprovisionStatus describes what has been done to deprovision the
619629
// ServiceInstance.
620630
DeprovisionStatus ServiceInstanceDeprovisionStatus `json:"deprovisionStatus"`
@@ -717,6 +727,19 @@ const (
717727
ServiceInstanceDeprovisionStatusFailed ServiceInstanceDeprovisionStatus = "Failed"
718728
)
719729

730+
// ServiceInstanceProvisionStatus is the status of provisioning a
731+
// ServiceInstance
732+
type ServiceInstanceProvisionStatus string
733+
734+
const (
735+
// ServiceInstanceProvisionStatusProvisioned indicates that the instance
736+
// was provisioned.
737+
ServiceInstanceProvisionStatusProvisioned ServiceInstanceProvisionStatus = "Provisioned"
738+
// ServiceInstanceProvisionStatusNotProvisioned indicates that the instance
739+
// was not ever provisioned or was deprovisioned.
740+
ServiceInstanceProvisionStatusNotProvisioned ServiceInstanceProvisionStatus = "NotProvisioned"
741+
)
742+
720743
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
721744

722745
// ServiceBindingList is a list of ServiceBindings.

pkg/apis/servicecatalog/v1beta1/zz_generated.conversion.go

+4
Original file line numberDiff line numberDiff line change
@@ -1005,9 +1005,11 @@ func autoConvert_v1beta1_ServiceInstanceStatus_To_servicecatalog_ServiceInstance
10051005
out.DashboardURL = (*string)(unsafe.Pointer(in.DashboardURL))
10061006
out.CurrentOperation = servicecatalog.ServiceInstanceOperation(in.CurrentOperation)
10071007
out.ReconciledGeneration = in.ReconciledGeneration
1008+
out.ObservedGeneration = in.ObservedGeneration
10081009
out.OperationStartTime = (*v1.Time)(unsafe.Pointer(in.OperationStartTime))
10091010
out.InProgressProperties = (*servicecatalog.ServiceInstancePropertiesState)(unsafe.Pointer(in.InProgressProperties))
10101011
out.ExternalProperties = (*servicecatalog.ServiceInstancePropertiesState)(unsafe.Pointer(in.ExternalProperties))
1012+
out.ProvisionStatus = servicecatalog.ServiceInstanceProvisionStatus(in.ProvisionStatus)
10111013
out.DeprovisionStatus = servicecatalog.ServiceInstanceDeprovisionStatus(in.DeprovisionStatus)
10121014
return nil
10131015
}
@@ -1025,9 +1027,11 @@ func autoConvert_servicecatalog_ServiceInstanceStatus_To_v1beta1_ServiceInstance
10251027
out.DashboardURL = (*string)(unsafe.Pointer(in.DashboardURL))
10261028
out.CurrentOperation = ServiceInstanceOperation(in.CurrentOperation)
10271029
out.ReconciledGeneration = in.ReconciledGeneration
1030+
out.ObservedGeneration = in.ObservedGeneration
10281031
out.OperationStartTime = (*v1.Time)(unsafe.Pointer(in.OperationStartTime))
10291032
out.InProgressProperties = (*ServiceInstancePropertiesState)(unsafe.Pointer(in.InProgressProperties))
10301033
out.ExternalProperties = (*ServiceInstancePropertiesState)(unsafe.Pointer(in.ExternalProperties))
1034+
out.ProvisionStatus = ServiceInstanceProvisionStatus(in.ProvisionStatus)
10311035
out.DeprovisionStatus = ServiceInstanceDeprovisionStatus(in.DeprovisionStatus)
10321036
return nil
10331037
}

pkg/controller/controller.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -590,18 +590,30 @@ func convertClusterServicePlans(plans []osb.Plan, serviceClassID string) ([]*v1b
590590
return servicePlans, nil
591591
}
592592

593-
// isServiceInstanceReady returns whether the given instance has a ready condition
593+
// isServiceInstanceConditionTrue returns whether the given instance has a given condition
594594
// with status true.
595-
func isServiceInstanceReady(instance *v1beta1.ServiceInstance) bool {
595+
func isServiceInstanceConditionTrue(instance *v1beta1.ServiceInstance, conditionType v1beta1.ServiceInstanceConditionType) bool {
596596
for _, cond := range instance.Status.Conditions {
597-
if cond.Type == v1beta1.ServiceInstanceConditionReady {
597+
if cond.Type == conditionType {
598598
return cond.Status == v1beta1.ConditionTrue
599599
}
600600
}
601601

602602
return false
603603
}
604604

605+
// isServiceInstanceReady returns whether the given instance has a ready condition
606+
// with status true.
607+
func isServiceInstanceReady(instance *v1beta1.ServiceInstance) bool {
608+
return isServiceInstanceConditionTrue(instance, v1beta1.ServiceInstanceConditionReady)
609+
}
610+
611+
// isServiceInstanceFailed returns whether the instance has a failed condition with
612+
// status true.
613+
func isServiceInstanceFailed(instance *v1beta1.ServiceInstance) bool {
614+
return isServiceInstanceConditionTrue(instance, v1beta1.ServiceInstanceConditionFailed)
615+
}
616+
605617
// NewClientConfigurationForBroker creates a new ClientConfiguration for connecting
606618
// to the specified Broker
607619
func NewClientConfigurationForBroker(broker *v1beta1.ClusterServiceBroker, authConfig *osb.AuthConfig) *osb.ClientConfiguration {

0 commit comments

Comments
 (0)