Skip to content

Commit 11fe5f7

Browse files
committed
CAPI v1beta2 conditions and deprecations for OSC
Add CAPI v1beta2 conditions for the OpenStackCluster and deprecate error and failure messages as well as the Ready condition. This also adds the status.initialization.provisioned field. Signed-off-by: Lennart Jern <[email protected]>
1 parent 33d80a2 commit 11fe5f7

File tree

13 files changed

+578
-6
lines changed

13 files changed

+578
-6
lines changed

.golangci.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,15 @@ linters:
186186
- linters:
187187
- staticcheck
188188
text: 'SA1019: "sigs.k8s.io/cluster-api/util/deprecated/v1beta1/conditions" is deprecated: This package is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.'
189+
- linters:
190+
- staticcheck
191+
text: 'SA1019: .*.Status.Ready is deprecated: This field is deprecated and will be removed in a future API version. Use status.conditions to determine the ready state of the cluster.'
192+
- linters:
193+
- staticcheck
194+
text: 'SA1019: .*.Status.FailureReason is deprecated: This field is deprecated and will be removed in a future API version. Use status.conditions to report failures.'
195+
- linters:
196+
- staticcheck
197+
text: 'SA1019: .*.Status.FailureMessage is deprecated: This field is deprecated and will be removed in a future API version. Use status.conditions to report failures.'
189198
paths:
190199
- zz_generated.*\.go$
191200
- third_party$

api/v1beta1/conditions_consts.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,32 @@ const (
6969
// UnableToFindFloatingIPNetworkReason is used when the floating ip network is not found.
7070
UnableToFindFloatingIPNetworkReason = "UnableToFindFloatingIPNetwork"
7171
)
72+
73+
const (
74+
// NetworkReadyCondition reports on the current status of the cluster network infrastructure.
75+
// Ready indicates that the network, subnets, and related resources have been successfully provisioned.
76+
NetworkReadyCondition clusterv1beta1.ConditionType = "NetworkReady"
77+
78+
// RouterReadyCondition reports on the current status of the cluster router infrastructure.
79+
// Ready indicates that the router and its interfaces have been successfully provisioned.
80+
RouterReadyCondition clusterv1beta1.ConditionType = "RouterReady"
81+
82+
// SecurityGroupsReadyCondition reports on the current status of the cluster security groups.
83+
// Ready indicates that all required security groups have been successfully provisioned.
84+
SecurityGroupsReadyCondition clusterv1beta1.ConditionType = "SecurityGroupsReady"
85+
86+
// APIEndpointReadyCondition reports on the current status of the cluster API endpoint.
87+
// Ready indicates that the control plane endpoint has been successfully configured.
88+
APIEndpointReadyCondition clusterv1beta1.ConditionType = "APIEndpointReady"
89+
90+
// NetworkReconcileFailedReason is used when network reconciliation fails.
91+
NetworkReconcileFailedReason = "NetworkCreateFailed"
92+
// SubnetReconcileFailedReason is used when subnet reconciliation fails.
93+
SubnetReconcileFailedReason = "SubnetCreateFailed"
94+
// RouterReconcileFailedReason is used when router reconciliation fails.
95+
RouterReconcileFailedReason = "RouterCreateFailed"
96+
// SecurityGroupReconcileFailedReason is used when security group reconciliation fails.
97+
SecurityGroupReconcileFailedReason = "SecurityGroupCreateFailed"
98+
// APIEndpointConfigFailedReason is used when API endpoint configuration fails.
99+
APIEndpointConfigFailedReason = "APIEndpointConfigFailed"
100+
)

api/v1beta1/openstackcluster_types.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,27 @@ type OpenStackClusterSpec struct {
196196
IdentityRef OpenStackIdentityReference `json:"identityRef"`
197197
}
198198

199+
// ClusterInitialization represents the initialization status of the cluster.
200+
type ClusterInitialization struct {
201+
// Provisioned is set to true when the initial provisioning of the cluster infrastructure is completed.
202+
// The value of this field is never updated after provisioning is completed.
203+
// +optional
204+
Provisioned bool `json:"provisioned,omitempty"`
205+
}
206+
199207
// OpenStackClusterStatus defines the observed state of OpenStackCluster.
200208
type OpenStackClusterStatus struct {
201209
// Ready is true when the cluster infrastructure is ready.
210+
//
211+
// Deprecated: This field is deprecated and will be removed in a future API version.
212+
// Use status.conditions to determine the ready state of the cluster.
202213
// +kubebuilder:default=false
203214
Ready bool `json:"ready"`
204215

216+
// Initialization contains information about the initialization status of the cluster.
217+
// +optional
218+
Initialization *ClusterInitialization `json:"initialization,omitempty"`
219+
205220
// Network contains information about the created OpenStack Network.
206221
// +optional
207222
Network *NetworkStatusWithSubnets `json:"network,omitempty"`
@@ -257,6 +272,9 @@ type OpenStackClusterStatus struct {
257272
// Any transient errors that occur during the reconciliation of
258273
// OpenStackClusters can be added as events to the OpenStackCluster object
259274
// and/or logged in the controller's output.
275+
//
276+
// Deprecated: This field is deprecated and will be removed in a future API version.
277+
// Use status.conditions to report failures.
260278
// +optional
261279
FailureReason *capoerrors.DeprecatedCAPIClusterStatusError `json:"failureReason,omitempty"`
262280

@@ -276,8 +294,18 @@ type OpenStackClusterStatus struct {
276294
// Any transient errors that occur during the reconciliation of
277295
// OpenStackClusters can be added as events to the OpenStackCluster object
278296
// and/or logged in the controller's output.
297+
//
298+
// Deprecated: This field is deprecated and will be removed in a future API version.
299+
// Use status.conditions to report failures.
279300
// +optional
280301
FailureMessage *string `json:"failureMessage,omitempty"`
302+
303+
// Conditions defines current service state of the OpenStackCluster.
304+
// This field surfaces into Cluster's status.conditions[InfrastructureReady] condition.
305+
// The Ready condition must surface issues during the entire lifecycle of the OpenStackCluster
306+
// (both during initial provisioning and after the initial provisioning is completed).
307+
// +optional
308+
Conditions clusterv1beta1.Conditions `json:"conditions,omitempty"`
281309
}
282310

283311
// +genclient
@@ -344,6 +372,16 @@ type ManagedSecurityGroups struct {
344372

345373
var _ IdentityRefProvider = &OpenStackCluster{}
346374

375+
// GetConditions returns the observations of the operational state of the OpenStackCluster resource.
376+
func (c *OpenStackCluster) GetConditions() clusterv1beta1.Conditions {
377+
return c.Status.Conditions
378+
}
379+
380+
// SetConditions sets the underlying service state of the OpenStackCluster to the predescribed clusterv1.Conditions.
381+
func (c *OpenStackCluster) SetConditions(conditions clusterv1beta1.Conditions) {
382+
c.Status.Conditions = conditions
383+
}
384+
347385
// GetIdentifyRef returns the cluster's namespace and IdentityRef.
348386
func (c *OpenStackCluster) GetIdentityRef() (*string, *OpenStackIdentityReference) {
349387
return &c.Namespace, &c.Spec.IdentityRef

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/models-schema/zz_generated.openapi.go

Lines changed: 45 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)