github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_cloudwatch_log_group.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  
     9  	"github.com/aws/aws-sdk-go/aws"
    10  	"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
    11  )
    12  
    13  func resourceAwsCloudWatchLogGroup() *schema.Resource {
    14  	return &schema.Resource{
    15  		Create: resourceAwsCloudWatchLogGroupCreate,
    16  		Read:   resourceAwsCloudWatchLogGroupRead,
    17  		Update: resourceAwsCloudWatchLogGroupUpdate,
    18  		Delete: resourceAwsCloudWatchLogGroupDelete,
    19  
    20  		Schema: map[string]*schema.Schema{
    21  			"name": &schema.Schema{
    22  				Type:         schema.TypeString,
    23  				Required:     true,
    24  				ForceNew:     true,
    25  				ValidateFunc: validateLogGroupName,
    26  			},
    27  
    28  			"retention_in_days": &schema.Schema{
    29  				Type:     schema.TypeInt,
    30  				Optional: true,
    31  				Default:  0,
    32  			},
    33  
    34  			"arn": &schema.Schema{
    35  				Type:     schema.TypeString,
    36  				Computed: true,
    37  			},
    38  		},
    39  	}
    40  }
    41  
    42  func resourceAwsCloudWatchLogGroupCreate(d *schema.ResourceData, meta interface{}) error {
    43  	conn := meta.(*AWSClient).cloudwatchlogsconn
    44  
    45  	log.Printf("[DEBUG] Creating CloudWatch Log Group: %s", d.Get("name").(string))
    46  	_, err := conn.CreateLogGroup(&cloudwatchlogs.CreateLogGroupInput{
    47  		LogGroupName: aws.String(d.Get("name").(string)),
    48  	})
    49  	if err != nil {
    50  		return fmt.Errorf("Creating CloudWatch Log Group failed: %s", err)
    51  	}
    52  
    53  	d.SetId(d.Get("name").(string))
    54  
    55  	log.Println("[INFO] CloudWatch Log Group created")
    56  
    57  	return resourceAwsCloudWatchLogGroupUpdate(d, meta)
    58  }
    59  
    60  func resourceAwsCloudWatchLogGroupRead(d *schema.ResourceData, meta interface{}) error {
    61  	conn := meta.(*AWSClient).cloudwatchlogsconn
    62  	log.Printf("[DEBUG] Reading CloudWatch Log Group: %q", d.Get("name").(string))
    63  	lg, err := lookupCloudWatchLogGroup(conn, d.Get("name").(string), nil)
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	log.Printf("[DEBUG] Found Log Group: %#v", *lg)
    69  
    70  	d.Set("arn", *lg.Arn)
    71  	d.Set("name", *lg.LogGroupName)
    72  
    73  	if lg.RetentionInDays != nil {
    74  		d.Set("retention_in_days", *lg.RetentionInDays)
    75  	}
    76  
    77  	return nil
    78  }
    79  
    80  func lookupCloudWatchLogGroup(conn *cloudwatchlogs.CloudWatchLogs,
    81  	name string, nextToken *string) (*cloudwatchlogs.LogGroup, error) {
    82  	input := &cloudwatchlogs.DescribeLogGroupsInput{
    83  		LogGroupNamePrefix: aws.String(name),
    84  		NextToken:          nextToken,
    85  	}
    86  	resp, err := conn.DescribeLogGroups(input)
    87  	if err != nil {
    88  		return nil, err
    89  	}
    90  
    91  	for _, lg := range resp.LogGroups {
    92  		if *lg.LogGroupName == name {
    93  			return lg, nil
    94  		}
    95  	}
    96  
    97  	if resp.NextToken != nil {
    98  		return lookupCloudWatchLogGroup(conn, name, resp.NextToken)
    99  	}
   100  
   101  	return nil, fmt.Errorf("CloudWatch Log Group %q not found", name)
   102  }
   103  
   104  func resourceAwsCloudWatchLogGroupUpdate(d *schema.ResourceData, meta interface{}) error {
   105  	conn := meta.(*AWSClient).cloudwatchlogsconn
   106  
   107  	name := d.Get("name").(string)
   108  	log.Printf("[DEBUG] Updating CloudWatch Log Group: %q", name)
   109  
   110  	if d.HasChange("retention_in_days") {
   111  		var err error
   112  
   113  		if v, ok := d.GetOk("retention_in_days"); ok {
   114  			input := cloudwatchlogs.PutRetentionPolicyInput{
   115  				LogGroupName:    aws.String(name),
   116  				RetentionInDays: aws.Int64(int64(v.(int))),
   117  			}
   118  			log.Printf("[DEBUG] Setting retention for CloudWatch Log Group: %q: %s", name, input)
   119  			_, err = conn.PutRetentionPolicy(&input)
   120  		} else {
   121  			log.Printf("[DEBUG] Deleting retention for CloudWatch Log Group: %q", name)
   122  			_, err = conn.DeleteRetentionPolicy(&cloudwatchlogs.DeleteRetentionPolicyInput{
   123  				LogGroupName: aws.String(name),
   124  			})
   125  		}
   126  
   127  		return err
   128  	}
   129  
   130  	return resourceAwsCloudWatchLogGroupRead(d, meta)
   131  }
   132  
   133  func resourceAwsCloudWatchLogGroupDelete(d *schema.ResourceData, meta interface{}) error {
   134  	conn := meta.(*AWSClient).cloudwatchlogsconn
   135  	log.Printf("[INFO] Deleting CloudWatch Log Group: %s", d.Id())
   136  	_, err := conn.DeleteLogGroup(&cloudwatchlogs.DeleteLogGroupInput{
   137  		LogGroupName: aws.String(d.Get("name").(string)),
   138  	})
   139  	if err != nil {
   140  		return fmt.Errorf("Error deleting CloudWatch Log Group: %s", err)
   141  	}
   142  	log.Println("[INFO] CloudWatch Log Group deleted")
   143  
   144  	d.SetId("")
   145  
   146  	return nil
   147  }