github.com/paulmey/terraform@v0.5.2-0.20150519145237-046e9b4c884d/builtin/providers/aws/resource_aws_iam_group.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 resourceAwsIamGroup() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceAwsIamGroupCreate,
    15  		Read:   resourceAwsIamGroupRead,
    16  		// TODO
    17  		//Update: resourceAwsIamGroupUpdate,
    18  		Delete: resourceAwsIamGroupDelete,
    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  		},
    41  	}
    42  }
    43  
    44  func resourceAwsIamGroupCreate(d *schema.ResourceData, meta interface{}) error {
    45  	iamconn := meta.(*AWSClient).iamconn
    46  	name := d.Get("name").(string)
    47  
    48  	request := &iam.CreateGroupInput{
    49  		Path:      aws.String(d.Get("path").(string)),
    50  		GroupName: aws.String(name),
    51  	}
    52  
    53  	createResp, err := iamconn.CreateGroup(request)
    54  	if err != nil {
    55  		return fmt.Errorf("Error creating IAM Group %s: %s", name, err)
    56  	}
    57  	return resourceAwsIamGroupReadResult(d, createResp.Group)
    58  }
    59  
    60  func resourceAwsIamGroupRead(d *schema.ResourceData, meta interface{}) error {
    61  	iamconn := meta.(*AWSClient).iamconn
    62  
    63  	request := &iam.GetGroupInput{
    64  		GroupName: aws.String(d.Id()),
    65  	}
    66  
    67  	getResp, err := iamconn.GetGroup(request)
    68  	if err != nil {
    69  		if iamerr, ok := err.(aws.APIError); ok && iamerr.Code == "NoSuchEntity" {
    70  			d.SetId("")
    71  			return nil
    72  		}
    73  		return fmt.Errorf("Error reading IAM Group %s: %s", d.Id(), err)
    74  	}
    75  	return resourceAwsIamGroupReadResult(d, getResp.Group)
    76  }
    77  
    78  func resourceAwsIamGroupReadResult(d *schema.ResourceData, group *iam.Group) error {
    79  	d.SetId(*group.GroupName)
    80  	if err := d.Set("name", group.GroupName); err != nil {
    81  		return err
    82  	}
    83  	if err := d.Set("arn", group.ARN); err != nil {
    84  		return err
    85  	}
    86  	if err := d.Set("path", group.Path); err != nil {
    87  		return err
    88  	}
    89  	if err := d.Set("unique_id", group.GroupID); err != nil {
    90  		return err
    91  	}
    92  	return nil
    93  }
    94  
    95  func resourceAwsIamGroupDelete(d *schema.ResourceData, meta interface{}) error {
    96  	iamconn := meta.(*AWSClient).iamconn
    97  
    98  	request := &iam.DeleteGroupInput{
    99  		GroupName: aws.String(d.Id()),
   100  	}
   101  
   102  	if _, err := iamconn.DeleteGroup(request); err != nil {
   103  		return fmt.Errorf("Error deleting IAM Group %s: %s", d.Id(), err)
   104  	}
   105  	return nil
   106  }