{"record":{"id":"b38fc3e5075b438e","repo":"kubernetes/kops","slug":"must-specify-a-unique-zone-for-instancegroup-q-us","errorCode":null,"errorMessage":"must specify a unique zone for instancegroup %q used by etcd %s/%s","messagePattern":"must specify a unique zone for instancegroup %q used by etcd (.+?)/(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/model/master_volumes.go","lineNumber":90,"sourceCode":"\n\t\t\tigName := fi.ValueOf(m.InstanceGroup)\n\t\t\tif igName == \"\" {\n\t\t\t\treturn fmt.Errorf(\"InstanceGroup not set on etcd %s/%s\", m.Name, etcd.Name)\n\t\t\t}\n\t\t\tig := b.FindInstanceGroup(igName)\n\t\t\tif ig == nil {\n\t\t\t\treturn fmt.Errorf(\"InstanceGroup not found (for etcd %s/%s): %q\", m.Name, etcd.Name, igName)\n\t\t\t}\n\n\t\t\tzones, err := model.FindZonesForInstanceGroup(b.Cluster, ig)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif len(zones) == 0 {\n\t\t\t\treturn fmt.Errorf(\"must specify a zone for instancegroup %q used by etcd %s/%s\", igName, m.Name, etcd.Name)\n\t\t\t}\n\t\t\tif len(zones) != 1 {\n\t\t\t\treturn fmt.Errorf(\"must specify a unique zone for instancegroup %q used by etcd %s/%s\", igName, m.Name, etcd.Name)\n\t\t\t}\n\t\t\tzone := zones[0]\n\n\t\t\tvolumeSize := fi.ValueOf(m.VolumeSize)\n\t\t\tif volumeSize == 0 {\n\t\t\t\tvolumeSize = DefaultEtcdVolumeSize\n\t\t\t}\n\n\t\t\tvar allMembers []string\n\t\t\tfor _, m := range etcd.Members {\n\t\t\t\tallMembers = append(allMembers, m.Name)\n\t\t\t}\n\t\t\tsort.Strings(allMembers)\n\n\t\t\tswitch b.Cluster.GetCloudProvider() {\n\t\t\tcase kops.CloudProviderAWS:\n\t\t\t\terr = b.addAWSVolume(c, name, volumeSize, zone, etcd, m, allMembers)\n\t\t\t\tif err != nil {","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/model/master_volumes.go#L72-L108","documentation":"Each etcd member's volume must live in exactly one zone, but FindZonesForInstanceGroup returned more than one zone for the instance group. This is a generic validation guard rejecting a multi-zone (spanning) IG for a single etcd member; the input at fault is the IG's subnet/zone configuration.","triggerScenarios":"Thrown at pkg/model/master_volumes.go:90 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restrict the etcd instance group to exactly one zone by assigning it a single subnet","Split etcd members across separate instance groups, one per zone, instead of one multi-zone IG","Verify cluster subnets do not accidentally map multiple zones to the same IG"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}