{"record":{"id":"69796fbbcdfdfadf","repo":"kubernetes/kops","slug":"error-creating-port-v","errorCode":null,"errorMessage":"error creating port: %v","messagePattern":"error creating port: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/port.go","lineNumber":38,"sourceCode":"\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports\"\n\t\"k8s.io/apimachinery/pkg/util/wait\"\n\t\"k8s.io/kops/util/pkg/vfs\"\n)\n\nfunc (c *openstackCloud) CreatePort(opt ports.CreateOptsBuilder) (*ports.Port, error) {\n\treturn createPort(c, opt)\n}\n\nfunc createPort(c OpenstackCloud, opt ports.CreateOptsBuilder) (*ports.Port, error) {\n\tvar p *ports.Port\n\n\tdone, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {\n\t\tport, err := ports.Create(context.TODO(), c.NetworkingClient(), opt).Extract()\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"error creating port: %v\", err)\n\t\t}\n\t\tp = port\n\t\treturn true, nil\n\t})\n\tif err != nil {\n\t\treturn p, err\n\t} else if done {\n\t\treturn p, nil\n\t} else {\n\t\treturn p, wait.ErrWaitTimeout\n\t}\n}\n\nfunc (c *openstackCloud) UpdatePort(id string, opt ports.UpdateOptsBuilder) (*ports.Port, error) {\n\treturn updatePort(c, id, opt)\n}\n\nfunc updatePort(c OpenstackCloud, id string, opt ports.UpdateOptsBuilder) (*ports.Port, error) {","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/port.go#L20-L56","documentation":"createPort (upup/pkg/fi/cloudup/openstack/port.go:38) calls the Neutron port-create API inside a retry loop (writeBackoff). If ports.Create(...).Extract() returns an error, it is wrapped with this message and retried until writeBackoff is exhausted.","triggerScenarios":"ports.Create with the given CreateOptsBuilder fails persistently — invalid network_id or fixed_ips, subnet exhaustion (no free IPs → 400), security-group ID does not exist, 409 conflict, or 401/403 credentials issues on every attempt.","commonSituations":"Provisioning instances/LBs on a subnet whose IP pool is exhausted; referencing a security group deleted out-of-band; using a network ID from another project; transient Neutron outages that outlast the backoff window.","solutions":["Read the wrapped Neutron error for the specific status; fix the referenced resource (network ID, subnet, security group) accordingly.","Free or expand the subnet IP pool if the failure is 'no more IP addresses available'.","Verify credentials/project scope allow port creation on the target network.","Re-run the operation; writeBackoff retries transient errors, so later attempts may succeed."],"exampleFix":"// before\nport, err := ports.Create(context.TODO(), c.NetworkingClient(), opt).Extract()\nif err != nil {\n    return false, fmt.Errorf(\"error creating port: %v\", err)\n}\n// after — pre-check subnet capacity to fail fast with a clearer message\nif err := ensureSubnetHasFreeIPs(c, opt); err != nil {\n    return false, err\n}\nport, err := ports.Create(context.TODO(), c.NetworkingClient(), opt).Extract()\nif err != nil {\n    return false, fmt.Errorf(\"error creating port: %v\", err)\n}","handlingStrategy":"validation","validationCode":"// Validate referenced resources before creating the port\nif networkID == \"\" || subnetID == \"\" {\n    return errors.New(\"network and subnet IDs are required to create a port\")\n}\nnetwork, err := getNetwork(c, networkID)\nif err != nil {\n    return fmt.Errorf(\"network %s not found/accessible: %w\", networkID, err)\n}\nsgs, _ := listSecurityGroups(c, securitygroups.ListOpts{ID: securityGroupID})\nif len(sgs) == 0 {\n    return fmt.Errorf(\"security group %s does not exist\", securityGroupID)\n}","typeGuard":null,"tryCatchPattern":"port, err := createPort(c, opts)\nif err != nil {\n    if strings.Contains(err.Error(), \"No more IP addresses\") || strings.Contains(err.Error(), \"400\") {\n        // subnet exhausted — expand the allocation pool, then retry\n    }\n    return fmt.Errorf(\"port creation failed: %w\", err)\n}","preventionTips":["Monitor subnet IP utilization and keep allocation pools large enough for the cluster.","Verify security groups and networks exist in the same project before port creation.","Confirm credentials have neutron:create_port permission.","Rely on the built-in writeBackoff retry for transient Neutron errors."],"tags":["openstack","neutron","port-creation","network"],"backgroundTag":"openstack-port-create-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"}