func()

in pkg/providers/amifamily/bootstrap/bottlerocket.go [35:97]


func (b Bottlerocket) Script() (string, error) {
	s, err := NewBottlerocketConfig(b.CustomUserData)
	if err != nil {
		return "", fmt.Errorf("invalid UserData %w", err)
	}
	// Karpenter will overwrite settings present inside custom UserData
	// based on other fields specified in the NodePool
	s.Settings.Kubernetes.ClusterName = &b.ClusterName
	s.Settings.Kubernetes.APIServer = &b.ClusterEndpoint
	s.Settings.Kubernetes.ClusterCertificate = b.CABundle
	if err := mergo.MergeWithOverwrite(&s.Settings.Kubernetes.NodeLabels, b.Labels); err != nil {
		return "", err
	}

	if b.KubeletConfig != nil && b.KubeletConfig.MaxPods != nil {
		s.Settings.Kubernetes.MaxPods = aws.Int(int(lo.FromPtr(b.KubeletConfig.MaxPods)))
	}

	if b.KubeletConfig != nil {
		if len(b.KubeletConfig.ClusterDNS) > 0 {
			s.Settings.Kubernetes.ClusterDNSIP = &b.KubeletConfig.ClusterDNS[0]
		}
		if b.KubeletConfig.SystemReserved != nil {
			s.Settings.Kubernetes.SystemReserved = b.KubeletConfig.SystemReserved
		}
		if b.KubeletConfig.KubeReserved != nil {
			s.Settings.Kubernetes.KubeReserved = b.KubeletConfig.KubeReserved
		}
		if b.KubeletConfig.EvictionHard != nil {
			s.Settings.Kubernetes.EvictionHard = b.KubeletConfig.EvictionHard
		}
		if b.KubeletConfig.ImageGCHighThresholdPercent != nil {
			s.Settings.Kubernetes.ImageGCHighThresholdPercent = lo.ToPtr(strconv.FormatInt(int64(*b.KubeletConfig.ImageGCHighThresholdPercent), 10))
		}
		if b.KubeletConfig.ImageGCLowThresholdPercent != nil {
			s.Settings.Kubernetes.ImageGCLowThresholdPercent = lo.ToPtr(strconv.FormatInt(int64(*b.KubeletConfig.ImageGCLowThresholdPercent), 10))
		}
		if b.KubeletConfig.CPUCFSQuota != nil {
			s.Settings.Kubernetes.CPUCFSQuota = b.KubeletConfig.CPUCFSQuota
		}
	}

	s.Settings.Kubernetes.NodeTaints = map[string][]string{}
	for _, taint := range b.Taints {
		s.Settings.Kubernetes.NodeTaints[taint.Key] = append(s.Settings.Kubernetes.NodeTaints[taint.Key], fmt.Sprintf("%s:%s", taint.Value, taint.Effect))
	}

	if lo.FromPtr(b.InstanceStorePolicy) == v1.InstanceStorePolicyRAID0 {
		if s.Settings.BootstrapCommands == nil {
			s.Settings.BootstrapCommands = map[string]BootstrapCommand{}
		}
		s.Settings.BootstrapCommands["000-mount-instance-storage"] = BootstrapCommand{
			Commands:  [][]string{{"apiclient", "ephemeral-storage", "init"}, {"apiclient", "ephemeral-storage", "bind", "--dirs", "/var/lib/containerd", "/var/lib/kubelet", "/var/log/pods"}},
			Essential: true,
			Mode:      BootstrapCommandModeAlways,
		}
	}
	script, err := s.MarshalTOML()
	if err != nil {
		return "", fmt.Errorf("constructing toml UserData %w", err)
	}
	return base64.StdEncoding.EncodeToString(script), nil
}