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  }