{"record":{"id":"5e0b931e9326c189","repo":"kubernetes/kops","slug":"error-finding-openstack-region-v-5e0b93","errorCode":null,"errorMessage":"error finding openstack region: %v","messagePattern":"error finding openstack region: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/cloud.go","lineNumber":331,"sourceCode":"\tfloatingSubnet  *string\n\ttags            map[string]string\n\tregion          string\n\tuseOctavia      bool\n\tzones           []string\n\tfloatingEnabled bool\n\tuseVIPACL       *bool\n}\n\nvar _ fi.Cloud = (*openstackCloud)(nil)\n\nvar openstackCloudInstances = make(map[string]OpenstackCloud)\n\nfunc NewOpenstackCloud(cluster *kops.Cluster, uagent string) (OpenstackCloud, error) {\n\tconfig := vfs.OpenstackConfig{}\n\n\tregion, err := config.GetRegion()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error finding openstack region: %v\", err)\n\t}\n\n\traw := openstackCloudInstances[region]\n\tif raw != nil {\n\t\treturn raw, nil\n\t}\n\n\tauthOption, err := config.GetCredential()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tprovider, err := openstack.NewClient(authOption.IdentityEndpoint)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error building openstack provider client: %v\", err)\n\t}\n\tua := gophercloud.UserAgent{}\n\tua.Prepend(fmt.Sprintf(\"kops/%s\", uagent))","sourceCodeStart":313,"sourceCodeEnd":349,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/cloud.go#L313-L349","documentation":"NewOpenstackCloud (upup/pkg/fi/cloudup/openstack/cloud.go:331) resolves the OpenStack region from the environment/config via vfs.OpenstackConfig.GetRegion() before creating the cloud provider. If the region cannot be determined, construction fails with this wrapped error. kOps needs the region to key its cloud-instance cache and to build every service client's EndpointOpts.","triggerScenarios":"GetRegion() fails because OS_REGION_NAME is unset and no region can be inferred from the auth config, or the configured region value is empty/invalid per the config parser.","commonSituations":"Partial OpenStack credential export (OS_USERNAME/OS_PASSWORD set but OS_REGION_NAME forgotten); credentials file missing the region field; CI environments sourcing an incomplete openrc file; using application credentials without a region hint.","solutions":["Export OS_REGION_NAME in your environment or add region to the OpenStack config used by kops","Source a complete openrc file: source openrc.sh and verify with `openstack region list` that the region exists","Re-run kops after verifying `echo $OS_REGION_NAME` prints the intended region"],"exampleFix":"// before\nexport OS_USERNAME=admin\nexport OS_PASSWORD=secret\n# OS_REGION_NAME missing\n// after\nexport OS_USERNAME=admin\nexport OS_PASSWORD=secret\nexport OS_REGION_NAME=RegionOne","handlingStrategy":"validation","validationCode":"region := os.Getenv(\"OS_REGION_NAME\")\nif region == \"\" {\n    return fmt.Errorf(\"OS_REGION_NAME must be set before calling NewOpenstackCloud\")\n}\nif err := verifyRegionExists(region); err != nil {\n    return err\n}\nreturn nil","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always source a complete openrc file that exports OS_REGION_NAME","Verify `echo $OS_REGION_NAME` in CI before running kops","Keep application-credential configs accompanied by an explicit region","Add a startup check that fails fast on missing region"],"tags":["openstack","configuration","region","env-var"],"backgroundTag":"missing-env-var","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}