{"record":{"id":"10dd1d4b08bc16c1","repo":"kubernetes/kops","slug":"error-building-nova-client-v-10dd1d","errorCode":null,"errorMessage":"error building nova client: %v","messagePattern":"error building nova client: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/verifier.go","lineNumber":86,"sourceCode":"\tua := gophercloud.UserAgent{}\n\tua.Prepend(\"kops/kopscontrollerverifier\")\n\tprovider.UserAgent = ua\n\tklog.V(4).Infof(\"Using user-agent %s\", ua.Join())\n\n\t// node-controller should be able to renew it tokens against OpenStack API\n\tenv.AllowReauth = true\n\n\terr = gos.Authenticate(context.TODO(), provider, env)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnovaClient, err := gos.NewComputeV2(provider, gophercloud.EndpointOpts{\n\t\tType:   \"compute\",\n\t\tRegion: region,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error building nova client: %v\", err)\n\t}\n\n\tkubeClient, err := newClientSet()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error building kubernetes client: %w\", err)\n\t}\n\n\treturn &openstackVerifier{\n\t\tnovaClient: novaClient,\n\t\tkubeClient: kubeClient,\n\t}, nil\n}\n\nfunc stringInSlice(a string, list []string) bool {\n\tfor _, b := range list {\n\t\tif b == a {\n\t\t\treturn true\n\t\t}","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/verifier.go#L68-L104","documentation":"Thrown by NewOpenstackVerifier when gos.NewComputeV2 fails to construct a Nova (Compute V2) client for the resolved region. The provider client was created, but selecting/discovering the compute endpoint in the service catalog for that region failed.","triggerScenarios":"NewOpenstackVerifier calls gos.NewComputeV2 with EndpointOpts{Type:\"compute\", Region:region}; it errors when the keystone catalog has no compute service for the region, the endpoint URL is invalid, or endpoint discovery fails.","commonSituations":"Region typo or a region without a nova service; project lacking a compute endpoint in its catalog; expired/insufficiently scoped token; keystone catalog corruption after upgrades; wrong OS_INTERFACE selection.","solutions":["Verify the region string and that nova appears in `openstack catalog list` for that region.","Re-authenticate with a fresh RC file/token and confirm the compute endpoint is reachable.","Check that your project has access to the compute service (admin may need to grant it).","Inspect the wrapped %v error for the exact endpoint URL/CA problem and fix endpoint configuration."],"exampleFix":"// before\nnovaClient, err := gos.NewComputeV2(provider, gophercloud.EndpointOpts{Type: \"compute\", Region: region})\nif err != nil {\n    return nil, fmt.Errorf(\"error building nova client: %v\", err)\n}\n// after\nnovaClient, err := gos.NewComputeV2(provider, gophercloud.EndpointOpts{Type: \"compute\", Region: region})\nif err != nil {\n    return nil, fmt.Errorf(\"error building nova client (region=%s): %w\", region, err)\n}","handlingStrategy":"fallback","validationCode":"catalog, err := providerClient.GetServiceCatalog(ctx)\nif err != nil || !hasComputeEndpoint(catalog, region) {\n    return errors.New(\"no compute endpoint for region \" + region)\n}","typeGuard":null,"tryCatchPattern":"novaClient, err := gos.NewComputeV2(provider, gophercloud.EndpointOpts{Type: \"compute\", Region: region})\nif err != nil {\n    return nil, fmt.Errorf(\"error building nova client: %w\", err)\n}","preventionTips":["Verify `openstack catalog list` includes compute for your region","Re-authenticate before long-running provisioning to avoid stale catalogs","Check project access to the compute service with your admin"],"tags":["openstack","nova","keystone","client-init"],"backgroundTag":"service-endpoint-not-found","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}