def deploy_snappy(self, env, num, dryrun, accountid, newrelic, channelname, devicestring, branch): from wrapper.ec2 import Ec2 from wrapper.vpc import Vpc ec2 = Ec2(session=self.session) vpc = Vpc(session=self.session) vpc_obj = vpc.get_vpc_from_env(env=env) num = int(num) snappyindex = self.get_snappy_index(num=num, vpcid=vpc_obj.get('VpcId')) lambda_function_args = { 'env': "infra", 'puppet_role': 'benchmarkslave', 'requester': "benchmark", 'xively_service': "benchmark_slave", 'customer': "", 'shutdown': "stop", 'dry_run': dryrun, 'base_ami': "benchmarkslave", 'instance_type': 'c3.xlarge', 'snappyindex': snappyindex, 'accountid': accountid, 'channelname': channelname, 'newrelic': newrelic, 'iam': 'infra-benchmarkslave', 'ebsoptimized': False, 'monitoring': False, 'devicestring': devicestring, 'branch': branch } lambda_function_args['userdata'] = Misc.get_userdata_for_os( ostype="snappy") baseami_object = self.get_ami_from_tag( puppet_role=lambda_function_args['base_ami']) lambda_function_args['baseamiid'] = baseami_object.get('ImageId') availability = Misc.get_value_from_array_hash( dictlist=baseami_object.get('Tags'), key='Availability') lambda_function_args['ostype'] = Misc.get_value_from_array_hash( dictlist=baseami_object.get('Tags'), key='Os') lambda_function_args['keypair'] = Misc.get_value_from_array_hash( dictlist=vpc_obj.get('Tags'), key='Keypair') lambda_function_args['instance_name'] = ec2.generate_ec2_unique_name( env=env, puppet_role="benchmarkslave", num=num) lambda_function_args[ 'securitygroup'] = ec2.get_security_group_ids_for_stack( vpcid=vpc_obj.get('VpcId'), puppet_role="benchmarkslave", ostype=lambda_function_args['ostype'], xively_service="benchmark_slave") subnets = vpc.get_all_subnets(filters=[{ 'Name': 'tag:Network', 'Values': [availability] }, { 'Name': 'vpc-id', 'Values': [vpc_obj.get('VpcId')] }]) lambda_function_args['subnet'] = ec2.get_subnet_with_algorithym( puppet_role="benchmarkslave", subnets=subnets, num=num, fillup=False, xively_service="benchmark_slave") ## Get broker IP address broker = ec2.get_ec2_instances( filters=[{ 'Name': 'vpc-id', 'Values': [vpc_obj.get('VpcId')] }, { 'Name': 'tag:Xively_service', 'Values': ['benchmark_master'] }, { 'Name': 'tag:Puppet_role', 'Values': ['linuxbase'] }]) lambda_function_args['broker'] = broker[0].get( 'PrivateIpAddress') + ":8883" instances = Misc.parallel_map_reduce( lambda x: self.create_instance_lamdba(args=lambda_function_args), lambda x, y: x + [y], xrange(0, num), []) return instances
def create_instance_lamdba(self, args=None): """ This function is invoked by lambda to provision multiple at same time :param args: A dict with keypairs needed :return: instance objects created """ from wrapper.ec2 import Ec2 from wrapper.iam import Iam ec2 = Ec2(session=self.session) iam = Iam(session=self.session) account_id = iam.get_account_id() inst_name = args['instance_name'].pop() # linux or windows userdata formated for start if 'snappyindex' in args: logger.debug("Deploying a snappyindex") snappyindex = args['snappyindex'].pop() userdata = args['userdata'] userdata = userdata.format(index=snappyindex, accountid=args['accountid'], channelname=args['channelname'], newrelic=args['newrelic'], broker=args['broker'], hostname=inst_name, env=args['env'], devicestring=args['devicestring'], branch=args['branch']) elif 'userdata' in args: userdata = args['userdata'] else: userdata = Misc.get_userdata_for_os(ostype=args['ostype']).format( hostname=inst_name, env=args['env'], account=account_id) instance = ec2.run_instance(baseamiid=args['baseamiid'], key_name=args['keypair'], securitygroup=args['securitygroup'], instancetype=args['instance_type'], subnet=args['subnet'].pop(), user_data=userdata, shutdown=args['shutdown'], monitoring=args['monitoring'], ebsoptimized=args['ebsoptimized'], dry_run=args['dry_run'], iam_name=args['iam']) # add snappyindex to tag if 'snappyindex' in args: ec2.tag_resource(instanceid=instance.get('InstanceId'), tags={ 'Name': inst_name, 'Requester': args['requester'], 'Puppet_role': args['puppet_role'], 'Xively_service': args['xively_service'], 'Customer': args['customer'], 'Snappy_index': str(snappyindex), 'Environment': args['env'] }) else: ec2.tag_resource(instanceid=instance.get('InstanceId'), tags={ 'Name': inst_name, 'Requester': args['requester'], 'Puppet_role': args['puppet_role'], 'Xively_service': args['xively_service'], 'Customer': args['customer'], 'Environment': args['env'] }) return instance