Skip to content

Commit e49b640

Browse files
committed
cluster template for vsphere
Signed-off-by: Jirka Kremser <jiri.kremser@gmail.com>
1 parent b3847ce commit e49b640

15 files changed

+472
-440
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ and this project's packages adheres to [Semantic Versioning](http://semver.org/s
1111

1212
- Make the `--organization` flag visible when templating App CR.
1313

14+
### Added
15+
16+
- `cluster template` for up-to-date vsphere cluster app.
17+
1418
## [2.43.0] - 2023-10-11
1519

1620
### Added

cmd/template/cluster/flag.go

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ const (
9090
flagOpenStackWorkerMachineFlavor = "worker-machine-flavor"
9191
flagOpenStackWorkerReplicas = "worker-replicas"
9292

93+
// VSphere only.
94+
flagVSphereControlPlaneIP = "vsphere-control-plane-ip"
95+
flagVSphereServiceLoadBalancerCIDR = "vsphere-service-load-balancer-cidr"
96+
flagVSphereNetworkName = "vsphere-network-name"
97+
flagVSphereControlPlaneDiskGiB = "vsphere-control-plane-disk-gib"
98+
flagVSphereControlPlaneMemoryMiB = "vsphere-control-plane-memory-mib"
99+
flagVSphereControlPlaneNumCPUs = "vsphere-control-plane-num-cpus"
100+
flagVSphereControlPlaneReplicas = "vsphere-control-plane-replicas"
101+
flagVSphereWorkerDiskGiB = "vsphere-worker-disk-gib"
102+
flagVSphereWorkerMemoryMiB = "vsphere-worker-memory-mib"
103+
flagVSphereWorkerNumCPUs = "vsphere-worker-num-cpus"
104+
flagVSphereWorkerReplicas = "vsphere-worker-replicas"
105+
flagVSphereResourcePool = "vsphere-resource-pool"
106+
flagVSphereImageTemplate = "vsphere-image-template"
107+
flagVSphereCredentialsSecretName = "vsphere-credentials-secret-name"
108+
93109
// Common.
94110
flagRegion = "region"
95111
flagBastionInstanceType = "bastion-instance-type"
@@ -110,6 +126,10 @@ const (
110126
flagRelease = "release"
111127
flagLabel = "label"
112128
flagServicePriority = "service-priority"
129+
130+
// defaults
131+
defaultKubernetesVersion = "v1.20.9"
132+
defaultVSphereKubernetesVersion = "v1.24.11"
113133
)
114134

115135
type flag struct {
@@ -137,6 +157,7 @@ type flag struct {
137157
Azure provider.AzureConfig
138158
GCP provider.GCPConfig
139159
OpenStack provider.OpenStackConfig
160+
VSphere provider.VSphereConfig
140161
App provider.AppConfig
141162
OIDC provider.OIDC
142163

@@ -216,6 +237,22 @@ func (f *flag) Init(cmd *cobra.Command) {
216237
cmd.Flags().StringVar(&f.OpenStack.Worker.Flavor, flagOpenStackWorkerMachineFlavor, "", "Default worker node pool machine flavor (OpenStack only).")
217238
cmd.Flags().IntVar(&f.OpenStack.WorkerReplicas, flagOpenStackWorkerReplicas, 0, "Default worker node pool replicas (OpenStack only).")
218239

240+
// VSphere only
241+
cmd.Flags().StringVar(&f.VSphere.ControlPlane.IP, flagVSphereControlPlaneIP, "", "Control plane IP, leave empty for auto allocation.")
242+
cmd.Flags().StringVar(&f.VSphere.ServiceLoadBalancerCIDR, flagVSphereServiceLoadBalancerCIDR, "", "CIDR for Service LB for new cluster")
243+
cmd.Flags().StringVar(&f.VSphere.NetworkName, flagVSphereNetworkName, "grasshopper-capv", "Network name in vcenter that should be used for the new VMs")
244+
cmd.Flags().IntVar(&f.VSphere.ControlPlane.DiskGiB, flagVSphereControlPlaneDiskGiB, 50, "Disk size in GiB for control individual plane nodes")
245+
cmd.Flags().IntVar(&f.VSphere.ControlPlane.MemoryMiB, flagVSphereControlPlaneMemoryMiB, 8096, "Memory size in MiB for individual control plane nodes")
246+
cmd.Flags().IntVar(&f.VSphere.ControlPlane.NumCPUs, flagVSphereControlPlaneNumCPUs, 4, "Number of CPUs for individual control plane nodes")
247+
cmd.Flags().IntVar(&f.VSphere.ControlPlane.Replicas, flagVSphereControlPlaneReplicas, 3, "Number of control plane replicas (use odd number)")
248+
cmd.Flags().IntVar(&f.VSphere.Worker.DiskGiB, flagVSphereWorkerDiskGiB, 50, "Disk size in GiB for control individual worker nodes")
249+
cmd.Flags().IntVar(&f.VSphere.Worker.MemoryMiB, flagVSphereWorkerMemoryMiB, 14144, "Memory size in MiB for individual worker plane nodes")
250+
cmd.Flags().IntVar(&f.VSphere.Worker.NumCPUs, flagVSphereWorkerNumCPUs, 6, "Number of CPUs for individual worker plane nodes")
251+
cmd.Flags().IntVar(&f.VSphere.Worker.Replicas, flagVSphereWorkerReplicas, 3, "Number of worker plane replicas")
252+
cmd.Flags().StringVar(&f.VSphere.ResourcePool, flagVSphereResourcePool, "grasshopper", "What resource pool in vsphere should be used")
253+
cmd.Flags().StringVar(&f.VSphere.ImageTemplate, flagVSphereImageTemplate, "ubuntu-2004-kube-%s", "OS images with Kubernetes that should be used for VMs. The '%s' will be replaced with correct Kubernetes version.")
254+
cmd.Flags().StringVar(&f.VSphere.CredentialsSecretName, flagVSphereCredentialsSecretName, "vsphere-credentials", "Name of the secret in K8s that should be associated to cluster app. It should exist in the organization's namesapce and should contain the credentials for vsphere.") // #nosec G101
255+
219256
// App-based clusters only.
220257
cmd.Flags().StringVar(&f.App.ClusterCatalog, flagClusterCatalog, "cluster", "Catalog for cluster app.")
221258
cmd.Flags().StringVar(&f.App.ClusterVersion, flagClusterVersion, "", "Version of cluster to be created.")
@@ -283,7 +320,7 @@ func (f *flag) Init(cmd *cobra.Command) {
283320
cmd.Flags().StringSliceVar(&f.ControlPlaneAZ, flagControlPlaneAZ, nil, "Availability zone(s) to use by control plane nodes. Azure only supports one.")
284321
cmd.Flags().StringVar(&f.ControlPlaneInstanceType, flagControlPlaneInstanceType, "", "Instance type used for Control plane nodes")
285322
cmd.Flags().StringVar(&f.Description, flagDescription, "", "User-friendly description of the cluster's purpose (formerly called name).")
286-
cmd.Flags().StringVar(&f.KubernetesVersion, flagKubernetesVersion, "v1.20.9", "Cluster Kubernetes version.")
323+
cmd.Flags().StringVar(&f.KubernetesVersion, flagKubernetesVersion, defaultKubernetesVersion, "Cluster Kubernetes version.")
287324
cmd.Flags().StringVar(&f.Name, flagName, "", "Unique identifier of the cluster (formerly called ID).")
288325
cmd.Flags().StringVar(&f.OIDC.IssuerURL, flagOIDCIssuerURL, "", "OIDC issuer URL.")
289326
cmd.Flags().StringVar(&f.OIDC.CAFile, flagOIDCCAFile, "", "Path to CA file used to verify OIDC issuer (optional, OpenStack only).")
@@ -388,6 +425,22 @@ func (f *flag) Validate() error {
388425
if len(f.ControlPlaneAZ) > 1 {
389426
return microerror.Maskf(invalidFlagError, "--%s supports one availability zone only", flagControlPlaneAZ)
390427
}
428+
case key.ProviderVSphere:
429+
if f.VSphere.ServiceLoadBalancerCIDR == "" {
430+
return microerror.Maskf(invalidFlagError, "CIDR range from which the public IPs for Services of type LoadBalancer are taken (required) (--%s)", flagVSphereServiceLoadBalancerCIDR)
431+
}
432+
if !validateCIDR(f.VSphere.ServiceLoadBalancerCIDR) {
433+
return microerror.Maskf(invalidFlagError, "--%s must be a valid CIDR", flagVSphereServiceLoadBalancerCIDR)
434+
}
435+
if f.KubernetesVersion == defaultKubernetesVersion {
436+
f.KubernetesVersion = defaultVSphereKubernetesVersion
437+
}
438+
if f.VSphere.Worker.Replicas < 1 {
439+
return microerror.Maskf(invalidFlagError, "--%s must be greater than 0", flagVSphereWorkerReplicas)
440+
}
441+
if f.VSphere.ControlPlane.Replicas < 1 {
442+
return microerror.Maskf(invalidFlagError, "--%s must be greater than 0", flagVSphereControlPlaneReplicas)
443+
}
391444
case key.ProviderOpenStack:
392445
if f.OpenStack.Cloud == "" {
393446
return microerror.Maskf(invalidFlagError, "--%s is required", flagOpenStackCloud)

0 commit comments

Comments
 (0)