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