Skip to content

Commit

Permalink
Use "lt-" IDs for launch templates and add tagging support
Browse files Browse the repository at this point in the history
  • Loading branch information
rifelpet committed Jul 8, 2020
1 parent fc35f9d commit b1e7704
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 19 deletions.
6 changes: 5 additions & 1 deletion cloudmock/aws/mockec2/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
}
Expand Down
53 changes: 35 additions & 18 deletions cloudmock/aws/mockec2/launch_templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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,
})
}

Expand All @@ -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
}

Expand All @@ -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,
Expand All @@ -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}
Expand Down Expand Up @@ -169,6 +180,8 @@ func (m *MockEC2) CreateLaunchTemplate(request *ec2.CreateLaunchTemplateInput) (
})
}
}
m.addTags(id, tagSpecificationsToTags(request.TagSpecifications, ec2.ResourceTypeLaunchTemplate)...)

return &ec2.CreateLaunchTemplateOutput{}, nil
}

Expand All @@ -182,7 +195,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
}
2 changes: 2 additions & 0 deletions cloudmock/aws/mockec2/tags.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ func (m *MockEC2) addTags(resourceId string, tags ...*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)
}
Expand Down

0 comments on commit b1e7704

Please sign in to comment.