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