kubernetes/kops · error
no decernable storage availability zone could be mapped to c
Error message
no decernable storage availability zone could be mapped to compute availability zone %s
What it means
getStorageAZFromCompute (upup/pkg/fi/cloudup/openstack/availability_zone.go:75) tries to match a compute AZ name to a storage AZ of the same name; failing that, it falls back to the single storage AZ if exactly one exists. If the compute AZ name matches no Cinder AZ and the AZ list is empty or has more than one entry, it returns this error because the mapping is ambiguous.
Source
Thrown at upup/pkg/fi/cloudup/openstack/availability_zone.go:75
}
func getStorageAZFromCompute(c OpenstackCloud, computeAZ string) (*az.AvailabilityZone, error) {
// TODO: This is less than desirable, but openstack differs here
// Check to see if the availability zone exists.
azList, err := c.ListAvailabilityZones(c.BlockStorageClient())
if err != nil {
return nil, fmt.Errorf("Volume.RenderOpenstack: %v", err)
}
for _, az := range azList {
if az.ZoneName == computeAZ {
return &az, nil
}
}
// Determine if there is a meaningful storage AZ here
if len(azList) == 1 {
return &azList[0], nil
}
return nil, fmt.Errorf("no decernable storage availability zone could be mapped to compute availability zone %s", computeAZ)
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Align Cinder availability zone names with Nova zone names (configure the storage backend's AZ to match), so the exact-match branch succeeds
- Ensure only one storage AZ exists if you rely on the single-AZ fallback
- Use matching zone names in the kops cluster spec and the OpenStack deployment; remove stale zones from Cinder
- Patch/redeploy with a deployment where compute and storage AZs are explicitly mapped
Defensive patterns
Strategy: validation
Validate before calling
computeAZs := novaClientZones() // e.g. from az.List(compute)
storageAZs, err := c.ListAvailabilityZones(c.BlockStorageClient())
if err != nil {
return err
}
names := map[string]bool{}
for _, z := range storageAZs {
names[z.ZoneName] = true
}
if len(names) != 1 && !names[computeAZ] {
return fmt.Errorf("storage AZ for compute AZ %q unresolvable; storage AZs: %v", computeAZ, names)
}
return nil Prevention
- Keep Nova and Cinder availability zone names identical in the deployment
- Avoid running more than one storage AZ unless names align with compute zones
- Remove stale/deleted zones from Cinder
- Cross-check zone names in the kops cluster spec against `openstack availability zone list` outputs
When it happens
Trigger: GetStorageAZFromCompute called with a computeAZ string that (a) matches no ZoneName in the Cinder AZ list and (b) the list length != 1 — e.g. compute AZ 'zone-b' exists only in Nova, while Cinder exposes 'zone-b-storage' and 'zone-c', or the list is empty.
Common situations: Clouds where Nova and Cinder AZ names diverge (common with Ceph backends that use their own AZ naming); multi-AZ deployments with several storage zones; a zone deleted from Cinder but still present in Nova; typo in the cluster spec's zone name.
Related errors
- Volume.RenderOpenstack: %v
- error building nova client: %v
- failed to extract storage availability zones: %v
- error building cinder client: %w
- error building nova client: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/c5c0fec84ccc5bdb.
Report an issue: GitHub.