{"record":{"id":"c259e0f1f4657f2c","repo":"kubernetes/kops","slug":"getapiingressstatus-failed-to-list-openstack-load","errorCode":null,"errorMessage":"GetApiIngressStatus: Failed to list openstack loadbalancers: %v","messagePattern":"GetApiIngressStatus: Failed to list openstack loadbalancers: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/cloud.go","lineNumber":780,"sourceCode":"\t\treturn getLoadBalancerIngressStatus(c, cluster)\n\t} else {\n\t\treturn getIPIngressStatus(c, cluster)\n\t}\n}\n\nfunc getLoadBalancerIngressStatus(c OpenstackCloud, cluster *kops.Cluster) ([]fi.ApiIngressStatus, error) {\n\tvar ingresses []fi.ApiIngressStatus\n\tlbName := \"api.\" + cluster.Name\n\tif cluster.Spec.API.PublicName != \"\" {\n\t\tlbName = cluster.Spec.API.PublicName\n\t}\n\t// Note that this must match OpenstackModel lb name\n\tklog.V(2).Infof(\"Querying Openstack to find Loadbalancers for API (%q)\", cluster.Name)\n\tlbList, err := c.ListLBs(loadbalancers.ListOpts{\n\t\tName: lbName,\n\t})\n\tif err != nil {\n\t\treturn ingresses, fmt.Errorf(\"GetApiIngressStatus: Failed to list openstack loadbalancers: %v\", err)\n\t}\n\tfor _, lb := range lbList {\n\t\t// Must Find Floating IP related to this lb\n\t\tfips, err := c.ListL3FloatingIPs(l3floatingip.ListOpts{\n\t\t\tPortID: lb.VipPortID,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn ingresses, fmt.Errorf(\"GetApiIngressStatus: Failed to list floating IP's: %v\", err)\n\t\t}\n\t\tfor _, fip := range fips {\n\t\t\tif fip.PortID == lb.VipPortID {\n\t\t\t\tingresses = append(ingresses, fi.ApiIngressStatus{\n\t\t\t\t\tIP: fip.FloatingIP,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n","sourceCodeStart":762,"sourceCodeEnd":798,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/cloud.go#L762-L798","documentation":"Error returned from GetApiIngressStatus when listing OpenStack load balancers (filtered by the API lb name) fails. kOps uses this to report the API server ingress address; without the LB list it cannot determine the cluster endpoint.","triggerScenarios":"c.ListLBs(loadbalancers.ListOpts{Name: lbName}) returns an error: Octavia API unreachable, auth failure, or malformed ListOpts.","commonSituations":"Octavia outage during cluster validation; expired token mid-operation; catalog endpoint for load-balancer broken; DNS/network partition between kops and the OpenStack cloud.","solutions":["Check Octavia health: `openstack loadbalancer list --name <lbName>`","Re-authenticate and retry; vfs.RetryWithBackoff may already smooth transient faults on other paths","Verify the load-balancer endpoint in the Keystone service catalog","If the LB was deleted, re-create the API load balancer or re-run kops update cluster"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"lbPages, err := c.ListLBs(loadbalancers.ListOpts{Name: lbName})\n// ensure auth and octavia reachability before relying on ingress lookup\nif err != nil { return err }","typeGuard":null,"tryCatchPattern":"lbList, err := c.ListLBs(loadbalancers.ListOpts{Name: lbName})\nif err != nil {\n    // re-authenticate (recreate provider client) then retry; surface wrapped error if persistent\n}","preventionTips":["Refresh Keystone tokens before long-running validation","Monitor Octavia service health","Verify LB name matches the kOps model name (`<cluster>-api`)"],"tags":["openstack","octavia","loadbalancer","ingress"],"backgroundTag":"openstack-api-list-failed","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"}