Allow skipping instance connectivity checks

For the NDR data plane testing case those checks cannot be performed
from the node that runs Zaza and instead need to be performed from a
unit that receives dynamic routes from the BGP speaker.

In order to allow for that case an additional argument is introduced.
This commit is contained in:
Dmitrii Shcherbakov
2023-06-15 06:48:27 +04:00
parent 110242796c
commit 77aeb7300f
2 changed files with 35 additions and 26 deletions
+7 -2
View File
@@ -796,7 +796,7 @@ class OpenStackBaseTest(BaseCharmTest):
def launch_guest(self, guest_name, userdata=None, use_boot_volume=False,
instance_key=None, flavor_name=None,
attach_to_external_network=False,
keystone_session=None):
keystone_session=None, perform_connectivity_check=True):
"""Launch one guest to use in tests.
Note that it is up to the caller to have set the RESOURCE_PREFIX class
@@ -817,6 +817,9 @@ class OpenStackBaseTest(BaseCharmTest):
network.
:type attach_to_external_network: bool
:param keystone_session: Keystone session to use.
:param perform_connectivity_check: Whether to perform a connectivity
check.
:type perform_connectivity_check: bool
:type keystone_session: Optional[keystoneauth1.session.Session]
:returns: Nova instance objects
:rtype: Server
@@ -848,7 +851,9 @@ class OpenStackBaseTest(BaseCharmTest):
userdata=userdata,
flavor_name=flavor_name,
attach_to_external_network=attach_to_external_network,
keystone_session=keystone_session)
keystone_session=keystone_session,
perform_connectivity_check=perform_connectivity_check
)
def launch_guests(self, userdata=None, attach_to_external_network=False,
flavor_name=None):
+28 -24
View File
@@ -95,7 +95,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, attach_to_external_network=False,
keystone_session=None):
keystone_session=None, perform_connectivity_check=True):
"""Launch an instance.
:param instance_key: Key to collect associated config data with.
@@ -123,6 +123,8 @@ def launch_instance(instance_key, use_boot_volume=False, vm_name=None,
:type attach_to_external_network: bool
:param keystone_session: Keystone session to use.
:type keystone_session: Optional[keystoneauth1.session.Session]
:param perform_connectivity_check: Whether to perform a connectivity check.
:type perform_connectivity_check: bool
:returns: the created instance
:rtype: novaclient.Server
"""
@@ -211,28 +213,30 @@ def launch_instance(instance_key, use_boot_volume=False, vm_name=None,
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),
wait=wait_exponential(multiplier=1, min=2, max=60)):
with attempt:
try:
openstack_utils.ping_response(ip)
except subprocess.CalledProcessError as e:
logging.error('Pinging {} failed with {}'
.format(ip, e.returncode))
logging.error('stdout: {}'.format(e.stdout))
logging.error('stderr: {}'.format(e.stderr))
raise
except RetryError:
raise openstack_exceptions.NovaGuestNoPingResponse()
# Check ssh'ing to instance.
logging.info('Testing ssh access.')
openstack_utils.ssh_test(
username=boot_tests[instance_key]['username'],
ip=ip,
vm_name=vm_name,
password=boot_tests[instance_key].get('password'),
privkey=openstack_utils.get_private_key(nova_utils.KEYPAIR_NAME))
if perform_connectivity_check:
try:
for attempt in Retrying(
stop=stop_after_attempt(8),
wait=wait_exponential(multiplier=1, min=2, max=60)):
with attempt:
try:
openstack_utils.ping_response(ip)
except subprocess.CalledProcessError as e:
logging.error('Pinging {} failed with {}'
.format(ip, e.returncode))
logging.error('stdout: {}'.format(e.stdout))
logging.error('stderr: {}'.format(e.stderr))
raise
except RetryError:
raise openstack_exceptions.NovaGuestNoPingResponse()
# Check ssh'ing to instance.
logging.info('Testing ssh access.')
openstack_utils.ssh_test(
username=boot_tests[instance_key]['username'],
ip=ip,
vm_name=vm_name,
password=boot_tests[instance_key].get('password'),
privkey=openstack_utils.get_private_key(nova_utils.KEYPAIR_NAME))
return instance