diff --git a/upup/pkg/fi/cloudup/openstack/cloud.go b/upup/pkg/fi/cloudup/openstack/cloud.go index 50b524deea2e7..750e5e7047d06 100644 --- a/upup/pkg/fi/cloudup/openstack/cloud.go +++ b/upup/pkg/fi/cloudup/openstack/cloud.go @@ -386,6 +386,8 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec) (Openstac if err != nil { return nil, fmt.Errorf("error building nova client: %v", err) } + // 2.47 is the minimum version where the compute API /server/details returns flavor names + novaClient.Microversion = "2.47" glanceClient, err := os.NewImageServiceV2(provider, gophercloud.EndpointOpts{ Type: "image", diff --git a/upup/pkg/fi/cloudup/openstack/server_group.go b/upup/pkg/fi/cloudup/openstack/server_group.go index 5c4eb8e163d16..84fdab5796b03 100644 --- a/upup/pkg/fi/cloudup/openstack/server_group.go +++ b/upup/pkg/fi/cloudup/openstack/server_group.go @@ -137,10 +137,24 @@ func osBuildCloudInstanceGroup(c OpenstackCloud, cluster *kops.Cluster, ig *kops if generationName != observedName { status = cloudinstances.CloudInstanceStatusNeedsUpdate } - _, err = cg.NewCloudInstance(instanceId, status, nodeMap) + cm, err := cg.NewCloudInstance(instanceId, status, nodeMap) if err != nil { return nil, fmt.Errorf("error creating cloud instance group member: %v", err) } + + if server.Flavor["original_name"] != nil { + cm.MachineType = server.Flavor["original_name"].(string) + } + + ip, err := GetServerFixedIP(server, server.Metadata[TagKopsNetwork]) + if err != nil { + return nil, fmt.Errorf("error creating cloud instance group member: %v", err) + } + + cm.PrivateIP = ip + + cm.Roles = []string{server.Metadata["KopsRole"]} + } return cg, nil }