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 }