diff --git a/builtin/providers/aws/provider.go b/builtin/providers/aws/provider.go index c123cc184c..04f94cc347 100644 --- a/builtin/providers/aws/provider.go +++ b/builtin/providers/aws/provider.go @@ -174,6 +174,7 @@ func Provider() terraform.ResourceProvider { "aws_autoscaling_group": resourceAwsAutoscalingGroup(), "aws_autoscaling_notification": resourceAwsAutoscalingNotification(), "aws_autoscaling_policy": resourceAwsAutoscalingPolicy(), + "aws_autoscaling_schedule": resourceAwsAutoscalingSchedule(), "aws_cloudformation_stack": resourceAwsCloudFormationStack(), "aws_cloudtrail": resourceAwsCloudTrail(), "aws_cloudwatch_log_group": resourceAwsCloudWatchLogGroup(), diff --git a/builtin/providers/aws/resource_aws_autoscaling_schedule.go b/builtin/providers/aws/resource_aws_autoscaling_schedule.go new file mode 100644 index 0000000000..4de57333c6 --- /dev/null +++ b/builtin/providers/aws/resource_aws_autoscaling_schedule.go @@ -0,0 +1,117 @@ +package aws + +import ( + "fmt" + "log" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/autoscaling" + "github.com/hashicorp/terraform/helper/schema" +) + +func resourceAwsAutoscalingSchedule() *schema.Resource { + return &schema.Resource{ + Create: resourceAwsAutoscalingScheduleCreate, + Read: resourceAwsAutoscalingScheduleRead, + Update: resourceAwsAutoscalingScheduleCreate, + Delete: resourceAwsAutoscalingScheduleDelete, + + Schema: map[string]*schema.Schema{ + "scheduled_action_name": &schema.Schema{ + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "autoscaling_group_name": &schema.Schema{ + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "start_time": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "end_time": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "recurrence": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "min_size": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + "max_size": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + "desired_capacity": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + }, + } +} + +func resourceAwsAutoscalingScheduleCreate(d *schema.ResourceData, meta interface{}) error { + autoscalingconn := meta.(*AWSClient).autoscalingconn + params := autoscaling.PutScheduledUpdateGroupActionInput{ + AutoScalingGroupName: aws.String(d.Get("autoscaling_group_name").(string)), + ScheduledActionName: aws.String(d.Get("scheduled_action_name").(string)), + } + + if attr, ok := d.GetOk("start_time"); ok { + params.StartTime = aws.Time() + } + + if attr, ok := d.GetOk("min_size"); ok { + params.MinSize = aws.Int(int64(attr.(int))) + } + + if attr, ok := d.GetOk("max_size"); ok { + params.MaxSize = aws.Int(int64(attr.(int))) + } + + if attr, ok := d.GetOk("desired_capacity"); ok { + params.DesiredCapacity = aws.Int(int64(attr.(int))) + } + + log.Printf("[INFO] Creating Autoscaling Scheduled Action: %s", d.Get("scheduled_action_name").(string)) + _, err := autoscalingconn.PutScheduledUpdateGroupAction(params) + if err != nil { + return fmt.Errorf("Error Creating Autoscaling Scheduled Action: %s", err.Error()) + } + + d.SetId(d.Get("scheduled_action_name").(string)) + + return resourceAwsAutoscalingScheduleRead(d, meta) +} + +func resourceAwsAutoscalingScheduleRead(d *schema.ResourceData, meta interface{}) error { + return nil +} + +func resourceAwsAutoscalingScheduleDelete(d *schema.ResourceData, meta interface{}) error { + autoscalingconn := meta.(*AWSClient).autoscalingconn + + params := autoscaling.DeleteScheduledActionInput{ + AutoScalingGroupName: aws.String(d.Get("autoscaling_group_name").(string)), + ScheduledActionName: aws.String(d.Get("scheduled_action_name").(string)), + } + + log.Printf("[INFO] Deleting Autoscaling Scheduled Action: %s", d.Get("scheduled_action_name").(string)) + _, err := autoscalingconn.DeleteScheduledAction(params) + if err != nil { + return fmt.Errorf("Error deleting Autoscaling Scheduled Action: %s", err.Error()) + } + + return nil +}