From 2f08aab378063175917f0075e922589a2b54ae1f Mon Sep 17 00:00:00 2001 From: Peter Rifel Date: Tue, 7 Jul 2020 23:32:17 -0500 Subject: [PATCH] Use "lt-" IDs for launch templates and add tagging support --- cloudmock/aws/mockec2/api.go | 6 ++- cloudmock/aws/mockec2/launch_templates.go | 54 +++++++++++++++-------- cloudmock/aws/mockec2/tags.go | 2 + 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/cloudmock/aws/mockec2/api.go b/cloudmock/aws/mockec2/api.go index 878f591ee72d5..7fc6c0e586b96 100644 --- a/cloudmock/aws/mockec2/api.go +++ b/cloudmock/aws/mockec2/api.go @@ -55,7 +55,8 @@ type MockEC2 struct { InternetGateways map[string]*ec2.InternetGateway - LaunchTemplates map[string]*ec2.ResponseLaunchTemplateData + launchTemplateNumber int + LaunchTemplates map[string]*launchTemplateInfo NatGateways map[string]*ec2.NatGateway @@ -98,6 +99,9 @@ func (m *MockEC2) All() map[string]interface{} { for id, o := range m.InternetGateways { all[id] = o } + for id, o := range m.LaunchTemplates { + all[id] = o + } for id, o := range m.NatGateways { all[id] = o } diff --git a/cloudmock/aws/mockec2/launch_templates.go b/cloudmock/aws/mockec2/launch_templates.go index ee2ac09fe5dd7..4538223e2e6ef 100644 --- a/cloudmock/aws/mockec2/launch_templates.go +++ b/cloudmock/aws/mockec2/launch_templates.go @@ -23,6 +23,11 @@ import ( "github.com/aws/aws-sdk-go/service/ec2" ) +type launchTemplateInfo struct { + data *ec2.ResponseLaunchTemplateData + name *string +} + // DescribeLaunchTemplates mocks the describing the launch templates func (m *MockEC2) DescribeLaunchTemplates(request *ec2.DescribeLaunchTemplatesInput) (*ec2.DescribeLaunchTemplatesOutput, error) { m.mutex.Lock() @@ -34,9 +39,9 @@ func (m *MockEC2) DescribeLaunchTemplates(request *ec2.DescribeLaunchTemplatesIn return o, nil } - for name := range m.LaunchTemplates { + for _, ltInfo := range m.LaunchTemplates { o.LaunchTemplates = append(o.LaunchTemplates, &ec2.LaunchTemplate{ - LaunchTemplateName: aws.String(name), + LaunchTemplateName: ltInfo.name, }) } @@ -54,16 +59,17 @@ func (m *MockEC2) DescribeLaunchTemplateVersions(request *ec2.DescribeLaunchTemp return o, nil } - lt, found := m.LaunchTemplates[aws.StringValue(request.LaunchTemplateName)] - if !found { - return o, nil + for id, ltInfo := range m.LaunchTemplates { + if aws.StringValue(ltInfo.name) != aws.StringValue(request.LaunchTemplateName) { + continue + } + o.LaunchTemplateVersions = append(o.LaunchTemplateVersions, &ec2.LaunchTemplateVersion{ + DefaultVersion: aws.Bool(true), + LaunchTemplateId: aws.String(id), + LaunchTemplateData: ltInfo.data, + LaunchTemplateName: request.LaunchTemplateName, + }) } - o.LaunchTemplateVersions = append(o.LaunchTemplateVersions, &ec2.LaunchTemplateVersion{ - DefaultVersion: aws.Bool(true), - LaunchTemplateData: lt, - LaunchTemplateName: request.LaunchTemplateName, - }) - return o, nil } @@ -72,11 +78,15 @@ func (m *MockEC2) CreateLaunchTemplate(request *ec2.CreateLaunchTemplateInput) ( m.mutex.Lock() defer m.mutex.Unlock() + m.launchTemplateNumber++ + n := m.launchTemplateNumber + id := fmt.Sprintf("lt-%d", n) + if m.LaunchTemplates == nil { - m.LaunchTemplates = make(map[string]*ec2.ResponseLaunchTemplateData) + m.LaunchTemplates = make(map[string]*launchTemplateInfo) } - if m.LaunchTemplates[aws.StringValue(request.LaunchTemplateName)] != nil { - return nil, fmt.Errorf("duplicate LaunchTemplateName %s", aws.StringValue(request.LaunchTemplateName)) + if m.LaunchTemplates[id] != nil { + return nil, fmt.Errorf("duplicate LaunchTemplateName %s", id) } resp := &ec2.ResponseLaunchTemplateData{ DisableApiTermination: request.LaunchTemplateData.DisableApiTermination, @@ -88,9 +98,10 @@ func (m *MockEC2) CreateLaunchTemplate(request *ec2.CreateLaunchTemplateInput) ( SecurityGroups: request.LaunchTemplateData.SecurityGroups, UserData: request.LaunchTemplateData.UserData, } - m.LaunchTemplates[aws.StringValue(request.LaunchTemplateName)] = resp - - // @GOD DAMN AWS request vs response .. fu@@@@@ .. so much typing!!#@#@# + m.LaunchTemplates[id] = &launchTemplateInfo{ + data: resp, + name: request.LaunchTemplateName, + } if request.LaunchTemplateData.Monitoring != nil { resp.Monitoring = &ec2.LaunchTemplatesMonitoring{Enabled: request.LaunchTemplateData.Monitoring.Enabled} @@ -169,6 +180,9 @@ func (m *MockEC2) CreateLaunchTemplate(request *ec2.CreateLaunchTemplateInput) ( }) } } + for _, tag := range tagSpecificationsToTags(request.TagSpecifications, ec2.ResourceTypeLaunchTemplate) { + m.addTag(id, tag) + } return &ec2.CreateLaunchTemplateOutput{}, nil } @@ -182,7 +196,11 @@ func (m *MockEC2) DeleteLaunchTemplate(request *ec2.DeleteLaunchTemplateInput) ( if m.LaunchTemplates == nil { return o, nil } - delete(m.LaunchTemplates, aws.StringValue(request.LaunchTemplateName)) + for id, lt := range m.LaunchTemplates { + if aws.StringValue(lt.name) == aws.StringValue(request.LaunchTemplateName) { + delete(m.LaunchTemplates, id) + } + } return o, nil } diff --git a/cloudmock/aws/mockec2/tags.go b/cloudmock/aws/mockec2/tags.go index c7cfc5ea86a14..74d5bcdce9a8e 100644 --- a/cloudmock/aws/mockec2/tags.go +++ b/cloudmock/aws/mockec2/tags.go @@ -71,6 +71,8 @@ func (m *MockEC2) addTag(resourceId string, tag *ec2.Tag) { resourceType = ec2.ResourceTypeRouteTable } else if strings.HasPrefix(resourceId, "eipalloc-") { resourceType = ec2.ResourceTypeElasticIp + } else if strings.HasPrefix(resourceId, "lt-") { + resourceType = ec2.ResourceTypeLaunchTemplate } else { klog.Fatalf("Unknown resource-type in create tags: %v", resourceId) }