Skip to content

Commit fc1086f

Browse files
authored
Merge pull request #18 from Mikroways/feature/multiple-controlplane-templates
feature: Added support for multiple controlplane templates
2 parents 54fc2e0 + e070bf8 commit fc1086f

7 files changed

+99
-64
lines changed

charts/capi-vsphere/Chart.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ keywords:
77
- bootstrapping
88
- kubernetes
99
- vsphere
10-
version: 1.4.2
10+
version: 1.5.0
1111
appVersion: v1beta1
1212
home: https://cluster-api.sigs.k8s.io/
1313
sources:

charts/capi-vsphere/templates/_helpers.tpl

+15
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,21 @@ range iteration
5151
{{- printf "%s-%s" (include "capi-vsphere.name" .Context) $templateName |
5252
trunc 63 | trimSuffix "-" -}}
5353
{{- end -}}
54+
55+
{{/*
56+
Returns a kubeadmControlPlaneName from object because its always used inside a
57+
range iteration
58+
*/}}
59+
{{- define "capi-vsphere.kubeadmControlPlaneTemplateName" -}}
60+
{{- $templateName:= .MachineTemplate.name -}}
61+
{{- if eq $templateName "" -}}
62+
{{- printf "%s-control-plane" (include "capi-vsphere.name" .Context) |
63+
trunc 63 | trimSuffix "-" -}}
64+
{{- else -}}
65+
{{- printf "%s-control-plane-%s" (include "capi-vsphere.name" .Context) $templateName |
66+
trunc 63 | trimSuffix "-" -}}
67+
{{- end -}}
68+
{{- end -}}
5469
{{/*
5570
Cloud config secret
5671
*/}}

charts/capi-vsphere/templates/kubeadm-control-plane.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ spec:
88
infrastructureTemplate:
99
apiVersion: infrastructure.cluster.x-k8s.io/{{ .Values.clusterapiVersion }}
1010
kind: VSphereMachineTemplate
11-
name: {{ include "capi-vsphere.kubeadmControlPlaneName" . }}
11+
name: {{ default (include "capi-vsphere.kubeadmControlPlaneName" .) .Values.kubeadm.templateName }}
1212
{{- else }}
1313
machineTemplate:
1414
infrastructureRef:
1515
apiVersion: infrastructure.cluster.x-k8s.io/{{ .Values.clusterapiVersion }}
1616
kind: VSphereMachineTemplate
17-
name: {{ include "capi-vsphere.kubeadmControlPlaneName" . }}
17+
name: {{ default (include "capi-vsphere.kubeadmControlPlaneName" .) .Values.kubeadm.templateName }}
1818
{{- end }}
1919
kubeadmConfigSpec:
2020
{{- if $.Values.kubeadm.users }}
@@ -96,5 +96,5 @@ spec:
9696
joinConfiguration:
9797
{{- toYaml (required ".Values.kubeadm.joinConfiguration"
9898
.Values.kubeadm.joinConfiguration ) | nindent 6 }}
99-
replicas: {{ default 1 .Values.kubernetes.mastersReplicas }}
100-
version: {{ required ".Values.kubernetes.version" .Values.kubernetes.version }}
99+
replicas: {{ default 1 .Values.kubeadm.masterReplicas }}
100+
version: {{ required ".Values.kubeadm.version" .Values.kubeadm.version }}

charts/capi-vsphere/templates/machine-deployment.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ spec:
2323
apiVersion: infrastructure.cluster.x-k8s.io/{{ $.Values.clusterapiVersion }}
2424
kind: VSphereMachineTemplate
2525
name: {{ include "capi-vsphere.machineTemplateNameFromMDObject" $object }}
26-
version: {{ $.Values.kubernetes.version }}
26+
version: {{ $.Values.kubeadm.version }}
2727
---
2828
apiVersion: bootstrap.cluster.x-k8s.io/{{ $.Values.clusterapiVersion }}
2929
kind: KubeadmConfigTemplate

charts/capi-vsphere/templates/vsphere-machine-templates.yaml

+24-20
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,53 @@
11
{{- $cloudConfigSecret := include "capi-vsphere.cloudConfigSecret" . -}}
2-
apiVersion: infrastructure.cluster.x-k8s.io/{{ .Values.clusterapiVersion }}
2+
{{ range $index, $template := .Values.controlPlaneTemplates }}
3+
{{- $object := dict "MachineTemplate" $template "Index" $index "Context" $ -}}
4+
---
5+
apiVersion: infrastructure.cluster.x-k8s.io/{{ $.Values.clusterapiVersion }}
36
kind: VSphereMachineTemplate
47
metadata:
5-
name: {{ include "capi-vsphere.kubeadmControlPlaneName" . }}
8+
name: {{ include "capi-vsphere.kubeadmControlPlaneTemplateName" $object }}
69
spec:
710
template:
811
spec:
9-
{{- with .Values.controlPlaneTemplate.cloneMode }}
12+
{{- with $template.cloneMode }}
1013
cloneMode: {{ . }}
1114
{{- end }}
12-
{{- with .Values.controlPlaneTemplate.customVMXKeys }}
15+
{{- with $template.customVMXKeys }}
1316
customVMXKeys: {{ toYaml . | nindent 8 }}
1417
{{- end }}
15-
datacenter: {{ default .Values.vsphere.cloudProviderConfiguration.workspace.datacenter .Values.controlPlaneTemplate.datacenter }}
16-
datastore: {{ default .Values.vsphere.cloudProviderConfiguration.workspace.datastore .Values.controlPlaneTemplate.datastore }}
17-
{{- with .Values.controlPlaneTemplate.diskGiB }}
18+
datacenter: {{ default $.Values.vsphere.cloudProviderConfiguration.workspace.datacenter $template.datacenter }}
19+
datastore: {{ default $.Values.vsphere.cloudProviderConfiguration.workspace.datastore $template.datastore }}
20+
{{- with $template.diskGiB }}
1821
diskGiB: {{ . }}
1922
{{- end }}
20-
{{- with .Values.controlPlaneTemplate.failureDomain }}
23+
{{- with $template.failureDomain }}
2124
failureDomain: {{ . }}
2225
{{- end }}
23-
folder: {{ default .Values.vsphere.cloudProviderConfiguration.workspace.folder .Values.controlPlaneTemplate.folder }}
24-
{{- with .Values.controlPlaneTemplate.memoryMiB }}
26+
folder: {{ default $.Values.vsphere.cloudProviderConfiguration.workspace.folder $template.folder }}
27+
{{- with $template.memoryMiB }}
2528
memoryMiB: {{ . }}
2629
{{- end }}
27-
network: {{ toYaml (required ".Values.controlPlaneTemplate.network is required" .Values.controlPlaneTemplate.network) | nindent 8 }}
28-
{{- with .Values.controlPlaneTemplate.numCPUs }}
30+
network: {{ toYaml (required ".Values.controlPlaneTemplate.network is required" $template.network) | nindent 8 }}
31+
{{- with $template.numCPUs }}
2932
numCPUs: {{ . }}
3033
{{- end }}
31-
{{- with .Values.controlPlaneTemplate.numCoresPerSocket }}
34+
{{- with $template.numCoresPerSocket }}
3235
numCoresPerSocket: {{ . }}
3336
{{- end }}
34-
{{- with .Values.controlPlaneTemplate.providerID }}
37+
{{- with $template.providerID }}
3538
providerID: {{ . }}
3639
{{- end }}
37-
resourcePool: {{ default .Values.vsphere.cloudProviderConfiguration.workspace.resourcePool .Values.controlPlaneTemplate.resourcePool }}
38-
server: {{ default .Values.vsphere.server .Values.controlPlaneTemplate.server }}
39-
{{- with .Values.controlPlaneTemplate.snapshot }}
40+
resourcePool: {{ default $.Values.vsphere.cloudProviderConfiguration.workspace.resourcePool $template.resourcePool }}
41+
server: {{ default $.Values.vsphere.server $template.server }}
42+
{{- with $template.snapshot }}
4043
snapshot: {{ . }}
4144
{{- end }}
42-
{{- with .Values.controlPlaneTemplate.storagePolicyName }}
45+
{{- with $template.storagePolicyName }}
4346
storagePolicyName: {{ . }}
4447
{{- end }}
45-
template: {{ required ".Values.controlPlaneTemplate.template is required" .Values.controlPlaneTemplate.template }}
46-
thumbprint: {{ default .Values.vsphere.thumbprint .Values.controlPlaneTemplate.thumbprint }}
48+
template: {{ required (printf ".Values.controlPlaneTemplates[%d].template is required" $index) $template.template }}
49+
thumbprint: {{ default $.Values.vsphere.thumbprint $template.thumbprint }}
50+
{{ end }}
4751
{{ range $index, $template := .Values.machineTemplates }}
4852
{{- $object := dict "MachineTemplate" $template "Index" $index "Context" $ -}}
4953
---

charts/capi-vsphere/values-demo.yaml

+25-12
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ vsphere:
1111
controllerImage: gcr.io/cloud-provider-vsphere/cpi/release/manager:v1.18.1
1212
workspace:
1313
datacenter: DatacenterCAPI
14-
datastore: DatasotreCAPI
14+
datastore: DatastoreCAPI
1515
folder: mikroways
1616
resourcePool: Produccion/Resources
1717
controlPlaneEndpoint:
@@ -26,6 +26,7 @@ vsphere:
2626

2727

2828
kubeadm:
29+
masterReplicas: 3
2930
ntp:
3031
enabled: true
3132
servers:
@@ -47,17 +48,29 @@ csiConfigSecret:
4748
username: csi-user
4849
password: password
4950

50-
controlPlaneTemplate:
51-
cloneMode: linkedClone
52-
diskGiB: 25
53-
memoryMiB: 8192
54-
network:
55-
devices:
56-
- dhcp4: true
57-
networkName: VID 1505
58-
numCPUs: 2
59-
storagePolicyName: null
60-
template: ubuntu-2004-kube-v1.20.7
51+
controlPlaneTemplates:
52+
- name: ""
53+
cloneMode: linkedClone
54+
diskGiB: 25
55+
memoryMiB: 8192
56+
network:
57+
devices:
58+
- dhcp4: true
59+
networkName: VID 1505
60+
numCPUs: 2
61+
storagePolicyName: null
62+
template: ubuntu-2004-kube-v1.20.7
63+
- name: "cpu"
64+
cloneMode: linkedClone
65+
diskGiB: 25
66+
memoryMiB: 8192
67+
network:
68+
devices:
69+
- dhcp4: true
70+
networkName: VID 1505
71+
numCPUs: 4
72+
storagePolicyName: null
73+
template: ubuntu-2004-kube-v1.20.7
6174

6275
machineTemplates:
6376
- name: workers

charts/capi-vsphere/values.yaml

+29-26
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,6 @@ csiConfigSecret:
3030
username: ""
3131
password: ""
3232

33-
# kubernetes values
34-
kubernetes:
35-
version: v1.20.9
36-
# Only master replicas can be managed from this option. Workers are managed
37-
# from machineDeployments section
38-
mastersReplicas: 1
3933

4034
# kubernetes cluster network data. You can view valid options using:
4135
# kubectl explain cluster.spec.clusterNetwork
@@ -63,26 +57,32 @@ vsphere:
6357
server: ""
6458
thumbprint: ""
6559

66-
# Template image and flavor to used for master nodes
60+
# Templates to use for master nodes
6761
# kubectl explain vspheremachinetemplate.spec.template.spec
68-
controlPlaneTemplate:
69-
cloneMode: ""
70-
customVMXKeys: {}
71-
datacenter: ""
72-
datastore: ""
73-
diskGiB: null
74-
failureDomain: ""
75-
folder: ""
76-
memoryMiB: null
77-
network: null
78-
numCPUs: null
79-
numCoresPerSocket: null
80-
providerID: ""
81-
resourcePool: ""
82-
snapshot: ""
83-
storagePolicyName: ""
84-
template: ""
85-
thumbprint: ""
62+
controlPlaneTemplates: []
63+
64+
#For example:
65+
#controlPlaneTemplates:
66+
# - name: ""
67+
# cloneMode: ""
68+
# customVMXKeys: {}
69+
# datacenter: ""
70+
# datastore: ""
71+
# diskGiB: null
72+
# failureDomain: ""
73+
# folder: ""
74+
# memoryMiB: null
75+
# network: null
76+
# numCPUs: null
77+
# numCoresPerSocket: null
78+
# providerID: ""
79+
# resourcePool: ""
80+
# snapshot: ""
81+
# storagePolicyName: ""
82+
# template: ""
83+
# thumbprint: ""
84+
# - name: "new"
85+
# numCPUs: null
8686

8787
controlPlaneIP: ""
8888

@@ -144,6 +144,10 @@ kubeVip:
144144
#
145145
# Defaults are ok
146146
kubeadm:
147+
masterReplicas: 1
148+
version: v1.20.9
149+
# must use one of the defined in controlPlaneTemplates
150+
templateName: ""
147151
preKubeadmCommands: []
148152
users: []
149153
ntp: {}
@@ -175,4 +179,3 @@ kubeadm:
175179
kubeletExtraArgs:
176180
cloud-provider: external
177181
name: "{{ local_hostname }}"
178-

0 commit comments

Comments
 (0)