Exemple #1
0
def create_launch_configuration(name, image_id, key_name=None,
                                security_groups=None, user_data=None,
                                instance_type='m1.small', kernel_id=None,
                                ramdisk_id=None, block_device_mappings=None,
                                instance_monitoring=False, spot_price=None,
                                instance_profile_name=None,
                                ebs_optimized=False,
                                associate_public_ip_address=None,
                                volume_type=None, delete_on_termination=True,
                                iops=None, use_block_device_types=False,
                                region=None, key=None, keyid=None,
                                profile=None):
    '''
    Create a launch configuration.

    CLI example::

        salt myminion boto_asg.create_launch_configuration mylc image_id=ami-0b9c9f62 key_name='mykey' security_groups='["mygroup"]' instance_type='c3.2xlarge'
    '''
    conn = _get_conn(region, key, keyid, profile)
    if not conn:
        return False
    if isinstance(security_groups, six.string_types):
        security_groups = json.loads(security_groups)
    if isinstance(block_device_mappings, six.string_types):
        block_device_mappings = json.loads(block_device_mappings)
    _bdms = []
    if block_device_mappings:
        # Boto requires objects for the mappings and the devices.
        _block_device_map = blockdevicemapping.BlockDeviceMapping()
        for block_device_dict in block_device_mappings:
            for block_device, attributes in six.iteritems(block_device_dict):
                _block_device = blockdevicemapping.EBSBlockDeviceType()
                for attribute, value in six.iteritems(attributes):
                    setattr(_block_device, attribute, value)
                _block_device_map[block_device] = _block_device
        _bdms = [_block_device_map]
    lc = autoscale.LaunchConfiguration(
        name=name, image_id=image_id, key_name=key_name,
        security_groups=security_groups, user_data=user_data,
        instance_type=instance_type, kernel_id=kernel_id,
        ramdisk_id=ramdisk_id, block_device_mappings=_bdms,
        instance_monitoring=instance_monitoring, spot_price=spot_price,
        instance_profile_name=instance_profile_name,
        ebs_optimized=ebs_optimized,
        associate_public_ip_address=associate_public_ip_address,
        volume_type=volume_type, delete_on_termination=delete_on_termination,
        iops=iops, use_block_device_types=use_block_device_types)
    try:
        conn.create_launch_configuration(lc)
        log.info('Created LC {0}'.format(name))
        return True
    except boto.exception.BotoServerError as e:
        log.debug(e)
        msg = 'Failed to create LC {0}'.format(name)
        log.error(msg)
        return False
Exemple #2
0
def get_asg_instance_ids(region):
    asg_conn = autoscale.connect_to_region(region)
    launch_config = autoscale.LaunchConfiguration(name='test_lc')
    asg_conn.create_launch_configuration(launch_config)
    asg = autoscale.AutoScalingGroup(
        name='test_asg',
        min_size=3,
        max_size=3,
        launch_config=launch_config,
    )
    asg_conn.create_auto_scaling_group(asg)
    asg = asg_conn.get_all_groups([asg.name])[0]
    instance_ids = [instance.instance_id for instance in asg.instances]
    return instance_ids
Exemple #3
0
    def create_launch_config(self):

        config = Config()

        if self.old_method:
            userdata = Userdata(old_method=self.old_method,
                                name=self.name,
                                platform=self.platform,
                                env=self.env,
                                region=self.region)
            securitygroup = securitygroups.get_or_create(
                region=self.region,
                raw_mode=True,
                fullname="%s-%s-%s-sg" % (self.name, self.platform, self.env))
            securitygroup_ids = [securitygroup.id]

        else:
            userdata = Userdata(name=self.name,
                                app_type=self.process,
                                platform=self.platform,
                                env=self.env,
                                region=self.region)
            securitygroup = securitygroups.get_or_create(
                region=self.region,
                name=self.name,
                process=self.process,
                platform=self.platform,
                env=self.env)
            securitygroup_ids = [securitygroup.id]

        self.userdata = userdata.create()

        securitygroup = securitygroups.get(region=self.region,
                                           raw_mode=True,
                                           fullname="general-management-sg")
        securitygroup_ids.append(securitygroup.id)

        launch_config = autoscale.LaunchConfiguration(
            name=self.launch_config_name,
            image_id=self.ami_id,
            key_name=config.key[self.region],
            instance_type=self.instance_class,
            security_groups=securitygroup_ids,
            instance_profile_name=iam.get(self.name, self.platform, self.env),
            user_data=self.userdata,
            block_device_mappings=[attributes.bdm],
            associate_public_ip_address=self.public)
        self.connection.create_launch_configuration(launch_config)

        return launch_config
Exemple #4
0
def create_launch_configuration(name,
                                image_id,
                                key_name=None,
                                vpc_id=None,
                                vpc_name=None,
                                security_groups=None,
                                user_data=None,
                                instance_type='m1.small',
                                kernel_id=None,
                                ramdisk_id=None,
                                block_device_mappings=None,
                                instance_monitoring=False,
                                spot_price=None,
                                instance_profile_name=None,
                                ebs_optimized=False,
                                associate_public_ip_address=None,
                                volume_type=None,
                                delete_on_termination=True,
                                iops=None,
                                use_block_device_types=False,
                                region=None,
                                key=None,
                                keyid=None,
                                profile=None):
    '''
    Create a launch configuration.

    CLI example::

        salt myminion boto_asg.create_launch_configuration mylc image_id=ami-0b9c9f62 key_name='mykey' security_groups='["mygroup"]' instance_type='c3.2xlarge'
    '''
    conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile)
    if isinstance(security_groups, six.string_types):
        security_groups = json.loads(security_groups)
    if isinstance(block_device_mappings, six.string_types):
        block_device_mappings = json.loads(block_device_mappings)
    _bdms = []
    if block_device_mappings:
        # Boto requires objects for the mappings and the devices.
        _block_device_map = blockdevicemapping.BlockDeviceMapping()
        for block_device_dict in block_device_mappings:
            for block_device, attributes in six.iteritems(block_device_dict):
                _block_device = blockdevicemapping.EBSBlockDeviceType()
                for attribute, value in six.iteritems(attributes):
                    setattr(_block_device, attribute, value)
                _block_device_map[block_device] = _block_device
        _bdms = [_block_device_map]

    # If a VPC is specified, then determine the secgroup id's within that VPC, not
    # within the default VPC. If a security group id is already part of the list,
    # convert_to_group_ids leaves that entry without attempting a lookup on it.
    if security_groups and (vpc_id or vpc_name):
        security_groups = __salt__['boto_secgroup.convert_to_group_ids'](
            security_groups,
            vpc_id=vpc_id,
            vpc_name=vpc_name,
            region=region,
            key=key,
            keyid=keyid,
            profile=profile)
    lc = autoscale.LaunchConfiguration(
        name=name,
        image_id=image_id,
        key_name=key_name,
        security_groups=security_groups,
        user_data=user_data,
        instance_type=instance_type,
        kernel_id=kernel_id,
        ramdisk_id=ramdisk_id,
        block_device_mappings=_bdms,
        instance_monitoring=instance_monitoring,
        spot_price=spot_price,
        instance_profile_name=instance_profile_name,
        ebs_optimized=ebs_optimized,
        associate_public_ip_address=associate_public_ip_address,
        volume_type=volume_type,
        delete_on_termination=delete_on_termination,
        iops=iops,
        use_block_device_types=use_block_device_types)
    retries = 30
    while True:
        try:
            conn.create_launch_configuration(lc)
            log.info('Created LC {0}'.format(name))
            return True
        except boto.exception.BotoServerError as e:
            if retries and e.code == 'Throttling':
                log.debug('Throttled by AWS API, retrying in 5 seconds...')
                time.sleep(5)
                retries -= 1
                continue
            log.error(e)
            msg = 'Failed to create LC {0}'.format(name)
            log.error(msg)
            return False