diff --git a/builder/amazon/common/ami_config.go b/builder/amazon/common/ami_config.go index de293731d..50e831c9d 100644 --- a/builder/amazon/common/ami_config.go +++ b/builder/amazon/common/ami_config.go @@ -8,12 +8,13 @@ import ( // AMIConfig is for common configuration related to creating AMIs. type AMIConfig struct { - AMIName string `mapstructure:"ami_name"` - AMIDescription string `mapstructure:"ami_description"` - AMIUsers []string `mapstructure:"ami_users"` - AMIGroups []string `mapstructure:"ami_groups"` - AMIProductCodes []string `mapstructure:"ami_product_codes"` - AMIRegions []string `mapstructure:"ami_regions"` + AMIName string `mapstructure:"ami_name"` + AMIDescription string `mapstructure:"ami_description"` + AMIUsers []string `mapstructure:"ami_users"` + AMIGroups []string `mapstructure:"ami_groups"` + AMIProductCodes []string `mapstructure:"ami_product_codes"` + AMIRegions []string `mapstructure:"ami_regions"` + AMITags map[string]string `mapstructure:"tags"` } func (c *AMIConfig) Prepare(t *packer.ConfigTemplate) []error { @@ -87,6 +88,27 @@ func (c *AMIConfig) Prepare(t *packer.ConfigTemplate) []error { c.AMIRegions = regions } + newTags := make(map[string]string) + for k, v := range c.AMITags { + k, err := t.Process(k, nil) + if err != nil { + errs = append(errs, + fmt.Errorf("Error processing tag key %s: %s", k, err)) + continue + } + + v, err := t.Process(v, nil) + if err != nil { + errs = append(errs, + fmt.Errorf("Error processing tag value '%s': %s", v, err)) + continue + } + + newTags[k] = v + } + + c.AMITags = newTags + if len(errs) > 0 { return errs } diff --git a/builder/amazon/ebs/builder.go b/builder/amazon/ebs/builder.go index 342553855..f7bdc48e7 100644 --- a/builder/amazon/ebs/builder.go +++ b/builder/amazon/ebs/builder.go @@ -6,7 +6,6 @@ package ebs import ( - "fmt" "github.com/mitchellh/goamz/ec2" "github.com/mitchellh/multistep" awscommon "github.com/mitchellh/packer/builder/amazon/common" @@ -25,9 +24,6 @@ type config struct { awscommon.BlockDevices `mapstructure:",squash"` awscommon.RunConfig `mapstructure:",squash"` - // Tags for the AMI - Tags map[string]string - tpl *packer.ConfigTemplate } @@ -54,28 +50,6 @@ func (b *Builder) Prepare(raws ...interface{}) error { errs = packer.MultiErrorAppend(errs, b.config.AMIConfig.Prepare(b.config.tpl)...) errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(b.config.tpl)...) - // Accumulate any errors - newTags := make(map[string]string) - for k, v := range b.config.Tags { - k, err = b.config.tpl.Process(k, nil) - if err != nil { - errs = packer.MultiErrorAppend(errs, - fmt.Errorf("Error processing tag key %s: %s", k, err)) - continue - } - - v, err = b.config.tpl.Process(v, nil) - if err != nil { - errs = packer.MultiErrorAppend(errs, - fmt.Errorf("Error processing tag value '%s': %s", v, err)) - continue - } - - newTags[k] = v - } - - b.config.Tags = newTags - if errs != nil && len(errs.Errors) > 0 { return errs } @@ -132,9 +106,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe &stepCreateAMI{}, &awscommon.StepAMIRegionCopy{ Regions: b.config.AMIRegions, - Tags: b.config.Tags, + Tags: b.config.AMITags, + }, + &awscommon.StepCreateTags{ + Tags: b.config.AMITags, }, - &awscommon.StepCreateTags{Tags: b.config.Tags}, &awscommon.StepModifyAMIAttributes{ Description: b.config.AMIDescription, Users: b.config.AMIUsers,