%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/states/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/states/boto_asg.pyc

�
���^c@@sBdZddlmZmZmZddlZddlZddlZddlj	j
Z
ddlZddl
mZddlmZeje�Zd�Zeeeeeeeeeeedeeded	ed
eeeeededd
�Zd�Zd�Zd�Zd�Zd�Zeeeeeed�ZdS(u�
Manage Autoscale Groups
=======================

.. versionadded:: 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:

.. code-block:: text

    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:

.. code-block:: yaml

    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:

.. code-block:: yaml

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

.. code-block:: yaml

    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.

.. code-block:: yaml

    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:

.. code-block:: yaml

    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:

.. code-block:: yaml

    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
i(tabsolute_importtprint_functiontunicode_literalsN(tsix(tSaltInvocationErrorcC@sdtkrdStS(u)
    Only load if boto is available.
    uboto_asg.existsuboto_asg(t__salt__tFalse(((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyt__virtual__�suboto_asg_termination_policiesuboto_asg_scaling_policiesuboto_asg_scheduled_actionsuboto_asg_alarmsuboto_asg_notification_arnuboto_asg_notification_typesc ?,C@s�	|r|
rtd��ni|d6td6dd6id6} |
r�g}x�|
D]�}!tddd	|!d
|d|d|d
|�}"d|"kr�dj|"d�| d<t| d<| Sd|"kr�dj|!�| d<t| d<| S|j|"d�qPWn|rAtd|||||�}#|#jd�}#tjd||#�ndY}#tjd|�|r�t
jjj
t|��}$|dtj|$�j�}i|d6|d6|d6|d6|d6}%x�t|�D]�\}&}'d|'kr�|'d}(i|(d6|d6|d6|d6|d6})td|)�}*|*rA|*d||&d<ntjd |(�|(||&d<||&d=Pq�q�W|#r!tjd!�dY}+x0t|�D]"\}&}'d"|'kr�|&}+Pq�q�W|+dYk	r!tjd#�td$||+d"d%|#d
|d|d|d
|�},|,||+d"<q!nx|D]}-|%j|-�q(Wtd&s�td'|%�}.|.dtkr�|.dr�d(| dkr�i| dd(<n|.d| dd(<q�q�ntd)|||||�}/t||�}t||�}t||�}|/dYkrt| d<d*| d<n1|/std&rId+}0|0| d<dY| d<| St||||�\}}td,|||||||||	|
|||||||||||||�}1|1r�dY| dd-<td)|||||�}/|/| dd.<qL	t| d<d/| d<n>t}2|rGx*|D]}3d0|3kr!dY|3d0<q!q!Wn|r�x9tj|�D]%\}4}5d1|5kr]dY|5d1<q]q]Wni|d26|d36|d46|d56|d66|d76|	d86|
d96|d:6|d;6|d<6|d=6|d>6|d?6}6|sd@g|6d<<n|dYkr g|6d=<n|dYkr9g|6d><n|dYkrRi|6d?<nxXtj|�D]G\}4}5dA|5krb|/d?j|4i�}7dA|7kr�|7dA=q�qbqbWi}8x�tj|6�D]�\}9}:|:dYkr�q�ntdB|:�}:|9|/kr�tdB|/|9�};|:|;ks|tjdC|:|;�|8jd-i�ji|;|96�|8jd.i�ji|:|96�t}2q|q�q�W|2rB	td&r�dD}0|0| d<dY| d<|8| d<| St||||�\}}tdE|||||dF|dG|dH|dI|	dJ|
dK|dL|dM|dN|dO|dP|dQ|d
|dR|dS|d|d|d
|�\}<}0|/d2|kr�tdT|/d2d
|d|d|d
|�}=|=r�d(| dkr�i| dd(<n|/d2| dd(dU<q�n|<r+	|/| dd-<td)|||||�}/|/| dd.<dV| d<qL	t| d<|0| d<n
dW| d<t|||k||||||�}>t j| d|>d�| d<dXj!| d|>dg�| d<|>ds�	|>d| d<n| S(Zu�
    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:

        .. code-block:: yaml

            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:

        .. code-block:: yaml

            - 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:

        .. code-block:: yaml

            - 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 :mod:`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.
    uDvpc_zone_identifier and subnet_names are mutually exclusive options.unameuresultuucommentuchangesuboto_vpc.get_resource_idusubnettnametregiontkeytkeyidtprofileuerroru Error looking up subnet ids: {0}uiduSubnet {0} does not exist.uboto_vpc.get_subnet_associationuvpc_idu2Auto Scaling Group %s is associated with VPC ID %su,Auto Scaling Group %s has no VPC Associationu-uregionukeyukeyiduprofileu
image_nameuami_nameuboto_ec2.find_imagesiuimage_idu0Couldn't find AMI named `%s`, passing literally.u1Auto Scaling Group {0} is a associated with a vpcusecurity_groupsu2security group associations found in launch configu"boto_secgroup.convert_to_group_idstvpc_idutestuboto_lc.presentu
launch_configuboto_asg.get_configu*Failed to check autoscale group existence.u"Autoscale group set to be created.uboto_asg.createuoldunewu Failed to create autoscale groupumin_adjustment_stepuend_timeulaunch_config_nameuavailability_zonesumin_sizeumax_sizeudesired_capacityudefault_cooldownuhealth_check_typeuhealth_check_perioduvpc_zone_identifierutagsutermination_policiesususpended_processesuscaling_policiesuscheduled_actionsuDefaultu
start_timeu
boto3.orderedu%s asg_property differs from %su"Autoscale group set to be updated.uboto_asg.updatetdesired_capacitytload_balancerstdefault_cooldownthealth_check_typethealth_check_periodtplacement_grouptvpc_zone_identifierttagsttermination_policiestsuspended_processestscaling_policiestscheduled_actionstnotification_arntnotification_typesu$boto_asg.delete_launch_configurationudeleteduUpdated autoscale group.uAutoscale group present.u N("RtTrueRtformatRtappendtgettlogtdebugtNonetsalttutilststringutilstto_byteststrthashlibtmd5t	hexdigestt	enumeratetwarningtupdatet__opts__t
__states__t_determine_termination_policiest_determine_scaling_policiest_determine_scheduled_actionst_determine_notification_infoRt	iteritemst	__utils__t
setdefaultt_alarms_presentt
dictupdatetjoin(?Rtlaunch_config_nametavailability_zonestmin_sizetmax_sizet
launch_configRRRRRRRtsubnet_namesRRt termination_policies_from_pillarRRtscaling_policies_from_pillarRtscheduled_actions_from_pillartalarmstalarms_from_pillarR	R
RRRtnotification_arn_from_pillarRtnotification_types_from_pillartrettitrR
tlaunch_config_bytestargstindextitemt
image_nametiargst	image_idstsg_indext
_group_idstdtlc_rettasgtmsgtcreatedtneed_updatetpolicyts_nametactiontconfigt
asg_actiontproposedtasg_propertytvaluet_valuetupdatedtdeletedt_ret((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pytpresent�s��"


		






			





	






  




		



!
cC@sBtjtd|g��}|r>t|�dkr>|}n|S(uN
    helper method for present.  ensure that termination_policies are set
    u
config.optioni(tcopytdeepcopyRtlen(RR@tpillar_termination_policies((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyR0�s
	cC@sBtjtd|i��}|r>t|�dkr>|}n|S(uJ
    helper method for present.  ensure that scaling_policies are set
    u
config.optioni(RfRgRRh(RRAtpillar_scaling_policies((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyR1�s
	cC@s;tjtd|i��}|r7tj||�}n|S(uH
    helper method for present,  ensure scheduled actions are setup
    u
config.option(RfRgRR8R-(RRBttmp((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyR2�s
c	C@s�tjtd|i��}d}t|�dkrA|d}ntjtd|i��}|ri|n|}|r{|n|}||fS(uN
    helper method for present.  ensure that notification_configs are set
    u
config.optioniN(RfRgRR"Rh(	RRERRFtpillar_arn_listt
pillar_arntpillar_notification_typestarnttypes((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyR3�s
cC@sMtjtd|i��}|r7tj||�}ni|d6td6dd6id6}	x�tj|�D]�\}
}|d|d|d<|d|dd	|dd	<d
|dkr�i|gd6|dd
<nt}x�dd
dgD]�}
|
|dkr�g}xb|d|
D]R}d|kr0t}nd|krZ|j	ddj
|��}n|j|�qW||d|
<q�q�W|r�|r�qini|dd6|dd6|d6|d6|d6|d6}td|�}|ds�t|	d<n|j
di�ikr"|d|	d|d<nd|kri|	dc|d7<qiqiW|	S(uK
    helper method for present.  ensure that cloudwatch_alarms are set
    u
config.optionunameuresultuucommentuchangesu u
attributesudescriptionu
dimensionsuAutoScalingGroupNameu
alarm_actionsuinsufficient_data_actionsu
ok_actionsuscaling_policyu:self:u:{0}:uregionukeyukeyiduprofileuboto_cloudwatch_alarm.present(RfRgRR8R-RRR4RtreplaceRRR/R(Rtmin_size_equals_max_sizeRCRDR	R
RRRktmerged_return_valuet_tinfotscaling_policy_actions_onlytaction_typetnew_actionsR[tkwargstresults((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyR7sJ"	


cC@s�i|d6td6dd6id6}td|||||�}|dkrat|d<d|d<n`|r�tdr�d	|d<d|d<|r�d
j|d�}	dj|d|	g�|d<n|Std
||||||�}
|
r�|rwtd|d||||�}|rMd|dkr4i|dd<n|d|ddd<qwt|d<dj|ddg�|d<n||dd<d|dd<d|d<q�t|d<d|d<n
d|d<|S(u�
    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.
    unameuresultuucommentuchangesuboto_asg.get_configu*Failed to check autoscale group existence.utestu"Autoscale group set to be deleted.u.Launch configuration {0} is set to be deleted.ulaunch_config_nameu uboto_asg.deleteu$boto_asg.delete_launch_configurationu
launch_configudeletedu&Failed to delete launch configuration.uoldunewuDeleted autoscale group.u!Failed to delete autoscale group.uAutoscale group does not exist.N(RRR"RR.RR9(RtforceR	R
RRt	remove_lcRGRURVRct
lc_deleted((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pytabsent6sF!"




 		
 



(t__doc__t
__future__RRRR(tloggingRftsalt.utils.dictupdateR$R8tsalt.utils.stringutilsR#tsalt.extRtsalt.exceptionsRt	getLoggert__name__R RR"ReR0R1R2R3R7RR~(((s8/usr/lib/python2.7/site-packages/salt/states/boto_asg.pyt<module>�sb	
��			
		6

Zerion Mini Shell 1.0