diff --git a/builder/amazon/chroot/builder.go b/builder/amazon/chroot/builder.go index e898f4173..f220759d2 100644 --- a/builder/amazon/chroot/builder.go +++ b/builder/amazon/chroot/builder.go @@ -202,6 +202,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe Description: b.config.AMIDescription, Users: b.config.AMIUsers, Groups: b.config.AMIGroups, + Visibility: b.config.AMIVisibility, }, &awscommon.StepCreateTags{ Tags: b.config.AMITags, diff --git a/builder/amazon/common/ami_config.go b/builder/amazon/common/ami_config.go index 50e831c9d..2602c6cf6 100644 --- a/builder/amazon/common/ami_config.go +++ b/builder/amazon/common/ami_config.go @@ -15,6 +15,7 @@ type AMIConfig struct { AMIProductCodes []string `mapstructure:"ami_product_codes"` AMIRegions []string `mapstructure:"ami_regions"` AMITags map[string]string `mapstructure:"tags"` + AMIVisibility string `mapstructure:"ami_visibility"` } func (c *AMIConfig) Prepare(t *packer.ConfigTemplate) []error { @@ -29,6 +30,7 @@ func (c *AMIConfig) Prepare(t *packer.ConfigTemplate) []error { templates := map[string]*string{ "ami_name": &c.AMIName, "ami_description": &c.AMIDescription, + "ami_visibility": &c.AMIVisibility, } errs := make([]error, 0) diff --git a/builder/amazon/common/step_modify_ami_attributes.go b/builder/amazon/common/step_modify_ami_attributes.go index 533d4cfd9..1a31459d3 100644 --- a/builder/amazon/common/step_modify_ami_attributes.go +++ b/builder/amazon/common/step_modify_ami_attributes.go @@ -13,6 +13,7 @@ type StepModifyAMIAttributes struct { Groups []string ProductCodes []string Description string + Visibility string } func (s *StepModifyAMIAttributes) Run(state multistep.StateBag) multistep.StepAction { @@ -26,6 +27,7 @@ func (s *StepModifyAMIAttributes) Run(state multistep.StateBag) multistep.StepAc valid = valid || (s.Users != nil && len(s.Users) > 0) valid = valid || (s.Groups != nil && len(s.Groups) > 0) valid = valid || (s.ProductCodes != nil && len(s.ProductCodes) > 0) + valid = valid || s.Visibility == "public" if !valid { return multistep.ActionContinue @@ -59,6 +61,14 @@ func (s *StepModifyAMIAttributes) Run(state multistep.StateBag) multistep.StepAc } } + if s.Visibility == "public" { + group := make([]string, 1) + group[0] = "all" + options["public ami"] = &ec2.ModifyImageAttribute{ + AddGroups: group, + } + } + for region, ami := range amis { ui.Say(fmt.Sprintf("Modifying attributes on AMI (%s)...", ami)) regionconn := ec2.New(ec2conn.Auth, aws.Regions[region]) diff --git a/builder/amazon/ebs/builder.go b/builder/amazon/ebs/builder.go index 5d68f9470..b2193a020 100644 --- a/builder/amazon/ebs/builder.go +++ b/builder/amazon/ebs/builder.go @@ -119,6 +119,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe Description: b.config.AMIDescription, Users: b.config.AMIUsers, Groups: b.config.AMIGroups, + Visibility: b.config.AMIVisibility, }, &awscommon.StepCreateTags{ Tags: b.config.AMITags, diff --git a/builder/amazon/instance/builder.go b/builder/amazon/instance/builder.go index 455a7cd01..1c3bd2889 100644 --- a/builder/amazon/instance/builder.go +++ b/builder/amazon/instance/builder.go @@ -225,6 +225,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe Users: b.config.AMIUsers, Groups: b.config.AMIGroups, ProductCodes: b.config.AMIProductCodes, + Visibility: b.config.AMIVisibility, }, &awscommon.StepCreateTags{ Tags: b.config.AMITags,