From 8e4f3b14585800840edd82f012e89291dc636f46 Mon Sep 17 00:00:00 2001 From: Ole Markus With Date: Sat, 22 Aug 2020 12:07:18 +0200 Subject: [PATCH 1/3] Tags are never used --- pkg/model/openstackmodel/servergroup.go | 3 -- pkg/model/openstackmodel/servergroup_test.go | 42 ------------------- .../pkg/fi/cloudup/openstacktasks/instance.go | 1 - 3 files changed, 46 deletions(-) diff --git a/pkg/model/openstackmodel/servergroup.go b/pkg/model/openstackmodel/servergroup.go index f530ea47eb..eec6733031 100644 --- a/pkg/model/openstackmodel/servergroup.go +++ b/pkg/model/openstackmodel/servergroup.go @@ -51,8 +51,6 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg * sshKeyName := strings.Replace(sshKeyNameFull, ":", "_", -1) - clusterTag := "KubernetesCluster:" + strings.Replace(b.ClusterName(), ".", "-", -1) - igMeta := make(map[string]string) cloudTags, err := b.KopsModelContext.CloudTagsForInstanceGroup(ig) if err != nil { @@ -149,7 +147,6 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg * Image: fi.String(ig.Spec.Image), SSHKey: fi.String(sshKeyName), ServerGroup: sg, - Tags: []string{clusterTag}, Role: fi.String(string(ig.Spec.Role)), Port: portTask, UserData: startupScript, diff --git a/pkg/model/openstackmodel/servergroup_test.go b/pkg/model/openstackmodel/servergroup_test.go index 050012c371..a5da4e0bb8 100644 --- a/pkg/model/openstackmodel/servergroup_test.go +++ b/pkg/model/openstackmodel/servergroup_test.go @@ -124,7 +124,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-master"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -171,7 +170,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -314,7 +312,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -361,7 +358,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -404,7 +400,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: bastionServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Bastion"), Port: bastionPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[2]), @@ -585,7 +580,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterAServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -633,7 +627,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterBServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -681,7 +674,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterCServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -728,7 +720,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeAServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -775,7 +766,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeBServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -822,7 +812,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeCServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1023,7 +1012,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterAServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1066,7 +1054,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterBServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1109,7 +1096,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterCServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1152,7 +1138,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeAServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1199,7 +1184,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeBServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1246,7 +1230,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeCServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1488,7 +1471,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterAServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1532,7 +1514,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterBServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1576,7 +1557,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterCServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1619,7 +1599,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeAServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1662,7 +1641,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeBServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1705,7 +1683,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeCServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -1850,7 +1827,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1890,7 +1866,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1930,7 +1905,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -1977,7 +1951,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeAPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -2016,7 +1989,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeBPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -2055,7 +2027,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodeCPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -2184,7 +2155,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-master"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -2227,7 +2197,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -2364,7 +2333,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: masterServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Master"), Port: masterPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -2407,7 +2375,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[1]), @@ -2450,7 +2417,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: bastionServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Bastion"), Port: bastionPort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[2]), @@ -2548,7 +2514,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -2646,7 +2611,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -2742,7 +2706,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -2835,7 +2798,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -2926,7 +2888,6 @@ func Test_ServerGroupModelBuilder(t *testing.T) { Image: s("image-node"), SSHKey: s("kubernetes.cluster-ba_d8_85_a0_5b_50_b0_01_e0_b2_b0_ae_5d_f6_7a_d1"), ServerGroup: nodeServerGroup, - Tags: []string{"KubernetesCluster:cluster"}, Role: s("Node"), Port: nodePort, UserData: mustUserdataForClusterInstance(cluster, instanceGroups[0]), @@ -3178,9 +3139,6 @@ func compareInstances(t *testing.T, actualTask fi.Task, expected *openstacktasks compareStrings(t, "AvailabilityZone", actual.AvailabilityZone, expected.AvailabilityZone) comparePorts(t, actual.Port, expected.Port) compareServerGroups(t, actual.ServerGroup, expected.ServerGroup) - if !reflect.DeepEqual(actual.Tags, expected.Tags) { - t.Errorf("Tags differ:\n%v\n\tinstead of\n%v", actual.Tags, expected.Tags) - } if !reflect.DeepEqual(actual.Metadata, expected.Metadata) { t.Errorf("Metadata differ:\n%v\n\tinstead of\n%v", actual.Metadata, expected.Metadata) } diff --git a/upup/pkg/fi/cloudup/openstacktasks/instance.go b/upup/pkg/fi/cloudup/openstacktasks/instance.go index 598420900d..002fa83d90 100644 --- a/upup/pkg/fi/cloudup/openstacktasks/instance.go +++ b/upup/pkg/fi/cloudup/openstacktasks/instance.go @@ -41,7 +41,6 @@ type Instance struct { Image *string SSHKey *string ServerGroup *ServerGroup - Tags []string Role *string UserData *fi.ResourceHolder Metadata map[string]string From 0ae88cde8a0d3385438c5f7390c40372698f7104 Mon Sep 17 00:00:00 2001 From: Ole Markus With Date: Sat, 22 Aug 2020 12:38:26 +0200 Subject: [PATCH 2/3] Support reconsiling server ports --- .../pkg/fi/cloudup/openstacktasks/instance.go | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/upup/pkg/fi/cloudup/openstacktasks/instance.go b/upup/pkg/fi/cloudup/openstacktasks/instance.go index 002fa83d90..41516a53c0 100644 --- a/upup/pkg/fi/cloudup/openstacktasks/instance.go +++ b/upup/pkg/fi/cloudup/openstacktasks/instance.go @@ -21,6 +21,7 @@ import ( "strconv" l3floatingip "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume" "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" @@ -114,8 +115,9 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) { if e == nil || e.Name == nil { return nil, nil } - client := c.Cloud.(openstack.OpenstackCloud).ComputeClient() - serverPage, err := servers.List(client, servers.ListOpts{ + cloud := c.Cloud.(openstack.OpenstackCloud) + computeClient := cloud.ComputeClient() + serverPage, err := servers.List(computeClient, servers.ListOpts{ Name: fmt.Sprintf("^%s$", fi.StringValue(e.Name)), }).AllPages() if err != nil { @@ -138,9 +140,40 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) { Name: fi.String(server.Name), SSHKey: fi.String(server.KeyName), Lifecycle: e.Lifecycle, + Metadata: server.Metadata, + Role: fi.String(server.Metadata["KopsRole"]), AvailabilityZone: e.AvailabilityZone, } + + ports, err := cloud.ListPorts(ports.ListOpts{ + DeviceID: server.ID, + }) + + if err != nil { + return nil, fmt.Errorf("failed to fetch port for instance %v: %v", server.ID, err) + } + + if len(ports) == 1 { + + porttask, err := newPortTaskFromCloud(cloud, e.Lifecycle, &ports[0], nil) + if err != nil { + return nil, fmt.Errorf("failed to fetch port for instance %v: %v", server.ID, err) + } + actual.Port = porttask + } else if len(ports) > 1 { + return nil, fmt.Errorf("found more than one port for instance %v") + } + + // Avoid flapping e.ID = actual.ID + actual.ForAPIServer = e.ForAPIServer + + // Immutable fields + actual.Flavor = e.Flavor + actual.Image = e.Image + actual.UserData = e.UserData + actual.Region = e.Region + actual.SSHKey = e.SSHKey return actual, nil } @@ -169,14 +202,17 @@ func (_ *Instance) ShouldCreate(a, e, changes *Instance) (bool, error) { if a == nil { return true, nil } + if changes.Port != nil { + return true, nil + } return false, nil } func (_ *Instance) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, changes *Instance) error { + cloud := t.Cloud.(openstack.OpenstackCloud) if a == nil { klog.V(2).Infof("Creating Instance with name: %q", fi.StringValue(e.Name)) - cloud := t.Cloud.(openstack.OpenstackCloud) imageName := fi.StringValue(e.Image) image, err := cloud.GetImage(imageName) @@ -247,7 +283,11 @@ func (_ *Instance) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, change klog.V(2).Infof("Creating a new Openstack instance, id=%s", v.ID) } - + if changes.Port != nil { + ports.Update(cloud.NetworkingClient(), fi.StringValue(changes.Port.ID), ports.UpdateOpts{ + DeviceID: e.ID, + }) + } return nil } From d2127d898104a082fea4245b5b3896c407ef9df2 Mon Sep 17 00:00:00 2001 From: Ole Markus With Date: Sat, 22 Aug 2020 16:15:38 +0200 Subject: [PATCH 3/3] Reconsile floating ips to instances --- .../fi/cloudup/openstacktasks/floatingip.go | 4 +- .../pkg/fi/cloudup/openstacktasks/instance.go | 45 ++++++++++++++++--- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/upup/pkg/fi/cloudup/openstacktasks/floatingip.go b/upup/pkg/fi/cloudup/openstacktasks/floatingip.go index 6600128c13..468f34f8be 100644 --- a/upup/pkg/fi/cloudup/openstacktasks/floatingip.go +++ b/upup/pkg/fi/cloudup/openstacktasks/floatingip.go @@ -153,7 +153,9 @@ func (e *FloatingIP) Find(c *fi.Context) (*FloatingIP, error) { e.ID = actual.ID return actual, nil } - fips, err := cloud.ListL3FloatingIPs(l3floatingip.ListOpts{}) + fips, err := cloud.ListL3FloatingIPs(l3floatingip.ListOpts{ + Description: fi.StringValue(e.Name), + }) if err != nil { return nil, fmt.Errorf("failed to list layer 3 floating ip's: %v", err) } diff --git a/upup/pkg/fi/cloudup/openstacktasks/instance.go b/upup/pkg/fi/cloudup/openstacktasks/instance.go index 41516a53c0..1dac20deb7 100644 --- a/upup/pkg/fi/cloudup/openstacktasks/instance.go +++ b/upup/pkg/fi/cloudup/openstacktasks/instance.go @@ -154,14 +154,36 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) { } if len(ports) == 1 { - - porttask, err := newPortTaskFromCloud(cloud, e.Lifecycle, &ports[0], nil) + port := ports[0] + porttask, err := newPortTaskFromCloud(cloud, e.Lifecycle, &port, nil) if err != nil { return nil, fmt.Errorf("failed to fetch port for instance %v: %v", server.ID, err) } actual.Port = porttask + } else if len(ports) > 1 { - return nil, fmt.Errorf("found more than one port for instance %v") + return nil, fmt.Errorf("found more than one port for instance %v", server.ID) + } + + if e.FloatingIP != nil && e.Port != nil { + fips, err := cloud.ListL3FloatingIPs(l3floatingip.ListOpts{ + PortID: fi.StringValue(e.Port.ID), + }) + if err != nil { + return nil, fmt.Errorf("failed to fetch floating ips for instance %v: %v", server.ID, err) + } + + if len(fips) == 1 { + fip := fips[0] + fipTask := &FloatingIP{ + ID: fi.String(fip.ID), + Name: fi.String(fip.Description), + } + + actual.FloatingIP = fipTask + } else if len(fips) > 1 { + return nil, fmt.Errorf("found more than one floating ip for instance %v", server.ID) + } } // Avoid flapping @@ -174,6 +196,7 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) { actual.UserData = e.UserData actual.Region = e.Region actual.SSHKey = e.SSHKey + actual.ServerGroup = e.ServerGroup return actual, nil } @@ -205,6 +228,9 @@ func (_ *Instance) ShouldCreate(a, e, changes *Instance) (bool, error) { if changes.Port != nil { return true, nil } + if changes.FloatingIP != nil { + return true, nil + } return false, nil } @@ -275,19 +301,26 @@ func (_ *Instance) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, change if e.FloatingIP != nil { err = associateFloatingIP(t, e) - } - if err != nil { - return err + if err != nil { + return err + } } klog.V(2).Infof("Creating a new Openstack instance, id=%s", v.ID) + return nil } if changes.Port != nil { ports.Update(cloud.NetworkingClient(), fi.StringValue(changes.Port.ID), ports.UpdateOpts{ DeviceID: e.ID, }) } + if changes.FloatingIP != nil { + err := associateFloatingIP(t, e) + if err != nil { + return err + } + } return nil }