Skip to content

Commit

Permalink
Add ObservedGeneration and Provisioned into ServiceInstanceStatus (op…
Browse files Browse the repository at this point in the history
…enshift#1748)

* Add ObservedGeneration and ProvisionStatus into ServiceInstanceStatus
* Determine reconciled generation based on ObservedGeneration and Ready/Failed conditions
  • Loading branch information
nilebox committed Mar 3, 2018
1 parent 9021d8b commit e5c37ad
Show file tree
Hide file tree
Showing 12 changed files with 456 additions and 115 deletions.
23 changes: 23 additions & 0 deletions pkg/apis/servicecatalog/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,15 @@ type ServiceInstanceStatus struct {
// ReconciledGeneration is the 'Generation' of the serviceInstanceSpec that
// was last processed by the controller. The reconciled generation is updated
// even if the controller failed to process the spec.
// Deprecated: use ObservedGeneration with conditions set to true to find
// whether generation was reconciled.
ReconciledGeneration int64

// ObservedGeneration is the 'Generation' of the serviceInstanceSpec that
// was last processed by the controller. The observed generation is updated
// whenever the status is updated regardless of operation result.
ObservedGeneration int64

// OperationStartTime is the time at which the current operation began.
OperationStartTime *metav1.Time

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

// ProvisionStatus describes whether the instance is in the provisioned state.
ProvisionStatus ServiceInstanceProvisionStatus

// DeprovisionStatus describes what has been done to deprovision the
// ServiceInstance.
DeprovisionStatus ServiceInstanceDeprovisionStatus
Expand Down Expand Up @@ -653,6 +663,19 @@ const (
ServiceInstanceDeprovisionStatusFailed ServiceInstanceDeprovisionStatus = "Failed"
)

// ServiceInstanceProvisionStatus is the status of provisioning a
// ServiceInstance
type ServiceInstanceProvisionStatus string

const (
// ServiceInstanceProvisionStatusProvisioned indicates that the instance
// was provisioned.
ServiceInstanceProvisionStatusProvisioned ServiceInstanceProvisionStatus = "Provisioned"
// ServiceInstanceProvisionStatusNotProvisioned indicates that the instance
// was not ever provisioned or was deprovisioned.
ServiceInstanceProvisionStatusNotProvisioned ServiceInstanceProvisionStatus = "NotProvisioned"
)

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// ServiceBindingList is a list of ServiceBindings.
Expand Down
23 changes: 23 additions & 0 deletions pkg/apis/servicecatalog/v1beta1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -601,8 +601,15 @@ type ServiceInstanceStatus struct {
// ReconciledGeneration is the 'Generation' of the serviceInstanceSpec that
// was last processed by the controller. The reconciled generation is updated
// even if the controller failed to process the spec.
// Deprecated: use ObservedGeneration with conditions set to true to find
// whether generation was reconciled.
ReconciledGeneration int64 `json:"reconciledGeneration"`

// ObservedGeneration is the 'Generation' of the serviceInstanceSpec that
// was last processed by the controller. The observed generation is updated
// whenever the status is updated regardless of operation result.
ObservedGeneration int64 `json:"observedGeneration"`

// OperationStartTime is the time at which the current operation began.
OperationStartTime *metav1.Time `json:"operationStartTime,omitempty"`

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

// ProvisionStatus describes whether the instance is in the provisioned state.
ProvisionStatus ServiceInstanceProvisionStatus `json:"provisionStatus"`

// DeprovisionStatus describes what has been done to deprovision the
// ServiceInstance.
DeprovisionStatus ServiceInstanceDeprovisionStatus `json:"deprovisionStatus"`
Expand Down Expand Up @@ -717,6 +727,19 @@ const (
ServiceInstanceDeprovisionStatusFailed ServiceInstanceDeprovisionStatus = "Failed"
)

// ServiceInstanceProvisionStatus is the status of provisioning a
// ServiceInstance
type ServiceInstanceProvisionStatus string

const (
// ServiceInstanceProvisionStatusProvisioned indicates that the instance
// was provisioned.
ServiceInstanceProvisionStatusProvisioned ServiceInstanceProvisionStatus = "Provisioned"
// ServiceInstanceProvisionStatusNotProvisioned indicates that the instance
// was not ever provisioned or was deprovisioned.
ServiceInstanceProvisionStatusNotProvisioned ServiceInstanceProvisionStatus = "NotProvisioned"
)

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// ServiceBindingList is a list of ServiceBindings.
Expand Down
4 changes: 4 additions & 0 deletions pkg/apis/servicecatalog/v1beta1/zz_generated.conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -1005,9 +1005,11 @@ func autoConvert_v1beta1_ServiceInstanceStatus_To_servicecatalog_ServiceInstance
out.DashboardURL = (*string)(unsafe.Pointer(in.DashboardURL))
out.CurrentOperation = servicecatalog.ServiceInstanceOperation(in.CurrentOperation)
out.ReconciledGeneration = in.ReconciledGeneration
out.ObservedGeneration = in.ObservedGeneration
out.OperationStartTime = (*v1.Time)(unsafe.Pointer(in.OperationStartTime))
out.InProgressProperties = (*servicecatalog.ServiceInstancePropertiesState)(unsafe.Pointer(in.InProgressProperties))
out.ExternalProperties = (*servicecatalog.ServiceInstancePropertiesState)(unsafe.Pointer(in.ExternalProperties))
out.ProvisionStatus = servicecatalog.ServiceInstanceProvisionStatus(in.ProvisionStatus)
out.DeprovisionStatus = servicecatalog.ServiceInstanceDeprovisionStatus(in.DeprovisionStatus)
return nil
}
Expand All @@ -1025,9 +1027,11 @@ func autoConvert_servicecatalog_ServiceInstanceStatus_To_v1beta1_ServiceInstance
out.DashboardURL = (*string)(unsafe.Pointer(in.DashboardURL))
out.CurrentOperation = ServiceInstanceOperation(in.CurrentOperation)
out.ReconciledGeneration = in.ReconciledGeneration
out.ObservedGeneration = in.ObservedGeneration
out.OperationStartTime = (*v1.Time)(unsafe.Pointer(in.OperationStartTime))
out.InProgressProperties = (*ServiceInstancePropertiesState)(unsafe.Pointer(in.InProgressProperties))
out.ExternalProperties = (*ServiceInstancePropertiesState)(unsafe.Pointer(in.ExternalProperties))
out.ProvisionStatus = ServiceInstanceProvisionStatus(in.ProvisionStatus)
out.DeprovisionStatus = ServiceInstanceDeprovisionStatus(in.DeprovisionStatus)
return nil
}
Expand Down
18 changes: 15 additions & 3 deletions pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -590,18 +590,30 @@ func convertClusterServicePlans(plans []osb.Plan, serviceClassID string) ([]*v1b
return servicePlans, nil
}

// isServiceInstanceReady returns whether the given instance has a ready condition
// isServiceInstanceConditionTrue returns whether the given instance has a given condition
// with status true.
func isServiceInstanceReady(instance *v1beta1.ServiceInstance) bool {
func isServiceInstanceConditionTrue(instance *v1beta1.ServiceInstance, conditionType v1beta1.ServiceInstanceConditionType) bool {
for _, cond := range instance.Status.Conditions {
if cond.Type == v1beta1.ServiceInstanceConditionReady {
if cond.Type == conditionType {
return cond.Status == v1beta1.ConditionTrue
}
}

return false
}

// isServiceInstanceReady returns whether the given instance has a ready condition
// with status true.
func isServiceInstanceReady(instance *v1beta1.ServiceInstance) bool {
return isServiceInstanceConditionTrue(instance, v1beta1.ServiceInstanceConditionReady)
}

// isServiceInstanceFailed returns whether the instance has a failed condition with
// status true.
func isServiceInstanceFailed(instance *v1beta1.ServiceInstance) bool {
return isServiceInstanceConditionTrue(instance, v1beta1.ServiceInstanceConditionFailed)
}

// NewClientConfigurationForBroker creates a new ClientConfiguration for connecting
// to the specified Broker
func NewClientConfigurationForBroker(broker *v1beta1.ClusterServiceBroker, authConfig *osb.AuthConfig) *osb.ClientConfiguration {
Expand Down
Loading

0 comments on commit e5c37ad

Please sign in to comment.