From c5ed552e333061b4286ea929dbcc4ed8368fafad Mon Sep 17 00:00:00 2001 From: ktruong7 Date: Thu, 7 Nov 2013 11:13:52 -0500 Subject: [PATCH 1/5] Added a description field for the vmware builder that is written to the vm after a build --- builder/vmware/builder.go | 5 +++++ builder/vmware/builder_test.go | 28 ++++++++++++++++++++++++++++ builder/vmware/step_create_vmx.go | 2 ++ 3 files changed, 35 insertions(+) diff --git a/builder/vmware/builder.go b/builder/vmware/builder.go index f75014459..47bbcd124 100644 --- a/builder/vmware/builder.go +++ b/builder/vmware/builder.go @@ -54,6 +54,7 @@ type config struct { VMXTemplatePath string `mapstructure:"vmx_template_path"` VNCPortMin uint `mapstructure:"vnc_port_min"` VNCPortMax uint `mapstructure:"vnc_port_max"` + Description string `mapstructure:"description"` RawBootWait string `mapstructure:"boot_wait"` RawSingleISOUrl string `mapstructure:"iso_url"` @@ -138,6 +139,10 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { if b.config.ToolsUploadPath == "" { b.config.ToolsUploadPath = "{{ .Flavor }}.iso" } + + if b.config.Description == "" { + b.config.Description = "" + } // Errors templates := map[string]*string{ diff --git a/builder/vmware/builder_test.go b/builder/vmware/builder_test.go index 893970768..b13d114c7 100644 --- a/builder/vmware/builder_test.go +++ b/builder/vmware/builder_test.go @@ -744,6 +744,34 @@ func TestBuilderPrepare_VNCPort(t *testing.T) { } } +func TestBuilderPrepare_Description(t *testing.T) { + var b Builder + config := testConfig() + + // Test with no description field + config["description"] = "" + warns, err := b.Prepare(config) + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if err != nil { + t.Fatalf("err: %s", err) + } + if b.config.Description != "" { + t.Fatalf("Wrong value: %s", b.config.Description) + } + + // Test with a description field + config["description"] = "VM description" + warns, err = b.Prepare(config) + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if b.config.Description != "VM description" { + t.Fatalf("Wrong value: %s", b.config.Description) + } +} + func TestBuilderPrepare_VMXData(t *testing.T) { var b Builder config := testConfig() diff --git a/builder/vmware/step_create_vmx.go b/builder/vmware/step_create_vmx.go index e2f7c028a..9f873b46e 100644 --- a/builder/vmware/step_create_vmx.go +++ b/builder/vmware/step_create_vmx.go @@ -90,6 +90,8 @@ func (stepCreateVMX) Run(state multistep.StateBag) multistep.StepAction { // Set this so that no dialogs ever appear from Packer. vmxData["msg.autoAnswer"] = "true" + // prints the template description into the "notes" field on VMWare + vmxData["annotation"] = config.Description vmxPath := filepath.Join(config.OutputDir, config.VMName+".vmx") if err := WriteVMX(vmxPath, vmxData); err != nil { From 064e68fe802d6559f962b56a4b1ea9be119d32b3 Mon Sep 17 00:00:00 2001 From: ktruong7 Date: Thu, 7 Nov 2013 11:22:24 -0500 Subject: [PATCH 2/5] update --- builder/vmware/builder.go | 5 ----- builder/vmware/builder_test.go | 28 ---------------------------- builder/vmware/step_create_vmx.go | 2 -- 3 files changed, 35 deletions(-) diff --git a/builder/vmware/builder.go b/builder/vmware/builder.go index 47bbcd124..f75014459 100644 --- a/builder/vmware/builder.go +++ b/builder/vmware/builder.go @@ -54,7 +54,6 @@ type config struct { VMXTemplatePath string `mapstructure:"vmx_template_path"` VNCPortMin uint `mapstructure:"vnc_port_min"` VNCPortMax uint `mapstructure:"vnc_port_max"` - Description string `mapstructure:"description"` RawBootWait string `mapstructure:"boot_wait"` RawSingleISOUrl string `mapstructure:"iso_url"` @@ -139,10 +138,6 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { if b.config.ToolsUploadPath == "" { b.config.ToolsUploadPath = "{{ .Flavor }}.iso" } - - if b.config.Description == "" { - b.config.Description = "" - } // Errors templates := map[string]*string{ diff --git a/builder/vmware/builder_test.go b/builder/vmware/builder_test.go index b13d114c7..893970768 100644 --- a/builder/vmware/builder_test.go +++ b/builder/vmware/builder_test.go @@ -744,34 +744,6 @@ func TestBuilderPrepare_VNCPort(t *testing.T) { } } -func TestBuilderPrepare_Description(t *testing.T) { - var b Builder - config := testConfig() - - // Test with no description field - config["description"] = "" - warns, err := b.Prepare(config) - if len(warns) > 0 { - t.Fatalf("bad: %#v", warns) - } - if err != nil { - t.Fatalf("err: %s", err) - } - if b.config.Description != "" { - t.Fatalf("Wrong value: %s", b.config.Description) - } - - // Test with a description field - config["description"] = "VM description" - warns, err = b.Prepare(config) - if len(warns) > 0 { - t.Fatalf("bad: %#v", warns) - } - if b.config.Description != "VM description" { - t.Fatalf("Wrong value: %s", b.config.Description) - } -} - func TestBuilderPrepare_VMXData(t *testing.T) { var b Builder config := testConfig() diff --git a/builder/vmware/step_create_vmx.go b/builder/vmware/step_create_vmx.go index 9f873b46e..e2f7c028a 100644 --- a/builder/vmware/step_create_vmx.go +++ b/builder/vmware/step_create_vmx.go @@ -90,8 +90,6 @@ func (stepCreateVMX) Run(state multistep.StateBag) multistep.StepAction { // Set this so that no dialogs ever appear from Packer. vmxData["msg.autoAnswer"] = "true" - // prints the template description into the "notes" field on VMWare - vmxData["annotation"] = config.Description vmxPath := filepath.Join(config.OutputDir, config.VMName+".vmx") if err := WriteVMX(vmxPath, vmxData); err != nil { From 892e718c5229305401c5614df08f925821d4f257 Mon Sep 17 00:00:00 2001 From: ktruong7 Date: Tue, 26 Nov 2013 09:59:16 -0500 Subject: [PATCH 3/5] Added option to make ami public automatically --- builder/amazon/chroot/builder.go | 1 + builder/amazon/common/ami_config.go | 2 ++ builder/amazon/common/step_modify_ami_attributes.go | 10 ++++++++++ builder/amazon/ebs/builder.go | 1 + builder/amazon/instance/builder.go | 1 + 5 files changed, 15 insertions(+) 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..e846be3a8 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..09925fab2 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, From a6a35e17dfee760ad04a76860a6ea7b5df871b66 Mon Sep 17 00:00:00 2001 From: ktruong7 Date: Wed, 27 Nov 2013 10:47:06 -0500 Subject: [PATCH 4/5] fixed format issues --- builder/amazon/instance/builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/amazon/instance/builder.go b/builder/amazon/instance/builder.go index 09925fab2..1c3bd2889 100644 --- a/builder/amazon/instance/builder.go +++ b/builder/amazon/instance/builder.go @@ -225,7 +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, + Visibility: b.config.AMIVisibility, }, &awscommon.StepCreateTags{ Tags: b.config.AMITags, From 12245bd79c8cd278292bdca5ad93c73413a6b509 Mon Sep 17 00:00:00 2001 From: ktruong7 Date: Wed, 27 Nov 2013 10:48:32 -0500 Subject: [PATCH 5/5] fixed format issue --- builder/amazon/common/ami_config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/amazon/common/ami_config.go b/builder/amazon/common/ami_config.go index e846be3a8..2602c6cf6 100644 --- a/builder/amazon/common/ami_config.go +++ b/builder/amazon/common/ami_config.go @@ -15,7 +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"` + AMIVisibility string `mapstructure:"ami_visibility"` } func (c *AMIConfig) Prepare(t *packer.ConfigTemplate) []error {