github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_ssm_maintenance_window_target.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/ssm" 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 func resourceAwsSsmMaintenanceWindowTarget() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceAwsSsmMaintenanceWindowTargetCreate, 15 Read: resourceAwsSsmMaintenanceWindowTargetRead, 16 Delete: resourceAwsSsmMaintenanceWindowTargetDelete, 17 18 Schema: map[string]*schema.Schema{ 19 "window_id": { 20 Type: schema.TypeString, 21 Required: true, 22 ForceNew: true, 23 }, 24 25 "resource_type": { 26 Type: schema.TypeString, 27 Required: true, 28 ForceNew: true, 29 }, 30 31 "targets": { 32 Type: schema.TypeList, 33 Required: true, 34 ForceNew: true, 35 MaxItems: 1, 36 Elem: &schema.Resource{ 37 Schema: map[string]*schema.Schema{ 38 "key": { 39 Type: schema.TypeString, 40 Required: true, 41 }, 42 "values": { 43 Type: schema.TypeList, 44 Required: true, 45 Elem: &schema.Schema{Type: schema.TypeString}, 46 }, 47 }, 48 }, 49 }, 50 51 "owner_information": { 52 Type: schema.TypeString, 53 ForceNew: true, 54 Optional: true, 55 }, 56 }, 57 } 58 } 59 60 func resourceAwsSsmMaintenanceWindowTargetCreate(d *schema.ResourceData, meta interface{}) error { 61 ssmconn := meta.(*AWSClient).ssmconn 62 63 log.Printf("[INFO] Registering SSM Maintenance Window Target") 64 65 params := &ssm.RegisterTargetWithMaintenanceWindowInput{ 66 WindowId: aws.String(d.Get("window_id").(string)), 67 ResourceType: aws.String(d.Get("resource_type").(string)), 68 Targets: expandAwsSsmTargets(d), 69 } 70 71 if v, ok := d.GetOk("owner_information"); ok { 72 params.OwnerInformation = aws.String(v.(string)) 73 } 74 75 resp, err := ssmconn.RegisterTargetWithMaintenanceWindow(params) 76 if err != nil { 77 return err 78 } 79 80 d.SetId(*resp.WindowTargetId) 81 82 return resourceAwsSsmMaintenanceWindowTargetRead(d, meta) 83 } 84 85 func resourceAwsSsmMaintenanceWindowTargetRead(d *schema.ResourceData, meta interface{}) error { 86 ssmconn := meta.(*AWSClient).ssmconn 87 88 params := &ssm.DescribeMaintenanceWindowTargetsInput{ 89 WindowId: aws.String(d.Get("window_id").(string)), 90 Filters: []*ssm.MaintenanceWindowFilter{ 91 { 92 Key: aws.String("WindowTargetId"), 93 Values: []*string{aws.String(d.Id())}, 94 }, 95 }, 96 } 97 98 resp, err := ssmconn.DescribeMaintenanceWindowTargets(params) 99 if err != nil { 100 return err 101 } 102 103 found := false 104 for _, t := range resp.Targets { 105 if *t.WindowTargetId == d.Id() { 106 found = true 107 108 d.Set("owner_information", t.OwnerInformation) 109 d.Set("window_id", t.WindowId) 110 d.Set("resource_type", t.ResourceType) 111 112 if err := d.Set("targets", flattenAwsSsmTargets(t.Targets)); err != nil { 113 return fmt.Errorf("[DEBUG] Error setting targets error: %#v", err) 114 } 115 } 116 } 117 118 if !found { 119 log.Printf("[INFO] Maintenance Window Target not found. Removing from state") 120 d.SetId("") 121 return nil 122 } 123 124 return nil 125 } 126 127 func resourceAwsSsmMaintenanceWindowTargetDelete(d *schema.ResourceData, meta interface{}) error { 128 ssmconn := meta.(*AWSClient).ssmconn 129 130 log.Printf("[INFO] Deregistering SSM Maintenance Window Target: %s", d.Id()) 131 132 params := &ssm.DeregisterTargetFromMaintenanceWindowInput{ 133 WindowId: aws.String(d.Get("window_id").(string)), 134 WindowTargetId: aws.String(d.Id()), 135 } 136 137 _, err := ssmconn.DeregisterTargetFromMaintenanceWindow(params) 138 if err != nil { 139 return err 140 } 141 142 return nil 143 }