{"record":{"id":"76b70cb2fcc934a3","repo":"kubernetes/kops","slug":"getapiingressstatus-failed-to-list-floating-ip-s","errorCode":null,"errorMessage":"GetApiIngressStatus: Failed to list floating IP's: %v","messagePattern":"GetApiIngressStatus: Failed to list floating IP's: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/cloud.go","lineNumber":788,"sourceCode":"\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\n\treturn ingresses, nil\n}\n\nfunc getIPIngressStatus(c OpenstackCloud, cluster *kops.Cluster) (ingresses []fi.ApiIngressStatus, err error) {\n\tdone, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {\n\t\tinstances, err := c.ListInstances(servers.ListOpts{})\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"GetApiIngressStatus: Failed to list control plane nodes: %v\", err)","sourceCodeStart":770,"sourceCodeEnd":806,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/cloud.go#L770-L806","documentation":"Error returned from GetApiIngressStatus when listing L3 floating IPs bound to the load balancer's VIP port fails. kOps matches a floating IP whose PortID equals lb.VipPortID to report the API ingress IP.","triggerScenarios":"c.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: lb.VipPortID}) errors: Neutron floating-IP API unreachable, auth failure, or the l3 extension unavailable.","commonSituations":"Neutron outage or quota-service issues; Octavia LB exists but no floating IP was ever associated (empty result is fine, but API errors abort); network policy blocking the neutron client from the l3-floatingip endpoint.","solutions":["Check floating IP association: `openstack floating ip list --port <vipPortID>`","Verify Neutron API health and reachability","If no FIP is associated, create one: `openstack floating ip create --port <vipPortID> <network>`","Retry the operation once Neutron responds"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"fips, err := c.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: lb.VipPortID})\nif err != nil { return err }\nif len(fips) == 0 { /* associate a floating IP before expecting an ingress address */ }","typeGuard":null,"tryCatchPattern":"fips, err := c.ListL3FloatingIPs(l3floatingip.ListOpts{PortID: lb.VipPortID})\nif err != nil {\n    // recreate neutron client on auth errors, then retry; log wrapped cause if persistent\n}","preventionTips":["Associate a floating IP with the LB VIP port at cluster creation","Keep Neutron l3 extension enabled","Check `openstack floating ip list --port <vipPortID>` when ingress lookups fail"],"tags":["openstack","neutron","floating-ip","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"}