in pkg/providers/imagefamily/customscriptsbootstrap/provisionclientbootstrap.go [74:168]
func (p ProvisionClientBootstrap) GetCustomDataAndCSE(ctx context.Context) (string, string, error) {
if p.IsWindows {
// TODO(Windows)
return "", "", fmt.Errorf("windows is not supported")
}
labels := lo.Assign(map[string]string{}, p.Labels)
getAgentbakerGeneratedLabels(p.ResourceGroup, labels)
provisionProfile := &models.ProvisionProfile{
Name: lo.ToPtr(""),
Architecture: lo.ToPtr(lo.Ternary(p.Arch == karpv1.ArchitectureAmd64, "x64", "Arm64")),
OsType: lo.ToPtr(lo.Ternary(p.IsWindows, models.OSTypeWindows, models.OSTypeLinux)),
VMSize: lo.ToPtr(p.InstanceType.Name),
Distro: lo.ToPtr(p.ImageDistro),
CustomNodeLabels: labels,
OrchestratorVersion: lo.ToPtr(p.KubernetesVersion),
VnetSubnetID: lo.ToPtr(p.SubnetID),
StorageProfile: lo.ToPtr(p.StorageProfile),
NodeInitializationTaints: lo.Map(p.StartupTaints, func(taint v1.Taint, _ int) string { return taint.ToString() }),
NodeTaints: lo.Map(p.Taints, func(taint v1.Taint, _ int) string { return taint.ToString() }),
SecurityProfile: &models.AgentPoolSecurityProfile{
SSHAccess: lo.ToPtr(models.SSHAccessLocalUser),
// EnableVTPM: lo.ToPtr(false), // Unsupported as of now (Trusted launch)
// EnableSecureBoot: lo.ToPtr(false), // Unsupported as of now (Trusted launch)
},
MaxPods: lo.ToPtr(p.KubeletConfig.MaxPods),
VnetCidrs: []string{}, // Unsupported as of now; TODO(Windows)
// MessageOfTheDay: lo.ToPtr(""), // Unsupported as of now
// AgentPoolWindowsProfile: &models.AgentPoolWindowsProfile{}, // Unsupported as of now; TODO(Windows)
// KubeletDiskType: lo.ToPtr(models.KubeletDiskTypeUnspecified), // Unsupported as of now
// CustomLinuxOSConfig: &models.CustomLinuxOSConfig{}, // Unsupported as of now (sysctl)
// EnableFIPS: lo.ToPtr(false), // Unsupported as of now
// GpuInstanceProfile: lo.ToPtr(models.GPUInstanceProfileUnspecified), // Unsupported as of now (MIG)
// WorkloadRuntime: lo.ToPtr(models.WorkloadRuntimeUnspecified), // Unsupported as of now (Kata)
// ArtifactStreamingProfile: &models.ArtifactStreamingProfile{
// Enabled: lo.ToPtr(false), // Unsupported as of now
// },
}
switch p.ImageFamily {
case v1alpha2.Ubuntu2204ImageFamily:
provisionProfile.OsSku = to.Ptr(models.OSSKUUbuntu)
case v1alpha2.AzureLinuxImageFamily:
provisionProfile.OsSku = to.Ptr(models.OSSKUAzureLinux)
default:
provisionProfile.OsSku = to.Ptr(models.OSSKUUbuntu)
}
if p.KubeletConfig != nil {
provisionProfile.CustomKubeletConfig = &models.CustomKubeletConfig{
CPUCfsQuota: p.KubeletConfig.CPUCFSQuota,
ImageGcHighThreshold: p.KubeletConfig.ImageGCHighThresholdPercent,
ImageGcLowThreshold: p.KubeletConfig.ImageGCLowThresholdPercent,
ContainerLogMaxSizeMB: convertContainerLogMaxSizeToMB(p.KubeletConfig.ContainerLogMaxSize),
ContainerLogMaxFiles: p.KubeletConfig.ContainerLogMaxFiles,
PodMaxPids: convertPodMaxPids(p.KubeletConfig.PodPidsLimit),
}
// NodeClaim defaults don't work somehow and keep giving invalid values. Can be improved later.
if p.KubeletConfig.CPUCFSQuotaPeriod.Duration.String() != "0s" {
provisionProfile.CustomKubeletConfig.CPUCfsQuotaPeriod = lo.ToPtr(p.KubeletConfig.CPUCFSQuotaPeriod.Duration.String())
}
if p.KubeletConfig.CPUManagerPolicy != "" {
provisionProfile.CustomKubeletConfig.CPUManagerPolicy = lo.ToPtr(p.KubeletConfig.CPUManagerPolicy)
}
if p.KubeletConfig.TopologyManagerPolicy != "" {
provisionProfile.CustomKubeletConfig.TopologyManagerPolicy = lo.ToPtr(p.KubeletConfig.TopologyManagerPolicy)
}
if len(p.KubeletConfig.AllowedUnsafeSysctls) > 0 {
provisionProfile.CustomKubeletConfig.AllowedUnsafeSysctls = p.KubeletConfig.AllowedUnsafeSysctls
}
}
if modeString, ok := p.Labels["kubernetes.azure.com/mode"]; ok && modeString == "system" {
provisionProfile.Mode = lo.ToPtr(models.AgentPoolModeSystem)
} else {
provisionProfile.Mode = lo.ToPtr(models.AgentPoolModeUser)
}
if utils.IsNvidiaEnabledSKU(p.InstanceType.Name) {
provisionProfile.GpuProfile = &models.GPUProfile{
DriverType: lo.ToPtr(lo.Ternary(utils.UseGridDrivers(p.InstanceType.Name), models.DriverTypeGRID, models.DriverTypeCUDA)),
InstallGPUDriver: lo.ToPtr(true),
}
}
provisionHelperValues := &models.ProvisionHelperValues{
SkuCPU: lo.ToPtr(p.InstanceType.Capacity.Cpu().AsApproximateFloat64()),
SkuMemory: lo.ToPtr(math.Ceil(reverseVMMemoryOverhead(options.FromContext(ctx).VMMemoryOverheadPercent, p.InstanceType.Capacity.Memory().AsApproximateFloat64()) / 1024 / 1024 / 1024)),
}
return p.getNodeBootstrappingFromClient(ctx, provisionProfile, provisionHelperValues, p.KubeletClientTLSBootstrapToken)
}