@@ -17,165 +17,168 @@ limitations under the License.
1717package v1
1818
1919import (
20- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
22- "k8s.io/apimachinery/pkg/types"
20+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
22+ "k8s.io/apimachinery/pkg/types"
2323)
2424
2525const (
26- ClusterExtensionRevisionKind = "ClusterExtensionRevision"
27-
28- // Condition Types
29- ClusterExtensionRevisionTypeAvailable = "Available"
30- ClusterExtensionRevisionTypeSucceeded = "Succeeded"
31-
32- // Condition Reasons
33- ClusterExtensionRevisionReasonAvailable = "Available"
34- ClusterExtensionRevisionReasonReconcileFailure = "ReconcileFailure"
35- ClusterExtensionRevisionReasonRevisionValidationFailure = "RevisionValidationFailure"
36- ClusterExtensionRevisionReasonPhaseValidationError = "PhaseValidationError"
37- ClusterExtensionRevisionReasonObjectCollisions = "ObjectCollisions"
38- ClusterExtensionRevisionReasonRolloutSuccess = "RolloutSuccess"
39- ClusterExtensionRevisionReasonProbeFailure = "ProbeFailure"
40- ClusterExtensionRevisionReasonIncomplete = "Incomplete"
41- ClusterExtensionRevisionReasonProgressing = "Progressing"
26+ ClusterExtensionRevisionKind = "ClusterExtensionRevision"
27+
28+ // Condition Types
29+ ClusterExtensionRevisionTypeAvailable = "Available"
30+ ClusterExtensionRevisionTypeSucceeded = "Succeeded"
31+
32+ // Condition Reasons
33+ ClusterExtensionRevisionReasonAvailable = "Available"
34+ ClusterExtensionRevisionReasonReconcileFailure = "ReconcileFailure"
35+ ClusterExtensionRevisionReasonRevisionValidationFailure = "RevisionValidationFailure"
36+ ClusterExtensionRevisionReasonPhaseValidationError = "PhaseValidationError"
37+ ClusterExtensionRevisionReasonObjectCollisions = "ObjectCollisions"
38+ ClusterExtensionRevisionReasonRolloutSuccess = "RolloutSuccess"
39+ ClusterExtensionRevisionReasonProbeFailure = "ProbeFailure"
40+ ClusterExtensionRevisionReasonIncomplete = "Incomplete"
41+ ClusterExtensionRevisionReasonProgressing = "Progressing"
42+ ClusterExtensionRevisionReasonArchived = "Archived"
4243)
4344
4445// ClusterExtensionRevisionSpec defines the desired state of ClusterExtensionRevision.
4546type ClusterExtensionRevisionSpec struct {
46- // Specifies the lifecycle state of the ClusterExtensionRevision.
47- //
48- // +kubebuilder:default="Active"
49- // +kubebuilder:validation:Enum=Active;Paused;Archived
50- // +kubebuilder:validation:XValidation:rule="oldSelf == 'Active' || oldSelf == 'Paused' || oldSelf == 'Archived' && oldSelf == self", message="can not un-archive"
51- LifecycleState ClusterExtensionRevisionLifecycleState `json:"lifecycleState,omitempty"`
52- // Revision is a sequence number representing a specific revision of the ClusterExtension instance.
53- // Must be positive. Each ClusterExtensionRevision of the same parent ClusterExtension needs to have
54- // a unique value assigned. It is immutable after creation. The new revision number must always be previous revision +1.
55- //
56- // +kubebuilder:validation:Required
57- // +kubebuilder:validation:Minimum:=1
58- // +kubebuilder:validation:XValidation:rule="self == oldSelf", message="revision is immutable"
59- Revision int64 `json:"revision"`
60- // Phases are groups of objects that will be applied at the same time.
61- // All objects in the phase will have to pass their probes in order to progress to the next phase.
62- //
63- // +kubebuilder:validation:XValidation:rule="self == oldSelf || oldSelf.size() == 0", message="phases is immutable"
64- // +listType=map
65- // +listMapKey=name
66- // +optional
67- Phases []ClusterExtensionRevisionPhase `json:"phases,omitempty"`
68- // Previous references previous revisions that objects can be adopted from.
69- //
70- // +kubebuilder:validation:XValidation:rule="self == oldSelf", message="previous is immutable"
71- Previous []ClusterExtensionRevisionPrevious `json:"previous,omitempty"`
47+ // Specifies the lifecycle state of the ClusterExtensionRevision.
48+ //
49+ // +kubebuilder:default="Active"
50+ // +kubebuilder:validation:Enum=Active;Paused;Archived
51+ // +kubebuilder:validation:XValidation:rule="oldSelf == 'Active' || oldSelf == 'Paused' || oldSelf == 'Archived' && oldSelf == self", message="can not un-archive"
52+ LifecycleState ClusterExtensionRevisionLifecycleState `json:"lifecycleState,omitempty"`
53+ // Revision is a sequence number representing a specific revision of the ClusterExtension instance.
54+ // Must be positive. Each ClusterExtensionRevision of the same parent ClusterExtension needs to have
55+ // a unique value assigned. It is immutable after creation. The new revision number must always be previous revision +1.
56+ //
57+ // +kubebuilder:validation:Required
58+ // +kubebuilder:validation:Minimum:=1
59+ // +kubebuilder:validation:XValidation:rule="self == oldSelf", message="revision is immutable"
60+ Revision int64 `json:"revision"`
61+ // Phases are groups of objects that will be applied at the same time.
62+ // All objects in the phase will have to pass their probes in order to progress to the next phase.
63+ //
64+ // +kubebuilder:validation:XValidation:rule="self == oldSelf || oldSelf.size() == 0", message="phases is immutable"
65+ // +listType=map
66+ // +listMapKey=name
67+ // +optional
68+ Phases []ClusterExtensionRevisionPhase `json:"phases,omitempty"`
69+ // Previous references previous revisions that objects can be adopted from.
70+ //
71+ // +kubebuilder:validation:XValidation:rule="self == oldSelf", message="previous is immutable"
72+ Previous []ClusterExtensionRevisionPrevious `json:"previous,omitempty"`
7273}
7374
7475// ClusterExtensionRevisionLifecycleState specifies the lifecycle state of the ClusterExtensionRevision.
7576type ClusterExtensionRevisionLifecycleState string
7677
7778const (
78- // ClusterExtensionRevisionLifecycleStateActive / "Active" is the default lifecycle state.
79- ClusterExtensionRevisionLifecycleStateActive ClusterExtensionRevisionLifecycleState = "Active"
80- // ClusterExtensionRevisionLifecycleStatePaused / "Paused" disables reconciliation of the ClusterExtensionRevision.
81- // Only Status updates will still propagated, but object changes will not be reconciled.
82- ClusterExtensionRevisionLifecycleStatePaused ClusterExtensionRevisionLifecycleState = "Paused"
83- // ClusterExtensionRevisionLifecycleStateArchived / "Archived" disables reconciliation while also "scaling to zero",
84- // which deletes all objects that are not excluded via the pausedFor property and
85- // removes itself from the owner list of all other objects previously under management.
86- ClusterExtensionRevisionLifecycleStateArchived ClusterExtensionRevisionLifecycleState = "Archived"
79+ // ClusterExtensionRevisionLifecycleStateActive / "Active" is the default lifecycle state.
80+ ClusterExtensionRevisionLifecycleStateActive ClusterExtensionRevisionLifecycleState = "Active"
81+ // ClusterExtensionRevisionLifecycleStatePaused / "Paused" disables reconciliation of the ClusterExtensionRevision.
82+ // Only Status updates will still propagated, but object changes will not be reconciled.
83+ ClusterExtensionRevisionLifecycleStatePaused ClusterExtensionRevisionLifecycleState = "Paused"
84+ // ClusterExtensionRevisionLifecycleStateArchived / "Archived" disables reconciliation while also "scaling to zero",
85+ // which deletes all objects that are not excluded via the pausedFor property and
86+ // removes itself from the owner list of all other objects previously under management.
87+ ClusterExtensionRevisionLifecycleStateArchived ClusterExtensionRevisionLifecycleState = "Archived"
8788)
8889
8990// ClusterExtensionRevisionPhase are groups of objects that will be applied at the same time.
9091// All objects in the a phase will have to pass their probes in order to progress to the next phase.
9192type ClusterExtensionRevisionPhase struct {
92- // Name identifies this phase.
93- //
94- // +kubebuilder:validation:MaxLength=63
95- // +kubebuilder:validation:Pattern=`^[a-z]([-a-z0-9]*[a-z0-9])?$`
96- Name string `json:"name"`
97- // Objects are a list of all the objects within this phase.
98- Objects []ClusterExtensionRevisionObject `json:"objects"`
93+ // Name identifies this phase.
94+ //
95+ // +kubebuilder:validation:MaxLength=63
96+ // +kubebuilder:validation:Pattern=`^[a-z]([-a-z0-9]*[a-z0-9])?$`
97+ Name string `json:"name"`
98+ // Objects are a list of all the objects within this phase.
99+ Objects []ClusterExtensionRevisionObject `json:"objects"`
99100}
100101
101102// ClusterExtensionRevisionObject contains an object and settings for it.
102103type ClusterExtensionRevisionObject struct {
103- // +kubebuilder:validation:EmbeddedResource
104- // +kubebuilder:pruning:PreserveUnknownFields
105- Object unstructured.Unstructured `json:"object"`
106- // CollisionProtection controls whether OLM can adopt and modify objects
107- // already existing on the cluster or even owned by another controller.
108- //
109- // +kubebuilder:default="Prevent"
110- // +optional
111- CollisionProtection CollisionProtection `json:"collisionProtection,omitempty"`
104+ // +kubebuilder:validation:EmbeddedResource
105+ // +kubebuilder:pruning:PreserveUnknownFields
106+ Object unstructured.Unstructured `json:"object"`
107+ // CollisionProtection controls whether OLM can adopt and modify objects
108+ // already existing on the cluster or even owned by another controller.
109+ //
110+ // +kubebuilder:default="Prevent"
111+ // +optional
112+ CollisionProtection CollisionProtection `json:"collisionProtection,omitempty"`
112113}
113114
114115// CollisionProtection specifies if and how ownership collisions are prevented.
115116type CollisionProtection string
116117
117118const (
118- // CollisionProtectionPrevent prevents owner collisions entirely
119- // by only allowing to work with objects itself has created.
120- CollisionProtectionPrevent CollisionProtection = "Prevent"
121- // CollisionProtectionIfNoController allows to patch and override
122- // objects already present if they are not owned by another controller.
123- CollisionProtectionIfNoController CollisionProtection = "IfNoController"
124- // CollisionProtectionNone allows to patch and override objects
125- // already present and owned by other controllers.
126- // Be careful! This setting may cause multiple controllers to fight over a resource,
127- // causing load on the API server and etcd.
128- CollisionProtectionNone CollisionProtection = "None"
119+ // CollisionProtectionPrevent prevents owner collisions entirely
120+ // by only allowing to work with objects itself has created.
121+ CollisionProtectionPrevent CollisionProtection = "Prevent"
122+ // CollisionProtectionIfNoController allows to patch and override
123+ // objects already present if they are not owned by another controller.
124+ CollisionProtectionIfNoController CollisionProtection = "IfNoController"
125+ // CollisionProtectionNone allows to patch and override objects
126+ // already present and owned by other controllers.
127+ // Be careful! This setting may cause multiple controllers to fight over a resource,
128+ // causing load on the API server and etcd.
129+ CollisionProtectionNone CollisionProtection = "None"
129130)
130131
131132type ClusterExtensionRevisionPrevious struct {
132- // +kubebuilder:validation:Required
133- Name string `json:"name"`
134- // +kubebuilder:validation:Required
135- UID types.UID `json:"uid"`
133+ // +kubebuilder:validation:Required
134+ Name string `json:"name"`
135+ // +kubebuilder:validation:Required
136+ UID types.UID `json:"uid"`
136137}
137138
138139// ClusterExtensionRevisionStatus defines the observed state of a ClusterExtensionRevision.
139140type ClusterExtensionRevisionStatus struct {
140- // +listType=map
141- // +listMapKey=type
142- // +optional
143- Conditions []metav1.Condition `json:"conditions,omitempty"`
141+ // +listType=map
142+ // +listMapKey=type
143+ // +optional
144+ Conditions []metav1.Condition `json:"conditions,omitempty"`
144145}
145146
146147// +kubebuilder:object:root=true
147148// +kubebuilder:resource:scope=Cluster
148149// +kubebuilder:subresource:status
149150
150151// ClusterExtensionRevision is the Schema for the clusterextensionrevisions API
152+ // +kubebuilder:printcolumn:name="Available",type=string,JSONPath=`.status.conditions[?(@.type=='Available')].status`
153+ // +kubebuilder:printcolumn:name=Age,type=date,JSONPath=`.metadata.creationTimestamp`
151154type ClusterExtensionRevision struct {
152- metav1.TypeMeta `json:",inline"`
153- metav1.ObjectMeta `json:"metadata,omitempty"`
155+ metav1.TypeMeta `json:",inline"`
156+ metav1.ObjectMeta `json:"metadata,omitempty"`
154157
155- // spec is an optional field that defines the desired state of the ClusterExtension.
156- // +optional
157- Spec ClusterExtensionRevisionSpec `json:"spec,omitempty"`
158+ // spec is an optional field that defines the desired state of the ClusterExtension.
159+ // +optional
160+ Spec ClusterExtensionRevisionSpec `json:"spec,omitempty"`
158161
159- // status is an optional field that defines the observed state of the ClusterExtension.
160- // +optional
161- Status ClusterExtensionRevisionStatus `json:"status,omitempty"`
162+ // status is an optional field that defines the observed state of the ClusterExtension.
163+ // +optional
164+ Status ClusterExtensionRevisionStatus `json:"status,omitempty"`
162165}
163166
164167// +kubebuilder:object:root=true
165168
166169// ClusterExtensionRevisionList contains a list of ClusterExtensionRevision
167170type ClusterExtensionRevisionList struct {
168- metav1.TypeMeta `json:",inline"`
171+ metav1.TypeMeta `json:",inline"`
169172
170- // +optional
171- metav1.ListMeta `json:"metadata,omitempty"`
173+ // +optional
174+ metav1.ListMeta `json:"metadata,omitempty"`
172175
173- // items is a required list of ClusterExtensionRevision objects.
174- //
175- // +kubebuilder:validation:Required
176- Items []ClusterExtensionRevision `json:"items"`
176+ // items is a required list of ClusterExtensionRevision objects.
177+ //
178+ // +kubebuilder:validation:Required
179+ Items []ClusterExtensionRevision `json:"items"`
177180}
178181
179182func init () {
180- SchemeBuilder .Register (& ClusterExtensionRevision {}, & ClusterExtensionRevisionList {})
183+ SchemeBuilder .Register (& ClusterExtensionRevision {}, & ClusterExtensionRevisionList {})
181184}
0 commit comments