github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/aws/resource_aws_iam_group.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/aws/aws-sdk-go/aws"
     7  	"github.com/aws/aws-sdk-go/aws/awserr"
     8  	"github.com/aws/aws-sdk-go/service/iam"
     9  
    10  	"github.com/hashicorp/terraform/helper/schema"
    11  )
    12  
    13  func resourceAwsIamGroup() *schema.Resource {
    14  	return &schema.Resource{
    15  		Create: resourceAwsIamGroupCreate,
    16  		Read:   resourceAwsIamGroupRead,
    17  		// TODO
    18  		//Update: resourceAwsIamGroupUpdate,
    19  		Delete: resourceAwsIamGroupDelete,
    20  
    21  		Schema: map[string]*schema.Schema{
    22  			"arn": &schema.Schema{
    23  				Type:     schema.TypeString,
    24  				Computed: true,
    25  			},
    26  			"unique_id": &schema.Schema{
    27  				Type:     schema.TypeString,
    28  				Computed: true,
    29  			},
    30  			"name": &schema.Schema{
    31  				Type:     schema.TypeString,
    32  				Required: true,
    33  				ForceNew: true,
    34  			},
    35  			"path": &schema.Schema{
    36  				Type:     schema.TypeString,
    37  				Optional: true,
    38  				Default:  "/",
    39  				ForceNew: true,
    40  			},
    41  		},
    42  	}
    43  }
    44  
    45  func resourceAwsIamGroupCreate(d *schema.ResourceData, meta interface{}) error {
    46  	iamconn := meta.(*AWSClient).iamconn
    47  	name := d.Get("name").(string)
    48  
    49  	request := &iam.CreateGroupInput{
    50  		Path:      aws.String(d.Get("path").(string)),
    51  		GroupName: aws.String(name),
    52  	}
    53  
    54  	createResp, err := iamconn.CreateGroup(request)
    55  	if err != nil {
    56  		return fmt.Errorf("Error creating IAM Group %s: %s", name, err)
    57  	}
    58  	return resourceAwsIamGroupReadResult(d, createResp.Group)
    59  }
    60  
    61  func resourceAwsIamGroupRead(d *schema.ResourceData, meta interface{}) error {
    62  	iamconn := meta.(*AWSClient).iamconn
    63  
    64  	request := &iam.GetGroupInput{
    65  		GroupName: aws.String(d.Id()),
    66  	}
    67  
    68  	getResp, err := iamconn.GetGroup(request)
    69  	if err != nil {
    70  		if iamerr, ok := err.(awserr.Error); ok && iamerr.Code() == "NoSuchEntity" {
    71  			d.SetId("")
    72  			return nil
    73  		}
    74  		return fmt.Errorf("Error reading IAM Group %s: %s", d.Id(), err)
    75  	}
    76  	return resourceAwsIamGroupReadResult(d, getResp.Group)
    77  }
    78  
    79  func resourceAwsIamGroupReadResult(d *schema.ResourceData, group *iam.Group) error {
    80  	d.SetId(*group.GroupName)
    81  	if err := d.Set("name", group.GroupName); err != nil {
    82  		return err
    83  	}
    84  	if err := d.Set("arn", group.Arn); err != nil {
    85  		return err
    86  	}
    87  	if err := d.Set("path", group.Path); err != nil {
    88  		return err
    89  	}
    90  	if err := d.Set("unique_id", group.GroupId); err != nil {
    91  		return err
    92  	}
    93  	return nil
    94  }
    95  
    96  func resourceAwsIamGroupDelete(d *schema.ResourceData, meta interface{}) error {
    97  	iamconn := meta.(*AWSClient).iamconn
    98  
    99  	request := &iam.DeleteGroupInput{
   100  		GroupName: aws.String(d.Id()),
   101  	}
   102  
   103  	if _, err := iamconn.DeleteGroup(request); err != nil {
   104  		return fmt.Errorf("Error deleting IAM Group %s: %s", d.Id(), err)
   105  	}
   106  	return nil
   107  }