{"record":{"id":"a85fecca3f799443","repo":"kubernetes/kops","slug":"error-building-lb-client-w","errorCode":null,"errorMessage":"error building lb client: %w","messagePattern":"error building lb client: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/cloud.go","lineNumber":501,"sourceCode":"\t\tif spec.Loadbalancer.UseOctavia != nil {\n\t\t\toctavia = fi.ValueOf(spec.Loadbalancer.UseOctavia)\n\t\t}\n\t\tif spec.Loadbalancer.FloatingSubnet != nil {\n\t\t\tc.floatingSubnet = spec.Loadbalancer.FloatingSubnet\n\t\t}\n\t} else if fi.ValueOf(spec.Loadbalancer.UseOctavia) {\n\t\treturn fmt.Errorf(\"cluster configured to use octavia, but router was not configured\")\n\t}\n\tc.useOctavia = octavia\n\n\tvar lbClient *gophercloud.ServiceClient\n\tif octavia {\n\t\tklog.V(2).Infof(\"Openstack using Octavia lbaasv2 api\")\n\t\tclient, err := openstack.NewLoadBalancerV2(provider, gophercloud.EndpointOpts{\n\t\t\tRegion: region,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error building lb client: %w\", err)\n\t\t}\n\t\tlbClient = client\n\t} else {\n\t\tklog.V(2).Infof(\"Openstack using deprecated lbaasv2 api\")\n\t\tclient, err := openstack.NewNetworkV2(provider, gophercloud.EndpointOpts{\n\t\t\tRegion: region,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error building lb client: %w\", err)\n\t\t}\n\t\tlbClient = client\n\t}\n\tc.lbClient = lbClient\n\treturn nil\n}\n\n// UseZones add unique zone names to openstackcloud\nfunc (c *openstackCloud) UseZones(zones []string) {","sourceCodeStart":483,"sourceCodeEnd":519,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/cloud.go#L483-L519","documentation":"Wraps a failure from openstack.NewLoadBalancerV2 (gophercloud Octavia v2 client) used when the cluster is configured for Octavia. Client construction fails when the 'load-balancer' service endpoint cannot be found for the region or auth fails.","triggerScenarios":"octavia==true path in buildLoadBalancerClient: NewLoadBalancerV2(provider, EndpointOpts{Region:region}) errors — no octavia endpoint in the catalog, wrong region, or token/auth error.","commonSituations":"Octavia not deployed in the cloud; region mismatch; Keystone catalog using a non-standard service type so EndpointOpts{Type:'load-balancer'} misses; credentials lacking LB access.","solutions":["Verify octavia endpoint: 'openstack endpoint list --service load-balancer' in the target region","Fix the region in the cluster spec / OS_REGION_NAME","Check service type is registered as 'load-balancer' (or adjust catalog)","Re-authenticate with valid OS_* credentials and confirm 'openstack loadbalancer list' succeeds"],"exampleFix":"// before: region without octavia\nRegion: \"aux-region\"\n// after\nRegion: \"main-region\" // where 'openstack endpoint list' shows the octavia endpoint","handlingStrategy":"validation","validationCode":"// pre-flight: resolve the octavia endpoint for the region\nep, err := provider.GetEndpoint(\"load-balancer\", gophercloud.EndpointOpts{Region: region})\nif err != nil { return fmt.Errorf(\"octavia unavailable in %s: %w\", region, err) }","typeGuard":null,"tryCatchPattern":"// go\nif err != nil && strings.Contains(err.Error(), \"error building lb client\") {\n    klog.Errorf(\"ensure octavia endpoint exists in region %s\", region)\n}","preventionTips":["Deploy Octavia in every region used by kops","Keep service catalog type as 'load-balancer'","Refresh tokens before long operations"],"tags":["openstack","octavia","gophercloud","loadbalancer"],"backgroundTag":"openstack-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"}