diff --git a/zaza/openstack/charm_tests/test_utils.py b/zaza/openstack/charm_tests/test_utils.py index 7f06ff22a..7fa2261b1 100644 --- a/zaza/openstack/charm_tests/test_utils.py +++ b/zaza/openstack/charm_tests/test_utils.py @@ -751,7 +751,8 @@ def resource_cleanup(self): pass def launch_guest(self, guest_name, userdata=None, use_boot_volume=False, - instance_key=None, flavor_name=None): + instance_key=None, flavor_name=None, + attach_to_external_network=False): """Launch one guest to use in tests. Note that it is up to the caller to have set the RESOURCE_PREFIX class @@ -768,6 +769,9 @@ def launch_guest(self, guest_name, userdata=None, use_boot_volume=False, :type use_boot_volume: boolean :param instance_key: Key to collect associated config data with. :type instance_key: Optional[str] + :param attach_to_external_network: Attach instance directly to external + network. + :type attach_to_external_network: bool :returns: Nova instance objects :rtype: Server """ @@ -796,7 +800,8 @@ def launch_guest(self, guest_name, userdata=None, use_boot_volume=False, vm_name=instance_name, use_boot_volume=use_boot_volume, userdata=userdata, - flavor_name=flavor_name) + flavor_name=flavor_name, + attach_to_external_network=attach_to_external_network) def launch_guests(self, userdata=None, attach_to_external_network=False, flavor_name=None): @@ -807,6 +812,9 @@ def launch_guests(self, userdata=None, attach_to_external_network=False, :param userdata: Userdata to attach to instance :type userdata: Optional[str] + :param attach_to_external_network: Attach instance directly to external + network. + :type attach_to_external_network: bool :returns: List of launched Nova instance objects :rtype: List[Server] """ diff --git a/zaza/openstack/configure/guest.py b/zaza/openstack/configure/guest.py index 4e20ef4e9..d5034b36d 100644 --- a/zaza/openstack/configure/guest.py +++ b/zaza/openstack/configure/guest.py @@ -53,7 +53,7 @@ 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, meta=None, - userdata=None): + userdata=None, attach_to_external_network=False): """Launch an instance. :param instance_key: Key to collect associated config data with. @@ -76,6 +76,9 @@ def launch_instance(instance_key, use_boot_volume=False, vm_name=None, :type meta: dict :param userdata: Configuration to use upon launch, used by cloud-init. :type userdata: str + :param attach_to_external_network: Attach instance directly to external + network. + :type attach_to_external_network: bool :returns: the created instance :rtype: novaclient.Server """ @@ -94,12 +97,18 @@ def launch_instance(instance_key, use_boot_volume=False, vm_name=None, 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')}] meta = meta or {} external_network_name = external_network_name or "ext_net" + if attach_to_external_network: + instance_network_name = external_network_name + else: + instance_network_name = private_network_name + + net = neutron_client.find_resource("network", instance_network_name) + nics = [{'net-id': net.get('id')}] + if use_boot_volume: bdmv2 = [{ 'boot_index': '0', @@ -143,12 +152,19 @@ def launch_instance(instance_key, use_boot_volume=False, vm_name=None, port = openstack_utils.get_ports_from_device_id( neutron_client, instance.id)[0] - logging.info('Assigning floating ip.') - ip = openstack_utils.create_floating_ip( - neutron_client, - external_network_name, - port=port)['floating_ip_address'] - logging.info('Assigned floating IP {} to {}'.format(ip, vm_name)) + if attach_to_external_network: + logging.info('attach_to_external_network={}, not assigning floating IP' + .format(attach_to_external_network)) + ip = port['fixed_ips'][0]['ip_address'] + logging.info('Using fixed IP {} on network {} for {}' + .format(ip, instance_network_name, vm_name)) + else: + logging.info('Assigning floating ip.') + ip = openstack_utils.create_floating_ip( + neutron_client, + external_network_name, + port=port)['floating_ip_address'] + logging.info('Assigned floating IP {} to {}'.format(ip, vm_name)) try: for attempt in Retrying( stop=stop_after_attempt(8),