{"record":{"id":"e77d470691969e12","repo":"kubernetes/kops","slug":"error-getting-cloud-instance-group-q-v-e77d47","errorCode":null,"errorMessage":"error getting cloud instance group %q: %v","messagePattern":"error getting cloud instance group %q: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/cloud.go","lineNumber":706,"sourceCode":"\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *openstackCloud) GetCloudGroups(cluster *kops.Cluster, instancegroups []*kops.InstanceGroup, warnUnmatched bool, nodes []v1.Node) (map[string]*cloudinstances.CloudInstanceGroup, error) {\n\treturn getCloudGroups(c, cluster, instancegroups, warnUnmatched, nodes)\n}\n\nfunc getCloudGroups(c OpenstackCloud, cluster *kops.Cluster, instancegroups []*kops.InstanceGroup, warnUnmatched bool, nodes []v1.Node) (map[string]*cloudinstances.CloudInstanceGroup, error) {\n\tnodeMap := cloudinstances.GetNodeMap(nodes, cluster)\n\tgroups := make(map[string]*cloudinstances.CloudInstanceGroup)\n\tfor _, ig := range instancegroups {\n\t\tvar err error\n\t\tgroups[ig.ObjectMeta.Name], err = osBuildCloudInstanceGroup(c, cluster, ig, nodeMap)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error getting cloud instance group %q: %v\", ig.ObjectMeta.Name, err)\n\t\t}\n\t}\n\treturn groups, nil\n}\n\nfunc (c *openstackCloud) GetCloudTags() map[string]string {\n\treturn c.tags\n}\n\nfunc (c *openstackCloud) UseLoadBalancerVIPACL() (bool, error) {\n\tif c.useVIPACL != nil {\n\t\treturn *c.useVIPACL, nil\n\t}\n\tuse, err := useLoadBalancerVIPACL(c)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tc.useVIPACL = &use","sourceCodeStart":688,"sourceCodeEnd":724,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/cloud.go#L688-L724","documentation":"Error returned while building CloudInstanceGroup objects for OpenStack during GetCloudInstanceGroups. For each kops InstanceGroup, osBuildCloudInstanceGroup reconciles cloud instances with cluster nodes; a failure is wrapped with the instance group's name.","triggerScenarios":"osBuildCloudInstanceGroup fails when listing group instances or matching instances to nodes in the nodeMap — e.g. Nova list failure or an instance missing expected metadata (k8s / KopsRole tags).","commonSituations":"Instance group references instances whose metadata was modified or stripped; nodes not yet registered so nodeMap lookups misalign; Nova API partial failure while enumerating servers.","solutions":["Check the inner error from osBuildCloudInstanceGroup for the root cause","Verify instance metadata keys 'k8s' and 'KopsRole' are intact on the servers","Re-run after nodes register if the cluster was just created","Confirm `openstack server list` shows all expected instances for the group"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for _, inst := range instances {\n    if inst.Metadata[\"k8s\"] == \"\" || inst.Metadata[\"KopsRole\"] == \"\" {\n        return fmt.Errorf(\"instance %s missing k8s/KopsRole metadata\", inst.ID)\n    }\n}","typeGuard":"func hasKopsMetadata(inst servers.Server) bool {\n    v, ok := inst.Metadata[\"k8s\"]; r, ok2 := inst.Metadata[\"KopsRole\"]\n    return ok && ok2 && v != \"\" && r != \"\"\n}","tryCatchPattern":"if err != nil {\n    return nil, fmt.Errorf(\"error getting cloud instance group %q: %v\", ig.Name, err) // check inner cause\n}","preventionTips":["Never manually strip instance metadata on kops-managed servers","Ensure nodes register before running group-dependent commands","Verify Nova list API health first"],"tags":["openstack","cloudinstancegroup","metadata"],"backgroundTag":"cloud-instance-group-mapping-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"}