Skip to content

Commit

Permalink
feat: add kops k8s cluster name tag (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
saumas authored May 7, 2021
1 parent 2c77388 commit a0eadd3
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 21 deletions.
44 changes: 23 additions & 21 deletions internal/services/providers/eks/client/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,16 @@ func New(ctx context.Context, log logrus.FieldLogger, opts ...Opt) (Client, erro
}

const (
tagK8sCluster = "k8s.io/cluster/"
tagKubernetesCluster = "kubernetes.io/cluster/"
owned = "owned"
tagEKSK8sCluster = "k8s.io/cluster/"
tagEKSKubernetesCluster = "kubernetes.io/cluster/"
tagKOPSKubernetesCluster = "KubernetesCluster"
owned = "owned"
)

var (
clusterTags = []string{
tagK8sCluster,
tagKubernetesCluster,
eksClusterTags = []string{
tagEKSK8sCluster,
tagEKSKubernetesCluster,
}
)

Expand Down Expand Up @@ -177,30 +178,31 @@ func (c *client) GetClusterName(ctx context.Context) (*string, error) {
return nil, fmt.Errorf("no tags found for instance_id=%s", instanceID)
}

var clusterName string
clusterName := getClusterName(resp.Reservations[0].Instances[0].Tags)
if clusterName == "" {
return nil, fmt.Errorf("discovering cluster name: instance cluster tags not found for instance_id=%s", instanceID)
}

c.clusterName = &clusterName

return c.clusterName, nil
}

for _, tag := range resp.Reservations[0].Instances[0].Tags {
func getClusterName(tags []*ec2.Tag) string {
for _, tag := range tags {
if tag == nil || tag.Key == nil || tag.Value == nil {
continue
}
for _, clusterTag := range clusterTags {
for _, clusterTag := range eksClusterTags {
if strings.HasPrefix(*tag.Key, clusterTag) && *tag.Value == owned {
clusterName = strings.TrimPrefix(*tag.Key, clusterTag)
break
return strings.TrimPrefix(*tag.Key, clusterTag)
}
}
if clusterName != "" {
break
if *tag.Key == tagKOPSKubernetesCluster {
return *tag.Value
}
}

if clusterName == "" {
return nil, fmt.Errorf("discovering cluster name: instance cluster tags not found for instance_id=%s", instanceID)
}

c.clusterName = &clusterName

return c.clusterName, nil
return ""
}

func (c *client) GetInstancesByPrivateDNS(ctx context.Context, dns []string) ([]*ec2.Instance, error) {
Expand Down
103 changes: 103 additions & 0 deletions internal/services/providers/eks/client/aws_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package client

import (
"testing"

"github.com/aws/aws-sdk-go/service/ec2"
"github.com/stretchr/testify/require"
"k8s.io/utils/pointer"
)

func TestClusterNameFromTags(t *testing.T) {
randomTag1 := &ec2.Tag{
Key: pointer.StringPtr("random1"),
Value: pointer.StringPtr("value1"),
}
randomTag2 := &ec2.Tag{
Key: pointer.StringPtr("random2"),
Value: pointer.StringPtr("value2"),
}

tests := []struct {
name string
tags []*ec2.Tag
expectedClusterName string
}{
{
name: "eks tag 1",
tags: []*ec2.Tag{
{
Key: pointer.StringPtr(tagEKSK8sCluster + "eks-tag-1"),
Value: pointer.StringPtr(owned),
},
randomTag1,
randomTag2,
},
expectedClusterName: "eks-tag-1",
},
{
name: "eks tag 2",
tags: []*ec2.Tag{
{
Key: pointer.StringPtr(tagEKSK8sCluster + "eks-tag-2"),
Value: pointer.StringPtr(owned),
},
randomTag1,
randomTag2,
},
expectedClusterName: "eks-tag-2",
},
{
name: "kops tag",
tags: []*ec2.Tag{
{
Key: pointer.StringPtr(tagKOPSKubernetesCluster),
Value: pointer.StringPtr("kops-tag"),
},
randomTag1,
randomTag2,
},
expectedClusterName: "kops-tag",
},
{
name: "all tags",
tags: []*ec2.Tag{
{
Key: pointer.StringPtr(tagEKSK8sCluster + "all-tags"),
Value: pointer.StringPtr(owned),
},
{
Key: pointer.StringPtr(tagEKSK8sCluster + "all-tags"),
Value: pointer.StringPtr(owned),
},
{
Key: pointer.StringPtr(tagKOPSKubernetesCluster),
Value: pointer.StringPtr("all-tags"),
},
randomTag1,
randomTag2,
},
expectedClusterName: "all-tags",
},
{
name: "no tags cluster tags",
tags: []*ec2.Tag{
randomTag1,
randomTag2,
},
expectedClusterName: "",
},
{
name: "no tags at all",
tags: nil,
expectedClusterName: "",
},
}
for _, test := range tests {
test := test
t.Run(test.name, func(t *testing.T) {
got := getClusterName(test.tags)
require.Equal(t, test.expectedClusterName, got)
})
}
}

0 comments on commit a0eadd3

Please sign in to comment.