# salt.states.boto_asg

## Manage Autoscale Groups

New in version 2014.7.0.

Create and destroy autoscale groups. Be aware that this interacts with Amazon's services, and so may incur charges.

This module uses boto, which can be installed via package, or pip.

This module accepts explicit autoscale credentials but can also utilize IAM roles assigned to the instance through Instance Profiles. Dynamic credentials are then automatically obtained from AWS API and no further configuration is necessary. More Information available at:

    http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

If IAM roles are not used you need to specify them either in a pillar or in the minion's config file:

    asg.keyid: GKTADJGHEIQSXMKKRBJ08H
    asg.key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs

It's also possible to specify key, keyid and region via a profile, either as a passed in dict, or as a string to pull from pillars or minion config:

    myprofile:
        keyid: GKTADJGHEIQSXMKKRBJ08H
        key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs
        region: us-east-1

    Ensure myasg exists:
      boto_asg.present:
        - name: myasg
        - launch_config_name: mylc
        - availability_zones:
          - us-east-1a
          - us-east-1b
        - min_size: 1
        - max_size: 1
        - desired_capacity: 1
        - load_balancers:
          - myelb
        - suspended_processes:
            - AddToLoadBalancer
            - AlarmNotification
        - scaling_policies
            - adjustment_type: ChangeInCapacity
            - as_name: api-production-iad
            - cooldown: 1800
            - min_adjustment_step: None
            - name: ScaleDown
            - scaling_adjustment: -1
        - region: us-east-1
        - keyid: GKTADJGHEIQSXMKKRBJ08H
        - key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs

    # Using a profile from pillars.
    Ensure myasg exists:
      boto_asg.present:
        - name: myasg
        - launch_config_name: mylc
        - availability_zones:
          - us-east-1a
          - us-east-1b
        - min_size: 1
        - max_size: 1
        - desired_capacity: 1
        - load_balancers:
          - myelb
        - profile: myprofile

    # Passing in a profile.
    Ensure myasg exists:
      boto_asg.present:
        - name: myasg
        - launch_config_name: mylc
        - availability_zones:
          - us-east-1a
          - us-east-1b
        - min_size: 1
        - max_size: 1
        - desired_capacity: 1
        - load_balancers:
          - myelb
        - profile:
            keyid: GKTADJGHEIQSXMKKRBJ08H
            key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs
            region: us-east-1

    # Deleting an autoscale group with running instances.
    Ensure myasg is deleted:
      boto_asg.absent:
        - name: myasg
        # If instances exist, we must force the deletion of the asg.
        - force: True

It's possible to specify cloudwatch alarms that will be setup along with the ASG. Note the alarm name will be the name attribute defined, plus the ASG resource name.

    Ensure myasg exists:
      boto_asg.present:
        - name: myasg
        - launch_config_name: mylc
        - availability_zones:
          - us-east-1a
          - us-east-1b
        - min_size: 1
        - max_size: 1
        - desired_capacity: 1
        - load_balancers:
          - myelb
        - profile: myprofile
        - alarms:
            CPU:
              name: 'ASG CPU **MANAGED BY SALT**'
              attributes:
                metric: CPUUtilization
                namespace: AWS/EC2
                statistic: Average
                comparison: '>='
                threshold: 65.0
                period: 60
                evaluation_periods: 30
                unit: null
                description: 'ASG CPU'
                alarm_actions: [ 'arn:aws:sns:us-east-1:12345:myalarm' ]
                insufficient_data_actions: []
                ok_actions: [ 'arn:aws:sns:us-east-1:12345:myalarm' ]

You can also use alarms from pillars, and override values from the pillar alarms by setting overrides on the resource. Note that 'boto_asg_alarms' will be used as a default value for all resources, if defined and can be used to ensure alarms are always set for an ASG resource.

Setting the alarms in a pillar:

    my_asg_alarm:
      CPU:
        name: 'ASG CPU **MANAGED BY SALT**'
        attributes:
          metric: CPUUtilization
          namespace: AWS/EC2
          statistic: Average
          comparison: '>='
          threshold: 65.0
          period: 60
          evaluation_periods: 30
          unit: null
          description: 'ASG CPU'
          alarm_actions: [ 'arn:aws:sns:us-east-1:12345:myalarm' ]
          insufficient_data_actions: []
          ok_actions: [ 'arn:aws:sns:us-east-1:12345:myalarm' ]

Overriding the alarm values on the resource:

    Ensure myasg exists:
      boto_asg.present:
        - name: myasg
        - launch_config_name: mylc
        - availability_zones:
          - us-east-1a
          - us-east-1b
        - min_size: 1
        - max_size: 1
        - desired_capacity: 1
        - load_balancers:
          - myelb
        - profile: myprofile
        - alarms_from_pillar: my_asg_alarm
        # override CPU:attributes:threshold
        - alarms:
            CPU:
              attributes:
                threshold: 50.0

salt.states.boto_asg.absent(name, force=False, region=None, key=None, keyid=None, profile=None, remove_lc=False)

  Ensure the named autoscale group is deleted.

  name

    Name of the autoscale group.

  force

    Force deletion of autoscale group.

  remove_lc

    Delete the launch config as well.

  region

    The region to connect to.

  key

    Secret key to be used.

  keyid

    Access key to be used.

  profile

    A dict with region, key and keyid, or a pillar key (string) that contains a dict with region, key and keyid.

salt.states.boto_asg.present(name, launch_config_name, availability_zones, min_size, max_size, launch_config=None, desired_capacity=None, load_balancers=None, default_cooldown=None, health_check_type=None, health_check_period=None, placement_group=None, vpc_zone_identifier=None, subnet_names=None, tags=None, termination_policies=None, termination_policies_from_pillar='boto_asg_termination_policies', suspended_processes=None, scaling_policies=None, scaling_policies_from_pillar='boto_asg_scaling_policies', scheduled_actions=None, scheduled_actions_from_pillar='boto_asg_scheduled_actions', alarms=None, alarms_from_pillar='boto_asg_alarms', region=None, key=None, keyid=None, profile=None, notification_arn=None, notification_arn_from_pillar='boto_asg_notification_arn', notification_types=None, notification_types_from_pillar='boto_asg_notification_types')

  Ensure the autoscale group exists.

  name

    Name of the autoscale group.

  launch_config_name

    Name of the launch config to use for the group. Or, if `launch_config` is specified, this will be the launch config name's prefix. (see below)

  launch_config

    A dictionary of launch config attributes. If specified, a launch config will be used or created, matching this set of attributes, and the autoscale group will be set to use that launch config. The launch config name will be the `launch_config_name` followed by a hyphen followed by a hash of the `launch_config` dict contents. Example:

        my_asg:
          boto_asg.present:
          - launch_config:
            - ebs_optimized: false
            - instance_profile_name: my_iam_profile
            - kernel_id: ''
            - ramdisk_id: ''
            - key_name: my_ssh_key
            - image_name: aws2015091-hvm
            - instance_type: c3.xlarge
            - instance_monitoring: false
            - security_groups:
              - my_sec_group_01
              - my_sec_group_02

  availability_zones

    List of availability zones for the group.

  min_size

    Minimum size of the group.

  max_size

    Maximum size of the group.

  desired_capacity

    The desired capacity of the group.

  load_balancers

    List of load balancers for the group. Once set this can not be updated (Amazon restriction).

  default_cooldown

    Number of seconds after a Scaling Activity completes before any further scaling activities can start.

  health_check_type

    The service you want the health status from, Amazon EC2 or Elastic Load Balancer (EC2 or ELB).

  health_check_period

    Length of time in seconds after a new EC2 instance comes into service that Auto Scaling starts checking its health.

  placement_group

    Physical location of your cluster placement group created in Amazon EC2. Once set this can not be updated (Amazon restriction).

  vpc_zone_identifier

    A list of the subnet identifiers of the Virtual Private Cloud.

  subnet_names

    For VPC, a list of subnet names (NOT subnet IDs) to deploy into. Exclusive with vpc_zone_identifier.

  tags

    A list of tags. Example:

        - key: 'key'
          value: 'value'
          propagate_at_launch: true

  termination_policies

    A list of termination policies. Valid values are:

    - `OldestInstance`

    - `NewestInstance`

    - `OldestLaunchConfiguration`

    - `ClosestToNextInstanceHour`

    - `Default`

    If no value is specified, the `Default` value is used.

  termination_policies_from_pillar:

    name of pillar dict that contains termination policy settings. Termination policies defined for this specific state will override those from pillar.

  suspended_processes

    List of processes to be suspended. see http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/US_SuspendResume.html

  scaling_policies

    List of scaling policies. Each policy is a dict of key-values described by https://boto.readthedocs.io/en/latest/ref/autoscale.html#boto.ec2.autoscale.policy.ScalingPolicy

  scaling_policies_from_pillar:

    name of pillar dict that contains scaling policy settings. Scaling policies defined for this specific state will override those from pillar.

  scheduled_actions:

    a dictionary of scheduled actions. Each key is the name of scheduled action and each value is dictionary of options. For example:

        - scheduled_actions:
            scale_up_at_10:
                desired_capacity: 4
                min_size: 3
                max_size: 5
                recurrence: "0 9 * * 1-5"
            scale_down_at_7:
                desired_capacity: 1
                min_size: 1
                max_size: 1
                recurrence: "0 19 * * 1-5"

  scheduled_actions_from_pillar:

    name of pillar dict that contains scheduled_actions settings. Scheduled actions for this specific state will override those from pillar.

  alarms:

    a dictionary of name->boto_cloudwatch_alarm sections to be associated with this ASG. All attributes should be specified except for dimension which will be automatically set to this ASG.

    See the `salt.states.boto_cloudwatch_alarm` state for information about these attributes.

    If any alarm actions include ":self:" this will be replaced with the asg name. For example, alarm_actions reading "['scaling_policy:self:ScaleUp']" will map to the arn for this asg's scaling policy named "ScaleUp". In addition, any alarms that have only scaling_policy as actions will be ignored if min_size is equal to max_size for this ASG.

  alarms_from_pillar:

    name of pillar dict that contains alarm settings. Alarms defined for this specific state will override those from pillar.

  region

    The region to connect to.

  key

    Secret key to be used.

  keyid

    Access key to be used.

  profile

    A dict with region, key and keyid, or a pillar key (string) that contains a dict with region, key and keyid.

  notification_arn

    The AWS arn that notifications will be sent to

  notification_arn_from_pillar

    name of the pillar dict that contains `notifcation_arn` settings. A `notification_arn` defined for this specific state will override the one from pillar.

  notification_types

    A list of event names that will trigger a notification. The list of valid notification types is:

    - `autoscaling:EC2_INSTANCE_LAUNCH`

    - `autoscaling:EC2_INSTANCE_LAUNCH_ERROR`

    - `autoscaling:EC2_INSTANCE_TERMINATE`

    - `autoscaling:EC2_INSTANCE_TERMINATE_ERROR`

    - `autoscaling:TEST_NOTIFICATION`

  notification_types_from_pillar

    name of the pillar dict that contains `notifcation_types` settings. `notification_types` defined for this specific state will override those from the pillar.