func()

in pkg/common/config/config.go [64:260]


func (cfg *Config) FromEnv() error {

	//Init
	if cfg.VirtualCenter == nil {
		cfg.VirtualCenter = make(map[string]*VirtualCenterConfig)
	}

	//Globals
	if v := os.Getenv("VSPHERE_VCENTER"); v != "" {
		cfg.Global.VCenterIP = v
	}
	if v := os.Getenv("VSPHERE_VCENTER_PORT"); v != "" {
		cfg.Global.VCenterPort = v
	}
	if v := os.Getenv("VSPHERE_USER"); v != "" {
		cfg.Global.User = v
	}
	if v := os.Getenv("VSPHERE_PASSWORD"); v != "" {
		cfg.Global.Password = v
	}
	if v := os.Getenv("VSPHERE_DATACENTER"); v != "" {
		cfg.Global.Datacenters = v
	}
	if v := os.Getenv("VSPHERE_SECRET_NAME"); v != "" {
		cfg.Global.SecretName = v
	}
	if v := os.Getenv("VSPHERE_SECRET_NAMESPACE"); v != "" {
		cfg.Global.SecretNamespace = v
	}

	if v := os.Getenv("VSPHERE_ROUNDTRIP_COUNT"); v != "" {
		tmp, err := strconv.ParseUint(v, 10, 32)
		if err != nil {
			klog.Errorf("Failed to parse VSPHERE_ROUNDTRIP_COUNT: %s", err)
		} else {
			cfg.Global.RoundTripperCount = uint(tmp)
		}
	}

	if v := os.Getenv("VSPHERE_INSECURE"); v != "" {
		InsecureFlag, err := strconv.ParseBool(v)
		if err != nil {
			klog.Errorf("Failed to parse VSPHERE_INSECURE: %s", err)
		} else {
			cfg.Global.InsecureFlag = InsecureFlag
		}
	}

	if v := os.Getenv("VSPHERE_API_DISABLE"); v != "" {
		APIDisable, err := strconv.ParseBool(v)
		if err != nil {
			klog.Errorf("Failed to parse VSPHERE_API_DISABLE: %s", err)
		} else {
			cfg.Global.APIDisable = APIDisable
		}
	}

	if v := os.Getenv("VSPHERE_API_BINDING"); v != "" {
		cfg.Global.APIBinding = v
	}

	if v := os.Getenv("VSPHERE_SECRETS_DIRECTORY"); v != "" {
		cfg.Global.SecretsDirectory = v
	}
	if cfg.Global.SecretsDirectory == "" {
		cfg.Global.SecretsDirectory = DefaultSecretDirectory
	}
	if _, err := os.Stat(cfg.Global.SecretsDirectory); os.IsNotExist(err) {
		cfg.Global.SecretsDirectory = "" //Dir does not exist, set to empty string
	}

	if v := os.Getenv("VSPHERE_CAFILE"); v != "" {
		cfg.Global.CAFile = v
	}
	if v := os.Getenv("VSPHERE_THUMBPRINT"); v != "" {
		cfg.Global.Thumbprint = v
	}
	if v := os.Getenv("VSPHERE_LABEL_REGION"); v != "" {
		cfg.Labels.Region = v
	}
	if v := os.Getenv("VSPHERE_LABEL_ZONE"); v != "" {
		cfg.Labels.Zone = v
	}

	//Build VirtualCenter from ENVs
	for _, e := range os.Environ() {
		pair := strings.Split(e, "=")

		if len(pair) != 2 {
			continue
		}

		key := pair[0]
		value := pair[1]

		if strings.HasPrefix(key, "VSPHERE_VCENTER_") && len(value) > 0 {
			id := strings.TrimPrefix(key, "VSPHERE_VCENTER_")
			vcenter := value

			_, username, errUsername := getEnvKeyValue("VCENTER_"+id+"_USERNAME", false)
			if errUsername != nil {
				username = cfg.Global.User
			}
			_, password, errPassword := getEnvKeyValue("VCENTER_"+id+"_PASSWORD", false)
			if errPassword != nil {
				password = cfg.Global.Password
			}
			_, server, errServer := getEnvKeyValue("VCENTER_"+id+"_SERVER", false)
			if errServer != nil {
				server = ""
			}
			_, port, errPort := getEnvKeyValue("VCENTER_"+id+"_PORT", false)
			if errPort != nil {
				port = cfg.Global.VCenterPort
			}
			insecureFlag := false
			_, insecureTmp, errInsecure := getEnvKeyValue("VCENTER_"+id+"_INSECURE", false)
			if errInsecure != nil {
				insecureFlagTmp, errTmp := strconv.ParseBool(insecureTmp)
				if errTmp == nil {
					insecureFlag = insecureFlagTmp
				}
			}
			_, datacenters, errDatacenters := getEnvKeyValue("VCENTER_"+id+"_DATACENTERS", false)
			if errDatacenters != nil {
				datacenters = cfg.Global.Datacenters
			}
			roundtrip := DefaultRoundTripperCount
			_, roundtripTmp, errRoundtrip := getEnvKeyValue("VCENTER_"+id+"_ROUNDTRIP", false)
			if errRoundtrip != nil {
				roundtripFlagTmp, errTmp := strconv.ParseUint(roundtripTmp, 10, 32)
				if errTmp == nil {
					roundtrip = uint(roundtripFlagTmp)
				}
			}
			_, caFile, errCaFile := getEnvKeyValue("VCENTER_"+id+"_CAFILE", false)
			if errCaFile != nil {
				caFile = cfg.Global.CAFile
			}
			_, thumbprint, errThumbprint := getEnvKeyValue("VCENTER_"+id+"_THUMBPRINT", false)
			if errThumbprint != nil {
				thumbprint = cfg.Global.Thumbprint
			}

			_, secretName, secretNameErr := getEnvKeyValue("VCENTER_"+id+"_SECRET_NAME", false)
			_, secretNamespace, secretNamespaceErr := getEnvKeyValue("VCENTER_"+id+"_SECRET_NAMESPACE", false)

			if secretNameErr != nil || secretNamespaceErr != nil {
				secretName = ""
				secretNamespace = ""
			}
			secretRef := DefaultCredentialManager
			if secretName != "" && secretNamespace != "" {
				secretRef = vcenter
			}

			iPFamilyPriority := []string{DefaultIPFamily}
			_, ipFamily, errIPFamily := getEnvKeyValue("VCENTER_"+id+"_IP_FAMILY", false)
			if errIPFamily != nil {
				iPFamilyPriority = []string{ipFamily}
			}

			// If server is explicitly set, that means the vcenter value above is the TenantRef
			vcenterIP := vcenter
			tenantRef := vcenter
			if server != "" {
				vcenterIP = server
				tenantRef = vcenter
			}

			var vcc *VirtualCenterConfig
			if cfg.VirtualCenter[tenantRef] != nil {
				vcc = cfg.VirtualCenter[tenantRef]
			} else {
				vcc = &VirtualCenterConfig{}
				cfg.VirtualCenter[tenantRef] = vcc
			}

			vcc.User = username
			vcc.Password = password
			vcc.TenantRef = tenantRef
			vcc.VCenterIP = vcenterIP
			vcc.VCenterPort = port
			vcc.InsecureFlag = insecureFlag
			vcc.Datacenters = datacenters
			vcc.RoundTripperCount = roundtrip
			vcc.CAFile = caFile
			vcc.Thumbprint = thumbprint
			vcc.SecretRef = secretRef
			vcc.SecretName = secretName
			vcc.SecretNamespace = secretNamespace
			vcc.IPFamilyPriority = iPFamilyPriority
		}
	}

	return nil
}