github.com/i0n/terraform@v0.4.3-0.20150506151324-010a39a58ec1/builtin/providers/aws/resource_aws_iam_role.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 6 "github.com/awslabs/aws-sdk-go/aws" 7 "github.com/awslabs/aws-sdk-go/service/iam" 8 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 func resourceAwsIamRole() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceAwsIamRoleCreate, 15 Read: resourceAwsIamRoleRead, 16 // TODO 17 //Update: resourceAwsIamRoleUpdate, 18 Delete: resourceAwsIamRoleDelete, 19 20 Schema: map[string]*schema.Schema{ 21 "arn": &schema.Schema{ 22 Type: schema.TypeString, 23 Computed: true, 24 }, 25 "unique_id": &schema.Schema{ 26 Type: schema.TypeString, 27 Computed: true, 28 }, 29 "name": &schema.Schema{ 30 Type: schema.TypeString, 31 Required: true, 32 ForceNew: true, 33 }, 34 "path": &schema.Schema{ 35 Type: schema.TypeString, 36 Optional: true, 37 Default: "/", 38 ForceNew: true, 39 }, 40 "assume_role_policy": &schema.Schema{ 41 Type: schema.TypeString, 42 Required: true, 43 ForceNew: true, 44 }, 45 }, 46 } 47 } 48 49 func resourceAwsIamRoleCreate(d *schema.ResourceData, meta interface{}) error { 50 iamconn := meta.(*AWSClient).iamconn 51 name := d.Get("name").(string) 52 53 request := &iam.CreateRoleInput{ 54 Path: aws.String(d.Get("path").(string)), 55 RoleName: aws.String(name), 56 AssumeRolePolicyDocument: aws.String(d.Get("assume_role_policy").(string)), 57 } 58 59 createResp, err := iamconn.CreateRole(request) 60 if err != nil { 61 return fmt.Errorf("Error creating IAM Role %s: %s", name, err) 62 } 63 return resourceAwsIamRoleReadResult(d, createResp.Role) 64 } 65 66 func resourceAwsIamRoleRead(d *schema.ResourceData, meta interface{}) error { 67 iamconn := meta.(*AWSClient).iamconn 68 69 request := &iam.GetRoleInput{ 70 RoleName: aws.String(d.Id()), 71 } 72 73 getResp, err := iamconn.GetRole(request) 74 if err != nil { 75 if iamerr, ok := err.(aws.APIError); ok && iamerr.Code == "NoSuchEntity" { // XXX test me 76 d.SetId("") 77 return nil 78 } 79 return fmt.Errorf("Error reading IAM Role %s: %s", d.Id(), err) 80 } 81 return resourceAwsIamRoleReadResult(d, getResp.Role) 82 } 83 84 func resourceAwsIamRoleReadResult(d *schema.ResourceData, role *iam.Role) error { 85 d.SetId(*role.RoleName) 86 if err := d.Set("name", role.RoleName); err != nil { 87 return err 88 } 89 if err := d.Set("arn", role.ARN); err != nil { 90 return err 91 } 92 if err := d.Set("path", role.Path); err != nil { 93 return err 94 } 95 if err := d.Set("unique_id", role.RoleID); err != nil { 96 return err 97 } 98 return nil 99 } 100 101 func resourceAwsIamRoleDelete(d *schema.ResourceData, meta interface{}) error { 102 iamconn := meta.(*AWSClient).iamconn 103 104 request := &iam.DeleteRoleInput{ 105 RoleName: aws.String(d.Id()), 106 } 107 108 if _, err := iamconn.DeleteRole(request); err != nil { 109 return fmt.Errorf("Error deleting IAM Role %s: %s", d.Id(), err) 110 } 111 return nil 112 }