func buildCloudConfig()

in cluster-autoscaler/cloudprovider/kamatera/kamatera_cloud_config.go [117:258]


func buildCloudConfig(config io.Reader) (*kamateraConfig, error) {

	// read the config and get the gcfg struct
	var gcfgCloudConfig gcfgCloudConfig
	if err := gcfg.ReadInto(&gcfgCloudConfig, config); err != nil {
		return nil, err
	}

	// get the clusterName and Kamatera tokens
	clusterName := gcfgCloudConfig.Global.ClusterName
	if len(clusterName) == 0 {
		return nil, fmt.Errorf("cluster name is not set")
	}
	apiClientId := gcfgCloudConfig.Global.KamateraApiClientId
	if len(apiClientId) == 0 {
		return nil, fmt.Errorf("kamatera api client id is not set")
	}
	apiSecret := gcfgCloudConfig.Global.KamateraApiSecret
	if len(apiSecret) == 0 {
		return nil, fmt.Errorf("kamatera api secret is not set")
	}
	apiUrl := gcfgCloudConfig.Global.KamateraApiUrl
	if len(apiUrl) == 0 {
		apiUrl = defaultApiUrl
	}

	// Cluster name must be max 15 characters due to limitation of Kamatera server tags
	if len(clusterName) > 15 {
		return nil, fmt.Errorf("cluster name must be at most 15 characters long")
	}

	filterNamePrefix := gcfgCloudConfig.Global.FilterNamePrefix

	// get the default min and max size as defined in the global section of the config file
	defaultMinSize, defaultMaxSize, err := getSizeLimits(
		gcfgCloudConfig.Global.DefaultMinSize,
		gcfgCloudConfig.Global.DefaultMaxSize,
		defaultMinSize,
		defaultMaxSize)
	if err != nil {
		return nil, fmt.Errorf("cannot get default size values in global section: %v", err)
	}

	// get the specific configuration of a node group
	nodeGroupCfg := make(map[string]*nodeGroupConfig)
	for nodeGroupName, gcfgNodeGroup := range gcfgCloudConfig.NodeGroups {
		// node group name must be max 15 characters due to limitation of Kamatera server tags
		if len(nodeGroupName) > 15 {
			return nil, fmt.Errorf("node group name must be at most 15 characters long")
		}
		minSize, maxSize, err := getSizeLimits(gcfgNodeGroup.MinSize, gcfgNodeGroup.MaxSize, defaultMinSize, defaultMaxSize)
		if err != nil {
			return nil, fmt.Errorf("cannot get size values for node group %s: %v", nodeGroupName, err)
		}
		namePrefix := gcfgCloudConfig.Global.DefaultNamePrefix
		if len(gcfgNodeGroup.NamePrefix) > 0 {
			namePrefix = gcfgNodeGroup.NamePrefix
		}
		password := gcfgCloudConfig.Global.DefaultPassword
		if len(gcfgNodeGroup.Password) > 0 {
			password = gcfgNodeGroup.Password
		}
		sshKey := gcfgCloudConfig.Global.DefaultSshKey
		if len(gcfgNodeGroup.SshKey) > 0 {
			sshKey = gcfgNodeGroup.SshKey
		}
		datacenter := gcfgCloudConfig.Global.DefaultDatacenter
		if len(gcfgNodeGroup.Datacenter) > 0 {
			datacenter = gcfgNodeGroup.Datacenter
		}
		image := gcfgCloudConfig.Global.DefaultImage
		if len(gcfgNodeGroup.Image) > 0 {
			image = gcfgNodeGroup.Image
		}
		cpu := gcfgCloudConfig.Global.DefaultCpu
		if len(gcfgNodeGroup.Cpu) > 0 {
			cpu = gcfgNodeGroup.Cpu
		}
		ram := gcfgCloudConfig.Global.DefaultRam
		if len(gcfgNodeGroup.Ram) > 0 {
			ram = gcfgNodeGroup.Ram
		}
		disks := gcfgCloudConfig.Global.DefaultDisks
		if gcfgNodeGroup.Disks != nil {
			disks = gcfgNodeGroup.Disks
		}
		dailybackup := gcfgCloudConfig.Global.DefaultDailybackup
		if gcfgNodeGroup.Dailybackup {
			dailybackup = gcfgNodeGroup.Dailybackup
		}
		managed := gcfgCloudConfig.Global.DefaultManaged
		if gcfgNodeGroup.Managed {
			managed = gcfgNodeGroup.Managed
		}
		networks := gcfgCloudConfig.Global.DefaultNetworks
		if gcfgNodeGroup.Networks != nil {
			networks = gcfgNodeGroup.Networks
		}
		billingCycle := gcfgCloudConfig.Global.DefaultBillingCycle
		if len(gcfgNodeGroup.BillingCycle) > 0 {
			billingCycle = gcfgNodeGroup.BillingCycle
		}
		monthlyPackage := gcfgCloudConfig.Global.DefaultMonthlyPackage
		if len(gcfgNodeGroup.MonthlyPackage) > 0 {
			monthlyPackage = gcfgNodeGroup.MonthlyPackage
		}
		scriptBase64 := gcfgCloudConfig.Global.DefaultScriptBase64
		if len(gcfgNodeGroup.ScriptBase64) > 0 {
			scriptBase64 = gcfgNodeGroup.ScriptBase64
		}
		ngc := &nodeGroupConfig{
			maxSize:        maxSize,
			minSize:        minSize,
			NamePrefix:     namePrefix,
			Password:       password,
			SshKey:         sshKey,
			Datacenter:     datacenter,
			Image:          image,
			Cpu:            cpu,
			Ram:            ram,
			Disks:          disks,
			Dailybackup:    dailybackup,
			Managed:        managed,
			Networks:       networks,
			BillingCycle:   billingCycle,
			MonthlyPackage: monthlyPackage,
			ScriptBase64:   scriptBase64,
		}
		nodeGroupCfg[nodeGroupName] = ngc
	}

	return &kamateraConfig{
		clusterName:      clusterName,
		apiClientId:      apiClientId,
		apiSecret:        apiSecret,
		apiUrl:           apiUrl,
		filterNamePrefix: filterNamePrefix,
		defaultMinSize:   defaultMinSize,
		defaultMaxSize:   defaultMaxSize,
		nodeGroupCfg:     nodeGroupCfg,
	}, nil
}