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  }