Add configurable hostname pattern to filter hosts

Currently when aggregating potential target hosts via
get_host_other_than, it's hostname filtering only addresses the suffix
'-ironic'. In the event that pattern is located within the hostname e.g.
nova-cell1-compute-ironic-compute-0, then it will still be used as a
target candidate. Update tempest to allow for a configurable hostname
pattern to filter on when searching for candidates.

Also updated additional testcases that are still using the suffix only
check when removing guests with ironic in the name.

Change-Id: If5bab817e04412512186be2195cd2437bd310980
This commit is contained in:
jamepark4 2024-07-23 16:27:27 -04:00
parent 1af21705c5
commit 9d8d631bdd
6 changed files with 18 additions and 5 deletions

View File

@ -0,0 +1,6 @@
---
features:
- |
Add a new config option `[compute]/target_hosts_to_avoid` which will
filter out any hypervisor candidates with a hostname that matches the
provided pattern when determining target hosts for migration.

View File

@ -14,8 +14,11 @@
from tempest.api.compute import base from tempest.api.compute import base
from tempest.common import tempest_fixtures as fixtures from tempest.common import tempest_fixtures as fixtures
from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
CONF = config.CONF
class HostsAdminTestJSON(base.BaseV2ComputeAdminTest): class HostsAdminTestJSON(base.BaseV2ComputeAdminTest):
"""Tests nova hosts API using admin privileges.""" """Tests nova hosts API using admin privileges."""
@ -70,7 +73,7 @@ class HostsAdminTestJSON(base.BaseV2ComputeAdminTest):
hosts = [host for host in hosts if ( hosts = [host for host in hosts if (
host['service'] == 'compute' and host['service'] == 'compute' and
not host['host_name'].endswith('-ironic'))] CONF.compute.target_hosts_to_avoid not in host['host_name'])]
self.assertNotEmpty(hosts) self.assertNotEmpty(hosts)
for host in hosts: for host in hosts:

View File

@ -720,7 +720,7 @@ class BaseV2ComputeAdminTest(BaseV2ComputeTest):
binary='nova-compute')['services'] binary='nova-compute')['services']
hosts = [] hosts = []
for svc in svcs: for svc in svcs:
if svc['host'].endswith('-ironic'): if CONF.compute.target_hosts_to_avoid in svc['host']:
continue continue
if svc['state'] == 'up' and svc['status'] == 'enabled': if svc['state'] == 'up' and svc['status'] == 'enabled':
if CONF.compute.compute_volume_common_az: if CONF.compute.compute_volume_common_az:

View File

@ -418,7 +418,11 @@ ComputeGroup = [
help="Specify destination host for live-migration and cold" help="Specify destination host for live-migration and cold"
" migration. If option is not set tests will use host" " migration. If option is not set tests will use host"
" automatically."), " automatically."),
cfg.StrOpt('target_hosts_to_avoid',
default='-ironic',
help="When aggregating available hypervisors for testing,"
" avoid migrating to and booting any test VM on hosts with"
" a name that matches the provided pattern"),
] ]
placement_group = cfg.OptGroup(name='placement', placement_group = cfg.OptGroup(name='placement',

View File

@ -80,7 +80,7 @@ class TestInstancesWithCinderVolumes(manager.ScenarioTest):
for host in zone['hosts']: for host in zone['hosts']:
if 'nova-compute' in zone['hosts'][host] and \ if 'nova-compute' in zone['hosts'][host] and \
zone['hosts'][host]['nova-compute']['available'] and \ zone['hosts'][host]['nova-compute']['available'] and \
not host.endswith('-ironic'): CONF.compute.target_hosts_to_avoid not in host:
hosts.append({'zone': zone['zoneName'], hosts.append({'zone': zone['zoneName'],
'host_name': host}) 'host_name': host})

View File

@ -48,7 +48,7 @@ class TestServerMultinode(manager.ScenarioTest):
for host in zone['hosts']: for host in zone['hosts']:
if 'nova-compute' in zone['hosts'][host] and \ if 'nova-compute' in zone['hosts'][host] and \
zone['hosts'][host]['nova-compute']['available'] and \ zone['hosts'][host]['nova-compute']['available'] and \
not host.endswith('-ironic'): CONF.compute.target_hosts_to_avoid not in host:
hosts.append({'zone': zone['zoneName'], hosts.append({'zone': zone['zoneName'],
'host_name': host}) 'host_name': host})