in pkg/providers/vsphere/template.go [440:603]
func buildTemplateMapMD(
clusterSpec *cluster.Spec,
datacenterSpec anywherev1.VSphereDatacenterConfigSpec,
workerNodeGroupMachineSpec anywherev1.VSphereMachineConfigSpec,
workerNodeGroupConfiguration anywherev1.WorkerNodeGroupConfiguration,
) (map[string]interface{}, error) {
bundle := clusterSpec.WorkerNodeGroupVersionsBundle(workerNodeGroupConfiguration)
if bundle == nil {
return nil, fmt.Errorf("could not find VersionsBundle")
}
format := "cloud-config"
firstUser := workerNodeGroupMachineSpec.Users[0]
sshKey, err := common.StripSshAuthorizedKeyComment(firstUser.SshAuthorizedKeys[0])
if err != nil {
return nil, fmt.Errorf("formatting ssh key for vsphere workers template: %v", err)
}
values := map[string]interface{}{
"clusterName": clusterSpec.Cluster.Name,
"kubernetesVersion": bundle.KubeDistro.Kubernetes.Tag,
"thumbprint": datacenterSpec.Thumbprint,
"vsphereDatacenter": datacenterSpec.Datacenter,
"workerVsphereDatastore": workerNodeGroupMachineSpec.Datastore,
"workerVsphereFolder": workerNodeGroupMachineSpec.Folder,
"vsphereNetwork": datacenterSpec.Network,
"workerVsphereResourcePool": workerNodeGroupMachineSpec.ResourcePool,
"vsphereServer": datacenterSpec.Server,
"workerVsphereStoragePolicyName": workerNodeGroupMachineSpec.StoragePolicyName,
"workerTemplate": workerNodeGroupMachineSpec.Template,
"workloadVMsMemoryMiB": workerNodeGroupMachineSpec.MemoryMiB,
"workloadVMsNumCPUs": workerNodeGroupMachineSpec.NumCPUs,
"workloadDiskGiB": workerNodeGroupMachineSpec.DiskGiB,
"workerTagIDs": workerNodeGroupMachineSpec.TagIDs,
"workerSshUsername": firstUser.Name,
"vsphereWorkerSshAuthorizedKey": sshKey,
"format": format,
"eksaSystemNamespace": constants.EksaSystemNamespace,
"workerReplicas": *workerNodeGroupConfiguration.Count,
"workerNodeGroupName": fmt.Sprintf("%s-%s", clusterSpec.Cluster.Name, workerNodeGroupConfiguration.Name),
"workerNodeGroupTaints": workerNodeGroupConfiguration.Taints,
"autoscalingConfig": workerNodeGroupConfiguration.AutoScalingConfiguration,
"workerCloneMode": workerNodeGroupMachineSpec.CloneMode,
}
if clusterSpec.Cluster.Spec.RegistryMirrorConfiguration != nil {
registryMirror := registrymirror.FromCluster(clusterSpec.Cluster)
values["registryMirrorMap"] = containerd.ToAPIEndpoints(registryMirror.NamespacedRegistryMap)
values["mirrorBase"] = registryMirror.BaseRegistry
values["insecureSkip"] = registryMirror.InsecureSkipVerify
values["publicMirror"] = containerd.ToAPIEndpoint(registryMirror.CoreEKSAMirror())
if len(registryMirror.CACertContent) > 0 {
values["registryCACert"] = registryMirror.CACertContent
}
if workerNodeGroupMachineSpec.OSFamily == anywherev1.Bottlerocket &&
len(registryMirror.NamespacedRegistryMap) == 1 &&
registryMirror.CoreEKSAMirror() != "" {
values["publicECRMirror"] = containerd.ToAPIEndpoint(registryMirror.CoreEKSAMirror())
}
if registryMirror.Auth {
values["registryAuth"] = registryMirror.Auth
username, password, err := config.ReadCredentials()
if err != nil {
return values, err
}
values["registryUsername"] = username
values["registryPassword"] = password
}
}
if clusterSpec.Cluster.Spec.ProxyConfiguration != nil {
values["proxyConfig"] = true
capacity := len(clusterSpec.Cluster.Spec.ClusterNetwork.Pods.CidrBlocks) +
len(clusterSpec.Cluster.Spec.ClusterNetwork.Services.CidrBlocks) +
len(clusterSpec.Cluster.Spec.ProxyConfiguration.NoProxy) + 4
noProxyList := make([]string, 0, capacity)
noProxyList = append(noProxyList, clusterSpec.Cluster.Spec.ClusterNetwork.Pods.CidrBlocks...)
noProxyList = append(noProxyList, clusterSpec.Cluster.Spec.ClusterNetwork.Services.CidrBlocks...)
noProxyList = append(noProxyList, clusterSpec.Cluster.Spec.ProxyConfiguration.NoProxy...)
// Add no-proxy defaults
noProxyList = append(noProxyList, clusterapi.NoProxyDefaults()...)
noProxyList = append(noProxyList,
datacenterSpec.Server,
clusterSpec.Cluster.Spec.ControlPlaneConfiguration.Endpoint.Host,
)
values["httpProxy"] = clusterSpec.Cluster.Spec.ProxyConfiguration.HttpProxy
values["httpsProxy"] = clusterSpec.Cluster.Spec.ProxyConfiguration.HttpsProxy
values["noProxy"] = noProxyList
}
var bottlerocketKubernetesSettings *bootstrapv1.BottlerocketKubernetesSettings
if workerNodeGroupMachineSpec.OSFamily == anywherev1.Bottlerocket {
values["format"] = string(anywherev1.Bottlerocket)
values["pauseRepository"] = bundle.KubeDistro.Pause.Image()
values["pauseVersion"] = bundle.KubeDistro.Pause.Tag()
values["bottlerocketBootstrapRepository"] = bundle.BottleRocketHostContainers.KubeadmBootstrap.Image()
values["bottlerocketBootstrapVersion"] = bundle.BottleRocketHostContainers.KubeadmBootstrap.Tag()
if workerNodeGroupConfiguration.KubeletConfiguration != nil {
br, err := common.ConvertToBottlerocketKubernetesSettings(workerNodeGroupConfiguration.KubeletConfiguration)
if err != nil {
return nil, err
}
bottlerocketKubernetesSettings = br
}
}
if workerNodeGroupMachineSpec.HostOSConfiguration != nil {
if workerNodeGroupMachineSpec.HostOSConfiguration.NTPConfiguration != nil {
values["ntpServers"] = workerNodeGroupMachineSpec.HostOSConfiguration.NTPConfiguration.Servers
}
if workerNodeGroupMachineSpec.HostOSConfiguration.CertBundles != nil {
values["certBundles"] = workerNodeGroupMachineSpec.HostOSConfiguration.CertBundles
}
if bottlerocketKubernetesSettings == nil && workerNodeGroupMachineSpec.HostOSConfiguration.BottlerocketConfiguration != nil {
bottlerocketKubernetesSettings = workerNodeGroupMachineSpec.HostOSConfiguration.BottlerocketConfiguration.Kubernetes
}
}
if bottlerocketKubernetesSettings != nil || workerNodeGroupMachineSpec.HostOSConfiguration != nil {
brSettings, err := common.GetCAPIBottlerocketSettingsConfig(workerNodeGroupMachineSpec.HostOSConfiguration, bottlerocketKubernetesSettings)
if err != nil {
return nil, err
}
values["bottlerocketSettings"] = brSettings
}
if workerNodeGroupConfiguration.KubeletConfiguration != nil && workerNodeGroupMachineSpec.OSFamily != anywherev1.Bottlerocket {
wnKubeletConfig := workerNodeGroupConfiguration.KubeletConfiguration.Object
if _, ok := wnKubeletConfig["tlsCipherSuites"]; !ok {
wnKubeletConfig["tlsCipherSuites"] = crypto.SecureCipherSuiteNames()
}
if _, ok := wnKubeletConfig["resolvConf"]; !ok {
if clusterSpec.Cluster.Spec.ClusterNetwork.DNS.ResolvConf != nil {
wnKubeletConfig["resolvConf"] = clusterSpec.Cluster.Spec.ClusterNetwork.DNS.ResolvConf.Path
}
}
kcString, err := yaml.Marshal(wnKubeletConfig)
if err != nil {
return nil, fmt.Errorf("error marshaling %v", err)
}
values["kubeletConfiguration"] = string(kcString)
} else {
kubeletExtraArgs := clusterapi.SecureTlsCipherSuitesExtraArgs().
Append(clusterapi.ResolvConfExtraArgs(clusterSpec.Cluster.Spec.ClusterNetwork.DNS.ResolvConf))
values["kubeletExtraArgs"] = kubeletExtraArgs.ToPartialYaml()
}
nodeLabelArgs := clusterapi.WorkerNodeLabelsExtraArgs(workerNodeGroupConfiguration)
if len(nodeLabelArgs) != 0 {
values["nodeLabelArgs"] = nodeLabelArgs.ToPartialYaml()
}
return values, nil
}