diff env/lib/python3.9/site-packages/boto/ec2/autoscale/__init__.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/boto/ec2/autoscale/__init__.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,894 @@
+# Copyright (c) 2009-2011 Reza Lotun http://reza.lotun.name/
+# Copyright (c) 2011 Jann Kleen
+# Copyright (c) 2012 Mitch Garnaat http://garnaat.org/
+# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.  All Rights Reserved
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish, dis-
+# tribute, sublicense, and/or sell copies of the Software, and to permit
+# persons to whom the Software is furnished to do so, subject to the fol-
+# lowing conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+"""
+This module provides an interface to the Elastic Compute Cloud (EC2)
+Auto Scaling service.
+"""
+
+import base64
+
+import boto
+from boto.connection import AWSQueryConnection
+from boto.regioninfo import RegionInfo, get_regions, load_regions
+from boto.regioninfo import connect
+from boto.ec2.autoscale.request import Request
+from boto.ec2.autoscale.launchconfig import LaunchConfiguration
+from boto.ec2.autoscale.group import AutoScalingGroup
+from boto.ec2.autoscale.group import ProcessType
+from boto.ec2.autoscale.activity import Activity
+from boto.ec2.autoscale.policy import AdjustmentType
+from boto.ec2.autoscale.policy import MetricCollectionTypes
+from boto.ec2.autoscale.policy import ScalingPolicy
+from boto.ec2.autoscale.policy import TerminationPolicies
+from boto.ec2.autoscale.instance import Instance
+from boto.ec2.autoscale.scheduled import ScheduledUpdateGroupAction
+from boto.ec2.autoscale.tag import Tag
+from boto.ec2.autoscale.limits import AccountLimits
+from boto.compat import six
+
+RegionData = load_regions().get('autoscaling', {})
+
+
+def regions():
+    """
+    Get all available regions for the Auto Scaling service.
+
+    :rtype: list
+    :return: A list of :class:`boto.RegionInfo` instances
+    """
+    return get_regions('autoscaling', connection_cls=AutoScaleConnection)
+
+
+def connect_to_region(region_name, **kw_params):
+    """
+    Given a valid region name, return a
+    :class:`boto.ec2.autoscale.AutoScaleConnection`.
+
+    :param str region_name: The name of the region to connect to.
+
+    :rtype: :class:`boto.ec2.AutoScaleConnection` or ``None``
+    :return: A connection to the given region, or None if an invalid region
+        name is given
+    """
+    return connect('autoscaling', region_name,
+                   connection_cls=AutoScaleConnection, **kw_params)
+
+
+class AutoScaleConnection(AWSQueryConnection):
+    APIVersion = boto.config.get('Boto', 'autoscale_version', '2011-01-01')
+    DefaultRegionEndpoint = boto.config.get('Boto', 'autoscale_endpoint',
+                                            'autoscaling.us-east-1.amazonaws.com')
+    DefaultRegionName = boto.config.get('Boto', 'autoscale_region_name',
+                                        'us-east-1')
+
+    def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
+                 is_secure=True, port=None, proxy=None, proxy_port=None,
+                 proxy_user=None, proxy_pass=None, debug=0,
+                 https_connection_factory=None, region=None, path='/',
+                 security_token=None, validate_certs=True, profile_name=None,
+                 use_block_device_types=False):
+        """
+        Init method to create a new connection to the AutoScaling service.
+
+        B{Note:} The host argument is overridden by the host specified in the
+                 boto configuration file.
+
+
+        """
+        if not region:
+            region = RegionInfo(self, self.DefaultRegionName,
+                                self.DefaultRegionEndpoint,
+                                AutoScaleConnection)
+        self.region = region
+        self.use_block_device_types = use_block_device_types
+        super(AutoScaleConnection, self).__init__(aws_access_key_id,
+                                                  aws_secret_access_key,
+                                                  is_secure, port, proxy, proxy_port,
+                                                  proxy_user, proxy_pass,
+                                                  self.region.endpoint, debug,
+                                                  https_connection_factory, path=path,
+                                                  security_token=security_token,
+                                                  validate_certs=validate_certs,
+                                                  profile_name=profile_name)
+
+    def _required_auth_capability(self):
+        return ['hmac-v4']
+
+    def build_list_params(self, params, items, label):
+        """
+        Items is a list of dictionaries or strings::
+
+            [
+                {
+                    'Protocol' : 'HTTP',
+                    'LoadBalancerPort' : '80',
+                    'InstancePort' : '80'
+                },
+                ..
+            ] etc.
+
+        or::
+
+            ['us-east-1b',...]
+        """
+        # different from EC2 list params
+        for i in range(1, len(items) + 1):
+            if isinstance(items[i - 1], dict):
+                for k, v in six.iteritems(items[i - 1]):
+                    if isinstance(v, dict):
+                        for kk, vv in six.iteritems(v):
+                            params['%s.member.%d.%s.%s' % (label, i, k, kk)] = vv
+                    else:
+                        params['%s.member.%d.%s' % (label, i, k)] = v
+            elif isinstance(items[i - 1], six.string_types):
+                params['%s.member.%d' % (label, i)] = items[i - 1]
+
+    def _update_group(self, op, as_group):
+        params = {'AutoScalingGroupName': as_group.name,
+                  'LaunchConfigurationName': as_group.launch_config_name,
+                  'MinSize': as_group.min_size,
+                  'MaxSize': as_group.max_size}
+        # get availability zone information (required param)
+        zones = as_group.availability_zones
+        self.build_list_params(params, zones, 'AvailabilityZones')
+        if as_group.desired_capacity is not None:
+            params['DesiredCapacity'] = as_group.desired_capacity
+        if as_group.vpc_zone_identifier:
+            params['VPCZoneIdentifier'] = as_group.vpc_zone_identifier
+        if as_group.health_check_period:
+            params['HealthCheckGracePeriod'] = as_group.health_check_period
+        if as_group.health_check_type:
+            params['HealthCheckType'] = as_group.health_check_type
+        if as_group.default_cooldown:
+            params['DefaultCooldown'] = as_group.default_cooldown
+        if as_group.placement_group:
+            params['PlacementGroup'] = as_group.placement_group
+        if as_group.instance_id:
+            params['InstanceId'] = as_group.instance_id
+        if as_group.termination_policies:
+            self.build_list_params(params, as_group.termination_policies,
+                                   'TerminationPolicies')
+        if op.startswith('Create'):
+            # you can only associate load balancers with an autoscale
+            # group at creation time
+            if as_group.load_balancers:
+                self.build_list_params(params, as_group.load_balancers,
+                                       'LoadBalancerNames')
+            if as_group.tags:
+                for i, tag in enumerate(as_group.tags):
+                    tag.build_params(params, i + 1)
+        return self.get_object(op, params, Request)
+
+    def attach_instances(self, name, instance_ids):
+        """
+        Attach instances to an autoscaling group.
+        """
+        params = {
+            'AutoScalingGroupName': name,
+        }
+        self.build_list_params(params, instance_ids, 'InstanceIds')
+        return self.get_status('AttachInstances', params)
+
+    def detach_instances(self, name, instance_ids, decrement_capacity=True):
+        """
+        Detach instances from an Auto Scaling group.
+
+        :type name: str
+        :param name: The name of the Auto Scaling group from which to detach instances.
+
+        :type instance_ids: list
+        :param instance_ids: Instance ids to be detached from the Auto Scaling group.
+
+        :type decrement_capacity: bool
+        :param decrement_capacity: Whether to decrement the size of the
+            Auto Scaling group or not.
+        """
+
+        params = {'AutoScalingGroupName': name}
+        params['ShouldDecrementDesiredCapacity'] = 'true' if decrement_capacity else 'false'
+
+        self.build_list_params(params, instance_ids, 'InstanceIds')
+        return self.get_status('DetachInstances', params)
+
+    def create_auto_scaling_group(self, as_group):
+        """
+        Create auto scaling group.
+        """
+        return self._update_group('CreateAutoScalingGroup', as_group)
+
+    def delete_auto_scaling_group(self, name, force_delete=False):
+        """
+        Deletes the specified auto scaling group if the group has no instances
+        and no scaling activities in progress.
+        """
+        if(force_delete):
+            params = {'AutoScalingGroupName': name, 'ForceDelete': 'true'}
+        else:
+            params = {'AutoScalingGroupName': name}
+        return self.get_object('DeleteAutoScalingGroup', params, Request)
+
+    def create_launch_configuration(self, launch_config):
+        """
+        Creates a new Launch Configuration.
+
+        :type launch_config: :class:`boto.ec2.autoscale.launchconfig.LaunchConfiguration`
+        :param launch_config: LaunchConfiguration object.
+        """
+        params = {'ImageId': launch_config.image_id,
+                  'LaunchConfigurationName': launch_config.name,
+                  'InstanceType': launch_config.instance_type}
+        if launch_config.key_name:
+            params['KeyName'] = launch_config.key_name
+        if launch_config.user_data:
+            user_data = launch_config.user_data
+            if isinstance(user_data, six.text_type):
+                user_data = user_data.encode('utf-8')
+            params['UserData'] = base64.b64encode(user_data).decode('utf-8')
+        if launch_config.kernel_id:
+            params['KernelId'] = launch_config.kernel_id
+        if launch_config.ramdisk_id:
+            params['RamdiskId'] = launch_config.ramdisk_id
+        if launch_config.block_device_mappings:
+            [x.autoscale_build_list_params(params) for x in launch_config.block_device_mappings]
+        if launch_config.security_groups:
+            self.build_list_params(params, launch_config.security_groups,
+                                   'SecurityGroups')
+        if launch_config.instance_monitoring:
+            params['InstanceMonitoring.Enabled'] = 'true'
+        else:
+            params['InstanceMonitoring.Enabled'] = 'false'
+        if launch_config.spot_price is not None:
+            params['SpotPrice'] = str(launch_config.spot_price)
+        if launch_config.instance_profile_name is not None:
+            params['IamInstanceProfile'] = launch_config.instance_profile_name
+        if launch_config.ebs_optimized:
+            params['EbsOptimized'] = 'true'
+        else:
+            params['EbsOptimized'] = 'false'
+        if launch_config.associate_public_ip_address is True:
+            params['AssociatePublicIpAddress'] = 'true'
+        elif launch_config.associate_public_ip_address is False:
+            params['AssociatePublicIpAddress'] = 'false'
+        if launch_config.volume_type:
+            params['VolumeType'] = launch_config.volume_type
+        if launch_config.delete_on_termination:
+            params['DeleteOnTermination'] = 'true'
+        else:
+            params['DeleteOnTermination'] = 'false'
+        if launch_config.iops:
+            params['Iops'] = launch_config.iops
+        if launch_config.classic_link_vpc_id:
+            params['ClassicLinkVPCId'] = launch_config.classic_link_vpc_id
+        if launch_config.classic_link_vpc_security_groups:
+            self.build_list_params(
+                params,
+                launch_config.classic_link_vpc_security_groups,
+                'ClassicLinkVPCSecurityGroups'
+            )
+        return self.get_object('CreateLaunchConfiguration', params,
+                               Request, verb='POST')
+
+    def get_account_limits(self):
+        """
+        Returns the limits for the Auto Scaling resources currently granted for
+        your AWS account.
+        """
+        params = {}
+        return self.get_object('DescribeAccountLimits', params, AccountLimits)
+
+    def create_scaling_policy(self, scaling_policy):
+        """
+        Creates a new Scaling Policy.
+
+        :type scaling_policy: :class:`boto.ec2.autoscale.policy.ScalingPolicy`
+        :param scaling_policy: ScalingPolicy object.
+        """
+        params = {'AdjustmentType': scaling_policy.adjustment_type,
+                  'AutoScalingGroupName': scaling_policy.as_name,
+                  'PolicyName': scaling_policy.name,
+                  'ScalingAdjustment': scaling_policy.scaling_adjustment}
+
+        if scaling_policy.adjustment_type == "PercentChangeInCapacity" and \
+           scaling_policy.min_adjustment_step is not None:
+            params['MinAdjustmentStep'] = scaling_policy.min_adjustment_step
+
+        if scaling_policy.cooldown is not None:
+            params['Cooldown'] = scaling_policy.cooldown
+
+        return self.get_object('PutScalingPolicy', params, Request)
+
+    def delete_launch_configuration(self, launch_config_name):
+        """
+        Deletes the specified LaunchConfiguration.
+
+        The specified launch configuration must not be attached to an Auto
+        Scaling group. Once this call completes, the launch configuration is no
+        longer available for use.
+        """
+        params = {'LaunchConfigurationName': launch_config_name}
+        return self.get_object('DeleteLaunchConfiguration', params, Request)
+
+    def get_all_groups(self, names=None, max_records=None, next_token=None):
+        """
+        Returns a full description of each Auto Scaling group in the given
+        list. This includes all Amazon EC2 instances that are members of the
+        group. If a list of names is not provided, the service returns the full
+        details of all Auto Scaling groups.
+
+        This action supports pagination by returning a token if there are more
+        pages to retrieve. To get the next page, call this action again with
+        the returned token as the NextToken parameter.
+
+        :type names: list
+        :param names: List of group names which should be searched for.
+
+        :type max_records: int
+        :param max_records: Maximum amount of groups to return.
+
+        :rtype: list
+        :returns: List of :class:`boto.ec2.autoscale.group.AutoScalingGroup`
+            instances.
+        """
+        params = {}
+        if max_records:
+            params['MaxRecords'] = max_records
+        if next_token:
+            params['NextToken'] = next_token
+        if names:
+            self.build_list_params(params, names, 'AutoScalingGroupNames')
+        return self.get_list('DescribeAutoScalingGroups', params,
+                             [('member', AutoScalingGroup)])
+
+    def get_all_launch_configurations(self, **kwargs):
+        """
+        Returns a full description of the launch configurations given the
+        specified names.
+
+        If no names are specified, then the full details of all launch
+        configurations are returned.
+
+        :type names: list
+        :param names: List of configuration names which should be searched for.
+
+        :type max_records: int
+        :param max_records: Maximum amount of configurations to return.
+
+        :type next_token: str
+        :param next_token: If you have more results than can be returned
+            at once, pass in this  parameter to page through all results.
+
+        :rtype: list
+        :returns: List of
+            :class:`boto.ec2.autoscale.launchconfig.LaunchConfiguration`
+            instances.
+        """
+        params = {}
+        max_records = kwargs.get('max_records', None)
+        names = kwargs.get('names', None)
+        if max_records is not None:
+            params['MaxRecords'] = max_records
+        if names:
+            self.build_list_params(params, names, 'LaunchConfigurationNames')
+        next_token = kwargs.get('next_token')
+        if next_token:
+            params['NextToken'] = next_token
+        return self.get_list('DescribeLaunchConfigurations', params,
+                             [('member', LaunchConfiguration)])
+
+    def get_all_activities(self, autoscale_group, activity_ids=None,
+                           max_records=None, next_token=None):
+        """
+        Get all activities for the given autoscaling group.
+
+        This action supports pagination by returning a token if there are more
+        pages to retrieve. To get the next page, call this action again with
+        the returned token as the NextToken parameter
+
+        :type autoscale_group: str or
+            :class:`boto.ec2.autoscale.group.AutoScalingGroup` object
+        :param autoscale_group: The auto scaling group to get activities on.
+
+        :type max_records: int
+        :param max_records: Maximum amount of activities to return.
+
+        :rtype: list
+        :returns: List of
+            :class:`boto.ec2.autoscale.activity.Activity` instances.
+        """
+        name = autoscale_group
+        if isinstance(autoscale_group, AutoScalingGroup):
+            name = autoscale_group.name
+        params = {'AutoScalingGroupName': name}
+        if max_records:
+            params['MaxRecords'] = max_records
+        if next_token:
+            params['NextToken'] = next_token
+        if activity_ids:
+            self.build_list_params(params, activity_ids, 'ActivityIds')
+        return self.get_list('DescribeScalingActivities',
+                             params, [('member', Activity)])
+
+    def get_termination_policies(self):
+        """Gets all valid termination policies.
+
+        These values can then be used as the termination_policies arg
+        when creating and updating autoscale groups.
+        """
+        return self.get_object('DescribeTerminationPolicyTypes',
+                               {}, TerminationPolicies)
+
+    def delete_scheduled_action(self, scheduled_action_name,
+                                autoscale_group=None):
+        """
+        Deletes a previously scheduled action.
+
+        :type scheduled_action_name: str
+        :param scheduled_action_name: The name of the action you want
+            to delete.
+
+        :type autoscale_group: str
+        :param autoscale_group: The name of the autoscale group.
+        """
+        params = {'ScheduledActionName': scheduled_action_name}
+        if autoscale_group:
+            params['AutoScalingGroupName'] = autoscale_group
+        return self.get_status('DeleteScheduledAction', params)
+
+    def terminate_instance(self, instance_id, decrement_capacity=True):
+        """
+        Terminates the specified instance. The desired group size can
+        also be adjusted, if desired.
+
+        :type instance_id: str
+        :param instance_id: The ID of the instance to be terminated.
+
+        :type decrement_capability: bool
+        :param decrement_capacity: Whether to decrement the size of the
+            autoscaling group or not.
+        """
+        params = {'InstanceId': instance_id}
+        if decrement_capacity:
+            params['ShouldDecrementDesiredCapacity'] = 'true'
+        else:
+            params['ShouldDecrementDesiredCapacity'] = 'false'
+        return self.get_object('TerminateInstanceInAutoScalingGroup', params,
+                               Activity)
+
+    def delete_policy(self, policy_name, autoscale_group=None):
+        """
+        Delete a policy.
+
+        :type policy_name: str
+        :param policy_name: The name or ARN of the policy to delete.
+
+        :type autoscale_group: str
+        :param autoscale_group: The name of the autoscale group.
+        """
+        params = {'PolicyName': policy_name}
+        if autoscale_group:
+            params['AutoScalingGroupName'] = autoscale_group
+        return self.get_status('DeletePolicy', params)
+
+    def get_all_adjustment_types(self):
+        return self.get_list('DescribeAdjustmentTypes', {},
+                             [('member', AdjustmentType)])
+
+    def get_all_autoscaling_instances(self, instance_ids=None,
+                                      max_records=None, next_token=None):
+        """
+        Returns a description of each Auto Scaling instance in the instance_ids
+        list. If a list is not provided, the service returns the full details
+        of all instances up to a maximum of fifty.
+
+        This action supports pagination by returning a token if there are more
+        pages to retrieve. To get the next page, call this action again with
+        the returned token as the NextToken parameter.
+
+        :type instance_ids: list
+        :param instance_ids: List of Autoscaling Instance IDs which should be
+            searched for.
+
+        :type max_records: int
+        :param max_records: Maximum number of results to return.
+
+        :rtype: list
+        :returns: List of
+            :class:`boto.ec2.autoscale.instance.Instance` objects.
+        """
+        params = {}
+        if instance_ids:
+            self.build_list_params(params, instance_ids, 'InstanceIds')
+        if max_records:
+            params['MaxRecords'] = max_records
+        if next_token:
+            params['NextToken'] = next_token
+        return self.get_list('DescribeAutoScalingInstances',
+                             params, [('member', Instance)])
+
+    def get_all_metric_collection_types(self):
+        """
+        Returns a list of metrics and a corresponding list of granularities
+        for each metric.
+        """
+        return self.get_object('DescribeMetricCollectionTypes',
+                               {}, MetricCollectionTypes)
+
+    def get_all_policies(self, as_group=None, policy_names=None,
+                         max_records=None, next_token=None):
+        """
+        Returns descriptions of what each policy does. This action supports
+        pagination. If the response includes a token, there are more records
+        available. To get the additional records, repeat the request with the
+        response token as the NextToken parameter.
+
+        If no group name or list of policy names are provided, all
+        available policies are returned.
+
+        :type as_group: str
+        :param as_group: The name of the
+            :class:`boto.ec2.autoscale.group.AutoScalingGroup` to filter for.
+
+        :type policy_names: list
+        :param policy_names: List of policy names which should be searched for.
+
+        :type max_records: int
+        :param max_records: Maximum amount of groups to return.
+
+        :type next_token: str
+        :param next_token: If you have more results than can be returned
+            at once, pass in this  parameter to page through all results.
+        """
+        params = {}
+        if as_group:
+            params['AutoScalingGroupName'] = as_group
+        if policy_names:
+            self.build_list_params(params, policy_names, 'PolicyNames')
+        if max_records:
+            params['MaxRecords'] = max_records
+        if next_token:
+            params['NextToken'] = next_token
+        return self.get_list('DescribePolicies', params,
+                             [('member', ScalingPolicy)])
+
+    def get_all_scaling_process_types(self):
+        """
+        Returns scaling process types for use in the ResumeProcesses and
+        SuspendProcesses actions.
+        """
+        return self.get_list('DescribeScalingProcessTypes', {},
+                             [('member', ProcessType)])
+
+    def suspend_processes(self, as_group, scaling_processes=None):
+        """
+        Suspends Auto Scaling processes for an Auto Scaling group.
+
+        :type as_group: string
+        :param as_group: The auto scaling group to suspend processes on.
+
+        :type scaling_processes: list
+        :param scaling_processes: Processes you want to suspend. If omitted,
+            all processes will be suspended.
+        """
+        params = {'AutoScalingGroupName': as_group}
+        if scaling_processes:
+            self.build_list_params(params, scaling_processes,
+                                   'ScalingProcesses')
+        return self.get_status('SuspendProcesses', params)
+
+    def resume_processes(self, as_group, scaling_processes=None):
+        """
+        Resumes Auto Scaling processes for an Auto Scaling group.
+
+        :type as_group: string
+        :param as_group: The auto scaling group to resume processes on.
+
+        :type scaling_processes: list
+        :param scaling_processes: Processes you want to resume. If omitted, all
+            processes will be resumed.
+        """
+        params = {'AutoScalingGroupName': as_group}
+
+        if scaling_processes:
+            self.build_list_params(params, scaling_processes,
+                                   'ScalingProcesses')
+        return self.get_status('ResumeProcesses', params)
+
+    def create_scheduled_group_action(self, as_group, name, time=None,
+                                      desired_capacity=None,
+                                      min_size=None, max_size=None,
+                                      start_time=None, end_time=None,
+                                      recurrence=None):
+        """
+        Creates a scheduled scaling action for a Auto Scaling group. If you
+        leave a parameter unspecified, the corresponding value remains
+        unchanged in the affected Auto Scaling group.
+
+        :type as_group: string
+        :param as_group: The auto scaling group to get activities on.
+
+        :type name: string
+        :param name: Scheduled action name.
+
+        :type time: datetime.datetime
+        :param time: The time for this action to start. (Depracated)
+
+        :type desired_capacity: int
+        :param desired_capacity: The number of EC2 instances that should
+            be running in this group.
+
+        :type min_size: int
+        :param min_size: The minimum size for the new auto scaling group.
+
+        :type max_size: int
+        :param max_size: The minimum size for the new auto scaling group.
+
+        :type start_time: datetime.datetime
+        :param start_time: The time for this action to start. When StartTime and EndTime are specified with Recurrence, they form the boundaries of when the recurring action will start and stop.
+
+        :type end_time: datetime.datetime
+        :param end_time: The time for this action to end. When StartTime and EndTime are specified with Recurrence, they form the boundaries of when the recurring action will start and stop.
+
+        :type recurrence: string
+        :param recurrence: The time when recurring future actions will start. Start time is specified by the user following the Unix cron syntax format. EXAMPLE: '0 10 * * *'
+        """
+        params = {'AutoScalingGroupName': as_group,
+                  'ScheduledActionName': name}
+        if start_time is not None:
+            params['StartTime'] = start_time.isoformat()
+        if end_time is not None:
+            params['EndTime'] = end_time.isoformat()
+        if recurrence is not None:
+            params['Recurrence'] = recurrence
+        if time:
+            params['Time'] = time.isoformat()
+        if desired_capacity is not None:
+            params['DesiredCapacity'] = desired_capacity
+        if min_size is not None:
+            params['MinSize'] = min_size
+        if max_size is not None:
+            params['MaxSize'] = max_size
+        return self.get_status('PutScheduledUpdateGroupAction', params)
+
+    def get_all_scheduled_actions(self, as_group=None, start_time=None,
+                                  end_time=None, scheduled_actions=None,
+                                  max_records=None, next_token=None):
+        params = {}
+        if as_group:
+            params['AutoScalingGroupName'] = as_group
+        if scheduled_actions:
+            self.build_list_params(params, scheduled_actions,
+                                   'ScheduledActionNames')
+        if max_records:
+            params['MaxRecords'] = max_records
+        if next_token:
+            params['NextToken'] = next_token
+        return self.get_list('DescribeScheduledActions', params,
+                             [('member', ScheduledUpdateGroupAction)])
+
+    def disable_metrics_collection(self, as_group, metrics=None):
+        """
+        Disables monitoring of group metrics for the Auto Scaling group
+        specified in AutoScalingGroupName. You can specify the list of affected
+        metrics with the Metrics parameter.
+        """
+        params = {'AutoScalingGroupName': as_group}
+
+        if metrics:
+            self.build_list_params(params, metrics, 'Metrics')
+        return self.get_status('DisableMetricsCollection', params)
+
+    def enable_metrics_collection(self, as_group, granularity, metrics=None):
+        """
+        Enables monitoring of group metrics for the Auto Scaling group
+        specified in AutoScalingGroupName. You can specify the list of enabled
+        metrics with the Metrics parameter.
+
+        Auto scaling metrics collection can be turned on only if the
+        InstanceMonitoring.Enabled flag, in the Auto Scaling group's launch
+        configuration, is set to true.
+
+        :type autoscale_group: string
+        :param autoscale_group: The auto scaling group to get activities on.
+
+        :type granularity: string
+        :param granularity: The granularity to associate with the metrics to
+            collect. Currently, the only legal granularity is "1Minute".
+
+        :type metrics: string list
+        :param metrics: The list of metrics to collect. If no metrics are
+                        specified, all metrics are enabled.
+        """
+        params = {'AutoScalingGroupName': as_group,
+                  'Granularity': granularity}
+        if metrics:
+            self.build_list_params(params, metrics, 'Metrics')
+        return self.get_status('EnableMetricsCollection', params)
+
+    def execute_policy(self, policy_name, as_group=None, honor_cooldown=None):
+        params = {'PolicyName': policy_name}
+        if as_group:
+            params['AutoScalingGroupName'] = as_group
+        if honor_cooldown:
+            params['HonorCooldown'] = honor_cooldown
+        return self.get_status('ExecutePolicy', params)
+
+    def put_notification_configuration(self, autoscale_group, topic, notification_types):
+        """
+        Configures an Auto Scaling group to send notifications when
+        specified events take place.
+
+        :type autoscale_group: str or
+            :class:`boto.ec2.autoscale.group.AutoScalingGroup` object
+        :param autoscale_group: The Auto Scaling group to put notification
+            configuration on.
+
+        :type topic: str
+        :param topic: The Amazon Resource Name (ARN) of the Amazon Simple
+            Notification Service (SNS) topic.
+
+        :type notification_types: list
+        :param notification_types: The type of events that will trigger
+            the notification. Valid types are:
+            'autoscaling:EC2_INSTANCE_LAUNCH',
+            'autoscaling:EC2_INSTANCE_LAUNCH_ERROR',
+            'autoscaling:EC2_INSTANCE_TERMINATE',
+            'autoscaling:EC2_INSTANCE_TERMINATE_ERROR',
+            'autoscaling:TEST_NOTIFICATION'
+        """
+
+        name = autoscale_group
+        if isinstance(autoscale_group, AutoScalingGroup):
+            name = autoscale_group.name
+
+        params = {'AutoScalingGroupName': name,
+                  'TopicARN': topic}
+        self.build_list_params(params, notification_types, 'NotificationTypes')
+        return self.get_status('PutNotificationConfiguration', params)
+
+    def delete_notification_configuration(self, autoscale_group, topic):
+        """
+        Deletes notifications created by put_notification_configuration.
+
+        :type autoscale_group: str or
+            :class:`boto.ec2.autoscale.group.AutoScalingGroup` object
+        :param autoscale_group: The Auto Scaling group to put notification
+            configuration on.
+
+        :type topic: str
+        :param topic: The Amazon Resource Name (ARN) of the Amazon Simple
+            Notification Service (SNS) topic.
+        """
+
+        name = autoscale_group
+        if isinstance(autoscale_group, AutoScalingGroup):
+            name = autoscale_group.name
+
+        params = {'AutoScalingGroupName': name,
+                  'TopicARN': topic}
+
+        return self.get_status('DeleteNotificationConfiguration', params)
+
+    def set_instance_health(self, instance_id, health_status,
+                            should_respect_grace_period=True):
+        """
+        Explicitly set the health status of an instance.
+
+        :type instance_id: str
+        :param instance_id: The identifier of the EC2 instance.
+
+        :type health_status: str
+        :param health_status: The health status of the instance.
+            "Healthy" means that the instance is healthy and should remain
+            in service. "Unhealthy" means that the instance is unhealthy.
+            Auto Scaling should terminate and replace it.
+
+        :type should_respect_grace_period: bool
+        :param should_respect_grace_period: If True, this call should
+            respect the grace period associated with the group.
+        """
+        params = {'InstanceId': instance_id,
+                  'HealthStatus': health_status}
+        if should_respect_grace_period:
+            params['ShouldRespectGracePeriod'] = 'true'
+        else:
+            params['ShouldRespectGracePeriod'] = 'false'
+        return self.get_status('SetInstanceHealth', params)
+
+    def set_desired_capacity(self, group_name, desired_capacity, honor_cooldown=False):
+        """
+        Adjusts the desired size of the AutoScalingGroup by initiating scaling
+        activities. When reducing the size of the group, it is not possible to define
+        which Amazon EC2 instances will be terminated. This applies to any Auto Scaling
+        decisions that might result in terminating instances.
+
+        :type group_name: string
+        :param group_name: name of the auto scaling group
+
+        :type desired_capacity: integer
+        :param desired_capacity: new capacity setting for auto scaling group
+
+        :type honor_cooldown: boolean
+        :param honor_cooldown: by default, overrides any cooldown period
+        """
+        params = {'AutoScalingGroupName': group_name,
+                  'DesiredCapacity': desired_capacity}
+        if honor_cooldown:
+            params['HonorCooldown'] = 'true'
+
+        return self.get_status('SetDesiredCapacity', params)
+
+    # Tag methods
+
+    def get_all_tags(self, filters=None, max_records=None, next_token=None):
+        """
+        Lists the Auto Scaling group tags.
+
+        This action supports pagination by returning a token if there
+        are more pages to retrieve. To get the next page, call this
+        action again with the returned token as the NextToken
+        parameter.
+
+        :type filters: dict
+        :param filters: The value of the filter type used to identify
+            the tags to be returned.  NOT IMPLEMENTED YET.
+
+        :type max_records: int
+        :param max_records: Maximum number of tags to return.
+
+        :rtype: list
+        :returns: List of :class:`boto.ec2.autoscale.tag.Tag`
+            instances.
+        """
+        params = {}
+        if max_records:
+            params['MaxRecords'] = max_records
+        if next_token:
+            params['NextToken'] = next_token
+        return self.get_list('DescribeTags', params,
+                             [('member', Tag)])
+
+    def create_or_update_tags(self, tags):
+        """
+        Creates new tags or updates existing tags for an Auto Scaling group.
+
+        :type tags: List of :class:`boto.ec2.autoscale.tag.Tag`
+        :param tags: The new or updated tags.
+        """
+        params = {}
+        for i, tag in enumerate(tags):
+            tag.build_params(params, i + 1)
+        return self.get_status('CreateOrUpdateTags', params, verb='POST')
+
+    def delete_tags(self, tags):
+        """
+        Deletes existing tags for an Auto Scaling group.
+
+        :type tags: List of :class:`boto.ec2.autoscale.tag.Tag`
+        :param tags: The new or updated tags.
+        """
+        params = {}
+        for i, tag in enumerate(tags):
+            tag.build_params(params, i + 1)
+        return self.get_status('DeleteTags', params, verb='POST')