github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_ami_launch_permission.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "github.com/aws/aws-sdk-go/aws" 6 "github.com/aws/aws-sdk-go/service/ec2" 7 "github.com/hashicorp/terraform/helper/schema" 8 ) 9 10 func resourceAwsAmiLaunchPermission() *schema.Resource { 11 return &schema.Resource{ 12 Exists: resourceAwsAmiLaunchPermissionExists, 13 Create: resourceAwsAmiLaunchPermissionCreate, 14 Read: resourceAwsAmiLaunchPermissionRead, 15 Delete: resourceAwsAmiLaunchPermissionDelete, 16 17 Schema: map[string]*schema.Schema{ 18 "image_id": &schema.Schema{ 19 Type: schema.TypeString, 20 Required: true, 21 ForceNew: true, 22 }, 23 "account_id": &schema.Schema{ 24 Type: schema.TypeString, 25 Required: true, 26 ForceNew: true, 27 }, 28 }, 29 } 30 } 31 32 func resourceAwsAmiLaunchPermissionExists(d *schema.ResourceData, meta interface{}) (bool, error) { 33 conn := meta.(*AWSClient).ec2conn 34 35 image_id := d.Get("image_id").(string) 36 account_id := d.Get("account_id").(string) 37 return hasLaunchPermission(conn, image_id, account_id) 38 } 39 40 func resourceAwsAmiLaunchPermissionCreate(d *schema.ResourceData, meta interface{}) error { 41 conn := meta.(*AWSClient).ec2conn 42 43 image_id := d.Get("image_id").(string) 44 account_id := d.Get("account_id").(string) 45 46 _, err := conn.ModifyImageAttribute(&ec2.ModifyImageAttributeInput{ 47 ImageId: aws.String(image_id), 48 Attribute: aws.String("launchPermission"), 49 LaunchPermission: &ec2.LaunchPermissionModifications{ 50 Add: []*ec2.LaunchPermission{ 51 &ec2.LaunchPermission{UserId: aws.String(account_id)}, 52 }, 53 }, 54 }) 55 if err != nil { 56 return fmt.Errorf("error creating ami launch permission: %s", err) 57 } 58 59 d.SetId(fmt.Sprintf("%s-%s", image_id, account_id)) 60 return nil 61 } 62 63 func resourceAwsAmiLaunchPermissionRead(d *schema.ResourceData, meta interface{}) error { 64 return nil 65 } 66 67 func resourceAwsAmiLaunchPermissionDelete(d *schema.ResourceData, meta interface{}) error { 68 conn := meta.(*AWSClient).ec2conn 69 70 image_id := d.Get("image_id").(string) 71 account_id := d.Get("account_id").(string) 72 73 _, err := conn.ModifyImageAttribute(&ec2.ModifyImageAttributeInput{ 74 ImageId: aws.String(image_id), 75 Attribute: aws.String("launchPermission"), 76 LaunchPermission: &ec2.LaunchPermissionModifications{ 77 Remove: []*ec2.LaunchPermission{ 78 &ec2.LaunchPermission{UserId: aws.String(account_id)}, 79 }, 80 }, 81 }) 82 if err != nil { 83 return fmt.Errorf("error removing ami launch permission: %s", err) 84 } 85 86 return nil 87 } 88 89 func hasLaunchPermission(conn *ec2.EC2, image_id string, account_id string) (bool, error) { 90 attrs, err := conn.DescribeImageAttribute(&ec2.DescribeImageAttributeInput{ 91 ImageId: aws.String(image_id), 92 Attribute: aws.String("launchPermission"), 93 }) 94 if err != nil { 95 return false, err 96 } 97 98 for _, lp := range attrs.LaunchPermissions { 99 if *lp.UserId == account_id { 100 return true, nil 101 } 102 } 103 return false, nil 104 }