diff --git a/zaza/configure/guest.py b/zaza/configure/guest.py index e99ce5f..d878191 100644 --- a/zaza/configure/guest.py +++ b/zaza/configure/guest.py @@ -36,11 +36,26 @@ boot_tests = { 'bootstring': 'finished at'}} -def launch_instance(instance_key): +def launch_instance(instance_key, use_boot_volume=False, vm_name=None, + private_network_name=None, image_name=None, + flavor_name=None, external_network_name=None): """Launch an instance. :param instance_key: Key to collect associated config data with. :type instance_key: str + :param use_boot_volume: Whether to boot guest from a shared volume. + :type use_boot_volume: boolean + :param vm_name: Name to give guest. + :type vm_name: str + :param private_network_name: Name of private network to attach guest to. + :type private_network_name: str + :param image_name: Image name to use with guest. + :type image_name: str + :param flavor_name: Flavor name to use with guest. + :type flavor_name: str + :param external_network_name: External network to create floating ip from + for guest. + :type external_network_name: str """ keystone_session = openstack_utils.get_overcloud_keystone_session() nova_client = openstack_utils.get_nova_session_client(keystone_session) @@ -48,19 +63,38 @@ def launch_instance(instance_key): keystone_session) # Collect resource information. - vm_name = time.strftime("%Y%m%d%H%M%S") - image = nova_client.glance.find_image( - boot_tests[instance_key]['image_name']) - flavor = nova_client.flavors.find( - name=boot_tests[instance_key]['flavor_name']) - net = neutron_client.find_resource("network", "private") + vm_name = vm_name or time.strftime("%Y%m%d%H%M%S") + + image_name = image_name or boot_tests[instance_key]['image_name'] + image = nova_client.glance.find_image(image_name) + + flavor_name = flavor_name or boot_tests[instance_key]['flavor_name'] + flavor = nova_client.flavors.find(name=flavor_name) + + private_network_name = private_network_name or "private" + net = neutron_client.find_resource("network", private_network_name) nics = [{'net-id': net.get('id')}] + external_network_name = external_network_name or "ext_net" + + if use_boot_volume: + bdmv2 = [{ + 'boot_index': '0', + 'uuid': image.id, + 'source_type': 'image', + 'volume_size': flavor.disk, + 'destination_type': 'volume', + 'delete_on_termination': True}] + image = None + else: + bdmv2 = None + # Launch instance. logging.info('Launching instance {}'.format(vm_name)) instance = nova_client.servers.create( name=vm_name, image=image, + block_device_mapping_v2=bdmv2, flavor=flavor, key_name=nova_utils.KEYPAIR_NAME, nics=nics) @@ -83,7 +117,7 @@ def launch_instance(instance_key): logging.info('Assigning floating ip.') ip = openstack_utils.create_floating_ip( neutron_client, - "ext_net", + external_network_name, port=port)['floating_ip_address'] logging.info('Assigned floating IP {} to {}'.format(ip, vm_name)) openstack_utils.ping_response(ip)