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
}