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  }