diff --git a/pkg/resources/aws/aws.go b/pkg/resources/aws/aws.go index a52d080dcf..750c1a00c4 100644 --- a/pkg/resources/aws/aws.go +++ b/pkg/resources/aws/aws.go @@ -606,6 +606,7 @@ func ListVolumes(cloud fi.Cloud, clusterName string) ([]*resources.Resource, err ID: id, Type: "volume", Deleter: DeleteVolume, + Shared: HasSharedTag(ec2.ResourceTypeVolume+":"+id, volume.Tags, clusterName), } var blocks []string diff --git a/pkg/resources/aws/aws_test.go b/pkg/resources/aws/aws_test.go index e6becb53d7..6195a6a5b5 100644 --- a/pkg/resources/aws/aws_test.go +++ b/pkg/resources/aws/aws_test.go @@ -141,3 +141,58 @@ func TestListRouteTables(t *testing.T) { } } } + +func TestSharedVolume(t *testing.T) { + cloud := awsup.BuildMockAWSCloud("us-east-1", "abc") + clusterName := "me.example.com" + ownershipTagKey := "kubernetes.io/cluster/" + clusterName + + c := &mockec2.MockEC2{} + cloud.MockEC2 = c + + sharedVolume, err := c.CreateVolume(&ec2.CreateVolumeInput{ + TagSpecifications: []*ec2.TagSpecification{ + { + Tags: []*ec2.Tag{ + { + Key: aws.String(ownershipTagKey), + Value: aws.String("shared"), + }, + }, + }, + }, + }) + if err != nil { + t.Fatalf("error creating volume: %v", err) + } + + ownedVolume, err := c.CreateVolume(&ec2.CreateVolumeInput{ + TagSpecifications: []*ec2.TagSpecification{ + { + Tags: []*ec2.Tag{ + { + Key: aws.String(ownershipTagKey), + Value: aws.String("owned"), + }, + }, + }, + }, + }) + if err != nil { + t.Fatalf("error creating volume: %v", err) + } + + resourceTrackers, err := ListVolumes(cloud, clusterName) + if err != nil { + t.Fatalf("error listing volumes: %v", err) + } + t.Log(len(resourceTrackers)) + for _, rt := range resourceTrackers { + if rt.ID == *sharedVolume.VolumeId && !rt.Shared { + t.Fatalf("expected Shared: true, got: %v", rt.Shared) + } + if rt.ID == *ownedVolume.VolumeId && rt.Shared { + t.Fatalf("expected Shared: false, got: %v", rt.Shared) + } + } +}