Set image_alt_ssh_user during stack

At this moment, only image_ssh_user is present in the config
of Tempest. It's set to cirros by default and used for
SSH connections in tests. However, several tests build
instances with image_ref_alt, but still use image_ssh_user to
connect, which results in failure if image_ref_alt is set to
a non-cirros image. They should use image_alt_ssh_user instead,
which can be set to whichever user the image_ref_alt needs in
either local.conf or during plugin installation.

This change replaces image_ssh_user with image_alt_ssh_user
and modifies Tempest's config to have access to said
variable. It also adds a password variable in Tempest's
config for the alternative image.

Change-Id: Ibe81a068c6fdeb7cd1eedf1df76ce62737160a01
Closes-Bug: #1844535
Depends-On: https://review.opendev.org/682902/
This commit is contained in:
Weronika Sikora 2019-09-18 13:55:07 +00:00
parent f9bb8b8b21
commit c54a911004
5 changed files with 31 additions and 9 deletions

View File

@ -0,0 +1,10 @@
---
features:
- A new config option in the validation section, image_alt_ssh_user,
to specify the user name used to authenticate to an alternative
instance (instance using image_ref_alt) in tests. By default this
is set to root.
- A new config option in the validation section, image_alt_ssh_password,
to specify the password used to authenticate to an alternative
instance (instance using image_ref_alt) in tests. By default this
is set to password.

View File

@ -171,8 +171,11 @@ class BaseV2ComputeTest(api_version_utils.BaseMicroversionTest,
cls.flavor_ref = CONF.compute.flavor_ref cls.flavor_ref = CONF.compute.flavor_ref
cls.flavor_ref_alt = CONF.compute.flavor_ref_alt cls.flavor_ref_alt = CONF.compute.flavor_ref_alt
cls.ssh_user = CONF.validation.image_ssh_user cls.ssh_user = CONF.validation.image_ssh_user
cls.ssh_alt_user = CONF.validation.image_alt_ssh_user
cls.image_ssh_user = CONF.validation.image_ssh_user cls.image_ssh_user = CONF.validation.image_ssh_user
cls.image_alt_ssh_user = CONF.validation.image_alt_ssh_user
cls.image_ssh_password = CONF.validation.image_ssh_password cls.image_ssh_password = CONF.validation.image_ssh_password
cls.image_alt_ssh_password = CONF.validation.image_alt_ssh_password
@classmethod @classmethod
def is_requested_microversion_compatible(cls, max_version): def is_requested_microversion_compatible(cls, max_version):

View File

@ -228,7 +228,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
# 4.Plain username/password auth, if a password was given. # 4.Plain username/password auth, if a password was given.
linux_client = remote_client.RemoteClient( linux_client = remote_client.RemoteClient(
self.get_server_ip(rebuilt_server, validation_resources), self.get_server_ip(rebuilt_server, validation_resources),
self.ssh_user, self.ssh_alt_user,
password, password,
validation_resources['keypair']['private_key'], validation_resources['keypair']['private_key'],
server=rebuilt_server, server=rebuilt_server,
@ -310,7 +310,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
self.os_primary) self.os_primary)
linux_client = remote_client.RemoteClient( linux_client = remote_client.RemoteClient(
self.get_server_ip(server, validation_resources), self.get_server_ip(server, validation_resources),
self.ssh_user, self.ssh_alt_user,
password=None, password=None,
pkey=validation_resources['keypair']['private_key'], pkey=validation_resources['keypair']['private_key'],
server=server, server=server,

View File

@ -865,10 +865,17 @@ ValidationGroup = [
cfg.StrOpt('image_ssh_user', cfg.StrOpt('image_ssh_user',
default="root", default="root",
help="User name used to authenticate to an instance."), help="User name used to authenticate to an instance."),
cfg.StrOpt('image_alt_ssh_user',
default="root",
help="User name used to authenticate to an alt instance."),
cfg.StrOpt('image_ssh_password', cfg.StrOpt('image_ssh_password',
default="password", default="password",
help="Password used to authenticate to an instance.", help="Password used to authenticate to an instance.",
secret=True), secret=True),
cfg.StrOpt('image_alt_ssh_password',
default="password",
help="Password used to authenticate to an alt instance.",
secret=True),
cfg.StrOpt('ssh_shell_prologue', cfg.StrOpt('ssh_shell_prologue',
default="set -eu -o pipefail; PATH=$$PATH:/sbin:/usr/sbin;", default="set -eu -o pipefail; PATH=$$PATH:/sbin:/usr/sbin;",
help="Shell fragments to use before executing a command " help="Shell fragments to use before executing a command "

View File

@ -80,8 +80,8 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
return floating_ip return floating_ip
def _check_network_connectivity(self, server, keypair, floating_ip, def _check_network_connectivity(self, server, keypair, floating_ip,
should_connect=True): should_connect=True,
username = CONF.validation.image_ssh_user username=CONF.validation.image_ssh_user):
private_key = keypair['private_key'] private_key = keypair['private_key']
self.check_tenant_network_connectivity( self.check_tenant_network_connectivity(
server, username, private_key, server, username, private_key,
@ -95,12 +95,13 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
'Public network connectivity check failed', 'Public network connectivity check failed',
server) server)
def _wait_server_status_and_check_network_connectivity(self, server, def _wait_server_status_and_check_network_connectivity(
keypair, self, server, keypair, floating_ip,
floating_ip): username=CONF.validation.image_ssh_user):
waiters.wait_for_server_status(self.servers_client, server['id'], waiters.wait_for_server_status(self.servers_client, server['id'],
'ACTIVE') 'ACTIVE')
self._check_network_connectivity(server, keypair, floating_ip) self._check_network_connectivity(server, keypair, floating_ip,
username=username)
@decorators.idempotent_id('61f1aa9a-1573-410e-9054-afa557cab021') @decorators.idempotent_id('61f1aa9a-1573-410e-9054-afa557cab021')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@ -137,10 +138,11 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
server = self._setup_server(keypair) server = self._setup_server(keypair)
floating_ip = self._setup_network(server, keypair) floating_ip = self._setup_network(server, keypair)
image_ref_alt = CONF.compute.image_ref_alt image_ref_alt = CONF.compute.image_ref_alt
username_alt = CONF.validation.image_alt_ssh_user
self.servers_client.rebuild_server(server['id'], self.servers_client.rebuild_server(server['id'],
image_ref=image_ref_alt) image_ref=image_ref_alt)
self._wait_server_status_and_check_network_connectivity( self._wait_server_status_and_check_network_connectivity(
server, keypair, floating_ip) server, keypair, floating_ip, username_alt)
@decorators.idempotent_id('2b2642db-6568-4b35-b812-eceed3fa20ce') @decorators.idempotent_id('2b2642db-6568-4b35-b812-eceed3fa20ce')
@testtools.skipUnless(CONF.compute_feature_enabled.pause, @testtools.skipUnless(CONF.compute_feature_enabled.pause,