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

Add ObservedGeneration and Provisioned into ServiceInstanceStatus #1748

Merged
merged 22 commits into from
Mar 3, 2018
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions pkg/apis/servicecatalog/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,14 @@ 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 instead
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be helpful to specify what 'use' pertains to here (totally fine to do this in a follow-up)

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 +557,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 +662,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
22 changes: 22 additions & 0 deletions pkg/apis/servicecatalog/v1beta1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -601,8 +601,14 @@ 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 instead
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit, this should end with a period.

ObservedGeneration int64 `json:"observedGeneration"`

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

Expand All @@ -615,6 +621,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 +726,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