From 35ca8b01c1544fc72fa2cbd6702520c73ed1c606 Mon Sep 17 00:00:00 2001 From: Srikanth Date: Fri, 6 Sep 2019 00:01:45 +0530 Subject: [PATCH 1/6] Update DO objects to use tags --- pkg/model/domodel/droplets.go | 14 +++++++--- pkg/model/master_volumes.go | 9 +++++++ upup/pkg/fi/cloudup/do/cloud.go | 3 ++- upup/pkg/fi/cloudup/dotasks/droplet.go | 36 ++++++++++++++++---------- upup/pkg/fi/cloudup/dotasks/volume.go | 18 ++++++++++++- 5 files changed, 62 insertions(+), 18 deletions(-) diff --git a/pkg/model/domodel/droplets.go b/pkg/model/domodel/droplets.go index 7cf9c76336..23c5def128 100644 --- a/pkg/model/domodel/droplets.go +++ b/pkg/model/domodel/droplets.go @@ -18,7 +18,7 @@ package domodel import ( "strings" - + "strconv" "k8s.io/kops/pkg/model" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/dotasks" @@ -45,7 +45,8 @@ func (d *DropletBuilder) Build(c *fi.ModelBuilderContext) error { // replace "." with "-" since DO API does not accept "." clusterTag := "KubernetesCluster:" + strings.Replace(d.ClusterName(), ".", "-", -1) - + + indexCount := 0 // In the future, DigitalOcean will use Machine API to manage groups, // for now create d.InstanceGroups.Spec.MinSize amount of droplets for _, ig := range d.InstanceGroups { @@ -61,8 +62,15 @@ func (d *DropletBuilder) Build(c *fi.ModelBuilderContext) error { droplet.Size = fi.String(ig.Spec.MachineType) droplet.Image = fi.String(ig.Spec.Image) droplet.SSHKey = fi.String(sshKeyFingerPrint) - droplet.Tags = []string{clusterTag} + if ig.IsMaster() { + indexCount++ + clusterTagIndex := "K8S-INDEX:" + strconv.Itoa(indexCount) + droplet.Tags = []string{clusterTag, clusterTagIndex} + } else { + droplet.Tags = []string{clusterTag} + } + userData, err := d.BootstrapScript.ResourceNodeUp(ig, d.Cluster) if err != nil { return err diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index dc9f0c225b..41175cd55f 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -31,6 +31,7 @@ import ( "k8s.io/kops/upup/pkg/fi/cloudup/awsup" "k8s.io/kops/upup/pkg/fi/cloudup/dotasks" "k8s.io/kops/upup/pkg/fi/cloudup/gce" + "k8s.io/kops/upup/pkg/fi/cloudup/do" "k8s.io/kops/upup/pkg/fi/cloudup/gcetasks" "k8s.io/kops/upup/pkg/fi/cloudup/openstack" "k8s.io/kops/upup/pkg/fi/cloudup/openstacktasks" @@ -184,11 +185,19 @@ func (b *MasterVolumeBuilder) addDOVolume(c *fi.ModelBuilderContext, name string name = name[:64] } + tags := make(map[string]string) + tags[do.TagNameEtcdClusterPrefix+etcd.Name] = gce.SafeClusterName(m.Name) + + // We always add an owned tags (these can't be shared) + tags[do.TagKubernetesClusterNamePrefix] = gce.SafeClusterName(b.Cluster.ObjectMeta.Name) + + t := &dotasks.Volume{ Name: s(name), Lifecycle: b.Lifecycle, SizeGB: fi.Int64(int64(volumeSize)), Region: s(zone), + Tags: tags, } c.AddTask(t) diff --git a/upup/pkg/fi/cloudup/do/cloud.go b/upup/pkg/fi/cloudup/do/cloud.go index c86f945781..3336340891 100644 --- a/upup/pkg/fi/cloudup/do/cloud.go +++ b/upup/pkg/fi/cloudup/do/cloud.go @@ -21,8 +21,9 @@ import ( "k8s.io/kops/upup/pkg/fi" ) -const TagNameEtcdClusterPrefix = "k8s.io/etcd/" +const TagNameEtcdClusterPrefix = "etcdCluster-" const TagNameRolePrefix = "k8s.io/role/" +const TagKubernetesClusterNamePrefix = "KubernetesCluster" func NewDOCloud(region string) (fi.Cloud, error) { return digitalocean.NewCloud(region) diff --git a/upup/pkg/fi/cloudup/dotasks/droplet.go b/upup/pkg/fi/cloudup/dotasks/droplet.go index 78a2daf064..27cccec291 100644 --- a/upup/pkg/fi/cloudup/dotasks/droplet.go +++ b/upup/pkg/fi/cloudup/dotasks/droplet.go @@ -19,9 +19,10 @@ package dotasks import ( "context" "errors" - + //"strconv" "github.com/digitalocean/godo" + "k8s.io/klog" "k8s.io/kops/pkg/resources/digitalocean" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/do" @@ -142,21 +143,30 @@ func (_ *Droplet) RenderDO(t *do.DOAPITarget, a, e, changes *Droplet) error { newDropletCount = expectedCount - actualCount } - var dropletNames []string + // var dropletTags []string + // indexCount := 0 for i := 0; i < newDropletCount; i++ { - dropletNames = append(dropletNames, fi.StringValue(e.Name)) + // indexCount++ + // clusterTagIndex := "k8s-index:" + strconv.Itoa(indexCount) + // dropletTags = append(e.Tags, clusterTagIndex) + + _, _, err = t.Cloud.Droplets().Create(context.TODO(), &godo.DropletCreateRequest{ + Name: fi.StringValue(e.Name), + Region: fi.StringValue(e.Region), + Size: fi.StringValue(e.Size), + Image: godo.DropletCreateImage{Slug: fi.StringValue(e.Image)}, + PrivateNetworking: true, + Tags: e.Tags, + UserData: userData, + SSHKeys: []godo.DropletCreateSSHKey{{Fingerprint: fi.StringValue(e.SSHKey)}}, + }) + + if err != nil { + klog.Errorf("Error creating droplet with Name=%s", fi.StringValue(e.Name)) + return err + } } - _, _, err = t.Cloud.Droplets().CreateMultiple(context.TODO(), &godo.DropletMultiCreateRequest{ - Names: dropletNames, - Region: fi.StringValue(e.Region), - Size: fi.StringValue(e.Size), - Image: godo.DropletCreateImage{Slug: fi.StringValue(e.Image)}, - PrivateNetworking: true, - Tags: e.Tags, - UserData: userData, - SSHKeys: []godo.DropletCreateSSHKey{{Fingerprint: fi.StringValue(e.SSHKey)}}, - }) return err } diff --git a/upup/pkg/fi/cloudup/dotasks/volume.go b/upup/pkg/fi/cloudup/dotasks/volume.go index bce5857693..7df03a7a36 100644 --- a/upup/pkg/fi/cloudup/dotasks/volume.go +++ b/upup/pkg/fi/cloudup/dotasks/volume.go @@ -18,9 +18,10 @@ package dotasks import ( "context" - + "strings" "github.com/digitalocean/godo" + "k8s.io/klog" "k8s.io/kops/pkg/resources/digitalocean" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/do" @@ -35,6 +36,7 @@ type Volume struct { SizeGB *int64 Region *string + Tags map[string]string } var _ fi.CompareWithID = &Volume{} @@ -108,12 +110,26 @@ func (_ *Volume) RenderDO(t *do.DOAPITarget, a, e, changes *Volume) error { return nil } + tagArray := []string{} + + klog.V(2).Info("Looping DO tag arrays") + for k, v := range e.Tags { + s := []string{k, v}; + + // DO tags don't accept =. Separate the key and value with an ":" + strJoin := strings.Join(s, ":") + klog.V(2).Infof("DO - Join the volume tag - %s", strJoin) + tagArray = append(tagArray, strJoin) + } + volService := t.Cloud.Volumes() _, _, err := volService.CreateVolume(context.TODO(), &godo.VolumeCreateRequest{ Name: fi.StringValue(e.Name), Region: fi.StringValue(e.Region), SizeGigaBytes: fi.Int64Value(e.SizeGB), + Tags: tagArray, }) + return err } From 84da7d00efad513e94237a4331558ccb46c58e62 Mon Sep 17 00:00:00 2001 From: Srikanth Date: Thu, 12 Sep 2019 00:27:12 +0530 Subject: [PATCH 2/6] Add tags for droplets and volumes --- pkg/model/components/etcdmanager/model.go | 8 +++++--- pkg/model/domodel/droplets.go | 15 ++++++++------- pkg/model/master_volumes.go | 8 ++++---- upup/pkg/fi/cloudup/do/cloud.go | 1 + upup/pkg/fi/cloudup/dotasks/droplet.go | 8 +------- upup/pkg/fi/cloudup/dotasks/volume.go | 16 ++++++++-------- 6 files changed, 27 insertions(+), 29 deletions(-) diff --git a/pkg/model/components/etcdmanager/model.go b/pkg/model/components/etcdmanager/model.go index daac407571..1591de16b5 100644 --- a/pkg/model/components/etcdmanager/model.go +++ b/pkg/model/components/etcdmanager/model.go @@ -393,10 +393,12 @@ func (b *EtcdManagerBuilder) buildPod(etcdCluster *kops.EtcdClusterSpec) (*v1.Po case kops.CloudProviderDO: config.VolumeProvider = "do" + // DO does not support . in tags / names + safeClusterName := strings.Replace(b.Cluster.Name, ".", "-", -1) + config.VolumeTag = []string{ - fmt.Sprintf("kubernetes.io/cluster=%s", b.Cluster.Name), - do.TagNameEtcdClusterPrefix + etcdCluster.Name, - do.TagNameRolePrefix + "master=1", + fmt.Sprintf("%s=%s", do.TagKubernetesClusterNamePrefix, safeClusterName), + do.TagKubernetesClusterIndex, } config.VolumeNameTag = do.TagNameEtcdClusterPrefix + etcdCluster.Name diff --git a/pkg/model/domodel/droplets.go b/pkg/model/domodel/droplets.go index 23c5def128..578af74909 100644 --- a/pkg/model/domodel/droplets.go +++ b/pkg/model/domodel/droplets.go @@ -17,11 +17,12 @@ limitations under the License. package domodel import ( - "strings" - "strconv" "k8s.io/kops/pkg/model" "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/upup/pkg/fi/cloudup/do" "k8s.io/kops/upup/pkg/fi/cloudup/dotasks" + "strconv" + "strings" ) // DropletBuilder configures droplets for the cluster @@ -44,8 +45,8 @@ func (d *DropletBuilder) Build(c *fi.ModelBuilderContext) error { sshKeyFingerPrint := splitSSHKeyName[len(splitSSHKeyName)-1] // replace "." with "-" since DO API does not accept "." - clusterTag := "KubernetesCluster:" + strings.Replace(d.ClusterName(), ".", "-", -1) - + clusterTag := do.TagKubernetesClusterNamePrefix + ":" + strings.Replace(d.ClusterName(), ".", "-", -1) + indexCount := 0 // In the future, DigitalOcean will use Machine API to manage groups, // for now create d.InstanceGroups.Spec.MinSize amount of droplets @@ -65,12 +66,12 @@ func (d *DropletBuilder) Build(c *fi.ModelBuilderContext) error { if ig.IsMaster() { indexCount++ - clusterTagIndex := "K8S-INDEX:" + strconv.Itoa(indexCount) - droplet.Tags = []string{clusterTag, clusterTagIndex} + clusterTagIndex := do.TagKubernetesClusterIndex + ":" + strconv.Itoa(indexCount) + droplet.Tags = []string{clusterTag, clusterTagIndex} } else { droplet.Tags = []string{clusterTag} } - + userData, err := d.BootstrapScript.ResourceNodeUp(ig, d.Cluster) if err != nil { return err diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index 41175cd55f..93c63115f2 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -29,9 +29,9 @@ import ( "k8s.io/kops/upup/pkg/fi/cloudup/aliup" "k8s.io/kops/upup/pkg/fi/cloudup/awstasks" "k8s.io/kops/upup/pkg/fi/cloudup/awsup" + "k8s.io/kops/upup/pkg/fi/cloudup/do" "k8s.io/kops/upup/pkg/fi/cloudup/dotasks" "k8s.io/kops/upup/pkg/fi/cloudup/gce" - "k8s.io/kops/upup/pkg/fi/cloudup/do" "k8s.io/kops/upup/pkg/fi/cloudup/gcetasks" "k8s.io/kops/upup/pkg/fi/cloudup/openstack" "k8s.io/kops/upup/pkg/fi/cloudup/openstacktasks" @@ -187,17 +187,17 @@ func (b *MasterVolumeBuilder) addDOVolume(c *fi.ModelBuilderContext, name string tags := make(map[string]string) tags[do.TagNameEtcdClusterPrefix+etcd.Name] = gce.SafeClusterName(m.Name) + tags[do.TagKubernetesClusterIndex] = gce.SafeClusterName(m.Name) // We always add an owned tags (these can't be shared) tags[do.TagKubernetesClusterNamePrefix] = gce.SafeClusterName(b.Cluster.ObjectMeta.Name) - - + t := &dotasks.Volume{ Name: s(name), Lifecycle: b.Lifecycle, SizeGB: fi.Int64(int64(volumeSize)), Region: s(zone), - Tags: tags, + Tags: tags, } c.AddTask(t) diff --git a/upup/pkg/fi/cloudup/do/cloud.go b/upup/pkg/fi/cloudup/do/cloud.go index 3336340891..1e5d0741fd 100644 --- a/upup/pkg/fi/cloudup/do/cloud.go +++ b/upup/pkg/fi/cloudup/do/cloud.go @@ -21,6 +21,7 @@ import ( "k8s.io/kops/upup/pkg/fi" ) +const TagKubernetesClusterIndex = "k8s-index" const TagNameEtcdClusterPrefix = "etcdCluster-" const TagNameRolePrefix = "k8s.io/role/" const TagKubernetesClusterNamePrefix = "KubernetesCluster" diff --git a/upup/pkg/fi/cloudup/dotasks/droplet.go b/upup/pkg/fi/cloudup/dotasks/droplet.go index 27cccec291..e1390eb136 100644 --- a/upup/pkg/fi/cloudup/dotasks/droplet.go +++ b/upup/pkg/fi/cloudup/dotasks/droplet.go @@ -143,13 +143,7 @@ func (_ *Droplet) RenderDO(t *do.DOAPITarget, a, e, changes *Droplet) error { newDropletCount = expectedCount - actualCount } - // var dropletTags []string - // indexCount := 0 for i := 0; i < newDropletCount; i++ { - // indexCount++ - // clusterTagIndex := "k8s-index:" + strconv.Itoa(indexCount) - // dropletTags = append(e.Tags, clusterTagIndex) - _, _, err = t.Cloud.Droplets().Create(context.TODO(), &godo.DropletCreateRequest{ Name: fi.StringValue(e.Name), Region: fi.StringValue(e.Region), @@ -162,7 +156,7 @@ func (_ *Droplet) RenderDO(t *do.DOAPITarget, a, e, changes *Droplet) error { }) if err != nil { - klog.Errorf("Error creating droplet with Name=%s", fi.StringValue(e.Name)) + klog.Errorf("Error creating droplet with Name=%s", fi.StringValue(e.Name)) return err } } diff --git a/upup/pkg/fi/cloudup/dotasks/volume.go b/upup/pkg/fi/cloudup/dotasks/volume.go index 7df03a7a36..0c6d39a9c0 100644 --- a/upup/pkg/fi/cloudup/dotasks/volume.go +++ b/upup/pkg/fi/cloudup/dotasks/volume.go @@ -18,8 +18,8 @@ package dotasks import ( "context" - "strings" "github.com/digitalocean/godo" + "strings" "k8s.io/klog" "k8s.io/kops/pkg/resources/digitalocean" @@ -111,16 +111,16 @@ func (_ *Volume) RenderDO(t *do.DOAPITarget, a, e, changes *Volume) error { } tagArray := []string{} - + klog.V(2).Info("Looping DO tag arrays") for k, v := range e.Tags { - s := []string{k, v}; + s := []string{k, v} - // DO tags don't accept =. Separate the key and value with an ":" - strJoin := strings.Join(s, ":") - klog.V(2).Infof("DO - Join the volume tag - %s", strJoin) - tagArray = append(tagArray, strJoin) - } + // DO tags don't accept =. Separate the key and value with an ":" + strJoin := strings.Join(s, ":") + klog.V(2).Infof("DO - Join the volume tag - %s", strJoin) + tagArray = append(tagArray, strJoin) + } volService := t.Cloud.Volumes() _, _, err := volService.CreateVolume(context.TODO(), &godo.VolumeCreateRequest{ From a5cda6643c76fad527f5f9ae5a3164a457689c4c Mon Sep 17 00:00:00 2001 From: Srikanth Date: Thu, 12 Sep 2019 10:38:48 +0530 Subject: [PATCH 3/6] Address review comments --- pkg/model/components/etcdmanager/model.go | 2 +- pkg/model/domodel/droplets.go | 12 ++++++------ pkg/model/master_volumes.go | 8 ++++---- upup/pkg/fi/cloudup/do/cloud.go | 7 +++++++ upup/pkg/fi/cloudup/dotasks/droplet.go | 1 - upup/pkg/fi/cloudup/dotasks/volume.go | 10 +++------- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/pkg/model/components/etcdmanager/model.go b/pkg/model/components/etcdmanager/model.go index 1591de16b5..4e18ee7902 100644 --- a/pkg/model/components/etcdmanager/model.go +++ b/pkg/model/components/etcdmanager/model.go @@ -394,7 +394,7 @@ func (b *EtcdManagerBuilder) buildPod(etcdCluster *kops.EtcdClusterSpec) (*v1.Po config.VolumeProvider = "do" // DO does not support . in tags / names - safeClusterName := strings.Replace(b.Cluster.Name, ".", "-", -1) + safeClusterName := do.SafeDOClusterName(b.Cluster.Name) config.VolumeTag = []string{ fmt.Sprintf("%s=%s", do.TagKubernetesClusterNamePrefix, safeClusterName), diff --git a/pkg/model/domodel/droplets.go b/pkg/model/domodel/droplets.go index 578af74909..d659220e05 100644 --- a/pkg/model/domodel/droplets.go +++ b/pkg/model/domodel/droplets.go @@ -47,7 +47,7 @@ func (d *DropletBuilder) Build(c *fi.ModelBuilderContext) error { // replace "." with "-" since DO API does not accept "." clusterTag := do.TagKubernetesClusterNamePrefix + ":" + strings.Replace(d.ClusterName(), ".", "-", -1) - indexCount := 0 + masterIndexCount := 0 // In the future, DigitalOcean will use Machine API to manage groups, // for now create d.InstanceGroups.Spec.MinSize amount of droplets for _, ig := range d.InstanceGroups { @@ -64,12 +64,12 @@ func (d *DropletBuilder) Build(c *fi.ModelBuilderContext) error { droplet.Image = fi.String(ig.Spec.Image) droplet.SSHKey = fi.String(sshKeyFingerPrint) + droplet.Tags = []string{clusterTag} + if ig.IsMaster() { - indexCount++ - clusterTagIndex := do.TagKubernetesClusterIndex + ":" + strconv.Itoa(indexCount) - droplet.Tags = []string{clusterTag, clusterTagIndex} - } else { - droplet.Tags = []string{clusterTag} + masterIndexCount++ + clusterTagIndex := do.TagKubernetesClusterIndex + ":" + strconv.Itoa(masterIndexCount) + droplet.Tags = append(droplet.Tags, clusterTagIndex) } userData, err := d.BootstrapScript.ResourceNodeUp(ig, d.Cluster) diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index 93c63115f2..d2563e7469 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -178,7 +178,7 @@ func (b *MasterVolumeBuilder) addAWSVolume(c *fi.ModelBuilderContext, name strin func (b *MasterVolumeBuilder) addDOVolume(c *fi.ModelBuilderContext, name string, volumeSize int32, zone string, etcd *kops.EtcdClusterSpec, m *kops.EtcdMemberSpec, allMembers []string) { // required that names start with a lower case and only contains letters, numbers and hyphens - name = "kops-" + strings.Replace(name, ".", "-", -1) + name = "kops-" + do.SafeDOClusterName(name) // DO has a 64 character limit for volume names if len(name) >= 64 { @@ -186,11 +186,11 @@ func (b *MasterVolumeBuilder) addDOVolume(c *fi.ModelBuilderContext, name string } tags := make(map[string]string) - tags[do.TagNameEtcdClusterPrefix+etcd.Name] = gce.SafeClusterName(m.Name) - tags[do.TagKubernetesClusterIndex] = gce.SafeClusterName(m.Name) + tags[do.TagNameEtcdClusterPrefix+etcd.Name] = do.SafeDOClusterName(m.Name) + tags[do.TagKubernetesClusterIndex] = do.SafeDOClusterName(m.Name) // We always add an owned tags (these can't be shared) - tags[do.TagKubernetesClusterNamePrefix] = gce.SafeClusterName(b.Cluster.ObjectMeta.Name) + tags[do.TagKubernetesClusterNamePrefix] = do.SafeDOClusterName(b.Cluster.ObjectMeta.Name) t := &dotasks.Volume{ Name: s(name), diff --git a/upup/pkg/fi/cloudup/do/cloud.go b/upup/pkg/fi/cloudup/do/cloud.go index 1e5d0741fd..2f79839d73 100644 --- a/upup/pkg/fi/cloudup/do/cloud.go +++ b/upup/pkg/fi/cloudup/do/cloud.go @@ -19,6 +19,7 @@ package do import ( "k8s.io/kops/pkg/resources/digitalocean" "k8s.io/kops/upup/pkg/fi" + "strings" ) const TagKubernetesClusterIndex = "k8s-index" @@ -26,6 +27,12 @@ const TagNameEtcdClusterPrefix = "etcdCluster-" const TagNameRolePrefix = "k8s.io/role/" const TagKubernetesClusterNamePrefix = "KubernetesCluster" +func SafeDOClusterName(clusterName string) string { + // GCE does not support . in tags / names + safeClusterName := strings.ReplaceAll(clusterName, ".", "-") + return safeClusterName +} + func NewDOCloud(region string) (fi.Cloud, error) { return digitalocean.NewCloud(region) } diff --git a/upup/pkg/fi/cloudup/dotasks/droplet.go b/upup/pkg/fi/cloudup/dotasks/droplet.go index e1390eb136..cfb5be1f37 100644 --- a/upup/pkg/fi/cloudup/dotasks/droplet.go +++ b/upup/pkg/fi/cloudup/dotasks/droplet.go @@ -19,7 +19,6 @@ package dotasks import ( "context" "errors" - //"strconv" "github.com/digitalocean/godo" "k8s.io/klog" diff --git a/upup/pkg/fi/cloudup/dotasks/volume.go b/upup/pkg/fi/cloudup/dotasks/volume.go index 0c6d39a9c0..56fa59f69c 100644 --- a/upup/pkg/fi/cloudup/dotasks/volume.go +++ b/upup/pkg/fi/cloudup/dotasks/volume.go @@ -18,8 +18,8 @@ package dotasks import ( "context" + "fmt" "github.com/digitalocean/godo" - "strings" "k8s.io/klog" "k8s.io/kops/pkg/resources/digitalocean" @@ -112,14 +112,10 @@ func (_ *Volume) RenderDO(t *do.DOAPITarget, a, e, changes *Volume) error { tagArray := []string{} - klog.V(2).Info("Looping DO tag arrays") for k, v := range e.Tags { - s := []string{k, v} - // DO tags don't accept =. Separate the key and value with an ":" - strJoin := strings.Join(s, ":") - klog.V(2).Infof("DO - Join the volume tag - %s", strJoin) - tagArray = append(tagArray, strJoin) + klog.V(10).Infof("DO - Join the volume tag - %s", fmt.Sprintf("%s:%s", k, v)) + tagArray = append(tagArray, fmt.Sprintf("%s:%s", k, v)) } volService := t.Cloud.Volumes() From 88850e2151a0541534980c8673c1adeea616a6d5 Mon Sep 17 00:00:00 2001 From: Srikanth Date: Thu, 12 Sep 2019 15:31:55 +0530 Subject: [PATCH 4/6] Additional review comments addressed, also reverted back to Replace instead of ReplaceAll --- pkg/model/components/etcdmanager/model.go | 2 +- pkg/model/master_volumes.go | 8 ++++---- upup/pkg/fi/cloudup/do/cloud.go | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/model/components/etcdmanager/model.go b/pkg/model/components/etcdmanager/model.go index 4e18ee7902..9599618017 100644 --- a/pkg/model/components/etcdmanager/model.go +++ b/pkg/model/components/etcdmanager/model.go @@ -394,7 +394,7 @@ func (b *EtcdManagerBuilder) buildPod(etcdCluster *kops.EtcdClusterSpec) (*v1.Po config.VolumeProvider = "do" // DO does not support . in tags / names - safeClusterName := do.SafeDOClusterName(b.Cluster.Name) + safeClusterName := do.SafeClusterName(b.Cluster.Name) config.VolumeTag = []string{ fmt.Sprintf("%s=%s", do.TagKubernetesClusterNamePrefix, safeClusterName), diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index d2563e7469..b46a5623c0 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -178,7 +178,7 @@ func (b *MasterVolumeBuilder) addAWSVolume(c *fi.ModelBuilderContext, name strin func (b *MasterVolumeBuilder) addDOVolume(c *fi.ModelBuilderContext, name string, volumeSize int32, zone string, etcd *kops.EtcdClusterSpec, m *kops.EtcdMemberSpec, allMembers []string) { // required that names start with a lower case and only contains letters, numbers and hyphens - name = "kops-" + do.SafeDOClusterName(name) + name = "kops-" + do.SafeClusterName(name) // DO has a 64 character limit for volume names if len(name) >= 64 { @@ -186,11 +186,11 @@ func (b *MasterVolumeBuilder) addDOVolume(c *fi.ModelBuilderContext, name string } tags := make(map[string]string) - tags[do.TagNameEtcdClusterPrefix+etcd.Name] = do.SafeDOClusterName(m.Name) - tags[do.TagKubernetesClusterIndex] = do.SafeDOClusterName(m.Name) + tags[do.TagNameEtcdClusterPrefix+etcd.Name] = do.SafeClusterName(m.Name) + tags[do.TagKubernetesClusterIndex] = do.SafeClusterName(m.Name) // We always add an owned tags (these can't be shared) - tags[do.TagKubernetesClusterNamePrefix] = do.SafeDOClusterName(b.Cluster.ObjectMeta.Name) + tags[do.TagKubernetesClusterNamePrefix] = do.SafeClusterName(b.Cluster.ObjectMeta.Name) t := &dotasks.Volume{ Name: s(name), diff --git a/upup/pkg/fi/cloudup/do/cloud.go b/upup/pkg/fi/cloudup/do/cloud.go index 2f79839d73..f376536856 100644 --- a/upup/pkg/fi/cloudup/do/cloud.go +++ b/upup/pkg/fi/cloudup/do/cloud.go @@ -27,9 +27,9 @@ const TagNameEtcdClusterPrefix = "etcdCluster-" const TagNameRolePrefix = "k8s.io/role/" const TagKubernetesClusterNamePrefix = "KubernetesCluster" -func SafeDOClusterName(clusterName string) string { - // GCE does not support . in tags / names - safeClusterName := strings.ReplaceAll(clusterName, ".", "-") +func SafeClusterName(clusterName string) string { + // DO does not support . in tags / names + safeClusterName := strings.Replace(clusterName, ".", "-", -1) return safeClusterName } From ee183122aa6e3439e329ee95d1c386e1667219b3 Mon Sep 17 00:00:00 2001 From: Srikanth Date: Fri, 13 Sep 2019 12:42:46 +0530 Subject: [PATCH 5/6] Update bazel --- upup/pkg/fi/cloudup/dotasks/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/upup/pkg/fi/cloudup/dotasks/BUILD.bazel b/upup/pkg/fi/cloudup/dotasks/BUILD.bazel index 5321f94eb7..c492878367 100644 --- a/upup/pkg/fi/cloudup/dotasks/BUILD.bazel +++ b/upup/pkg/fi/cloudup/dotasks/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//upup/pkg/fi/cloudup/do:go_default_library", "//upup/pkg/fi/cloudup/terraform:go_default_library", "//vendor/github.com/digitalocean/godo:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) From 45e3e0d03bda27bb4c31ded9c28f8aa85c40e13e Mon Sep 17 00:00:00 2001 From: Srikanth Date: Fri, 13 Sep 2019 13:24:17 +0530 Subject: [PATCH 6/6] Update build.bazel --- pkg/model/BUILD.bazel | 1 + pkg/model/domodel/BUILD.bazel | 1 + 2 files changed, 2 insertions(+) diff --git a/pkg/model/BUILD.bazel b/pkg/model/BUILD.bazel index 9274fdcbc4..45ef748cd1 100644 --- a/pkg/model/BUILD.bazel +++ b/pkg/model/BUILD.bazel @@ -37,6 +37,7 @@ go_library( "//upup/pkg/fi/cloudup/aliup:go_default_library", "//upup/pkg/fi/cloudup/awstasks:go_default_library", "//upup/pkg/fi/cloudup/awsup:go_default_library", + "//upup/pkg/fi/cloudup/do:go_default_library", "//upup/pkg/fi/cloudup/dotasks:go_default_library", "//upup/pkg/fi/cloudup/gce:go_default_library", "//upup/pkg/fi/cloudup/gcetasks:go_default_library", diff --git a/pkg/model/domodel/BUILD.bazel b/pkg/model/domodel/BUILD.bazel index 3d0468f7a8..64cc31bf4e 100644 --- a/pkg/model/domodel/BUILD.bazel +++ b/pkg/model/domodel/BUILD.bazel @@ -11,6 +11,7 @@ go_library( deps = [ "//pkg/model:go_default_library", "//upup/pkg/fi:go_default_library", + "//upup/pkg/fi/cloudup/do:go_default_library", "//upup/pkg/fi/cloudup/dotasks:go_default_library", ], )