pkg/engine/artifacts.go (233 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
package engine
import (
"fmt"
"strings"
"github.com/Azure/aks-engine-azurestack/pkg/api"
"github.com/Azure/aks-engine-azurestack/pkg/api/common"
)
// kubernetesComponentFileSpec defines a k8s component that we will deliver via file to a master node vm
type kubernetesComponentFileSpec struct {
sourceFile string // filename to source spec data from
base64Data string // if not "", this base64-encoded string will take precedent over sourceFile
destinationFile string // the filename to write to disk on the destination OS
}
func kubernetesComponentSettingsInit(p *api.Properties) map[string]kubernetesComponentFileSpec {
if p.OrchestratorProfile == nil {
p.OrchestratorProfile = &api.OrchestratorProfile{}
}
if p.OrchestratorProfile.KubernetesConfig == nil {
p.OrchestratorProfile.KubernetesConfig = &api.KubernetesConfig{}
}
k := p.OrchestratorProfile.KubernetesConfig
return map[string]kubernetesComponentFileSpec{
common.SchedulerComponentName: {
sourceFile: schedulerComponentSourceFilename,
base64Data: k.GetComponentData(common.SchedulerComponentName),
destinationFile: schedulerComponentDestinationFilename,
},
common.ControllerManagerComponentName: {
sourceFile: controllerManagerComponentSourceFilename,
base64Data: k.GetComponentData(common.ControllerManagerComponentName),
destinationFile: controllerManagerComponentDestinationFilename,
},
common.CloudControllerManagerComponentName: {
sourceFile: cloudControllerManagerComponentSourceFilename,
base64Data: k.GetComponentData(common.CloudControllerManagerComponentName),
destinationFile: cloudControllerManagerComponentDestinationFilename,
},
common.APIServerComponentName: {
sourceFile: apiServerComponentSourceFilename,
base64Data: k.GetComponentData(common.APIServerComponentName),
destinationFile: apiServerComponentDestinationFilename,
},
common.AddonManagerComponentName: {
sourceFile: addonManagerComponentSourceFilename,
base64Data: k.GetComponentData(common.AddonManagerComponentName),
destinationFile: addonManagerComponentDestinationFilename,
},
common.ClusterInitComponentName: {
base64Data: k.GetComponentData(common.ClusterInitComponentName),
destinationFile: clusterInitComponentDestinationFilename,
},
common.AzureKMSProviderComponentName: {
sourceFile: azureKMSComponentSourceFilename,
base64Data: k.GetComponentData(common.AzureKMSProviderComponentName),
destinationFile: azureKMSComponentDestinationFilename,
},
}
}
func kubernetesAddonSettingsInit(p *api.Properties) map[string]kubernetesComponentFileSpec {
if p.OrchestratorProfile == nil {
p.OrchestratorProfile = &api.OrchestratorProfile{}
}
if p.OrchestratorProfile.KubernetesConfig == nil {
p.OrchestratorProfile.KubernetesConfig = &api.KubernetesConfig{}
}
o := p.OrchestratorProfile
k := o.KubernetesConfig
// TODO validate that each of these addons are actually wired in to the conveniences in getAddonFuncMap
return map[string]kubernetesComponentFileSpec{
common.MetricsServerAddonName: {
sourceFile: metricsServerAddonSourceFilename,
base64Data: k.GetAddonScript(common.MetricsServerAddonName),
destinationFile: metricsServerAddonDestinationFilename,
},
common.TillerAddonName: {
sourceFile: tillerAddonSourceFilename,
base64Data: k.GetAddonScript(common.TillerAddonName),
destinationFile: tillerAddonDestinationFilename,
},
common.AADPodIdentityAddonName: {
sourceFile: aadPodIdentityAddonSourceFilename,
base64Data: k.GetAddonScript(common.AADPodIdentityAddonName),
destinationFile: aadPodIdentityAddonDestinationFilename,
},
common.AzureDiskCSIDriverAddonName: {
sourceFile: azureDiskCSIAddonSourceFilename,
base64Data: k.GetAddonScript(common.AzureDiskCSIDriverAddonName),
destinationFile: azureDiskCSIAddonDestinationFilename,
},
common.AzureFileCSIDriverAddonName: {
sourceFile: azureFileCSIAddonSourceFilename,
base64Data: k.GetAddonScript(common.AzureFileCSIDriverAddonName),
destinationFile: azureFileCSIAddonDestinationFilename,
},
common.ClusterAutoscalerAddonName: {
sourceFile: clusterAutoscalerAddonSourceFilename,
base64Data: k.GetAddonScript(common.ClusterAutoscalerAddonName),
destinationFile: clusterAutoscalerAddonDestinationFilename,
},
common.SMBFlexVolumeAddonName: {
sourceFile: smbFlexVolumeAddonSourceFilename,
base64Data: k.GetAddonScript(common.SMBFlexVolumeAddonName),
destinationFile: smbFlexVolumeAddonDestinationFilename,
},
common.DashboardAddonName: {
sourceFile: dashboardAddonSourceFilename,
base64Data: k.GetAddonScript(common.DashboardAddonName),
destinationFile: dashboardAddonDestinationFilename,
},
common.NVIDIADevicePluginAddonName: {
sourceFile: nvidiaAddonSourceFilename,
base64Data: k.GetAddonScript(common.NVIDIADevicePluginAddonName),
destinationFile: nvidiaAddonDestinationFilename,
},
common.IPMASQAgentAddonName: {
sourceFile: ipMasqAgentAddonSourceFilename,
base64Data: k.GetAddonScript(common.IPMASQAgentAddonName),
destinationFile: ipMasqAgentAddonDestinationFilename,
},
common.CalicoAddonName: {
sourceFile: calicoAddonSourceFilename,
base64Data: k.GetAddonScript(common.CalicoAddonName),
destinationFile: calicoAddonDestinationFilename,
},
common.AzureNetworkPolicyAddonName: {
sourceFile: azureNetworkPolicyAddonSourceFilename,
base64Data: k.GetAddonScript(common.AzureNetworkPolicyAddonName),
destinationFile: azureNetworkPolicyAddonDestinationFilename,
},
common.AzurePolicyAddonName: {
sourceFile: azurePolicyAddonSourceFilename,
base64Data: k.GetAddonScript(common.AzurePolicyAddonName),
destinationFile: azurePolicyAddonDestinationFilename,
},
common.CloudNodeManagerAddonName: {
sourceFile: cloudNodeManagerAddonSourceFilename,
base64Data: k.GetAddonScript(common.CloudNodeManagerAddonName),
destinationFile: cloudNodeManagerAddonDestinationFilename,
},
common.NodeProblemDetectorAddonName: {
sourceFile: nodeProblemDetectorAddonSourceFilename,
base64Data: k.GetAddonScript(common.NodeProblemDetectorAddonName),
destinationFile: nodeProblemDetectorAddonDestinationFilename,
},
common.KubeDNSAddonName: {
sourceFile: kubeDNSAddonSourceFilename,
base64Data: k.GetAddonScript(common.KubeDNSAddonName),
destinationFile: kubeDNSAddonDestinationFilename,
},
common.CoreDNSAddonName: {
sourceFile: corednsAddonSourceFilename,
base64Data: k.GetAddonScript(common.CoreDNSAddonName),
destinationFile: corednsAddonDestinationFilename,
},
common.KubeProxyAddonName: {
sourceFile: kubeProxyAddonSourceFilename,
base64Data: k.GetAddonScript(common.KubeProxyAddonName),
destinationFile: kubeProxyAddonDestinationFilename,
},
common.PodSecurityPolicyAddonName: {
sourceFile: podSecurityPolicyAddonSourceFilename,
base64Data: k.GetAddonScript(common.PodSecurityPolicyAddonName),
destinationFile: podSecurityPolicyAddonDestinationFilename,
},
common.AADAdminGroupAddonName: {
sourceFile: aadDefaultAdminGroupAddonSourceFilename,
base64Data: k.GetAddonScript(common.AADAdminGroupAddonName),
destinationFile: aadDefaultAdminGroupDestinationFilename,
},
common.CiliumAddonName: {
sourceFile: ciliumAddonSourceFilename,
base64Data: k.GetAddonScript(common.CiliumAddonName),
destinationFile: ciliumAddonDestinationFilename,
},
common.AntreaAddonName: {
sourceFile: antreaAddonSourceFilename,
base64Data: k.GetAddonScript(common.AntreaAddonName),
destinationFile: antreaAddonDestinationFilename,
},
common.AuditPolicyAddonName: {
sourceFile: auditPolicyAddonSourceFilename,
base64Data: k.GetAddonScript(common.AuditPolicyAddonName),
destinationFile: auditPolicyAddonDestinationFilename,
},
common.AzureCloudProviderAddonName: {
sourceFile: cloudProviderAddonSourceFilename,
base64Data: k.GetAddonScript(common.AuditPolicyAddonName),
destinationFile: cloudProviderAddonDestinationFilename,
},
common.FlannelAddonName: {
sourceFile: flannelAddonSourceFilename,
base64Data: k.GetAddonScript(common.FlannelAddonName),
destinationFile: flannelAddonDestinationFilename,
},
common.ScheduledMaintenanceAddonName: {
sourceFile: scheduledMaintenanceAddonSourceFilename,
base64Data: k.GetAddonScript(common.ScheduledMaintenanceAddonName),
destinationFile: scheduledMaintenanceAddonDestinationFilename,
},
common.SecretsStoreCSIDriverAddonName: {
sourceFile: secretsStoreCSIDriverAddonSourceFileName,
base64Data: k.GetAddonScript(common.SecretsStoreCSIDriverAddonName),
destinationFile: secretsStoreCSIDriverAddonDestinationFileName,
},
common.AzureArcOnboardingAddonName: {
sourceFile: connectedClusterAddonSourceFilename,
base64Data: k.GetAddonScript(common.AzureArcOnboardingAddonName),
destinationFile: connectedClusterAddonDestinationFilename,
},
}
}
func getComponentString(input, destinationPath, destinationFile string) string {
addonString := getBase64EncodedGzippedCustomScriptFromStr(input)
return buildConfigString(addonString, destinationFile, destinationPath)
}
func buildConfigString(configString, destinationFile, destinationPath string) string {
contents := []string{
fmt.Sprintf("- path: %s/%s", destinationPath, destinationFile),
" permissions: \\\"0644\\\"",
" encoding: gzip",
" owner: \\\"root\\\"",
" content: !!binary |",
fmt.Sprintf(" %s\\n\\n", configString),
}
return strings.Join(contents, "\\n")
}
func getCustomDataFilePath(sourceFile, sourcePath, version string) string {
sourceFileFullPath := sourcePath + "/" + sourceFile
sourceFileFullPathVersioned := sourcePath + "/" + version + "/" + sourceFile
// Test to check if the versioned file can be read.
_, err := Asset(sourceFileFullPathVersioned)
if err == nil {
sourceFileFullPath = sourceFileFullPathVersioned
}
return sourceFileFullPath
}