Skip to content

Commit 4a18e44

Browse files
Add variable for setting the project on cluster resource (#395)
The diff also includes a patch to set the project property on nutanixmachinetemplate resources for control plane and worker machine deployments.
1 parent 51aa55f commit 4a18e44

File tree

5 files changed

+242
-0
lines changed

5 files changed

+242
-0
lines changed

templates/cluster-template-clusterclass.yaml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,31 @@ spec:
247247
controlPlane: true
248248
enabledIf: '{{if .failureDomains}}true{{end}}'
249249
name: add-failure-domains
250+
- definitions:
251+
- jsonPatches:
252+
- op: add
253+
path: /spec/template/spec/project
254+
valueFrom:
255+
variable: project
256+
selector:
257+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
258+
kind: NutanixMachineTemplate
259+
matchResources:
260+
controlPlane: true
261+
- jsonPatches:
262+
- op: add
263+
path: /spec/template/spec/project
264+
valueFrom:
265+
variable: project
266+
selector:
267+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
268+
kind: NutanixMachineTemplate
269+
matchResources:
270+
machineDeploymentClass:
271+
names:
272+
- nutanix-quick-start-worker
273+
enabledIf: '{{if .project}}true{{end}}'
274+
name: add-project
250275
variables:
251276
- name: sshKey
252277
required: true
@@ -362,6 +387,22 @@ spec:
362387
type: array
363388
type: object
364389
type: array
390+
- name: project
391+
required: false
392+
schema:
393+
openAPIV3Schema:
394+
description: Prism Central project to deploy the cluster resources into.
395+
properties:
396+
name:
397+
type: string
398+
type:
399+
enum:
400+
- name
401+
- uuid
402+
type: string
403+
uuid:
404+
type: string
405+
type: object
365406
workers:
366407
machineDeployments:
367408
- class: nutanix-quick-start-worker

templates/clusterclass/clusterclass.yaml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,31 @@ spec:
263263
path: /spec/template/spec/cluster
264264
- op: remove
265265
path: /spec/template/spec/subnet
266+
- name: add-project
267+
enabledIf: "{{if .project}}true{{end}}"
268+
definitions:
269+
- selector:
270+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
271+
kind: NutanixMachineTemplate
272+
matchResources:
273+
controlPlane: true
274+
jsonPatches:
275+
- op: add
276+
path: /spec/template/spec/project
277+
valueFrom:
278+
variable: project
279+
- selector:
280+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
281+
kind: NutanixMachineTemplate
282+
matchResources:
283+
machineDeploymentClass:
284+
names:
285+
- nutanix-quick-start-worker
286+
jsonPatches:
287+
- op: add
288+
path: /spec/template/spec/project
289+
valueFrom:
290+
variable: project
266291
variables:
267292
- name: sshKey
268293
required: true
@@ -378,3 +403,19 @@ spec:
378403
enum:
379404
- name
380405
- uuid
406+
- name: project
407+
required: false
408+
schema:
409+
openAPIV3Schema:
410+
description: Prism Central project to deploy the cluster resources into.
411+
type: object
412+
properties:
413+
name:
414+
type: string
415+
uuid:
416+
type: string
417+
type:
418+
type: string
419+
enum:
420+
- name
421+
- uuid

templates/template_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
. "github.com/onsi/ginkgo/v2"
1414
. "github.com/onsi/gomega"
15+
"github.com/onsi/gomega/format"
1516
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1617
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1718
"k8s.io/apimachinery/pkg/util/yaml"
@@ -38,6 +39,7 @@ const (
3839
var clnt client.Client
3940

4041
func init() {
42+
format.MaxLength = 100000
4143
// Add NutanixCluster and NutanixMachine to the scheme
4244
_ = v1beta1.AddToScheme(scheme.Scheme)
4345
_ = capiv1.AddToScheme(scheme.Scheme)
@@ -326,4 +328,50 @@ var _ = Describe("Cluster Class Template Patches Test Suite", Ordered, func() {
326328
))
327329
})
328330
})
331+
332+
Describe("patches for project (with name)", func() {
333+
It("should have correct project", func() {
334+
clusterManifest := "testdata/cluster-with-project-name.yaml"
335+
obj, err := getClusterManifest(clusterManifest)
336+
Expect(err).NotTo(HaveOccurred())
337+
338+
err = clnt.Create(context.Background(), obj) // Create the cluster
339+
Expect(err).NotTo(HaveOccurred())
340+
341+
Eventually(func() error {
342+
_, err = fetchNutanixCluster(clnt, obj.GetName())
343+
return err
344+
}).Within(time.Minute).Should(Succeed())
345+
346+
Eventually(func() ([]*v1beta1.NutanixMachineTemplate, error) {
347+
return fetchMachineTemplates(clnt, obj.GetName())
348+
}).Within(time.Minute).Should(And(HaveLen(2),
349+
HaveEach(HaveExistingField("Spec.Template.Spec.Project")),
350+
HaveEach(HaveField("Spec.Template.Spec.Project.Type", Equal(v1beta1.NutanixIdentifierName))),
351+
HaveEach(HaveField("Spec.Template.Spec.Project.Name", HaveValue(Equal("fake-project"))))))
352+
})
353+
})
354+
355+
Describe("patches for project (with uuid)", func() {
356+
It("should have correct project", func() {
357+
clusterManifest := "testdata/cluster-with-project-uuid.yaml"
358+
obj, err := getClusterManifest(clusterManifest)
359+
Expect(err).NotTo(HaveOccurred())
360+
361+
err = clnt.Create(context.Background(), obj) // Create the cluster
362+
Expect(err).NotTo(HaveOccurred())
363+
364+
Eventually(func() error {
365+
_, err = fetchNutanixCluster(clnt, obj.GetName())
366+
return err
367+
}).Within(time.Minute).Should(Succeed())
368+
369+
Eventually(func() ([]*v1beta1.NutanixMachineTemplate, error) {
370+
return fetchMachineTemplates(clnt, obj.GetName())
371+
}).Within(time.Minute).Should(And(HaveLen(2),
372+
HaveEach(HaveExistingField("Spec.Template.Spec.Project")),
373+
HaveEach(HaveField("Spec.Template.Spec.Project.Type", Equal(v1beta1.NutanixIdentifierUUID))),
374+
HaveEach(HaveField("Spec.Template.Spec.Project.Name", HaveValue(Equal("00000000-0000-0000-0000-000000000001"))))))
375+
})
376+
})
329377
})
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
apiVersion: cluster.x-k8s.io/v1beta1
2+
kind: Cluster
3+
metadata:
4+
labels:
5+
ccm: nutanix
6+
cluster.x-k8s.io/cluster-name: cluster-with-project-name
7+
name: cluster-with-project-name
8+
spec:
9+
topology:
10+
class: nutanix-quick-start
11+
controlPlane:
12+
metadata: {}
13+
replicas: 1
14+
variables:
15+
- name: sshKey
16+
value: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMe61GqA9gqeX3zDCiwuU8zEDt3ckLnfVm8ZxN7UuFyL user@host
17+
- name: controlPlaneEndpoint
18+
value:
19+
IP: 1.2.3.4
20+
port: 6443
21+
- name: prismCentralEndpoint
22+
value:
23+
address: prismcentral.fake
24+
credentialSecret: nutanix-quick-start-pc-creds
25+
insecure: false
26+
port: 9440
27+
- name: controlPlaneMachineDetails
28+
value:
29+
bootType: legacy
30+
clusterName: fake-cluster
31+
imageName: ubuntu-2204-kube-v1.29.2.qcow2
32+
memorySize: 4Gi
33+
subnetName: fake-subnet
34+
systemDiskSize: 40Gi
35+
vcpuSockets: 2
36+
vcpusPerSocket: 1
37+
- name: workerMachineDetails
38+
value:
39+
bootType: legacy
40+
clusterName: fake-cluster
41+
imageName: ubuntu-2204-kube-v1.29.2.qcow2
42+
memorySize: 4Gi
43+
subnetName: fake-subnet
44+
systemDiskSize: 40Gi
45+
vcpuSockets: 2
46+
vcpusPerSocket: 1
47+
- name: project
48+
value:
49+
type: name
50+
name: fake-project
51+
version: v1.29.2
52+
workers:
53+
machineDeployments:
54+
- class: nutanix-quick-start-worker
55+
name: md-0
56+
replicas: 2
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
apiVersion: cluster.x-k8s.io/v1beta1
2+
kind: Cluster
3+
metadata:
4+
labels:
5+
ccm: nutanix
6+
cluster.x-k8s.io/cluster-name: cluster-with-project-uuid
7+
name: cluster-with-project-uuid
8+
spec:
9+
topology:
10+
class: nutanix-quick-start
11+
controlPlane:
12+
metadata: {}
13+
replicas: 1
14+
variables:
15+
- name: sshKey
16+
value: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMe61GqA9gqeX3zDCiwuU8zEDt3ckLnfVm8ZxN7UuFyL user@host
17+
- name: controlPlaneEndpoint
18+
value:
19+
IP: 1.2.3.4
20+
port: 6443
21+
- name: prismCentralEndpoint
22+
value:
23+
address: prismcentral.fake
24+
credentialSecret: nutanix-quick-start-pc-creds
25+
insecure: false
26+
port: 9440
27+
- name: controlPlaneMachineDetails
28+
value:
29+
bootType: legacy
30+
clusterName: fake-cluster
31+
imageName: ubuntu-2204-kube-v1.29.2.qcow2
32+
memorySize: 4Gi
33+
subnetName: fake-subnet
34+
systemDiskSize: 40Gi
35+
vcpuSockets: 2
36+
vcpusPerSocket: 1
37+
- name: workerMachineDetails
38+
value:
39+
bootType: legacy
40+
clusterName: fake-cluster
41+
imageName: ubuntu-2204-kube-v1.29.2.qcow2
42+
memorySize: 4Gi
43+
subnetName: fake-subnet
44+
systemDiskSize: 40Gi
45+
vcpuSockets: 2
46+
vcpusPerSocket: 1
47+
- name: project
48+
value:
49+
type: uuid
50+
name: 00000000-0000-0000-0000-000000000001
51+
version: v1.29.2
52+
workers:
53+
machineDeployments:
54+
- class: nutanix-quick-start-worker
55+
name: md-0
56+
replicas: 2

0 commit comments

Comments
 (0)