in pkg/providers/tinkerbell/template.go [560:675]
func buildTemplateMapMD(
clusterSpec *cluster.Spec,
workerNodeGroupMachineSpec v1alpha1.TinkerbellMachineConfigSpec,
workerNodeGroupConfiguration v1alpha1.WorkerNodeGroupConfiguration,
workerTemplateOverride string,
datacenterSpec v1alpha1.TinkerbellDatacenterConfigSpec,
) (map[string]interface{}, error) {
versionsBundle := clusterSpec.WorkerNodeGroupVersionsBundle(workerNodeGroupConfiguration)
format := "cloud-config"
values := map[string]interface{}{
"clusterName": clusterSpec.Cluster.Name,
"eksaSystemNamespace": constants.EksaSystemNamespace,
"format": format,
"kubernetesVersion": versionsBundle.KubeDistro.Kubernetes.Tag,
"workerNodeGroupName": workerNodeGroupConfiguration.Name,
"workerSshAuthorizedKey": workerNodeGroupMachineSpec.Users[0].SshAuthorizedKeys[0],
"workerSshUsername": workerNodeGroupMachineSpec.Users[0].Name,
"hardwareSelector": workerNodeGroupMachineSpec.HardwareSelector,
"workerNodeGroupTaints": workerNodeGroupConfiguration.Taints,
}
if workerNodeGroupMachineSpec.OSFamily == v1alpha1.Bottlerocket {
values["format"] = string(v1alpha1.Bottlerocket)
values["pauseRepository"] = versionsBundle.KubeDistro.Pause.Image()
values["pauseVersion"] = versionsBundle.KubeDistro.Pause.Tag()
values["bottlerocketBootstrapRepository"] = versionsBundle.BottleRocketHostContainers.KubeadmBootstrap.Image()
values["bottlerocketBootstrapVersion"] = versionsBundle.BottleRocketHostContainers.KubeadmBootstrap.Tag()
}
if clusterSpec.Cluster.Spec.RegistryMirrorConfiguration != nil {
values, err := populateRegistryMirrorValues(clusterSpec, values)
if err != nil {
return values, err
}
// Replace public.ecr.aws endpoint with the endpoint given in the cluster config file
localRegistry := values["coreEKSAMirror"].(string)
if localRegistry != "" {
workerTemplateOverride = strings.ReplaceAll(workerTemplateOverride, defaultRegistry, localRegistry)
}
}
if clusterSpec.Cluster.Spec.ProxyConfiguration != nil {
values["proxyConfig"] = true
values["httpProxy"] = clusterSpec.Cluster.Spec.ProxyConfiguration.HttpProxy
values["httpsProxy"] = clusterSpec.Cluster.Spec.ProxyConfiguration.HttpsProxy
values["noProxy"] = generateNoProxyList(clusterSpec.Cluster, datacenterSpec)
}
values["workertemplateOverride"] = workerTemplateOverride
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 workerNodeGroupMachineSpec.HostOSConfiguration != nil && workerNodeGroupMachineSpec.HostOSConfiguration.BottlerocketConfiguration != nil {
brSettings, err := common.GetCAPIBottlerocketSettingsConfig(workerNodeGroupMachineSpec.HostOSConfiguration, workerNodeGroupMachineSpec.HostOSConfiguration.BottlerocketConfiguration.Kubernetes)
if err != nil {
return nil, err
}
values["bottlerocketSettings"] = brSettings
}
if workerNodeGroupConfiguration.KubeletConfiguration != nil && workerNodeGroupMachineSpec.OSFamily != v1alpha1.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("marshaling Kubelet Configuration for worker node %s: %v", workerNodeGroupConfiguration.Name, err)
}
values["kubeletConfiguration"] = string(kcString)
} else {
kubeletExtraArgs := clusterapi.SecureTlsCipherSuitesExtraArgs().
Append(clusterapi.ResolvConfExtraArgs(clusterSpec.Cluster.Spec.ClusterNetwork.DNS.ResolvConf))
values["kubeletExtraArgs"] = kubeletExtraArgs.ToPartialYaml()
}
wnNodeLabelArgs := clusterapi.WorkerNodeLabelsExtraArgs(workerNodeGroupConfiguration)
if len(wnNodeLabelArgs) != 0 {
values["wnNodeLabelArgs"] = wnNodeLabelArgs.ToPartialYaml()
}
if !datacenterSpec.IsoBoot {
values["bootMode"] = netbootMode
} else {
values["bootMode"] = isobootMode
tinkerbellIP := datacenterSpec.TinkerbellIP
if t := clusterSpec.Cluster.HasTinkerbellIPAnnotation(); t != "" {
tinkerbellIP = t
}
isoURL := url.URL{
Scheme: "http",
Host: fmt.Sprintf("%s:%s", tinkerbellIP, SmeeHTTPPort),
// isoURL path is only served in the top level /iso path.
Path: "/iso/hook.iso",
}
values["isoUrl"] = isoURL.String()
}
return values, nil
}