github.com/wangzhucn/terraform@v0.6.7-0.20151109233120-4eea011b56b3/builtin/providers/aws/resource_aws_cloudtrail.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/cloudtrail" 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 func resourceAwsCloudTrail() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceAwsCloudTrailCreate, 15 Read: resourceAwsCloudTrailRead, 16 Update: resourceAwsCloudTrailUpdate, 17 Delete: resourceAwsCloudTrailDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "name": &schema.Schema{ 21 Type: schema.TypeString, 22 Required: true, 23 ForceNew: true, 24 }, 25 "s3_bucket_name": &schema.Schema{ 26 Type: schema.TypeString, 27 Required: true, 28 }, 29 "s3_key_prefix": &schema.Schema{ 30 Type: schema.TypeString, 31 Optional: true, 32 }, 33 "cloud_watch_logs_role_arn": &schema.Schema{ 34 Type: schema.TypeString, 35 Optional: true, 36 }, 37 "cloud_watch_logs_group_arn": &schema.Schema{ 38 Type: schema.TypeString, 39 Optional: true, 40 }, 41 "include_global_service_events": &schema.Schema{ 42 Type: schema.TypeBool, 43 Optional: true, 44 Default: true, 45 }, 46 "sns_topic_name": &schema.Schema{ 47 Type: schema.TypeString, 48 Optional: true, 49 }, 50 }, 51 } 52 } 53 54 func resourceAwsCloudTrailCreate(d *schema.ResourceData, meta interface{}) error { 55 conn := meta.(*AWSClient).cloudtrailconn 56 57 input := cloudtrail.CreateTrailInput{ 58 Name: aws.String(d.Get("name").(string)), 59 S3BucketName: aws.String(d.Get("s3_bucket_name").(string)), 60 } 61 62 if v, ok := d.GetOk("cloud_watch_logs_group_arn"); ok { 63 input.CloudWatchLogsLogGroupArn = aws.String(v.(string)) 64 } 65 if v, ok := d.GetOk("cloud_watch_logs_role_arn"); ok { 66 input.CloudWatchLogsRoleArn = aws.String(v.(string)) 67 } 68 if v, ok := d.GetOk("include_global_service_events"); ok { 69 input.IncludeGlobalServiceEvents = aws.Bool(v.(bool)) 70 } 71 if v, ok := d.GetOk("s3_key_prefix"); ok { 72 input.S3KeyPrefix = aws.String(v.(string)) 73 } 74 if v, ok := d.GetOk("sns_topic_name"); ok { 75 input.SnsTopicName = aws.String(v.(string)) 76 } 77 78 t, err := conn.CreateTrail(&input) 79 if err != nil { 80 return err 81 } 82 83 log.Printf("[DEBUG] CloudTrail created: %s", t) 84 85 d.SetId(*t.Name) 86 87 return resourceAwsCloudTrailRead(d, meta) 88 } 89 90 func resourceAwsCloudTrailRead(d *schema.ResourceData, meta interface{}) error { 91 conn := meta.(*AWSClient).cloudtrailconn 92 93 name := d.Get("name").(string) 94 input := cloudtrail.DescribeTrailsInput{ 95 TrailNameList: []*string{ 96 aws.String(name), 97 }, 98 } 99 resp, err := conn.DescribeTrails(&input) 100 if err != nil { 101 return err 102 } 103 if len(resp.TrailList) == 0 { 104 return fmt.Errorf("No CloudTrail found, using name %q", name) 105 } 106 107 trail := resp.TrailList[0] 108 log.Printf("[DEBUG] CloudTrail received: %s", trail) 109 110 d.Set("name", trail.Name) 111 d.Set("s3_bucket_name", trail.S3BucketName) 112 d.Set("s3_key_prefix", trail.S3KeyPrefix) 113 d.Set("cloud_watch_logs_role_arn", trail.CloudWatchLogsRoleArn) 114 d.Set("cloud_watch_logs_group_arn", trail.CloudWatchLogsLogGroupArn) 115 d.Set("include_global_service_events", trail.IncludeGlobalServiceEvents) 116 d.Set("sns_topic_name", trail.SnsTopicName) 117 118 return nil 119 } 120 121 func resourceAwsCloudTrailUpdate(d *schema.ResourceData, meta interface{}) error { 122 conn := meta.(*AWSClient).cloudtrailconn 123 124 input := cloudtrail.UpdateTrailInput{ 125 Name: aws.String(d.Get("name").(string)), 126 } 127 128 if d.HasChange("s3_bucket_name") { 129 input.S3BucketName = aws.String(d.Get("s3_bucket_name").(string)) 130 } 131 if d.HasChange("s3_key_prefix") { 132 input.S3KeyPrefix = aws.String(d.Get("s3_key_prefix").(string)) 133 } 134 if d.HasChange("cloud_watch_logs_role_arn") { 135 input.CloudWatchLogsRoleArn = aws.String(d.Get("cloud_watch_logs_role_arn").(string)) 136 } 137 if d.HasChange("cloud_watch_logs_group_arn") { 138 input.CloudWatchLogsLogGroupArn = aws.String(d.Get("cloud_watch_logs_group_arn").(string)) 139 } 140 if d.HasChange("include_global_service_events") { 141 input.IncludeGlobalServiceEvents = aws.Bool(d.Get("include_global_service_events").(bool)) 142 } 143 if d.HasChange("sns_topic_name") { 144 input.SnsTopicName = aws.String(d.Get("sns_topic_name").(string)) 145 } 146 147 log.Printf("[DEBUG] Updating CloudTrail: %s", input) 148 t, err := conn.UpdateTrail(&input) 149 if err != nil { 150 return err 151 } 152 log.Printf("[DEBUG] CloudTrail updated: %s", t) 153 154 return resourceAwsCloudTrailRead(d, meta) 155 } 156 157 func resourceAwsCloudTrailDelete(d *schema.ResourceData, meta interface{}) error { 158 conn := meta.(*AWSClient).cloudtrailconn 159 name := d.Get("name").(string) 160 161 log.Printf("[DEBUG] Deleting CloudTrail: %q", name) 162 _, err := conn.DeleteTrail(&cloudtrail.DeleteTrailInput{ 163 Name: aws.String(name), 164 }) 165 166 return err 167 }