diff options
Diffstat (limited to 'vendor/github.com/goamz/goamz/autoscaling/autoscaling.go')
-rw-r--r-- | vendor/github.com/goamz/goamz/autoscaling/autoscaling.go | 1768 |
1 files changed, 0 insertions, 1768 deletions
diff --git a/vendor/github.com/goamz/goamz/autoscaling/autoscaling.go b/vendor/github.com/goamz/goamz/autoscaling/autoscaling.go deleted file mode 100644 index 8e9f8ab02..000000000 --- a/vendor/github.com/goamz/goamz/autoscaling/autoscaling.go +++ /dev/null @@ -1,1768 +0,0 @@ -// -// autoscaling: This package provides types and functions to interact with the AWS Auto Scale API -// -// Depends on https://wiki.ubuntu.com/goamz -// - -package autoscaling - -import ( - "encoding/base64" - "encoding/xml" - "fmt" - "log" - "net/http" - "net/http/httputil" - "net/url" - "sort" - "strconv" - "strings" - "time" - - "github.com/goamz/goamz/aws" -) - -const debug = false - -var timeNow = time.Now - -// AutoScaling contains the details of the AWS region to perform operations against. -type AutoScaling struct { - aws.Auth - aws.Region -} - -// New creates a new AutoScaling Client. -func New(auth aws.Auth, region aws.Region) *AutoScaling { - return &AutoScaling{auth, region} -} - -// ---------------------------------------------------------------------------- -// Request dispatching logic. - -// Error encapsulates an error returned by the AWS Auto Scaling API. -// -// See http://goo.gl/VZGuC for more details. -type Error struct { - // HTTP status code (200, 403, ...) - StatusCode int - // AutoScaling error code ("UnsupportedOperation", ...) - Code string - // The error type - Type string - // The human-oriented error message - Message string - RequestId string `xml:"RequestID"` -} - -func (err *Error) Error() string { - if err.Code == "" { - return err.Message - } - - return fmt.Sprintf("%s (%s)", err.Message, err.Code) -} - -type xmlErrors struct { - RequestId string `xml:"RequestId"` - Errors []Error `xml:"Error"` -} - -func (as *AutoScaling) query(params map[string]string, resp interface{}) error { - params["Version"] = "2011-01-01" - data := strings.NewReader(multimap(params).Encode()) - - hreq, err := http.NewRequest("POST", as.Region.AutoScalingEndpoint+"/", data) - if err != nil { - return err - } - - hreq.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value") - - token := as.Auth.Token() - if token != "" { - hreq.Header.Set("X-Amz-Security-Token", token) - } - - signer := aws.NewV4Signer(as.Auth, "autoscaling", as.Region) - signer.Sign(hreq) - - if debug { - log.Printf("%v -> {\n", hreq) - } - r, err := http.DefaultClient.Do(hreq) - - if err != nil { - log.Printf("Error calling Amazon %v", err) - return err - } - - defer r.Body.Close() - - if debug { - dump, _ := httputil.DumpResponse(r, true) - log.Printf("response:\n") - log.Printf("%v\n}\n", string(dump)) - } - if r.StatusCode != 200 { - return buildError(r) - } - err = xml.NewDecoder(r.Body).Decode(resp) - return err -} - -func buildError(r *http.Response) error { - var ( - err Error - errors xmlErrors - ) - xml.NewDecoder(r.Body).Decode(&errors) - if len(errors.Errors) > 0 { - err = errors.Errors[0] - } - - err.RequestId = errors.RequestId - err.StatusCode = r.StatusCode - if err.Message == "" { - err.Message = r.Status - } - return &err -} - -func multimap(p map[string]string) url.Values { - q := make(url.Values, len(p)) - for k, v := range p { - q[k] = []string{v} - } - return q -} - -func makeParams(action string) map[string]string { - params := make(map[string]string) - params["Action"] = action - return params -} - -func addParamsList(params map[string]string, label string, ids []string) { - for i, id := range ids { - params[label+"."+strconv.Itoa(i+1)] = id - } -} - -// ---------------------------------------------------------------------------- -// Filtering helper. - -// Filter builds filtering parameters to be used in an autoscaling query which supports -// filtering. For example: -// -// filter := NewFilter() -// filter.Add("architecture", "i386") -// filter.Add("launch-index", "0") -// resp, err := as.DescribeTags(filter,nil,nil) -// -type Filter struct { - m map[string][]string -} - -// NewFilter creates a new Filter. -func NewFilter() *Filter { - return &Filter{make(map[string][]string)} -} - -// Add appends a filtering parameter with the given name and value(s). -func (f *Filter) Add(name string, value ...string) { - f.m[name] = append(f.m[name], value...) -} - -func (f *Filter) addParams(params map[string]string) { - if f != nil { - a := make([]string, len(f.m)) - i := 0 - for k := range f.m { - a[i] = k - i++ - } - sort.StringSlice(a).Sort() - for i, k := range a { - prefix := "Filters.member." + strconv.Itoa(i+1) - params[prefix+".Name"] = k - for j, v := range f.m[k] { - params[prefix+".Values.member."+strconv.Itoa(j+1)] = v - } - } - } -} - -// ---------------------------------------------------------------------------- -// Auto Scaling base types and related functions. - -// SimpleResp is the basic response from most actions. -type SimpleResp struct { - XMLName xml.Name - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// EnabledMetric encapsulates a metric associated with an Auto Scaling Group -// -// See http://goo.gl/hXiH17 for more details -type EnabledMetric struct { - Granularity string `xml:"Granularity"` // The granularity of the enabled metric. - Metric string `xml:"Metric"` // The name of the enabled metric. -} - -// Instance encapsulates an instance type as returned by the Auto Scaling API -// -// See http://goo.gl/NwBxGh and http://goo.gl/OuoqhS for more details. -type Instance struct { - // General instance information - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - AvailabilityZone string `xml:"AvailabilityZone"` - HealthStatus string `xml:"HealthStatus"` - InstanceId string `xml:"InstanceId"` - LaunchConfigurationName string `xml:"LaunchConfigurationName"` - LifecycleState string `xml:"LifecycleState"` -} - -// SuspenedProcess encapsulates an Auto Scaling process that has been suspended -// -// See http://goo.gl/iObPgF for more details -type SuspendedProcess struct { - ProcessName string `xml:"ProcessName"` - SuspensionReason string `xml:"SuspensionReason"` -} - -// Tag encapsulates tag applied to an Auto Scaling group. -// -// See http://goo.gl/MG1hqs for more details -type Tag struct { - Key string `xml:"Key"` - PropagateAtLaunch bool `xml:"PropagateAtLaunch"` // Specifies whether the new tag will be applied to instances launched after the tag is created - ResourceId string `xml:"ResourceId"` // the name of the Auto Scaling group - not required if creating ASG - ResourceType string `xml:"ResourceType"` // currently only auto-scaling-group is supported - not required if creating ASG - Value string `xml:"Value"` -} - -// AutoScalingGroup encapsulates an Auto Scaling Group object -// -// See http://goo.gl/fJdYhg for more details. -type AutoScalingGroup struct { - AutoScalingGroupARN string `xml:"AutoScalingGroupARN"` - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - AvailabilityZones []string `xml:"AvailabilityZones>member"` - CreatedTime time.Time `xml:"CreatedTime"` - DefaultCooldown int `xml:"DefaultCooldown"` - DesiredCapacity int `xml:"DesiredCapacity"` - EnabledMetrics []EnabledMetric `xml:"EnabledMetric>member"` - HealthCheckGracePeriod int `xml:"HealthCheckGracePeriod"` - HealthCheckType string `xml:"HealthCheckType"` - Instances []Instance `xml:"Instances>member"` - LaunchConfigurationName string `xml:"LaunchConfigurationName"` - LoadBalancerNames []string `xml:"LoadBalancerNames>member"` - MaxSize int `xml:"MaxSize"` - MinSize int `xml:"MinSize"` - PlacementGroup string `xml:"PlacementGroup"` - Status string `xml:"Status"` - SuspendedProcesses []SuspendedProcess `xml:"SuspendedProcesses>member"` - Tags []Tag `xml:"Tags>member"` - TerminationPolicies []string `xml:"TerminationPolicies>member"` - VPCZoneIdentifier string `xml:"VPCZoneIdentifier"` -} - -// CreateAutoScalingGroupParams type encapsulates options for the respective request. -// -// See http://goo.gl/3S13Bv for more details. -type CreateAutoScalingGroupParams struct { - AutoScalingGroupName string - AvailabilityZones []string - DefaultCooldown int - DesiredCapacity int - HealthCheckGracePeriod int - HealthCheckType string - InstanceId string - LaunchConfigurationName string - LoadBalancerNames []string - MaxSize int - MinSize int - PlacementGroup string - Tags []Tag - TerminationPolicies []string - VPCZoneIdentifier string -} - -// AttachInstances Attach running instances to an autoscaling group -// -// See http://goo.gl/zDZbuQ for more details. -func (as *AutoScaling) AttachInstances(name string, instanceIds []string) (resp *SimpleResp, err error) { - params := makeParams("AttachInstances") - params["AutoScalingGroupName"] = name - - for i, id := range instanceIds { - key := fmt.Sprintf("InstanceIds.member.%d", i+1) - params[key] = id - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// CreateAutoScalingGroup creates an Auto Scaling Group on AWS -// -// Required params: AutoScalingGroupName, MinSize, MaxSize -// -// See http://goo.gl/3S13Bv for more details. -func (as *AutoScaling) CreateAutoScalingGroup(options *CreateAutoScalingGroupParams) ( - resp *SimpleResp, err error) { - params := makeParams("CreateAutoScalingGroup") - - params["AutoScalingGroupName"] = options.AutoScalingGroupName - params["MaxSize"] = strconv.Itoa(options.MaxSize) - params["MinSize"] = strconv.Itoa(options.MinSize) - params["DesiredCapacity"] = strconv.Itoa(options.DesiredCapacity) - - if options.DefaultCooldown > 0 { - params["DefaultCooldown"] = strconv.Itoa(options.DefaultCooldown) - } - if options.HealthCheckGracePeriod > 0 { - params["HealthCheckGracePeriod"] = strconv.Itoa(options.HealthCheckGracePeriod) - } - if options.HealthCheckType != "" { - params["HealthCheckType"] = options.HealthCheckType - } - if options.InstanceId != "" { - params["InstanceId"] = options.InstanceId - } - if options.LaunchConfigurationName != "" { - params["LaunchConfigurationName"] = options.LaunchConfigurationName - } - if options.PlacementGroup != "" { - params["PlacementGroup"] = options.PlacementGroup - } - if options.VPCZoneIdentifier != "" { - params["VPCZoneIdentifier"] = options.VPCZoneIdentifier - } - if len(options.LoadBalancerNames) > 0 { - addParamsList(params, "LoadBalancerNames.member", options.LoadBalancerNames) - } - if len(options.AvailabilityZones) > 0 { - addParamsList(params, "AvailabilityZones.member", options.AvailabilityZones) - } - if len(options.TerminationPolicies) > 0 { - addParamsList(params, "TerminationPolicies.member", options.TerminationPolicies) - } - for i, t := range options.Tags { - key := "Tags.member.%d.%s" - index := i + 1 - params[fmt.Sprintf(key, index, "Key")] = t.Key - params[fmt.Sprintf(key, index, "Value")] = t.Value - params[fmt.Sprintf(key, index, "PropagateAtLaunch")] = strconv.FormatBool(t.PropagateAtLaunch) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// EBS represents the AWS EBS volume data type -// -// See http://goo.gl/nDUL2h for more details -type EBS struct { - DeleteOnTermination bool `xml:"DeleteOnTermination"` - Iops int `xml:"Iops"` - SnapshotId string `xml:"SnapshotId"` - VolumeSize int `xml:"VolumeSize"` - VolumeType string `xml:"VolumeType"` -} - -// BlockDeviceMapping represents the association of a block device with ebs volume. -// -// See http://goo.gl/wEGwkU for more details. -type BlockDeviceMapping struct { - DeviceName string `xml:"DeviceName"` - Ebs EBS `xml:"Ebs"` - NoDevice bool `xml:"NoDevice"` - VirtualName string `xml:"VirtualName"` -} - -// InstanceMonitoring data type -// -// See http://goo.gl/TfaPwz for more details -type InstanceMonitoring struct { - Enabled bool `xml:"Enabled"` -} - -// LaunchConfiguration encapsulates the LaunchConfiguration Data Type -// -// See http://goo.gl/TOJunp -type LaunchConfiguration struct { - AssociatePublicIpAddress bool `xml:"AssociatePublicIpAddress"` - BlockDeviceMappings []BlockDeviceMapping `xml:"BlockDeviceMappings>member"` - CreatedTime time.Time `xml:"CreatedTime"` - EbsOptimized bool `xml:"EbsOptimized"` - IamInstanceProfile string `xml:"IamInstanceProfile"` - ImageId string `xml:"ImageId"` - InstanceId string `xml:"InstanceId"` - InstanceMonitoring InstanceMonitoring `xml:"InstanceMonitoring"` - InstanceType string `xml:"InstanceType"` - KernelId string `xml:"KernelId"` - KeyName string `xml:"KeyName"` - LaunchConfigurationARN string `xml:"LaunchConfigurationARN"` - LaunchConfigurationName string `xml:"LaunchConfigurationName"` - RamdiskId string `xml:"RamdiskId"` - SecurityGroups []string `xml:"SecurityGroups>member"` - SpotPrice string `xml:"SpotPrice"` - UserData string `xml:"UserData"` -} - -// CreateLaunchConfiguration creates a launch configuration -// -// Required params: AutoScalingGroupName, MinSize, MaxSize -// -// See http://goo.gl/8e0BSF for more details. -func (as *AutoScaling) CreateLaunchConfiguration(lc *LaunchConfiguration) ( - resp *SimpleResp, err error) { - - var b64 = base64.StdEncoding - - params := makeParams("CreateLaunchConfiguration") - params["LaunchConfigurationName"] = lc.LaunchConfigurationName - - if lc.AssociatePublicIpAddress { - params["AssociatePublicIpAddress"] = strconv.FormatBool(lc.AssociatePublicIpAddress) - } - if lc.EbsOptimized { - params["EbsOptimized"] = strconv.FormatBool(lc.EbsOptimized) - } - if lc.IamInstanceProfile != "" { - params["IamInstanceProfile"] = lc.IamInstanceProfile - } - if lc.ImageId != "" { - params["ImageId"] = lc.ImageId - } - if lc.InstanceId != "" { - params["InstanceId"] = lc.InstanceId - } - if lc.InstanceMonitoring != (InstanceMonitoring{}) { - params["InstanceMonitoring.Enabled"] = strconv.FormatBool(lc.InstanceMonitoring.Enabled) - } - if lc.InstanceType != "" { - params["InstanceType"] = lc.InstanceType - } - if lc.KernelId != "" { - params["KernelId"] = lc.KernelId - } - if lc.KeyName != "" { - params["KeyName"] = lc.KeyName - } - if lc.RamdiskId != "" { - params["RamdiskId"] = lc.RamdiskId - } - if lc.SpotPrice != "" { - params["SpotPrice"] = lc.SpotPrice - } - if lc.UserData != "" { - params["UserData"] = b64.EncodeToString([]byte(lc.UserData)) - } - - // Add our block device mappings - for i, bdm := range lc.BlockDeviceMappings { - key := "BlockDeviceMappings.member.%d.%s" - index := i + 1 - params[fmt.Sprintf(key, index, "DeviceName")] = bdm.DeviceName - params[fmt.Sprintf(key, index, "VirtualName")] = bdm.VirtualName - - if bdm.NoDevice { - params[fmt.Sprintf(key, index, "NoDevice")] = "true" - } - - if bdm.Ebs != (EBS{}) { - key := "BlockDeviceMappings.member.%d.Ebs.%s" - - // Defaults to true - params[fmt.Sprintf(key, index, "DeleteOnTermination")] = strconv.FormatBool(bdm.Ebs.DeleteOnTermination) - - if bdm.Ebs.Iops > 0 { - params[fmt.Sprintf(key, index, "Iops")] = strconv.Itoa(bdm.Ebs.Iops) - } - if bdm.Ebs.SnapshotId != "" { - params[fmt.Sprintf(key, index, "SnapshotId")] = bdm.Ebs.SnapshotId - } - if bdm.Ebs.VolumeSize > 0 { - params[fmt.Sprintf(key, index, "VolumeSize")] = strconv.Itoa(bdm.Ebs.VolumeSize) - } - if bdm.Ebs.VolumeType != "" { - params[fmt.Sprintf(key, index, "VolumeType")] = bdm.Ebs.VolumeType - } - } - } - - if len(lc.SecurityGroups) > 0 { - addParamsList(params, "SecurityGroups.member", lc.SecurityGroups) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// CreateOrUpdateTags creates or updates Auto Scaling Group Tags -// -// See http://goo.gl/e1UIXb for more details. -func (as *AutoScaling) CreateOrUpdateTags(tags []Tag) (resp *SimpleResp, err error) { - params := makeParams("CreateOrUpdateTags") - - for i, t := range tags { - key := "Tags.member.%d.%s" - index := i + 1 - params[fmt.Sprintf(key, index, "Key")] = t.Key - params[fmt.Sprintf(key, index, "Value")] = t.Value - params[fmt.Sprintf(key, index, "PropagateAtLaunch")] = strconv.FormatBool(t.PropagateAtLaunch) - params[fmt.Sprintf(key, index, "ResourceId")] = t.ResourceId - if t.ResourceType != "" { - params[fmt.Sprintf(key, index, "ResourceType")] = t.ResourceType - } else { - params[fmt.Sprintf(key, index, "ResourceType")] = "auto-scaling-group" - } - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -type CompleteLifecycleActionParams struct { - AutoScalingGroupName string - LifecycleActionResult string - LifecycleActionToken string - LifecycleHookName string -} - -// CompleteLifecycleAction completes the lifecycle action for the associated token initiated under the given lifecycle hook with the specified result. -// -// Part of the basic sequence for adding a lifecycle hook to an Auto Scaling group: -// 1) Create a notification target (SQS queue || SNS Topic) -// 2) Create an IAM role to allow the ASG topublish lifecycle notifications to the designated SQS queue or SNS topic -// 3) Create the lifecycle hook. You can create a hook that acts when instances launch or when instances terminate -// 4) If necessary, record the lifecycle action heartbeat to keep the instance in a pending state -// 5) ***Complete the lifecycle action*** -// -// See http://goo.gl/k4fl0p for more details -func (as *AutoScaling) CompleteLifecycleAction(options *CompleteLifecycleActionParams) ( - resp *SimpleResp, err error) { - params := makeParams("CompleteLifecycleAction") - - params["AutoScalingGroupName"] = options.AutoScalingGroupName - params["LifecycleActionResult"] = options.LifecycleActionResult - params["LifecycleActionToken"] = options.LifecycleActionToken - params["LifecycleHookName"] = options.LifecycleHookName - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeleteAutoScalingGroup deletes an Auto Scaling Group -// -// See http://goo.gl/us7VSffor for more details. -func (as *AutoScaling) DeleteAutoScalingGroup(asgName string, forceDelete bool) ( - resp *SimpleResp, err error) { - params := makeParams("DeleteAutoScalingGroup") - params["AutoScalingGroupName"] = asgName - - if forceDelete { - params["ForceDelete"] = "true" - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeleteLaunchConfiguration deletes a Launch Configuration -// -// See http://goo.gl/xksfyR for more details. -func (as *AutoScaling) DeleteLaunchConfiguration(name string) (resp *SimpleResp, err error) { - params := makeParams("DeleteLaunchConfiguration") - params["LaunchConfigurationName"] = name - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeleteLifecycleHook eletes the specified lifecycle hook. -// If there are any outstanding lifecycle actions, they are completed first -// -// See http://goo.gl/MwX1vG for more details. -func (as *AutoScaling) DeleteLifecycleHook(asgName, lifecycleHookName string) (resp *SimpleResp, err error) { - params := makeParams("DeleteLifecycleHook") - params["AutoScalingGroupName"] = asgName - params["LifecycleHookName"] = lifecycleHookName - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeleteNotificationConfiguration deletes notifications created by PutNotificationConfiguration. -// -// See http://goo.gl/jTqoYz for more details -func (as *AutoScaling) DeleteNotificationConfiguration(asgName string, topicARN string) ( - resp *SimpleResp, err error) { - params := makeParams("DeleteNotificationConfiguration") - params["AutoScalingGroupName"] = asgName - params["TopicARN"] = topicARN - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeletePolicy deletes a policy created by PutScalingPolicy. -// -// policyName might be the policy name or ARN -// -// See http://goo.gl/aOQPH2 for more details -func (as *AutoScaling) DeletePolicy(asgName string, policyName string) (resp *SimpleResp, err error) { - params := makeParams("DeletePolicy") - params["AutoScalingGroupName"] = asgName - params["PolicyName"] = policyName - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeleteScheduledAction deletes a scheduled action previously created using the PutScheduledUpdateGroupAction. -// -// See http://goo.gl/Zss9CH for more details -func (as *AutoScaling) DeleteScheduledAction(asgName string, scheduledActionName string) (resp *SimpleResp, err error) { - params := makeParams("DeleteScheduledAction") - params["AutoScalingGroupName"] = asgName - params["ScheduledActionName"] = scheduledActionName - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DeleteTags deletes autoscaling group tags -// -// See http://goo.gl/o8HzAk for more details. -func (as *AutoScaling) DeleteTags(tags []Tag) (resp *SimpleResp, err error) { - params := makeParams("DeleteTags") - - for i, t := range tags { - key := "Tags.member.%d.%s" - index := i + 1 - params[fmt.Sprintf(key, index, "Key")] = t.Key - params[fmt.Sprintf(key, index, "Value")] = t.Value - params[fmt.Sprintf(key, index, "PropagateAtLaunch")] = strconv.FormatBool(t.PropagateAtLaunch) - params[fmt.Sprintf(key, index, "ResourceId")] = t.ResourceId - params[fmt.Sprintf(key, index, "ResourceType")] = "auto-scaling-group" - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -//DescribeAccountLimits response wrapper -// -// See http://goo.gl/tKsMN0 for more details. -type DescribeAccountLimitsResp struct { - MaxNumberOfAutoScalingGroups int `xml:"DescribeAccountLimitsResult>MaxNumberOfAutoScalingGroups"` - MaxNumberOfLaunchConfigurations int `xml:"DescribeAccountLimitsResult>MaxNumberOfLaunchConfigurations"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeAccountLimits - Returns the limits for the Auto Scaling resources currently allowed for your AWS account. -// -// See http://goo.gl/tKsMN0 for more details. -func (as *AutoScaling) DescribeAccountLimits() (resp *DescribeAccountLimitsResp, err error) { - params := makeParams("DescribeAccountLimits") - - resp = new(DescribeAccountLimitsResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// AdjustmentType specifies whether the PutScalingPolicy ScalingAdjustment parameter is an absolute number or a percentage of the current capacity. -// -// See http://goo.gl/tCFqeL for more details -type AdjustmentType struct { - AdjustmentType string //Valid values are ChangeInCapacity, ExactCapacity, and PercentChangeInCapacity. -} - -//DescribeAdjustmentTypes response wrapper -// -// See http://goo.gl/hGx3Pc for more details. -type DescribeAdjustmentTypesResp struct { - AdjustmentTypes []AdjustmentType `xml:"DescribeAdjustmentTypesResult>AdjustmentTypes>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeAdjustmentTypes returns policy adjustment types for use in the PutScalingPolicy action. -// -// See http://goo.gl/hGx3Pc for more details. -func (as *AutoScaling) DescribeAdjustmentTypes() (resp *DescribeAdjustmentTypesResp, err error) { - params := makeParams("DescribeAdjustmentTypes") - - resp = new(DescribeAdjustmentTypesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DescribeAutoScalingGroups response wrapper -// -// See http://goo.gl/nW74Ut for more details. -type DescribeAutoScalingGroupsResp struct { - AutoScalingGroups []AutoScalingGroup `xml:"DescribeAutoScalingGroupsResult>AutoScalingGroups>member"` - NextToken string `xml:"DescribeAutoScalingGroupsResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeAutoScalingGroups returns a full description of each Auto Scaling group in the given list -// If no autoscaling groups are provided, returns the details of all autoscaling groups -// Supports pagination by using the returned "NextToken" parameter for subsequent calls -// -// See http://goo.gl/nW74Ut for more details. -func (as *AutoScaling) DescribeAutoScalingGroups(names []string, maxRecords int, nextToken string) ( - resp *DescribeAutoScalingGroupsResp, err error) { - params := makeParams("DescribeAutoScalingGroups") - - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - if len(names) > 0 { - addParamsList(params, "AutoScalingGroupNames.member", names) - } - - resp = new(DescribeAutoScalingGroupsResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DescribeAutoScalingInstances response wrapper -// -// See http://goo.gl/ckzORt for more details. -type DescribeAutoScalingInstancesResp struct { - AutoScalingInstances []Instance `xml:"DescribeAutoScalingInstancesResult>AutoScalingInstances>member"` - NextToken string `xml:"DescribeAutoScalingInstancesResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeAutoScalingInstances returns a description of each Auto Scaling instance in the InstanceIds list. -// If a list is not provided, the service returns the full details of all instances up to a maximum of 50 -// By default, the service returns a list of 20 items. -// Supports pagination by using the returned "NextToken" parameter for subsequent calls -// -// See http://goo.gl/ckzORt for more details. -func (as *AutoScaling) DescribeAutoScalingInstances(ids []string, maxRecords int, nextToken string) ( - resp *DescribeAutoScalingInstancesResp, err error) { - params := makeParams("DescribeAutoScalingInstances") - - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - if len(ids) > 0 { - addParamsList(params, "InstanceIds.member", ids) - } - - resp = new(DescribeAutoScalingInstancesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DescribeAutoScalingNotificationTypes response wrapper -// -// See http://goo.gl/pmLIoE for more details. -type DescribeAutoScalingNotificationTypesResp struct { - AutoScalingNotificationTypes []string `xml:"DescribeAutoScalingNotificationTypesResult>AutoScalingNotificationTypes>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeAutoScalingNotificationTypes returns a list of all notification types that are supported by Auto Scaling -// -// See http://goo.gl/pmLIoE for more details. -func (as *AutoScaling) DescribeAutoScalingNotificationTypes() (resp *DescribeAutoScalingNotificationTypesResp, err error) { - params := makeParams("DescribeAutoScalingNotificationTypes") - - resp = new(DescribeAutoScalingNotificationTypesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DescribeLaunchConfigurationResp defines the basic response structure for launch configuration -// requests -// -// See http://goo.gl/y31YYE for more details. -type DescribeLaunchConfigurationsResp struct { - LaunchConfigurations []LaunchConfiguration `xml:"DescribeLaunchConfigurationsResult>LaunchConfigurations>member"` - NextToken string `xml:"DescribeLaunchConfigurationsResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeLaunchConfigurations returns details about the launch configurations supplied in -// the list. If the list is nil, information is returned about all launch configurations in the -// region. -// -// See http://goo.gl/y31YYE for more details. -func (as *AutoScaling) DescribeLaunchConfigurations(names []string, maxRecords int, nextToken string) ( - resp *DescribeLaunchConfigurationsResp, err error) { - params := makeParams("DescribeLaunchConfigurations") - - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - if len(names) > 0 { - addParamsList(params, "LaunchConfigurationNames.member", names) - } - - resp = new(DescribeLaunchConfigurationsResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - - return resp, nil -} - -// DescribeLifecycleHookTypesResult wraps a DescribeLifecycleHookTypes response -// -// See http://goo.gl/qiAH31 for more details. -type DescribeLifecycleHookTypesResult struct { - LifecycleHookTypes []string `xml:"DescribeLifecycleHookTypesResult>LifecycleHookTypes>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeLifecycleHookTypes describes the available types of lifecycle hooks -// -// See http://goo.gl/E9IBtY for more information -func (as *AutoScaling) DescribeLifecycleHookTypes() ( - resp *DescribeLifecycleHookTypesResult, err error) { - params := makeParams("DescribeLifecycleHookTypes") - - resp = new(DescribeLifecycleHookTypesResult) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// LifecycleHook represents a lifecyclehook object -// -// See http://goo.gl/j62Iqu for more information -type LifecycleHook struct { - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - DefaultResult string `xml:"DefaultResult"` - GlobalTimeout int `xml:"GlobalTimeout"` - HeartbeatTimeout int `xml:"HeartbeatTimeout"` - LifecycleHookName string `xml:"LifecycleHookName"` - LifecycleTransition string `xml:"LifecycleTransition"` - NotificationMetadata string `xml:"NotificationMetadata"` - NotificationTargetARN string `xml:"NotificationTargetARN"` - RoleARN string `xml:"RoleARN"` -} - -// DescribeLifecycleHooks wraps a DescribeLifecycleHooks response -// -// See http://goo.gl/wQkWiz for more details. -type DescribeLifecycleHooksResult struct { - LifecycleHooks []string `xml:"DescribeLifecycleHooksResult>LifecycleHooks>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeLifecycleHooks describes the lifecycle hooks that currently belong to the specified Auto Scaling group -// -// See http://goo.gl/wQkWiz for more information -func (as *AutoScaling) DescribeLifecycleHooks(asgName string, hookNames []string) ( - resp *DescribeLifecycleHooksResult, err error) { - params := makeParams("DescribeLifecycleHooks") - params["AutoScalingGroupName"] = asgName - - if len(hookNames) > 0 { - addParamsList(params, "LifecycleHookNames.member", hookNames) - } - - resp = new(DescribeLifecycleHooksResult) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// MetricGranularity encapsulates the MetricGranularityType -// -// See http://goo.gl/WJ82AA for more details -type MetricGranularity struct { - Granularity string `xml:"Granularity"` -} - -//MetricCollection encapsulates the MetricCollectionType -// -// See http://goo.gl/YrEG6h for more details -type MetricCollection struct { - Metric string `xml:"Metric"` -} - -// DescribeMetricCollectionTypesResp response wrapper -// -// See http://goo.gl/UyYc3i for more details. -type DescribeMetricCollectionTypesResp struct { - Granularities []MetricGranularity `xml:"DescribeMetricCollectionTypesResult>Granularities>member"` - Metrics []MetricCollection `xml:"DescribeMetricCollectionTypesResult>Metrics>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeMetricCollectionTypes returns a list of metrics and a corresponding list of granularities for each metric -// -// See http://goo.gl/UyYc3i for more details. -func (as *AutoScaling) DescribeMetricCollectionTypes() (resp *DescribeMetricCollectionTypesResp, err error) { - params := makeParams("DescribeMetricCollectionTypes") - - resp = new(DescribeMetricCollectionTypesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// NotificationConfiguration encapsulates the NotificationConfigurationType -// -// See http://goo.gl/M8xYOQ for more details -type NotificationConfiguration struct { - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - NotificationType string `xml:"NotificationType"` - TopicARN string `xml:"TopicARN"` -} - -// DescribeNotificationConfigurations response wrapper -// -// See http://goo.gl/qiAH31 for more details. -type DescribeNotificationConfigurationsResp struct { - NotificationConfigurations []NotificationConfiguration `xml:"DescribeNotificationConfigurationsResult>NotificationConfigurations>member"` - NextToken string `xml:"DescribeNotificationConfigurationsResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeNotificationConfigurations returns a list of notification actions associated with Auto Scaling groups for specified events. -// Supports pagination by using the returned "NextToken" parameter for subsequent calls -// -// http://goo.gl/qiAH31 for more details. -func (as *AutoScaling) DescribeNotificationConfigurations(asgNames []string, maxRecords int, nextToken string) ( - resp *DescribeNotificationConfigurationsResp, err error) { - params := makeParams("DescribeNotificationConfigurations") - - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - if len(asgNames) > 0 { - addParamsList(params, "AutoScalingGroupNames.member", asgNames) - } - - resp = new(DescribeNotificationConfigurationsResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// Alarm encapsulates the Alarm data type. -// -// See http://goo.gl/Q0uPAB for more details -type Alarm struct { - AlarmARN string `xml:"AlarmARN"` - AlarmName string `xml:"AlarmName"` -} - -// ScalingPolicy encapsulates the ScalingPolicyType -// -// See http://goo.gl/BYAT18 for more details -type ScalingPolicy struct { - AdjustmentType string `xml:"AdjustmentType"` // ChangeInCapacity, ExactCapacity, and PercentChangeInCapacity - Alarms []Alarm `xml:"Alarms>member"` // A list of CloudWatch Alarms related to the policy - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - Cooldown int `xml:"Cooldown"` - MinAdjustmentStep int `xml:"MinAdjustmentStep"` // Changes the DesiredCapacity of ASG by at least the specified number of instances. - PolicyARN string `xml:"PolicyARN"` - PolicyName string `xml:"PolicyName"` - ScalingAdjustment int `xml:"ScalingAdjustment"` -} - -// DescribePolicies response wrapper -// -// http://goo.gl/bN7A9T for more details. -type DescribePoliciesResp struct { - ScalingPolicies []ScalingPolicy `xml:"DescribePoliciesResult>ScalingPolicies>member"` - NextToken string `xml:"DescribePoliciesResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribePolicies returns descriptions of what each policy does. -// Supports pagination by using the returned "NextToken" parameter for subsequent calls -// -// http://goo.gl/bN7A9Tfor more details. -func (as *AutoScaling) DescribePolicies(asgName string, policyNames []string, maxRecords int, nextToken string) ( - resp *DescribePoliciesResp, err error) { - params := makeParams("DescribePolicies") - - if asgName != "" { - params["AutoScalingGroupName"] = asgName - } - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - if len(policyNames) > 0 { - addParamsList(params, "PolicyNames.member", policyNames) - } - - resp = new(DescribePoliciesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// Activity encapsulates the Activity data type -// -// See http://goo.gl/fRaVi1 for more details -type Activity struct { - ActivityId string `xml:"ActivityId"` - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - Cause string `xml:"Cause"` - Description string `xml:"Description"` - Details string `xml:"Details"` - EndTime time.Time `xml:"EndTime"` - Progress int `xml:"Progress"` - StartTime time.Time `xml:"StartTime"` - StatusCode string `xml:"StatusCode"` - StatusMessage string `xml:"StatusMessage"` -} - -// DescribeScalingActivities response wrapper -// -// http://goo.gl/noOXIC for more details. -type DescribeScalingActivitiesResp struct { - Activities []Activity `xml:"DescribeScalingActivitiesResult>Activities>member"` - NextToken string `xml:"DescribeScalingActivitiesResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeScalingActivities returns the scaling activities for the specified Auto Scaling group. -// Supports pagination by using the returned "NextToken" parameter for subsequent calls -// -// http://goo.gl/noOXIC more details. -func (as *AutoScaling) DescribeScalingActivities(asgName string, activityIds []string, maxRecords int, nextToken string) ( - resp *DescribeScalingActivitiesResp, err error) { - params := makeParams("DescribeScalingActivities") - - if asgName != "" { - params["AutoScalingGroupName"] = asgName - } - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - if len(activityIds) > 0 { - addParamsList(params, "ActivityIds.member", activityIds) - } - - resp = new(DescribeScalingActivitiesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// ProcessType encapsulates the Auto Scaling process data type -// -// See http://goo.gl/9BvNik for more details. -type ProcessType struct { - ProcessName string `xml:"ProcessName"` -} - -// DescribeScalingProcessTypes response wrapper -// -// See http://goo.gl/rkp2tw for more details. -type DescribeScalingProcessTypesResp struct { - Processes []ProcessType `xml:"DescribeScalingProcessTypesResult>Processes>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeScalingProcessTypes returns scaling process types for use in the ResumeProcesses and SuspendProcesses actions. -// -// See http://goo.gl/rkp2tw for more details. -func (as *AutoScaling) DescribeScalingProcessTypes() (resp *DescribeScalingProcessTypesResp, err error) { - params := makeParams("DescribeScalingProcessTypes") - - resp = new(DescribeScalingProcessTypesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// ScheduledUpdateGroupAction contains the information to be used in a scheduled update to an -// AutoScalingGroup -// -// See http://goo.gl/z2Kfxe for more details -type ScheduledUpdateGroupAction struct { - AutoScalingGroupName string `xml:"AutoScalingGroupName"` - DesiredCapacity int `xml:"DesiredCapacity"` - EndTime time.Time `xml:"EndTime"` - MaxSize int `xml:"MaxSize"` - MinSize int `xml:"MinSize"` - Recurrence string `xml:"Recurrence"` - ScheduledActionARN string `xml:"ScheduledActionARN"` - ScheduledActionName string `xml:"ScheduledActionName"` - StartTime time.Time `xml:"StartTime"` - Time time.Time `xml:"Time"` -} - -// DescribeScheduledActionsResult contains the response from a DescribeScheduledActions. -// -// See http://goo.gl/zqrJLx for more details. -type DescribeScheduledActionsResult struct { - ScheduledUpdateGroupActions []ScheduledUpdateGroupAction `xml:"DescribeScheduledActionsResult>ScheduledUpdateGroupActions>member"` - NextToken string `xml:"DescribeScheduledActionsResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// ScheduledActionsRequestParams contains the items that can be specified when making -// a ScheduledActions request -type DescribeScheduledActionsParams struct { - AutoScalingGroupName string - EndTime time.Time - MaxRecords int - ScheduledActionNames []string - StartTime time.Time - NextToken string -} - -// DescribeScheduledActions returns a list of the current scheduled actions. If the -// AutoScalingGroup name is provided it will list all the scheduled actions for that group. -// -// See http://goo.gl/zqrJLx for more details. -func (as *AutoScaling) DescribeScheduledActions(options *DescribeScheduledActionsParams) ( - resp *DescribeScheduledActionsResult, err error) { - params := makeParams("DescribeScheduledActions") - - if options.AutoScalingGroupName != "" { - params["AutoScalingGroupName"] = options.AutoScalingGroupName - } - if !options.StartTime.IsZero() { - params["StartTime"] = options.StartTime.Format(time.RFC3339) - } - if !options.EndTime.IsZero() { - params["EndTime"] = options.EndTime.Format(time.RFC3339) - } - if options.MaxRecords > 0 { - params["MaxRecords"] = strconv.Itoa(options.MaxRecords) - } - if options.NextToken != "" { - params["NextToken"] = options.NextToken - } - if len(options.ScheduledActionNames) > 0 { - addParamsList(params, "ScheduledActionNames.member", options.ScheduledActionNames) - } - - resp = new(DescribeScheduledActionsResult) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DescribeTags response wrapper -// -// See http://goo.gl/ZTEU3G for more details. -type DescribeTagsResp struct { - Tags []Tag `xml:"DescribeTagsResult>Tags>member"` - NextToken string `xml:"DescribeTagsResult>NextToken"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeTags lists the Auto Scaling group tags. -// Supports pagination by using the returned "NextToken" parameter for subsequent calls -// -// See http://goo.gl/ZTEU3G for more details. -func (as *AutoScaling) DescribeTags(filter *Filter, maxRecords int, nextToken string) ( - resp *DescribeTagsResp, err error) { - params := makeParams("DescribeTags") - - if maxRecords != 0 { - params["MaxRecords"] = strconv.Itoa(maxRecords) - } - if nextToken != "" { - params["NextToken"] = nextToken - } - - filter.addParams(params) - - resp = new(DescribeTagsResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DescribeTerminationPolicyTypes response wrapper -// -// See http://goo.gl/ZTEU3G for more details. -type DescribeTerminationPolicyTypesResp struct { - TerminationPolicyTypes []string `xml:"DescribeTerminationPolicyTypesResult>TerminationPolicyTypes>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DescribeTerminationPolicyTypes returns a list of all termination policies supported by Auto Scaling -// -// See http://goo.gl/ZTEU3G for more details. -func (as *AutoScaling) DescribeTerminationPolicyTypes() (resp *DescribeTerminationPolicyTypesResp, err error) { - params := makeParams("DescribeTerminationPolicyTypes") - - resp = new(DescribeTerminationPolicyTypesResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DetachInstancesResult wraps a DetachInstances response -type DetachInstancesResult struct { - Activities []Activity `xml:"DetachInstancesResult>Activities>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// DetachInstances removes an instance from an Auto Scaling group -// -// See http://goo.gl/cNwrqF for more details -func (as *AutoScaling) DetachInstances(asgName string, instanceIds []string, decrementCapacity bool) ( - resp *DetachInstancesResult, err error) { - params := makeParams("DetachInstances") - params["AutoScalingGroupName"] = asgName - params["ShouldDecrementDesiredCapacity"] = strconv.FormatBool(decrementCapacity) - - if len(instanceIds) > 0 { - addParamsList(params, "InstanceIds.member", instanceIds) - } - - resp = new(DetachInstancesResult) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// DisableMetricsCollection disables monitoring of group metrics for the Auto Scaling group specified in asgName. -// You can specify the list of affected metrics with the metrics parameter. If no metrics are specified, all metrics are disabled -// -// See http://goo.gl/kAvzQw for more details. -func (as *AutoScaling) DisableMetricsCollection(asgName string, metrics []string) ( - resp *SimpleResp, err error) { - params := makeParams("DisableMetricsCollection") - params["AutoScalingGroupName"] = asgName - - if len(metrics) > 0 { - addParamsList(params, "Metrics.member", metrics) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// EnableMetricsCollection enables monitoring of group metrics for the Auto Scaling group specified in asNmae. -// You can specify the list of affected metrics with the metrics parameter. -// Auto Scaling metrics collection can be turned on only if the InstanceMonitoring flag is set to true. -// Currently, the only legal granularity is "1Minute". -// -// See http://goo.gl/UcVDWn for more details. -func (as *AutoScaling) EnableMetricsCollection(asgName string, metrics []string, granularity string) ( - resp *SimpleResp, err error) { - params := makeParams("EnableMetricsCollection") - params["AutoScalingGroupName"] = asgName - params["Granularity"] = granularity - - if len(metrics) > 0 { - addParamsList(params, "Metrics.member", metrics) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// EnterStandbyResult wraps an EnterStandby response -type EnterStandbyResult struct { - Activities []Activity `xml:"EnterStandbyResult>Activities>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// EnterStandby moves instances in an Auto Scaling group into a Standby mode. -// -// See http://goo.gl/BJ3lXs for more information -func (as *AutoScaling) EnterStandby(asgName string, instanceIds []string, decrementCapacity bool) ( - resp *EnterStandbyResult, err error) { - params := makeParams("EnterStandby") - params["AutoScalingGroupName"] = asgName - params["ShouldDecrementDesiredCapacity"] = strconv.FormatBool(decrementCapacity) - - if len(instanceIds) > 0 { - addParamsList(params, "InstanceIds.member", instanceIds) - } - - resp = new(EnterStandbyResult) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// ExecutePolicy executes the specified policy. -// -// See http://goo.gl/BxHpFc for more details. -func (as *AutoScaling) ExecutePolicy(policyName string, asgName string, honorCooldown bool) ( - resp *SimpleResp, err error) { - params := makeParams("ExecutePolicy") - params["PolicyName"] = policyName - - if asgName != "" { - params["AutoScalingGroupName"] = asgName - } - if honorCooldown { - params["HonorCooldown"] = strconv.FormatBool(honorCooldown) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// ExitStandbyResult wraps an ExitStandby response -type ExitStandbyResult struct { - Activities []Activity `xml:"ExitStandbyResult>Activities>member"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// ExitStandby moves an instance out of Standby mode. -// -// See http://goo.gl/9zQV4G for more information -func (as *AutoScaling) ExitStandby(asgName string, instanceIds []string) ( - resp *ExitStandbyResult, err error) { - params := makeParams("ExitStandby") - params["AutoScalingGroupName"] = asgName - - if len(instanceIds) > 0 { - addParamsList(params, "InstanceIds.member", instanceIds) - } - - resp = new(ExitStandbyResult) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// PutLifecycleHookParams wraps a PutLifecycleHook request -// -// See http://goo.gl/zsNqp5 for more details -type PutLifecycleHookParams struct { - AutoScalingGroupName string - DefaultResult string - HeartbeatTimeout int - LifecycleHookName string - LifecycleTransition string - NotificationMetadata string - NotificationTargetARN string - RoleARN string -} - -// PutLifecycleHook Creates or updates a lifecycle hook for an Auto Scaling Group. -// -// Part of the basic sequence for adding a lifecycle hook to an Auto Scaling group: -// 1) Create a notification target (SQS queue || SNS Topic) -// 2) Create an IAM role to allow the ASG topublish lifecycle notifications to the designated SQS queue or SNS topic -// 3) *** Create the lifecycle hook. You can create a hook that acts when instances launch or when instances terminate*** -// 4) If necessary, record the lifecycle action heartbeat to keep the instance in a pending state -// 5) Complete the lifecycle action -// -// See http://goo.gl/9XrROq for more details. -func (as *AutoScaling) PutLifecycleHook(options *PutLifecycleHookParams) ( - resp *SimpleResp, err error) { - params := makeParams("PutLifecycleHook") - params["AutoScalingGroupName"] = options.AutoScalingGroupName - params["LifecycleHookName"] = options.LifecycleHookName - - if options.DefaultResult != "" { - params["DefaultResult"] = options.DefaultResult - } - if options.HeartbeatTimeout != 0 { - params["HeartbeatTimeout"] = strconv.Itoa(options.HeartbeatTimeout) - } - if options.LifecycleTransition != "" { - params["LifecycleTransition"] = options.LifecycleTransition - } - if options.NotificationMetadata != "" { - params["NotificationMetadata"] = options.NotificationMetadata - } - if options.NotificationTargetARN != "" { - params["NotificationTargetARN"] = options.NotificationTargetARN - } - if options.RoleARN != "" { - params["RoleARN"] = options.RoleARN - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// PutNotificationConfiguration configures an Auto Scaling group to send notifications when specified events take place. -// -// See http://goo.gl/9XrROq for more details. -func (as *AutoScaling) PutNotificationConfiguration(asgName string, notificationTypes []string, topicARN string) ( - resp *SimpleResp, err error) { - params := makeParams("PutNotificationConfiguration") - params["AutoScalingGroupName"] = asgName - params["TopicARN"] = topicARN - - if len(notificationTypes) > 0 { - addParamsList(params, "NotificationTypes.member", notificationTypes) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// PutScalingPolicyParams wraps a PutScalingPolicyParams request -// -// See http://goo.gl/o0E8hl for more details. -type PutScalingPolicyParams struct { - AutoScalingGroupName string - PolicyName string - ScalingAdjustment int - AdjustmentType string - Cooldown int - MinAdjustmentStep int -} - -// PutScalingPolicy response wrapper -// -// See http://goo.gl/o0E8hl for more details. -type PutScalingPolicyResp struct { - PolicyARN string `xml:"PutScalingPolicyResult>PolicyARN"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// PutScalingPolicy creates or updates a policy for an Auto Scaling group -// -// See http://goo.gl/o0E8hl for more details. -func (as *AutoScaling) PutScalingPolicy(options *PutScalingPolicyParams) ( - resp *PutScalingPolicyResp, err error) { - params := makeParams("PutScalingPolicy") - params["AutoScalingGroupName"] = options.AutoScalingGroupName - params["PolicyName"] = options.PolicyName - params["ScalingAdjustment"] = strconv.Itoa(options.ScalingAdjustment) - params["AdjustmentType"] = options.AdjustmentType - - if options.Cooldown != 0 { - params["Cooldown"] = strconv.Itoa(options.Cooldown) - } - if options.MinAdjustmentStep != 0 { - params["MinAdjustmentStep"] = strconv.Itoa(options.MinAdjustmentStep) - } - - resp = new(PutScalingPolicyResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// PutScheduledUpdateGroupActionParams contains the details of the ScheduledAction to be added. -// -// See http://goo.gl/sLPi0d for more details -type PutScheduledUpdateGroupActionParams struct { - AutoScalingGroupName string - DesiredCapacity int - EndTime time.Time - MaxSize int - MinSize int - Recurrence string - ScheduledActionName string - StartTime time.Time -} - -// PutScheduledUpdateGroupAction creates or updates a scheduled scaling action for an -// AutoScaling group. Scheduled actions can be made up to thirty days in advance. When updating -// a scheduled scaling action, if you leave a parameter unspecified, the corresponding value -// remains unchanged in the affected AutoScaling group. -// -// Auto Scaling supports the date and time expressed in "YYYY-MM-DDThh:mm:ssZ" format in UTC/GMT -// only. -// -// See http://goo.gl/sLPi0d for more details. -func (as *AutoScaling) PutScheduledUpdateGroupAction(options *PutScheduledUpdateGroupActionParams) ( - resp *SimpleResp, err error) { - params := makeParams("PutScheduledUpdateGroupAction") - params["AutoScalingGroupName"] = options.AutoScalingGroupName - params["ScheduledActionName"] = options.ScheduledActionName - params["MinSize"] = strconv.Itoa(options.MinSize) - params["MaxSize"] = strconv.Itoa(options.MaxSize) - params["DesiredCapacity"] = strconv.Itoa(options.DesiredCapacity) - - if !options.StartTime.IsZero() { - params["StartTime"] = options.StartTime.Format(time.RFC3339) - } - if !options.EndTime.IsZero() { - params["EndTime"] = options.EndTime.Format(time.RFC3339) - } - if options.Recurrence != "" { - params["Recurrence"] = options.Recurrence - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// RecordLifecycleActionHeartbeat ecords a heartbeat for the lifecycle action associated with a specific token. -// This extends the timeout by the length of time defined by the HeartbeatTimeout parameter of the -// PutLifecycleHook operation. -// -// Part of the basic sequence for adding a lifecycle hook to an Auto Scaling group: -// 1) Create a notification target (SQS queue || SNS Topic) -// 2) Create an IAM role to allow the ASG topublish lifecycle notifications to the designated SQS queue or SNS topic -// 3) Create the lifecycle hook. You can create a hook that acts when instances launch or when instances terminate -// 4) ***If necessary, record the lifecycle action heartbeat to keep the instance in a pending state*** -// 5) Complete the lifecycle action -// -// See http://goo.gl/jc70xp for more details. -func (as *AutoScaling) RecordLifecycleActionHeartbeat(asgName, lifecycleActionToken, hookName string) ( - resp *SimpleResp, err error) { - params := makeParams("RecordLifecycleActionHeartbeat") - params["AutoScalingGroupName"] = asgName - params["LifecycleActionToken"] = lifecycleActionToken - params["LifecycleHookName"] = hookName - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// ResumeProcesses resumes the scaling processes for the scaling group. If no processes are -// provided, all processes are resumed. -// -// See http://goo.gl/XWIIg1 for more details. -func (as *AutoScaling) ResumeProcesses(asgName string, processes []string) ( - resp *SimpleResp, err error) { - params := makeParams("ResumeProcesses") - params["AutoScalingGroupName"] = asgName - - if len(processes) > 0 { - addParamsList(params, "ScalingProcesses.member", processes) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// SetDesiredCapacity changes the DesiredCapacity of an AutoScaling group. -// -// See http://goo.gl/3WGZbI for more details. -func (as *AutoScaling) SetDesiredCapacity(asgName string, desiredCapacity int, honorCooldown bool) ( - resp *SimpleResp, err error) { - params := makeParams("SetDesiredCapacity") - params["AutoScalingGroupName"] = asgName - params["DesiredCapacity"] = strconv.Itoa(desiredCapacity) - params["HonorCooldown"] = strconv.FormatBool(honorCooldown) - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// SetInstanceHealth sets the health status of a specified instance that belongs to any of your Auto Scaling groups. -// -// See http://goo.gl/j4ZRxh for more details. -func (as *AutoScaling) SetInstanceHealth(id string, healthStatus string, respectGracePeriod bool) ( - resp *SimpleResp, err error) { - params := makeParams("SetInstanceHealth") - params["HealthStatus"] = healthStatus - params["InstanceId"] = id - // Default is true - params["ShouldRespectGracePeriod"] = strconv.FormatBool(respectGracePeriod) - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// SuspendProcesses suspends the processes for the autoscaling group. If no processes are -// provided, all processes are suspended. -// -// If you suspend either of the two primary processes (Launch or Terminate), this can prevent other -// process types from functioning properly. -// -// See http://goo.gl/DUJpQy for more details. -func (as *AutoScaling) SuspendProcesses(asgName string, processes []string) ( - resp *SimpleResp, err error) { - params := makeParams("SuspendProcesses") - params["AutoScalingGroupName"] = asgName - - if len(processes) > 0 { - addParamsList(params, "ScalingProcesses.member", processes) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// TerminateInstanceInAutoScalingGroupResp response wrapper -// -// See http://goo.gl/ki5hMh for more details. -type TerminateInstanceInAutoScalingGroupResp struct { - Activity Activity `xml:"TerminateInstanceInAutoScalingGroupResult>Activity"` - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// TerminateInstanceInAutoScalingGroup terminates the specified instance. -// Optionally, the desired group size can be adjusted by setting decrCap to true -// -// See http://goo.gl/ki5hMh for more details. -func (as *AutoScaling) TerminateInstanceInAutoScalingGroup(id string, decrCap bool) ( - resp *TerminateInstanceInAutoScalingGroupResp, err error) { - params := makeParams("TerminateInstanceInAutoScalingGroup") - params["InstanceId"] = id - params["ShouldDecrementDesiredCapacity"] = strconv.FormatBool(decrCap) - - resp = new(TerminateInstanceInAutoScalingGroupResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// UpdateAutoScalingGroup updates the scaling group. -// -// To update an auto scaling group with a launch configuration that has the InstanceMonitoring -// flag set to False, you must first ensure that collection of group metrics is disabled. -// Otherwise calls to UpdateAutoScalingGroup will fail. -// -// See http://goo.gl/rqrmxy for more details. -func (as *AutoScaling) UpdateAutoScalingGroup(asg *AutoScalingGroup) (resp *SimpleResp, err error) { - params := makeParams("UpdateAutoScalingGroup") - - params["AutoScalingGroupName"] = asg.AutoScalingGroupName - params["MaxSize"] = strconv.Itoa(asg.MaxSize) - params["MinSize"] = strconv.Itoa(asg.MinSize) - params["DesiredCapacity"] = strconv.Itoa(asg.DesiredCapacity) - - if asg.DefaultCooldown > 0 { - params["DefaultCooldown"] = strconv.Itoa(asg.DefaultCooldown) - } - if asg.HealthCheckGracePeriod > 0 { - params["HealthCheckGracePeriod"] = strconv.Itoa(asg.HealthCheckGracePeriod) - } - if asg.HealthCheckType != "" { - params["HealthCheckType"] = asg.HealthCheckType - } - if asg.LaunchConfigurationName != "" { - params["LaunchConfigurationName"] = asg.LaunchConfigurationName - } - if asg.PlacementGroup != "" { - params["PlacementGroup"] = asg.PlacementGroup - } - if asg.VPCZoneIdentifier != "" { - params["VPCZoneIdentifier"] = asg.VPCZoneIdentifier - } - - if len(asg.AvailabilityZones) > 0 { - addParamsList(params, "AvailabilityZones.member", asg.AvailabilityZones) - } - if len(asg.TerminationPolicies) > 0 { - addParamsList(params, "TerminationPolicies.member", asg.TerminationPolicies) - } - - resp = new(SimpleResp) - if err := as.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} |