|
17 | 17 | package v1beta1 |
18 | 18 |
|
19 | 19 | import ( |
20 | | - corev1 "k8s.io/api/core/v1" |
21 | 20 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
22 | 21 | ) |
23 | 22 |
|
24 | 23 | const ( |
25 | | - ComputeDomainModeImmediate = "Immediate" |
26 | | - ComputeDomainModeDelayed = "Delayed" |
27 | | - |
28 | 24 | ComputeDomainStatusReady = "Ready" |
29 | 25 | ComputeDomainStatusNotReady = "NotReady" |
30 | 26 | ) |
@@ -55,55 +51,18 @@ type ComputeDomainList struct { |
55 | 51 | } |
56 | 52 |
|
57 | 53 | // +kubebuilder:validation:XValidation:rule="self == oldSelf", message="A computeDomain.spec is immutable" |
58 | | -// +kubebuilder:validation:XValidation:rule="self.mode == 'Immediate' || (self.mode == 'Delayed' && size(self.resourceClaimTemplates) == 1)",message="When 'mode' is 'Delayed', 'resourceClaimTemplates' must have exactly one entry." |
59 | | -// +kubebuilder:validation:XValidation:rule="self.mode == 'Immediate' || (self.mode == 'Delayed' && !has(self.nodeSelector))",message="When 'mode' is 'Delayed', 'NodeSelector' must not be set." |
60 | | -// +kubebuilder:validation:XValidation:rule="self.mode == 'Immediate' || (self.mode == 'Delayed' && !has(self.topologyAlignment))",message="When 'mode' is 'Delayed', 'TopologyAlignment' must not be set." |
61 | | -// +kubebuilder:validation:XValidation:rule="self.mode == 'Immediate' || (self.mode == 'Delayed' && (!has(self.nodeAffinity) || !has(self.nodeAffinity.preferred)))",message="When mode is 'Delayed', 'nodeAffinity.preferred' must not be set; only 'nodeAffinity.required' is allowed." |
62 | | -// +kubebuilder:validation:XValidation:rule="self.mode == 'Immediate' || (self.mode == 'Delayed' && !has(self.topologyAntiAlignment))",message="When 'mode' is 'Delayed', 'TopologyAntiAlignment' must not be set." |
63 | 54 |
|
64 | 55 | // ComputeDomainSpec provides the spec for a ComputeDomain. |
65 | 56 | type ComputeDomainSpec struct { |
66 | | - // +kubebuilder:validation:Enum=Immediate;Delayed |
67 | | - // +kubebuilder:default=Immediate |
68 | | - Mode string `json:"mode"` |
69 | | - NumNodes int `json:"numNodes"` |
70 | | - ResourceClaimTemplates []ComputeDomainResourceClaimTemplate `json:"resourceClaimTemplates"` |
71 | | - NodeSelector map[string]string `json:"nodeSelector,omitempty"` |
72 | | - NodeAffinity *ComputeDomainNodeAffinity `json:"nodeAffinity,omitempty"` |
73 | | - TopologyAlignment *ComputeDomainTopologyAlignment `json:"topologyAlignment,omitempty"` |
74 | | - TopologyAntiAlignment *ComputeDomainTopologyAlignment `json:"topologyAntiAlignment,omitempty"` |
| 57 | + NumNodes int `json:"numNodes"` |
| 58 | + ResourceClaimTemplate ComputeDomainResourceClaimTemplate `json:"resourceClaimTemplate"` |
75 | 59 | } |
76 | 60 |
|
| 61 | +// ComputeDomainResourceClaimTemplate provides the details of the ResourceClaimTemplate to generate. |
77 | 62 | type ComputeDomainResourceClaimTemplate struct { |
78 | 63 | Name string `json:"name"` |
79 | 64 | } |
80 | 65 |
|
81 | | -// +kubebuilder:validation:XValidation:rule="has(self.preferred) || has(self.required)",message="At least one of 'preferred' or 'required' must be set." |
82 | | - |
83 | | -type ComputeDomainNodeAffinity struct { |
84 | | - // +listType=atomic |
85 | | - Preferred []corev1.PreferredSchedulingTerm `json:"preferred,omitempty"` |
86 | | - Required *corev1.NodeSelector `json:"required,omitempty"` |
87 | | -} |
88 | | - |
89 | | -// +kubebuilder:validation:XValidation:rule="has(self.preferred) || has(self.required)",message="At least one of 'preferred' or 'required' must be set." |
90 | | - |
91 | | -type ComputeDomainTopologyAlignment struct { |
92 | | - // +listType=atomic |
93 | | - Preferred []ComputeDomainWeightedTopologyKey `json:"preferred,omitempty"` |
94 | | - Required *ComputeDomainTopologyKeys `json:"required,omitempty"` |
95 | | -} |
96 | | - |
97 | | -type ComputeDomainTopologyKeys struct { |
98 | | - // +listType=atomic |
99 | | - TopologyKeys []string `json:"topologyKeys"` |
100 | | -} |
101 | | - |
102 | | -type ComputeDomainWeightedTopologyKey struct { |
103 | | - Weight int32 `json:"weight"` |
104 | | - TopologyKey string `json:"topologyKey"` |
105 | | -} |
106 | | - |
107 | 66 | // ComputeDomainStatus provides the status for a ComputeDomain. |
108 | 67 | type ComputeDomainStatus struct { |
109 | 68 | // +kubebuilder:validation:Enum=Ready;NotReady |
|
0 commit comments