1package ec2 2 3import ( 4 "fmt" 5 "strings" 6 7 awsec2 "github.com/aws/aws-sdk-go/service/ec2" 8 "github.com/genevieve/leftovers/common" 9) 10 11type tagsClient interface { 12 DescribeTags(*awsec2.DescribeTagsInput) (*awsec2.DescribeTagsOutput, error) 13 DeleteTags(*awsec2.DeleteTagsInput) (*awsec2.DeleteTagsOutput, error) 14} 15 16type Tags struct { 17 client tagsClient 18 logger logger 19} 20 21func NewTags(client tagsClient, logger logger) Tags { 22 return Tags{ 23 client: client, 24 logger: logger, 25 } 26} 27 28func (a Tags) List(filter string) ([]common.Deletable, error) { 29 output, err := a.client.DescribeTags(&awsec2.DescribeTagsInput{}) 30 if err != nil { 31 return nil, fmt.Errorf("Describe EC2 Tags: %s", err) 32 } 33 34 var resources []common.Deletable 35 for _, t := range output.Tags { 36 if *t.ResourceId != "" { 37 continue 38 } 39 40 r := NewTag(a.client, t.Key, t.Value, t.ResourceId) 41 42 if !strings.Contains(r.Name(), filter) { 43 continue 44 } 45 46 proceed := a.logger.PromptWithDetails(r.Type(), r.Name()) 47 if !proceed { 48 continue 49 } 50 51 resources = append(resources, r) 52 } 53 54 return resources, nil 55} 56 57func (a Tags) Type() string { 58 return "ec2-tag" 59} 60