Skip to content

Commit 1c614f5

Browse files
Merge pull request #2449 from umohnani8/4.19
[release-4.19] OCPBUGS-60414: MachineOSConfig name should match MachineConfigPool
2 parents f45379c + bcdc61a commit 1c614f5

File tree

5 files changed

+199
-8
lines changed

5 files changed

+199
-8
lines changed

machineconfiguration/v1/tests/machineosconfigs.machineconfiguration.openshift.io/OnClusterBuild.yaml

Lines changed: 180 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ tests:
99
apiVersion: machineconfiguration.openshift.io/v1
1010
kind: MachineOSConfig
1111
metadata:
12-
name: foobar
12+
name: worker
1313
spec:
1414
machineConfigPool:
1515
name: worker
@@ -24,7 +24,7 @@ tests:
2424
apiVersion: machineconfiguration.openshift.io/v1
2525
kind: MachineOSConfig
2626
metadata:
27-
name: foobar
27+
name: worker
2828
spec:
2929
machineConfigPool:
3030
name: worker
@@ -40,7 +40,7 @@ tests:
4040
apiVersion: machineconfiguration.openshift.io/v1
4141
kind: MachineOSConfig
4242
metadata:
43-
name: foobar
43+
name: worker
4444
spec:
4545
machineConfigPool:
4646
name: worker
@@ -55,7 +55,7 @@ tests:
5555
apiVersion: machineconfiguration.openshift.io/v1
5656
kind: MachineOSConfig
5757
metadata:
58-
name: foobar
58+
name: worker
5959
spec:
6060
machineConfigPool:
6161
name: worker
@@ -71,7 +71,7 @@ tests:
7171
apiVersion: machineconfiguration.openshift.io/v1
7272
kind: MachineOSConfig
7373
metadata:
74-
name: foobar
74+
name: worker
7575
spec:
7676
machineConfigPool:
7777
name: worker
@@ -88,7 +88,7 @@ tests:
8888
apiVersion: machineconfiguration.openshift.io/v1
8989
kind: MachineOSConfig
9090
metadata:
91-
name: foobar
91+
name: worker
9292
spec:
9393
machineConfigPool:
9494
name: worker
@@ -101,12 +101,184 @@ tests:
101101
apiVersion: machineconfiguration.openshift.io/v1
102102
kind: MachineOSConfig
103103
metadata:
104-
name: foobar
104+
name: worker
105105
spec:
106106
machineConfigPool:
107107
name: worker
108-
imageBuilder:
108+
imageBuilder:
109+
imageBuilderType: Job
110+
renderedImagePushSecret:
111+
name: foo
112+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
113+
- name: Should succeed when MachineOSConfig name matches MachineConfigPool name
114+
initial: |
115+
apiVersion: machineconfiguration.openshift.io/v1
116+
kind: MachineOSConfig
117+
metadata:
118+
name: worker
119+
spec:
120+
machineConfigPool:
121+
name: worker
122+
imageBuilder:
123+
imageBuilderType: Job
124+
renderedImagePushSecret:
125+
name: foo
126+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
127+
expected: |
128+
apiVersion: machineconfiguration.openshift.io/v1
129+
kind: MachineOSConfig
130+
metadata:
131+
name: worker
132+
spec:
133+
machineConfigPool:
134+
name: worker
135+
imageBuilder:
136+
imageBuilderType: Job
137+
renderedImagePushSecret:
138+
name: foo
139+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
140+
- name: Should fail when MachineOSConfig name does not match MachineConfigPool name
141+
initial: |
142+
apiVersion: machineconfiguration.openshift.io/v1
143+
kind: MachineOSConfig
144+
metadata:
145+
name: different-name
146+
spec:
147+
machineConfigPool:
148+
name: worker
149+
imageBuilder:
150+
imageBuilderType: Job
151+
renderedImagePushSecret:
152+
name: foo
153+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
154+
expectedError: "MachineOSConfig name must match the referenced MachineConfigPool name; can only have one MachineOSConfig per MachineConfigPool"
155+
onUpdate:
156+
- name: Should allow changing other fields when a persisted value is no longer valid (mismatched names)
157+
initialCRDPatches:
158+
- op: remove
159+
path: /spec/versions/0/schema/openAPIV3Schema/x-kubernetes-validations # Remove the name matching validation
160+
initial: |
161+
apiVersion: machineconfiguration.openshift.io/v1
162+
kind: MachineOSConfig
163+
metadata:
164+
name: different-name
165+
spec:
166+
machineConfigPool:
167+
name: worker
168+
imageBuilder:
169+
imageBuilderType: Job
170+
renderedImagePushSecret:
171+
name: foo
172+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
173+
updated: |
174+
apiVersion: machineconfiguration.openshift.io/v1
175+
kind: MachineOSConfig
176+
metadata:
177+
name: different-name
178+
spec:
179+
machineConfigPool:
180+
name: worker
181+
imageBuilder:
182+
imageBuilderType: Job
183+
renderedImagePushSecret:
184+
name: foo
185+
renderedImagePushSpec: quay.io/mco/renderedImg:v2.0
186+
containerFile:
187+
- containerfileArch: AMD64
188+
content: |
189+
FROM configs AS final
190+
RUN rpm-ostree install tree && \
191+
ostree container commit
192+
expected: |
193+
apiVersion: machineconfiguration.openshift.io/v1
194+
kind: MachineOSConfig
195+
metadata:
196+
name: different-name
197+
spec:
198+
machineConfigPool:
199+
name: worker
200+
imageBuilder:
201+
imageBuilderType: Job
202+
renderedImagePushSecret:
203+
name: foo
204+
renderedImagePushSpec: quay.io/mco/renderedImg:v2.0
205+
containerFile:
206+
- containerfileArch: AMD64
207+
content: |
208+
FROM configs AS final
209+
RUN rpm-ostree install tree && \
210+
ostree container commit
211+
- name: Should allow updating a persisted value that is no longer valid to a valid value (fix mismatched names)
212+
initialCRDPatches:
213+
- op: remove
214+
path: /spec/versions/0/schema/openAPIV3Schema/x-kubernetes-validations # Remove the name matching validation
215+
initial: |
216+
apiVersion: machineconfiguration.openshift.io/v1
217+
kind: MachineOSConfig
218+
metadata:
219+
name: worker
220+
spec:
221+
machineConfigPool:
222+
name: different-pool
223+
imageBuilder:
224+
imageBuilderType: Job
225+
renderedImagePushSecret:
226+
name: foo
227+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
228+
updated: |
229+
apiVersion: machineconfiguration.openshift.io/v1
230+
kind: MachineOSConfig
231+
metadata:
232+
name: worker
233+
spec:
234+
machineConfigPool:
235+
name: worker
236+
imageBuilder:
237+
imageBuilderType: Job
238+
renderedImagePushSecret:
239+
name: foo
240+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
241+
expected: |
242+
apiVersion: machineconfiguration.openshift.io/v1
243+
kind: MachineOSConfig
244+
metadata:
245+
name: worker
246+
spec:
247+
machineConfigPool:
248+
name: worker
249+
imageBuilder:
250+
imageBuilderType: Job
251+
renderedImagePushSecret:
252+
name: foo
253+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
254+
- name: Should not allow updating a persisted value that is no longer valid to a still invalid value (different mismatched MCP names)
255+
initialCRDPatches:
256+
- op: remove
257+
path: /spec/versions/0/schema/openAPIV3Schema/x-kubernetes-validations # Remove the name matching validation
258+
initial: |
259+
apiVersion: machineconfiguration.openshift.io/v1
260+
kind: MachineOSConfig
261+
metadata:
262+
name: different-name
263+
spec:
264+
machineConfigPool:
265+
name: worker
266+
imageBuilder:
267+
imageBuilderType: Job
268+
renderedImagePushSecret:
269+
name: foo
270+
renderedImagePushSpec: quay.io/mco/renderedImg:latest
271+
updated: |
272+
apiVersion: machineconfiguration.openshift.io/v1
273+
kind: MachineOSConfig
274+
metadata:
275+
name: different-name
276+
spec:
277+
machineConfigPool:
278+
name: worker-different
279+
imageBuilder:
109280
imageBuilderType: Job
110281
renderedImagePushSecret:
111282
name: foo
112283
renderedImagePushSpec: quay.io/mco/renderedImg:latest
284+
expectedError: "MachineOSConfig name must match the referenced MachineConfigPool name; can only have one MachineOSConfig per MachineConfigPool"

machineconfiguration/v1/types_machineosconfig.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
// MachineOSConfig describes the configuration for a build process managed by the MCO
1919
// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
2020
// +openshift:compatibility-gen:level=1
21+
// +kubebuilder:validation:XValidation:rule="self.metadata.name == self.spec.machineConfigPool.name || oldSelf.hasValue() && oldSelf.spec.machineConfigPool.name.value() == self.spec.machineConfigPool.name",optionalOldSelf=true,message="MachineOSConfig name must match the referenced MachineConfigPool name; can only have one MachineOSConfig per MachineConfigPool"
2122
type MachineOSConfig struct {
2223
metav1.TypeMeta `json:",inline"`
2324

machineconfiguration/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineosconfigs.crd.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,12 @@ spec:
345345
required:
346346
- spec
347347
type: object
348+
x-kubernetes-validations:
349+
- message: MachineOSConfig name must match the referenced MachineConfigPool
350+
name; can only have one MachineOSConfig per MachineConfigPool
351+
optionalOldSelf: true
352+
rule: self.metadata.name == self.spec.machineConfigPool.name || oldSelf.hasValue()
353+
&& oldSelf.spec.machineConfigPool.name.value() == self.spec.machineConfigPool.name
348354
served: true
349355
storage: true
350356
subresources:

machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineosconfigs.machineconfiguration.openshift.io/OnClusterBuild.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,12 @@ spec:
346346
required:
347347
- spec
348348
type: object
349+
x-kubernetes-validations:
350+
- message: MachineOSConfig name must match the referenced MachineConfigPool
351+
name; can only have one MachineOSConfig per MachineConfigPool
352+
optionalOldSelf: true
353+
rule: self.metadata.name == self.spec.machineConfigPool.name || oldSelf.hasValue()
354+
&& oldSelf.spec.machineConfigPool.name.value() == self.spec.machineConfigPool.name
349355
served: true
350356
storage: true
351357
subresources:

payload-manifests/crds/0000_80_machine-config_01_machineosconfigs.crd.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,12 @@ spec:
345345
required:
346346
- spec
347347
type: object
348+
x-kubernetes-validations:
349+
- message: MachineOSConfig name must match the referenced MachineConfigPool
350+
name; can only have one MachineOSConfig per MachineConfigPool
351+
optionalOldSelf: true
352+
rule: self.metadata.name == self.spec.machineConfigPool.name || oldSelf.hasValue()
353+
&& oldSelf.spec.machineConfigPool.name.value() == self.spec.machineConfigPool.name
348354
served: true
349355
storage: true
350356
subresources:

0 commit comments

Comments
 (0)