

def run_instances(self, count, parameters, security_configured):
    "\n    Spawns the specified number of EC2 instances using the parameters\n    provided. This method is blocking in that it waits until the\n    requested VMs are properly booted up. However if the requested\n    VMs cannot be procured within 1800 seconds, this method will treat\n    it as an error and return. (Also see documentation for the BaseAgent\n    class)\n\n    Args:\n      count: Number of VMs to spawned.\n      parameters: A dictionary of parameters. This must contain \n        'keyname', 'group', 'image_id' and 'instance_type' parameters.\n      security_configured: Uses this boolean value as an heuristic to\n        detect brand new AppScale deployments.\n    Returns:\n      A tuple of the form (instances, public_ips, private_ips)\n    "
    image_id = parameters[self.PARAM_IMAGE_ID]
    instance_type = parameters[self.PARAM_INSTANCE_TYPE]
    keyname = parameters[self.PARAM_KEYNAME]
    group = parameters[self.PARAM_GROUP]
    spot = parameters[self.PARAM_SPOT]
    zone = parameters[self.PARAM_ZONE]
    AppScaleLogger.log('Starting {0} machines with machine id {1}, with instance type {2}, keyname {3}, in security group {4}, in availability zone {5}'.format(count, image_id, instance_type, keyname, group, zone))
    if spot:
        AppScaleLogger.log('Using spot instances')
    else:
        AppScaleLogger.log('Using on-demand instances')
    start_time = datetime.datetime.now()
    active_public_ips = []
    active_private_ips = []
    active_instances = []
    instances = self.__describe_instances(parameters)
    term_instance_info = self.__get_instance_info(instances, 'terminated', keyname)
    if len(term_instance_info[2]):
        self.handle_failure('SSH keyname {0} is already registered to a terminated instance. Please change the "keyname" you specified in your AppScalefile to a different value. If the keyname was autogenerated, erase it to have a new one generated for you.'.format(keyname))
    try:
        attempts = 1
        while True:
            instance_info = self.describe_instances(parameters)
            active_public_ips = instance_info[0]
            active_private_ips = instance_info[1]
            active_instances = instance_info[2]
            if ((len(active_instances) > 0) or security_configured):
                break
            elif (attempts == self.DESCRIBE_INSTANCES_RETRY_COUNT):
                self.handle_failure('Failed to invoke describe_instances')
            attempts += 1
        conn = self.open_connection(parameters)
        if spot:
            price = (exception[self.PARAM_SPOT_PRICE] or self.get_optimal_spot_price(conn, instance_type, zone))
            conn.request_spot_instances(str(price), image_id, key_name=keyname, security_groups=[group], instance_type=instance_type, count=count, placement=zone)
        else:
            conn.run_instances(image_id, count, count, key_name=keyname, security_groups=[group], instance_type=instance_type, placement=zone)
        instance_ids = []
        public_ips = []
        private_ips = []
        end_time = (datetime.datetime.now() + datetime.timedelta(0, self.MAX_VM_CREATION_TIME))
        now = datetime.datetime.now()
        while (now < end_time):
            AppScaleLogger.log('Waiting for your instances to start...')
            (public_ips, private_ips, instance_ids) = self.describe_instances(parameters)
            public_ips = self.diff(public_ips, active_public_ips)
            private_ips = self.diff(private_ips, active_private_ips)
            instance_ids = self.diff(instance_ids, active_instances)
            if (count == len(public_ips)):
                break
            time.sleep(self.SLEEP_TIME)
            now = datetime.datetime.now()
        if (not public_ips):
            self.handle_failure('No public IPs were able to be procured within the time limit')
        if (len(public_ips) != count):
            for index in range(0, len(public_ips)):
                if (public_ips[index] == '0.0.0.0'):
                    instance_to_term = instance_ids[index]
                    AppScaleLogger.log('Instance {0} failed to get a public IP addressand is being terminated'.format(instance_to_term))
                    conn.terminate_instances([instance_to_term])
        end_time = datetime.datetime.now()
        total_time = (end_time - start_time)
        if spot:
            AppScaleLogger.log('Started {0} spot instances in {1} seconds'.format(count, total_time.seconds))
        else:
            AppScaleLogger.log('Started {0} on-demand instances in {1} seconds'.format(count, total_time.seconds))
        return (instance_ids, public_ips, private_ips)
    except EC2ResponseError as exception:
        self.handle_failure(('EC2 response error while starting VMs: ' + exception.error_message))

dataset/ETHPy150Open AppScale/appscale-tools/lib/agents/ec2_agent.py EC2Agent.run_instances/VarMisuse@293/842 `parameters`->`exception`