Skip to content

Commit 997ff47

Browse files
author
Per Goncalves da Silva
committed
Add AVAILABLE print column to ClusterExtensionRevision
Signed-off-by: Per Goncalves da Silva <[email protected]>
1 parent 95c5934 commit 997ff47

File tree

1 file changed

+108
-105
lines changed

1 file changed

+108
-105
lines changed

api/v1/clusterextensionrevision_types.go

Lines changed: 108 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -17,165 +17,168 @@ limitations under the License.
1717
package v1
1818

1919
import (
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

2525
const (
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.
4546
type 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.
7576
type ClusterExtensionRevisionLifecycleState string
7677

7778
const (
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.
9192
type 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.
102103
type 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.
115116
type CollisionProtection string
116117

117118
const (
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

131132
type 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.
139140
type 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`
151154
type 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
167170
type 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

179182
func init() {
180-
SchemeBuilder.Register(&ClusterExtensionRevision{}, &ClusterExtensionRevisionList{})
183+
SchemeBuilder.Register(&ClusterExtensionRevision{}, &ClusterExtensionRevisionList{})
181184
}

0 commit comments

Comments
 (0)