kubernetes/kops · error
error creating subnet: %v
Error message
error creating subnet: %v
What it means
createSubnet issues a Neutron subnet Create call inside a RetryWithBackoff(writeBackoff) loop. If subnets.Create(...).Extract() fails, the error is wrapped as "error creating subnet: %v". Because it is retried, this error indicates the create failed persistently across retries.
Source
Thrown at upup/pkg/fi/cloudup/openstack/subnet.go:91
return nil, err
} else if done {
return subnet, nil
} else {
return nil, wait.ErrWaitTimeout
}
}
func (c *openstackCloud) CreateSubnet(opt subnets.CreateOptsBuilder) (*subnets.Subnet, error) {
return createSubnet(c, opt)
}
func createSubnet(c OpenstackCloud, opt subnets.CreateOptsBuilder) (*subnets.Subnet, error) {
var s *subnets.Subnet
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
v, err := subnets.Create(context.TODO(), c.NetworkingClient(), opt).Extract()
if err != nil {
return false, fmt.Errorf("error creating subnet: %v", err)
}
s = v
return true, nil
})
if err != nil {
return s, err
} else if done {
return s, nil
} else {
return s, wait.ErrWaitTimeout
}
}
func (c *openstackCloud) DeleteSubnet(subnetID string) error {
return deleteSubnet(c, subnetID)
}
func deleteSubnet(c OpenstackCloud, subnetID string) error {View on GitHub (pinned to 4c8573c808)
Solutions
- Read the wrapped Neutron error: 409 => overlap/conflict, 403 => policy, 413/403 quota => raise limits
- Verify the requested CIDR does not overlap existing subnets and fits the network's CIDR range
- Check `openstack quota show` for subnet quotas
- Validate the CreateOpts (cidr, network_id, ip_version) before calling createSubnet
Defensive patterns
Strategy: validation
Validate before calling
// Validate CIDR before createSubnet
_, ipNet, err := net.ParseCIDR("10.0.1.0/24")
if err != nil {
log.Fatalf("invalid cidr: %v", err)
}
// check no overlap with existing subnets
for _, s := range existingSubnets {
if cidrOverlap(ipNet, mustParseCIDR(s.CIDR)) {
log.Fatalf("CIDR overlaps existing subnet %s", s.ID)
}
} Try / catch
sub, err := createSubnet(cloud, opts)
if err != nil {
if strings.Contains(err.Error(), "overlaps") || strings.Contains(err.Error(), "409") {
// adjust CIDR and retry
}
return err
} Prevention
- Plan non-overlapping CIDRs across subnets in the network
- Monitor subnet quotas (`openstack quota show`)
- Validate CreateOpts fields (network_id, ip_version, cidr) before submitting
- Check Neutron policy for subnet-create permission
When it happens
Trigger: Invalid CreateOpts (bad CIDR overlapping an existing subnet, CIDR outside the network's range, missing gateway/IP version fields), quota exceeded on subnets, or RBAC denial.
Common situations: Cluster spec CIDR overlapping an existing subnet in the VPC, project hit its subnet quota, malformed subnets.CreateOptsBuilder passed by the caller, or Neutron policy restricting subnet creation.
Related errors
- error listing subnets in network %q: %v
- error retrieving subnet with id %s: %v
- error creating network: %v
- error listing subnets: %v
- error extracting subnets from pages: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/28eefa09647fd378.
Report an issue: GitHub.