github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/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 72 return resourceAwsSsmMaintenanceWindowRead(d, meta) 73 } 74 75 func resourceAwsSsmMaintenanceWindowUpdate(d *schema.ResourceData, meta interface{}) error { 76 ssmconn := meta.(*AWSClient).ssmconn 77 78 params := &ssm.UpdateMaintenanceWindowInput{ 79 WindowId: aws.String(d.Id()), 80 } 81 82 if d.HasChange("name") { 83 params.Name = aws.String(d.Get("name").(string)) 84 } 85 86 if d.HasChange("schedule") { 87 params.Schedule = aws.String(d.Get("schedule").(string)) 88 } 89 90 if d.HasChange("duration") { 91 params.Duration = aws.Int64(int64(d.Get("duration").(int))) 92 } 93 94 if d.HasChange("cutoff") { 95 params.Cutoff = aws.Int64(int64(d.Get("cutoff").(int))) 96 } 97 98 if d.HasChange("allow_unassociated_targets") { 99 params.AllowUnassociatedTargets = aws.Bool(d.Get("allow_unassociated_targets").(bool)) 100 } 101 102 if d.HasChange("enabled") { 103 params.Enabled = aws.Bool(d.Get("enabled").(bool)) 104 } 105 106 _, err := ssmconn.UpdateMaintenanceWindow(params) 107 if err != nil { 108 return err 109 } 110 111 return resourceAwsSsmMaintenanceWindowRead(d, meta) 112 } 113 114 func resourceAwsSsmMaintenanceWindowRead(d *schema.ResourceData, meta interface{}) error { 115 ssmconn := meta.(*AWSClient).ssmconn 116 117 params := &ssm.DescribeMaintenanceWindowsInput{ 118 Filters: []*ssm.MaintenanceWindowFilter{ 119 { 120 Key: aws.String("Name"), 121 Values: []*string{aws.String(d.Get("name").(string))}, 122 }, 123 }, 124 } 125 126 resp, err := ssmconn.DescribeMaintenanceWindows(params) 127 if err != nil { 128 return err 129 } 130 131 found := false 132 133 for _, window := range resp.WindowIdentities { 134 if *window.WindowId == d.Id() { 135 found = true 136 137 d.Set("name", window.Name) 138 d.Set("cutoff", window.Cutoff) 139 d.Set("duration", window.Duration) 140 d.Set("enabled", window.Enabled) 141 } 142 } 143 144 if !found { 145 log.Printf("[INFO] Cannot find the SSM Maintenance Window %q. Removing from state", d.Get("name").(string)) 146 d.SetId("") 147 return nil 148 } 149 150 return nil 151 } 152 153 func resourceAwsSsmMaintenanceWindowDelete(d *schema.ResourceData, meta interface{}) error { 154 ssmconn := meta.(*AWSClient).ssmconn 155 156 log.Printf("[INFO] Deleting SSM Maintenance Window: %s", d.Id()) 157 158 params := &ssm.DeleteMaintenanceWindowInput{ 159 WindowId: aws.String(d.Id()), 160 } 161 162 _, err := ssmconn.DeleteMaintenanceWindow(params) 163 if err != nil { 164 return err 165 } 166 167 return nil 168 }