Commit 016d916d authored by Tom Cahill's avatar Tom Cahill

Fix adding groups to AMI launch permissions.

Previously, groups were granted launch permissions by submitting a
ModifyImageAttribute request with the UserGroups parameter set
appropriately. This is no longer valid, as the LaunchPermission
parameter must be set.
parent fe0fde19
...@@ -44,12 +44,21 @@ func (s *StepModifyAMIAttributes) Run(state multistep.StateBag) multistep.StepAc ...@@ -44,12 +44,21 @@ func (s *StepModifyAMIAttributes) Run(state multistep.StateBag) multistep.StepAc
if len(s.Groups) > 0 { if len(s.Groups) > 0 {
groups := make([]*string, len(s.Groups)) groups := make([]*string, len(s.Groups))
adds := make([]*ec2.LaunchPermission, len(s.Groups))
addGroups := &ec2.ModifyImageAttributeInput{
LaunchPermission: &ec2.LaunchPermissionModifications{},
}
for i, g := range s.Groups { for i, g := range s.Groups {
groups[i] = &g groups[i] = &g
adds[i] = &ec2.LaunchPermission{
Group: &g,
}
} }
options["groups"] = &ec2.ModifyImageAttributeInput{ addGroups.UserGroups = groups
UserGroups: groups, addGroups.LaunchPermission.Add = adds
}
options["groups"] = addGroups
} }
if len(s.Users) > 0 { if len(s.Users) > 0 {
......
...@@ -50,11 +50,11 @@ func TestBuilderAcc_amiSharing(t *testing.T) { ...@@ -50,11 +50,11 @@ func TestBuilderAcc_amiSharing(t *testing.T) {
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
Builder: &Builder{}, Builder: &Builder{},
Template: testBuilderAccSharing, Template: testBuilderAccSharing,
Check: checkAMISharing(1, "932021504756"), Check: checkAMISharing(2, "932021504756", "all"),
}) })
} }
func checkAMISharing(count int, uid string) builderT.TestCheckFunc { func checkAMISharing(count int, uid, group string) builderT.TestCheckFunc {
return func(artifacts []packer.Artifact) error { return func(artifacts []packer.Artifact) error {
if len(artifacts) > 1 { if len(artifacts) > 1 {
return fmt.Errorf("more than 1 artifact") return fmt.Errorf("more than 1 artifact")
...@@ -84,17 +84,28 @@ func checkAMISharing(count int, uid string) builderT.TestCheckFunc { ...@@ -84,17 +84,28 @@ func checkAMISharing(count int, uid string) builderT.TestCheckFunc {
return fmt.Errorf("Error in Image Attributes, expected (%d) Launch Permissions, got (%d)", count, len(imageResp.LaunchPermissions)) return fmt.Errorf("Error in Image Attributes, expected (%d) Launch Permissions, got (%d)", count, len(imageResp.LaunchPermissions))
} }
found := false userFound := false
for _, lp := range imageResp.LaunchPermissions { for _, lp := range imageResp.LaunchPermissions {
if uid == *lp.UserID { if lp.UserID != nil && uid == *lp.UserID {
found = true userFound = true
} }
} }
if !found { if !userFound {
return fmt.Errorf("Error in Image Attributes, expected User ID (%s) to have Launch Permissions, but was not found", uid) return fmt.Errorf("Error in Image Attributes, expected User ID (%s) to have Launch Permissions, but was not found", uid)
} }
groupFound := false
for _, lp := range imageResp.LaunchPermissions {
if lp.Group != nil && group == *lp.Group {
groupFound = true
}
}
if !groupFound {
return fmt.Errorf("Error in Image Attributes, expected Group ID (%s) to have Launch Permissions, but was not found", group)
}
return nil return nil
} }
} }
...@@ -203,7 +214,8 @@ const testBuilderAccSharing = ` ...@@ -203,7 +214,8 @@ const testBuilderAccSharing = `
"source_ami": "ami-76b2a71e", "source_ami": "ami-76b2a71e",
"ssh_username": "ubuntu", "ssh_username": "ubuntu",
"ami_name": "packer-test {{timestamp}}", "ami_name": "packer-test {{timestamp}}",
"ami_users":["932021504756"] "ami_users":["932021504756"],
"ami_groups":["all"]
}] }]
} }
` `
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment