aks-node-controller/pkg/nodeconfigutils/utils.go (58 lines of code) (raw):

package nodeconfigutils import ( "encoding/base64" "encoding/json" "fmt" aksnodeconfigv1 "github.com/Azure/agentbaker/aks-node-controller/pkg/gen/aksnodeconfig/v1" "google.golang.org/protobuf/encoding/protojson" ) const ( cloudConfigTemplate = `#cloud-config write_files: - path: /opt/azure/containers/aks-node-controller-config.json permissions: "0755" owner: root content: !!binary | %s` CSE = "/opt/azure/containers/aks-node-controller provision-wait" ) func CustomData(cfg *aksnodeconfigv1.Configuration) (string, error) { aksNodeConfigJSON, err := json.Marshal(cfg) if err != nil { return "", fmt.Errorf("failed to marshal nbc, error: %w", err) } encodedAksNodeConfigJSON := base64.StdEncoding.EncodeToString(aksNodeConfigJSON) customDataYAML := fmt.Sprintf(cloudConfigTemplate, encodedAksNodeConfigJSON) return base64.StdEncoding.EncodeToString([]byte(customDataYAML)), nil } func MarshalConfigurationV1(cfg *aksnodeconfigv1.Configuration) ([]byte, error) { options := protojson.MarshalOptions{ UseEnumNumbers: false, UseProtoNames: true, Indent: " ", } return options.Marshal(cfg) } func UnmarshalConfigurationV1(data []byte) (*aksnodeconfigv1.Configuration, error) { cfg := &aksnodeconfigv1.Configuration{} options := protojson.UnmarshalOptions{} err := options.Unmarshal(data, cfg) return cfg, err } func Validate(cfg *aksnodeconfigv1.Configuration) error { requiredStrings := map[string]string{ "version": cfg.GetVersion(), "auth_config.subscription_id": cfg.GetAuthConfig().GetSubscriptionId(), "cluster_config.resource_group": cfg.GetClusterConfig().GetResourceGroup(), "cluster_config.location": cfg.GetClusterConfig().GetLocation(), "cluster_config.cluster_network_config.vnet_name": cfg.GetClusterConfig().GetClusterNetworkConfig().GetVnetName(), "cluster_config.cluster_network_config.route_table": cfg.GetClusterConfig().GetClusterNetworkConfig().GetRouteTable(), "api_server_config.api_server_name": cfg.GetApiServerConfig().GetApiServerName(), } for field, value := range requiredStrings { if value == "" { return fmt.Errorf("required field %v is missing", field) } } return nil }