{"record":{"id":"1538c7c05dfc5095","repo":"kubernetes/kops","slug":"could-not-establish-floating-network-id","errorCode":null,"errorMessage":"could not establish floating network id","messagePattern":"could not establish floating network id","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/cloud.go","lineNumber":478,"sourceCode":"\t}\n}\n\nfunc buildLoadBalancerClient(c *openstackCloud, spec *kops.OpenstackSpec, provider *gophercloud.ProviderClient, region string) error {\n\tif spec == nil || spec.Loadbalancer == nil {\n\t\tklog.V(2).Infof(\"Loadbalancer support for OpenStack disabled\")\n\t\treturn nil\n\t}\n\n\toctavia := false\n\tif spec.Router != nil {\n\t\tif spec.Loadbalancer.FloatingNetworkID == nil &&\n\t\t\tspec.Loadbalancer.FloatingNetwork != nil {\n\t\t\t// This field is derived\n\t\t\tlbNet, err := c.ListNetworks(networks.ListOpts{\n\t\t\t\tName: fi.ValueOf(spec.Loadbalancer.FloatingNetwork),\n\t\t\t})\n\t\t\tif err != nil || len(lbNet) != 1 {\n\t\t\t\treturn fmt.Errorf(\"could not establish floating network id\")\n\t\t\t}\n\t\t\tspec.Loadbalancer.FloatingNetworkID = new(lbNet[0].ID)\n\t\t}\n\n\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\")","sourceCodeStart":460,"sourceCodeEnd":496,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/cloud.go#L460-L496","documentation":"Thrown in setFloatingIPSupport when the cluster config names a floating network (spec.Loadbalancer.FloatingNetwork) but kOps cannot resolve that name to exactly one Neutron network, so FloatingNetworkID cannot be derived. The error is returned when the ListNetworks call fails OR the result count != 1.","triggerScenarios":"ListNetworks(networks.ListOpts{Name: spec.Loadbalancer.FloatingNetwork}) errors, returns zero networks (name typo/not found), or returns multiple networks with the same name.","commonSituations":"Floating network name misspelled in cluster spec; external network renamed after cluster creation; networks from other projects visible causing duplicate-name ambiguity; Neutron API outage/permission denial.","solutions":["Run 'openstack network list --name <FloatingNetwork>' and confirm exactly one network matches; correct the name in the cluster spec","Use the network ID instead of the name if names are ambiguous","Check the project has permission to list the external network","If err != nil, inspect the underlying Neutron error (auth/outage) before retrying"],"exampleFix":"// before\nspec.Loadbalancer.FloatingNetwork = fi.String(\"pub-net\") // typo or ambiguous\n// after\nspec.Loadbalancer.FloatingNetwork = fi.String(\"public-network-1\") // verified via 'openstack network list'","handlingStrategy":"validation","validationCode":"// pre-check the floating network name resolves uniquely\nnets, err := néutron.ListNetworks(networks.ListOpts{Name: floatingNetName})\nif err != nil || len(nets) != 1 { return fmt.Errorf(\"floating network %q must match exactly one network\", floatingNetName) }\nspec.Loadbalancer.FloatingNetworkID = nets[0].ID","typeGuard":null,"tryCatchPattern":"// go\nif err != nil && strings.Contains(err.Error(), \"could not establish floating network id\") {\n    return fmt.Errorf(\"check spec.Loadbalancer.FloatingNetwork name: %w\", err)\n}","preventionTips":["Use FloatingNetworkID (UUID) instead of names when possible","Validate names with 'openstack network list --name' before applying the spec","Avoid duplicate network names across projects"],"tags":["openstack","neutron","floating-ip","configuration"],"backgroundTag":"resource-name-resolution-failed","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"}