Merge "Check VM's console log before trying to SSH to it."
This commit is contained in:
commit
c10d23bdf9
|
@ -122,9 +122,11 @@ class BaseTempestTestCase(base_api.BaseNetworkTest):
|
||||||
if not kwargs.get('security_groups'):
|
if not kwargs.get('security_groups'):
|
||||||
kwargs['security_groups'] = [{'name': 'default'}]
|
kwargs['security_groups'] = [{'name': 'default'}]
|
||||||
|
|
||||||
client = self.os_primary.servers_client
|
client = kwargs.pop('client', None)
|
||||||
if kwargs.get('availability_zone'):
|
if client is None:
|
||||||
client = self.os_admin.servers_client
|
client = self.os_primary.servers_client
|
||||||
|
if kwargs.get('availability_zone'):
|
||||||
|
client = self.os_admin.servers_client
|
||||||
|
|
||||||
server = client.create_server(
|
server = client.create_server(
|
||||||
flavorRef=flavor_ref,
|
flavorRef=flavor_ref,
|
||||||
|
@ -140,6 +142,10 @@ class BaseTempestTestCase(base_api.BaseNetworkTest):
|
||||||
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
|
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
|
||||||
client.delete_server,
|
client.delete_server,
|
||||||
server['server']['id'])
|
server['server']['id'])
|
||||||
|
|
||||||
|
self.wait_for_server_active(server['server'], client=client)
|
||||||
|
self.wait_for_guest_os_ready(server['server'], client=client)
|
||||||
|
|
||||||
return server
|
return server
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -253,7 +259,6 @@ class BaseTempestTestCase(base_api.BaseNetworkTest):
|
||||||
server_kwargs['name'] = server_name
|
server_kwargs['name'] = server_name
|
||||||
|
|
||||||
self.server = self.create_server(**server_kwargs)
|
self.server = self.create_server(**server_kwargs)
|
||||||
self.wait_for_server_active(self.server['server'])
|
|
||||||
self.port = self.client.list_ports(network_id=self.network['id'],
|
self.port = self.client.list_ports(network_id=self.network['id'],
|
||||||
device_id=self.server[
|
device_id=self.server[
|
||||||
'server']['id'])['ports'][0]
|
'server']['id'])['ports'][0]
|
||||||
|
@ -465,6 +470,28 @@ class BaseTempestTestCase(base_api.BaseNetworkTest):
|
||||||
self.wait_for_server_status(
|
self.wait_for_server_status(
|
||||||
server, constants.SERVER_STATUS_ACTIVE, client)
|
server, constants.SERVER_STATUS_ACTIVE, client)
|
||||||
|
|
||||||
|
def wait_for_guest_os_ready(self, server, client=None):
|
||||||
|
if not CONF.compute_feature_enabled.console_output:
|
||||||
|
LOG.debug('Console output not supported, cannot check if server '
|
||||||
|
'%s is ready.', server['server']['id'])
|
||||||
|
return
|
||||||
|
|
||||||
|
client = client or self.os_primary.servers_client
|
||||||
|
|
||||||
|
def system_booted():
|
||||||
|
console_output = client.get_console_output(server['id'])['output']
|
||||||
|
for line in console_output.split('\n'):
|
||||||
|
if 'login:' in line.lower():
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
utils.wait_until_true(system_booted, sleep=5)
|
||||||
|
except utils.WaitTimeout:
|
||||||
|
LOG.debug("No correct output in console of server %s found. "
|
||||||
|
"Guest operating system status can't be checked.",
|
||||||
|
server['id'])
|
||||||
|
|
||||||
def check_servers_hostnames(self, servers, timeout=None, log_errors=True,
|
def check_servers_hostnames(self, servers, timeout=None, log_errors=True,
|
||||||
external_port=None):
|
external_port=None):
|
||||||
"""Compare hostnames of given servers with their names."""
|
"""Compare hostnames of given servers with their names."""
|
||||||
|
|
|
@ -65,6 +65,7 @@ class NetworkConnectivityTest(base.BaseTempestTestCase):
|
||||||
|
|
||||||
for vm in vms:
|
for vm in vms:
|
||||||
self.wait_for_server_active(vm['server'])
|
self.wait_for_server_active(vm['server'])
|
||||||
|
self.wait_for_guest_os_ready(vm['server'])
|
||||||
|
|
||||||
return vms
|
return vms
|
||||||
|
|
||||||
|
@ -231,6 +232,7 @@ class NetworkConnectivityTest(base.BaseTempestTestCase):
|
||||||
networks=[{'uuid': network['id']}],
|
networks=[{'uuid': network['id']}],
|
||||||
security_groups=[{'name': self.secgroup['name']}])
|
security_groups=[{'name': self.secgroup['name']}])
|
||||||
self.wait_for_server_active(vm['server'])
|
self.wait_for_server_active(vm['server'])
|
||||||
|
self.wait_for_guest_os_ready(vm['server'])
|
||||||
|
|
||||||
vm_port = self.client.list_ports(
|
vm_port = self.client.list_ports(
|
||||||
network_id=network['id'], device_id=vm['server']['id'])['ports'][0]
|
network_id=network['id'], device_id=vm['server']['id'])['ports'][0]
|
||||||
|
|
|
@ -417,6 +417,7 @@ class TestFloatingIPUpdate(FloatingIpTestCasesMixin,
|
||||||
servers.append(server)
|
servers.append(server)
|
||||||
for server in servers:
|
for server in servers:
|
||||||
self.wait_for_server_active(server)
|
self.wait_for_server_active(server)
|
||||||
|
self.wait_for_guest_os_ready(server)
|
||||||
|
|
||||||
self.fip = self.create_floatingip(port=ports[0])
|
self.fip = self.create_floatingip(port=ports[0])
|
||||||
self.check_connectivity(self.fip['floating_ip_address'],
|
self.check_connectivity(self.fip['floating_ip_address'],
|
||||||
|
|
|
@ -52,6 +52,7 @@ class InternalDNSTest(base.BaseTempestTestCase):
|
||||||
{'name': self.security_groups[-1]['name']}],
|
{'name': self.security_groups[-1]['name']}],
|
||||||
name='leia')
|
name='leia')
|
||||||
self.wait_for_server_active(leia['server'])
|
self.wait_for_server_active(leia['server'])
|
||||||
|
self.wait_for_guest_os_ready(leia['server'])
|
||||||
|
|
||||||
ssh_client = ssh.Client(
|
ssh_client = ssh.Client(
|
||||||
self.fip['floating_ip_address'],
|
self.fip['floating_ip_address'],
|
||||||
|
|
|
@ -145,6 +145,7 @@ class IPv6Test(base.BaseTempestTestCase):
|
||||||
}
|
}
|
||||||
vm = self.create_server(**server_kwargs)['server']
|
vm = self.create_server(**server_kwargs)['server']
|
||||||
self.wait_for_server_active(vm)
|
self.wait_for_server_active(vm)
|
||||||
|
self.wait_for_guest_os_ready(vm)
|
||||||
ipv4_port = self.client.list_ports(
|
ipv4_port = self.client.list_ports(
|
||||||
network_id=self.network['id'],
|
network_id=self.network['id'],
|
||||||
device_id=vm['id'])['ports'][0]
|
device_id=vm['id'])['ports'][0]
|
||||||
|
|
|
@ -126,6 +126,7 @@ class MetadataTest(base.BaseTempestTestCase):
|
||||||
vm = self._create_server_with_network(
|
vm = self._create_server_with_network(
|
||||||
self.network, use_advanced_image=use_advanced_image)
|
self.network, use_advanced_image=use_advanced_image)
|
||||||
self.wait_for_server_active(server=vm.server)
|
self.wait_for_server_active(server=vm.server)
|
||||||
|
self.wait_for_guest_os_ready(vm.server)
|
||||||
self._assert_has_ssh_connectivity(vm.ssh_client)
|
self._assert_has_ssh_connectivity(vm.ssh_client)
|
||||||
interface = self._get_primary_interface(vm.ssh_client)
|
interface = self._get_primary_interface(vm.ssh_client)
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,7 @@ class BaseMulticastTest(object):
|
||||||
security_groups=[{'name': self.secgroup['security_group']['name']}]
|
security_groups=[{'name': self.secgroup['security_group']['name']}]
|
||||||
)['server']
|
)['server']
|
||||||
self.wait_for_server_active(server)
|
self.wait_for_server_active(server)
|
||||||
|
self.wait_for_guest_os_ready(server)
|
||||||
port = self.client.list_ports(
|
port = self.client.list_ports(
|
||||||
network_id=self.network['id'], device_id=server['id'])['ports'][0]
|
network_id=self.network['id'], device_id=server['id'])['ports'][0]
|
||||||
server['fip'] = self.create_floatingip(port=port)
|
server['fip'] = self.create_floatingip(port=port)
|
||||||
|
|
|
@ -70,6 +70,7 @@ class PortForwardingTestJSON(base.BaseTempestTestCase):
|
||||||
networks=[{'port': port['id']}])['server']
|
networks=[{'port': port['id']}])['server']
|
||||||
server['name'] = name
|
server['name'] = name
|
||||||
self.wait_for_server_active(server)
|
self.wait_for_server_active(server)
|
||||||
|
self.wait_for_guest_os_ready(server)
|
||||||
server['port_forwarding_tcp'] = self.create_port_forwarding(
|
server['port_forwarding_tcp'] = self.create_port_forwarding(
|
||||||
self.fip['id'],
|
self.fip['id'],
|
||||||
internal_port_id=port['id'],
|
internal_port_id=port['id'],
|
||||||
|
@ -255,6 +256,7 @@ class PortForwardingTestJSON(base.BaseTempestTestCase):
|
||||||
name=name, networks=[{'port': port['id']}])['server']
|
name=name, networks=[{'port': port['id']}])['server']
|
||||||
server['name'] = name
|
server['name'] = name
|
||||||
self.wait_for_server_active(server)
|
self.wait_for_server_active(server)
|
||||||
|
self.wait_for_guest_os_ready(server)
|
||||||
|
|
||||||
# Add a second fixed_ip address to port (same subnet)
|
# Add a second fixed_ip address to port (same subnet)
|
||||||
internal_subnet_id = port['fixed_ips'][0]['subnet_id']
|
internal_subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||||
|
|
|
@ -175,6 +175,7 @@ class QoSTestMixin(object):
|
||||||
|
|
||||||
server = self.create_server(**server_kwargs)
|
server = self.create_server(**server_kwargs)
|
||||||
self.wait_for_server_active(server['server'])
|
self.wait_for_server_active(server['server'])
|
||||||
|
self.wait_for_guest_os_ready(server['server'])
|
||||||
self.check_connectivity(self.fip['floating_ip_address'],
|
self.check_connectivity(self.fip['floating_ip_address'],
|
||||||
CONF.validation.image_ssh_user,
|
CONF.validation.image_ssh_user,
|
||||||
keypair['private_key'])
|
keypair['private_key'])
|
||||||
|
|
|
@ -161,6 +161,7 @@ class TrunkTest(base.BaseTempestTestCase):
|
||||||
|
|
||||||
def _configure_vlan_subport(self, vm, vlan_tag, vlan_subnet):
|
def _configure_vlan_subport(self, vm, vlan_tag, vlan_subnet):
|
||||||
self.wait_for_server_active(server=vm.server)
|
self.wait_for_server_active(server=vm.server)
|
||||||
|
self.wait_for_guest_os_ready(vm.server)
|
||||||
self._wait_for_trunk(trunk=vm.trunk)
|
self._wait_for_trunk(trunk=vm.trunk)
|
||||||
self._wait_for_port(port=vm.port)
|
self._wait_for_port(port=vm.port)
|
||||||
self._wait_for_port(port=vm.subport)
|
self._wait_for_port(port=vm.subport)
|
||||||
|
@ -199,6 +200,7 @@ class TrunkTest(base.BaseTempestTestCase):
|
||||||
vm2 = self._create_server_with_trunk_port()
|
vm2 = self._create_server_with_trunk_port()
|
||||||
for vm in (vm1, vm2):
|
for vm in (vm1, vm2):
|
||||||
self.wait_for_server_active(server=vm.server)
|
self.wait_for_server_active(server=vm.server)
|
||||||
|
self.wait_for_guest_os_ready(vm.server)
|
||||||
self._wait_for_trunk(vm.trunk)
|
self._wait_for_trunk(vm.trunk)
|
||||||
self._assert_has_ssh_connectivity(vm.ssh_client)
|
self._assert_has_ssh_connectivity(vm.ssh_client)
|
||||||
|
|
||||||
|
@ -325,6 +327,7 @@ class TrunkTest(base.BaseTempestTestCase):
|
||||||
use_advanced_image=use_advanced_image)
|
use_advanced_image=use_advanced_image)
|
||||||
for role in ['migrate', 'connection_test']:
|
for role in ['migrate', 'connection_test']:
|
||||||
self.wait_for_server_active(servers[role].server)
|
self.wait_for_server_active(servers[role].server)
|
||||||
|
self.wait_for_guest_os_ready(servers[role].server)
|
||||||
self._configure_vlan_subport(vm=servers[role],
|
self._configure_vlan_subport(vm=servers[role],
|
||||||
vlan_tag=vlan_tag,
|
vlan_tag=vlan_tag,
|
||||||
vlan_subnet=vlan_subnet)
|
vlan_subnet=vlan_subnet)
|
||||||
|
@ -377,6 +380,7 @@ class TrunkTest(base.BaseTempestTestCase):
|
||||||
vlan_subnet=vlan_subnet)
|
vlan_subnet=vlan_subnet)
|
||||||
for vm in vms:
|
for vm in vms:
|
||||||
self.wait_for_server_active(vm.server)
|
self.wait_for_server_active(vm.server)
|
||||||
|
self.wait_for_guest_os_ready(vm.server)
|
||||||
|
|
||||||
# allow ICMP traffic
|
# allow ICMP traffic
|
||||||
sg_rule = self.create_pingable_secgroup_rule(self.security_group['id'])
|
sg_rule = self.create_pingable_secgroup_rule(self.security_group['id'])
|
||||||
|
|
Loading…
Reference in New Issue