Example #1
0
 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
Example #2
0
 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