github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_ssm_maintenance_window.go (about) 1 package aws 2 3 import ( 4 "log" 5 6 "github.com/aws/aws-sdk-go/aws" 7 "github.com/aws/aws-sdk-go/service/ssm" 8 "github.com/hashicorp/terraform/helper/schema" 9 ) 10 11 func resourceAwsSsmMaintenanceWindow() *schema.Resource { 12 return &schema.Resource{ 13 Create: resourceAwsSsmMaintenanceWindowCreate, 14 Read: resourceAwsSsmMaintenanceWindowRead, 15 Update: resourceAwsSsmMaintenanceWindowUpdate, 16 Delete: resourceAwsSsmMaintenanceWindowDelete, 17 18 Schema: map[string]*schema.Schema{ 19 "name": { 20 Type: schema.TypeString, 21 Required: true, 22 }, 23 24 "schedule": { 25 Type: schema.TypeString, 26 Required: true, 27 }, 28 29 "duration": { 30 Type: schema.TypeInt, 31 Required: true, 32 }, 33 34 "cutoff": { 35 Type: schema.TypeInt, 36 Required: true, 37 }, 38 39 "allow_unassociated_targets": { 40 Type: schema.TypeBool, 41 Optional: true, 42 Default: false, 43 }, 44 45 "enabled": { 46 Type: schema.TypeBool, 47 Optional: true, 48 Default: true, 49 }, 50 }, 51 } 52 } 53 54 func resourceAwsSsmMaintenanceWindowCreate(d *schema.ResourceData, meta interface{}) error { 55 ssmconn := meta.(*AWSClient).ssmconn 56 57 params := &ssm.CreateMaintenanceWindowInput{ 58 Name: aws.String(d.Get("name").(string)), 59 Schedule: aws.String(d.Get("schedule").(string)), 60 Duration: aws.Int64(int64(d.Get("duration").(int))), 61 Cutoff: aws.Int64(int64(d.Get("cutoff").(int))), 62 AllowUnassociatedTargets: aws.Bool(d.Get("allow_unassociated_targets").(bool)), 63 } 64 65 resp, err := ssmconn.CreateMaintenanceWindow(params) 66 if err != nil { 67 return err 68 } 69 70 d.SetId(*resp.WindowId) 71 return resourceAwsSsmMaintenanceWindowRead(d, meta) 72 } 73 74 func resourceAwsSsmMaintenanceWindowUpdate(d *schema.ResourceData, meta interface{}) error { 75 ssmconn := meta.(*AWSClient).ssmconn 76 77 params := &ssm.UpdateMaintenanceWindowInput{ 78 WindowId: aws.String(d.Id()), 79 } 80 81 if d.HasChange("name") { 82 params.Name = aws.String(d.Get("name").(string)) 83 } 84 85 if d.HasChange("schedule") { 86 params.Schedule = aws.String(d.Get("schedule").(string)) 87 } 88 89 if d.HasChange("duration") { 90 params.Duration = aws.Int64(int64(d.Get("duration").(int))) 91 } 92 93 if d.HasChange("cutoff") { 94 params.Cutoff = aws.Int64(int64(d.Get("cutoff").(int))) 95 } 96 97 if d.HasChange("allow_unassociated_targets") { 98 params.AllowUnassociatedTargets = aws.Bool(d.Get("allow_unassociated_targets").(bool)) 99 } 100 101 if d.HasChange("enabled") { 102 params.Enabled = aws.Bool(d.Get("enabled").(bool)) 103 } 104 105 _, err := ssmconn.UpdateMaintenanceWindow(params) 106 if err != nil { 107 return err 108 } 109 110 return resourceAwsSsmMaintenanceWindowRead(d, meta) 111 } 112 113 func resourceAwsSsmMaintenanceWindowRead(d *schema.ResourceData, meta interface{}) error { 114 ssmconn := meta.(*AWSClient).ssmconn 115 116 params := &ssm.GetMaintenanceWindowInput{ 117 WindowId: aws.String(d.Id()), 118 } 119 120 resp, err := ssmconn.GetMaintenanceWindow(params) 121 if err != nil { 122 return err 123 } 124 125 d.Set("name", resp.Name) 126 d.Set("cutoff", resp.Cutoff) 127 d.Set("duration", resp.Duration) 128 d.Set("enabled", resp.Enabled) 129 d.Set("allow_unassociated_targets", resp.AllowUnassociatedTargets) 130 d.Set("schedule", resp.Schedule) 131 132 return nil 133 } 134 135 func resourceAwsSsmMaintenanceWindowDelete(d *schema.ResourceData, meta interface{}) error { 136 ssmconn := meta.(*AWSClient).ssmconn 137 138 log.Printf("[INFO] Deleting SSM Maintenance Window: %s", d.Id()) 139 140 params := &ssm.DeleteMaintenanceWindowInput{ 141 WindowId: aws.String(d.Id()), 142 } 143 144 _, err := ssmconn.DeleteMaintenanceWindow(params) 145 if err != nil { 146 return err 147 } 148 149 return nil 150 }