diff --git a/builder/amazon/common/build_filter.go b/builder/amazon/common/build_filter.go index 8f621efc8..87600b5d0 100644 --- a/builder/amazon/common/build_filter.go +++ b/builder/amazon/common/build_filter.go @@ -5,12 +5,12 @@ import ( ) // Build a slice of EC2 (AMI/Subnet/VPC) filter options from the filters provided. -func buildEc2Filters(input map[*string]*string) []*ec2.Filter { +func buildEc2Filters(input map[string]string) []*ec2.Filter { var filters []*ec2.Filter for k, v := range input { filters = append(filters, &ec2.Filter{ - Name: k, - Values: []*string{v}, + Name: &k, + Values: []*string{&v}, }) } return filters diff --git a/builder/amazon/common/run_config.go b/builder/amazon/common/run_config.go index d42825032..2577d5216 100644 --- a/builder/amazon/common/run_config.go +++ b/builder/amazon/common/run_config.go @@ -18,11 +18,19 @@ import ( var reShutdownBehavior = regexp.MustCompile("^(stop|terminate)$") type AmiFilterOptions struct { - Filters map[*string]*string - Owners []*string + Filters map[string]string + Owners []string MostRecent bool `mapstructure:"most_recent"` } +func (d *AmiFilterOptions) GetOwners() []*string { + res := make([]*string, 0, len(d.Owners)) + for _, owner := range d.Owners { + res = append(res, &owner) + } + return res +} + func (d *AmiFilterOptions) Empty() bool { return len(d.Owners) == 0 && len(d.Filters) == 0 } @@ -32,7 +40,7 @@ func (d *AmiFilterOptions) NoOwner() bool { } type SubnetFilterOptions struct { - Filters map[*string]*string + Filters map[string]string MostFree bool `mapstructure:"most_free"` Random bool `mapstructure:"random"` } @@ -42,7 +50,7 @@ func (d *SubnetFilterOptions) Empty() bool { } type VpcFilterOptions struct { - Filters map[*string]*string + Filters map[string]string } func (d *VpcFilterOptions) Empty() bool { @@ -50,7 +58,7 @@ func (d *VpcFilterOptions) Empty() bool { } type SecurityGroupFilterOptions struct { - Filters map[*string]*string + Filters map[string]string } func (d *SecurityGroupFilterOptions) Empty() bool { diff --git a/builder/amazon/common/run_config_test.go b/builder/amazon/common/run_config_test.go index c876f4ce7..c01b31ebb 100644 --- a/builder/amazon/common/run_config_test.go +++ b/builder/amazon/common/run_config_test.go @@ -73,7 +73,7 @@ func TestRunConfigPrepare_SourceAmiFilterOwnersBlank(t *testing.T) { c := testConfigFilter() filter_key := "name" filter_value := "foo" - c.SourceAmiFilter = AmiFilterOptions{Filters: map[*string]*string{&filter_key: &filter_value}} + c.SourceAmiFilter = AmiFilterOptions{Filters: map[string]string{filter_key: filter_value}} if err := c.Prepare(nil); len(err) != 1 { t.Fatalf("Should error if Owners is not specified)") } @@ -84,7 +84,7 @@ func TestRunConfigPrepare_SourceAmiFilterGood(t *testing.T) { owner := "123" filter_key := "name" filter_value := "foo" - goodFilter := AmiFilterOptions{Owners: []*string{&owner}, Filters: map[*string]*string{&filter_key: &filter_value}} + goodFilter := AmiFilterOptions{Owners: []string{owner}, Filters: map[string]string{filter_key: filter_value}} c.SourceAmiFilter = goodFilter if err := c.Prepare(nil); len(err) != 0 { t.Fatalf("err: %s", err) diff --git a/builder/amazon/common/step_network_info.go b/builder/amazon/common/step_network_info.go index 0c9e9946e..89d63590d 100644 --- a/builder/amazon/common/step_network_info.go +++ b/builder/amazon/common/step_network_info.go @@ -7,7 +7,6 @@ import ( "math/rand" "sort" - "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/packer/helper/multistep" "github.com/hashicorp/packer/packer" @@ -53,7 +52,7 @@ func (s *StepNetworkInfo) Run(ctx context.Context, state multistep.StateBag) mul if s.VpcId == "" && !s.VpcFilter.Empty() { params := &ec2.DescribeVpcsInput{} params.Filters = buildEc2Filters(s.VpcFilter.Filters) - s.VpcFilter.Filters[aws.String("state")] = aws.String("available") + s.VpcFilter.Filters["state"] = "available" log.Printf("Using VPC Filters %v", params) @@ -79,13 +78,13 @@ func (s *StepNetworkInfo) Run(ctx context.Context, state multistep.StateBag) mul // Subnet if s.SubnetId == "" && !s.SubnetFilter.Empty() { params := &ec2.DescribeSubnetsInput{} - s.SubnetFilter.Filters[aws.String("state")] = aws.String("available") + s.SubnetFilter.Filters["state"] = "available" if s.VpcId != "" { - s.SubnetFilter.Filters[aws.String("vpc-id")] = &s.VpcId + s.SubnetFilter.Filters["vpc-id"] = s.VpcId } if s.AvailabilityZone != "" { - s.SubnetFilter.Filters[aws.String("availability-zone")] = &s.AvailabilityZone + s.SubnetFilter.Filters["availabilityZone"] = s.AvailabilityZone } params.Filters = buildEc2Filters(s.SubnetFilter.Filters) log.Printf("Using Subnet Filters %v", params) diff --git a/builder/amazon/common/step_security_group.go b/builder/amazon/common/step_security_group.go index 9b0b15829..a906848b8 100644 --- a/builder/amazon/common/step_security_group.go +++ b/builder/amazon/common/step_security_group.go @@ -51,7 +51,7 @@ func (s *StepSecurityGroup) Run(ctx context.Context, state multistep.StateBag) m params := &ec2.DescribeSecurityGroupsInput{} if vpcId != "" { - s.SecurityGroupFilter.Filters[aws.String("vpc-id")] = &vpcId + s.SecurityGroupFilter.Filters["vpc-id"] = vpcId } params.Filters = buildEc2Filters(s.SecurityGroupFilter.Filters) diff --git a/builder/amazon/common/step_source_ami_info.go b/builder/amazon/common/step_source_ami_info.go index c80f6a6cb..a3e4de37f 100644 --- a/builder/amazon/common/step_source_ami_info.go +++ b/builder/amazon/common/step_source_ami_info.go @@ -58,7 +58,7 @@ func (s *StepSourceAMIInfo) Run(ctx context.Context, state multistep.StateBag) m params.Filters = buildEc2Filters(s.AmiFilters.Filters) } if len(s.AmiFilters.Owners) > 0 { - params.Owners = s.AmiFilters.Owners + params.Owners = s.AmiFilters.GetOwners() } log.Printf("Using AMI Filters %v", params)