Get node service name by Neutron agent name
Change-Id: Ifd453313ff05a2fb9eb4d2c5a26f0f7b30dafbc4
This commit is contained in:
parent
13a51715c5
commit
e876d70998
|
@ -20,6 +20,8 @@ from tobiko.openstack.topology import _topology
|
|||
NoSuchOpenStackTopologyNodeGroup = _exception.NoSuchOpenStackTopologyNodeGroup
|
||||
NoSuchOpenStackTopologyNode = _exception.NoSuchOpenStackTopologyNode
|
||||
|
||||
UnknowOpenStackServiceNameError = _topology.UnknowOpenStackServiceNameError
|
||||
get_agent_service_name = _topology.get_agent_service_name
|
||||
get_openstack_topology = _topology.get_openstack_topology
|
||||
get_openstack_node = _topology.get_openstack_node
|
||||
find_openstack_node = _topology.find_openstack_node
|
||||
|
|
|
@ -28,6 +28,7 @@ from tobiko import podman
|
|||
from tobiko.shell import ip
|
||||
from tobiko.shell import sh
|
||||
from tobiko.shell import ssh
|
||||
from tobiko.openstack import neutron
|
||||
from tobiko.openstack import nova
|
||||
from tobiko.openstack import keystone
|
||||
from tobiko.openstack.topology import _address
|
||||
|
@ -39,16 +40,6 @@ from tobiko.openstack.topology import _exception
|
|||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
DEFAULT_TOPOLOGY_CLASS = (
|
||||
'tobiko.openstack.topology._topology.OpenStackTopology')
|
||||
|
||||
|
||||
def get_openstack_topology(topology_class=None):
|
||||
# type: (typing.Any) -> OpenStackTopology
|
||||
topology_class = topology_class or get_default_openstack_topology_class()
|
||||
return tobiko.setup_fixture(topology_class)
|
||||
|
||||
|
||||
def list_openstack_nodes(topology=None, group=None, hostnames=None, **kwargs):
|
||||
topology = topology or get_openstack_topology()
|
||||
if group is None:
|
||||
|
@ -87,17 +78,29 @@ def list_openstack_node_groups(topology=None):
|
|||
return topology.groups
|
||||
|
||||
|
||||
def get_default_openstack_topology_class():
|
||||
# type: () -> typing.Any
|
||||
def get_default_openstack_topology_class() -> typing.Type:
|
||||
return DEFAULT_TOPOLOGY_CLASS
|
||||
|
||||
|
||||
def set_default_openstack_topology_class(topology_class):
|
||||
def set_default_openstack_topology_class(topology_class: typing.Type):
|
||||
# pylint: disable=global-statement
|
||||
if not issubclass(topology_class, OpenStackTopology):
|
||||
raise TypeError(f"'{topology_class}' is not subclass of "
|
||||
f"'{OpenStackTopology}'")
|
||||
global DEFAULT_TOPOLOGY_CLASS
|
||||
DEFAULT_TOPOLOGY_CLASS = topology_class
|
||||
|
||||
|
||||
def get_agent_service_name(agent_name: str) -> str:
|
||||
topology_class = get_default_openstack_topology_class()
|
||||
return topology_class.get_agent_service_name(agent_name)
|
||||
|
||||
|
||||
class UnknowOpenStackServiceNameError(tobiko.TobikoException):
|
||||
message = ("Unknown service name for agent name '{agent_name}' and "
|
||||
"topology class '{topology_class}'")
|
||||
|
||||
|
||||
class OpenStackTopologyNode(object):
|
||||
|
||||
_docker_client = None
|
||||
|
@ -153,10 +156,10 @@ class OpenStackTopology(tobiko.SharedFixture):
|
|||
config = tobiko.required_setup_fixture(_config.OpenStackTopologyConfig)
|
||||
|
||||
agent_to_service_name_mappings = {
|
||||
'neutron-dhcp-agent': 'devstack@q-dhcp',
|
||||
'neutron-l3-agent': 'devstack@q-l3',
|
||||
'neutron-ovs-agent': 'devstack@q-agt',
|
||||
'neutron-metadata-agent': 'devstack@q-meta',
|
||||
neutron.DHCP_AGENT: 'devstack@q-dhcp',
|
||||
neutron.L3_AGENT: 'devstack@q-l3',
|
||||
neutron.OPENVSWITCH_AGENT: 'devstack@q-agt',
|
||||
neutron.METADATA_AGENT: 'devstack@q-meta'
|
||||
}
|
||||
|
||||
has_containers = False
|
||||
|
@ -183,11 +186,14 @@ class OpenStackTopology(tobiko.SharedFixture):
|
|||
self._groups.clear()
|
||||
self._addresses.clear()
|
||||
|
||||
def get_agent_service_name(self, agent_name):
|
||||
@classmethod
|
||||
def get_agent_service_name(cls, agent_name: str) -> str:
|
||||
try:
|
||||
return self.agent_to_service_name_mappings[agent_name]
|
||||
return cls.agent_to_service_name_mappings[agent_name]
|
||||
except KeyError:
|
||||
return None
|
||||
pass
|
||||
raise UnknowOpenStackServiceNameError(agent_name=agent_name,
|
||||
topology_class=cls)
|
||||
|
||||
def discover_nodes(self):
|
||||
self.discover_configured_nodes()
|
||||
|
@ -391,6 +397,20 @@ class OpenStackTopology(tobiko.SharedFixture):
|
|||
ssh_config=True)
|
||||
|
||||
|
||||
def get_openstack_topology(topology_class: typing.Type = None) -> \
|
||||
OpenStackTopology:
|
||||
if topology_class:
|
||||
if not issubclass(topology_class, OpenStackTopology):
|
||||
raise TypeError(f"'{topology_class}' is not subclass of "
|
||||
f"'{OpenStackTopology}'")
|
||||
else:
|
||||
topology_class = get_default_openstack_topology_class()
|
||||
return tobiko.setup_fixture(topology_class)
|
||||
|
||||
|
||||
DEFAULT_TOPOLOGY_CLASS = OpenStackTopology
|
||||
|
||||
|
||||
def node_name_from_hostname(hostname):
|
||||
return hostname.split('.', 1)[0].lower()
|
||||
|
||||
|
|
|
@ -223,7 +223,7 @@ class DHCPAgentTest(BaseAgentTest):
|
|||
def setUp(self):
|
||||
super(DHCPAgentTest, self).setUp()
|
||||
self.agent_service_name = self.get_agent_service_name(
|
||||
"neutron-dhcp-agent")
|
||||
neutron.DHCP_AGENT)
|
||||
|
||||
def test_stop_dhcp_agent(self):
|
||||
'''Test that dnsmasq processes are not broken after DHCP agent restart
|
||||
|
@ -284,7 +284,7 @@ class L3AgentTest(BaseAgentTest):
|
|||
def setUp(self):
|
||||
super(L3AgentTest, self).setUp()
|
||||
self.agent_service_name = self.get_agent_service_name(
|
||||
"neutron-l3-agent")
|
||||
neutron.L3_AGENT)
|
||||
self.router_id = self.stack.network_stack.gateway_id
|
||||
|
||||
def wait_for_active_ha_l3_agent(self):
|
||||
|
@ -449,7 +449,7 @@ class OvsAgentTest(BaseAgentTest):
|
|||
def setUp(self):
|
||||
super(OvsAgentTest, self).setUp()
|
||||
self.agent_service_name = self.get_agent_service_name(
|
||||
"neutron-ovs-agent")
|
||||
neutron.OPENVSWITCH_AGENT)
|
||||
|
||||
self.ovs_agents = neutron.list_agents(agent_type=self.agent_type)
|
||||
if not self.ovs_agents:
|
||||
|
@ -460,7 +460,7 @@ class OvsAgentTest(BaseAgentTest):
|
|||
for agent in self.ovs_agents:
|
||||
if host_shortname == tobiko.get_short_hostname(agent['host']):
|
||||
return agent
|
||||
raise neutron.AgentNotFoundOnHost(agent_type="neutron-ovs-agent",
|
||||
raise neutron.AgentNotFoundOnHost(agent_type=neutron.OPENVSWITCH_AGENT,
|
||||
host=host.name)
|
||||
|
||||
def test_vm_reachability_during_stop_ovs_agent(self):
|
||||
|
@ -485,7 +485,7 @@ class MetadataAgentTest(BaseAgentTest):
|
|||
def setUp(self):
|
||||
super(MetadataAgentTest, self).setUp()
|
||||
self.agent_service_name = self.get_agent_service_name(
|
||||
"neutron-metadata-agent")
|
||||
neutron.METADATA_AGENT)
|
||||
agents = neutron.list_agents(agent_type='Metadata agent')
|
||||
self.hosts = [agent['host'] for agent in agents]
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import typing # noqa
|
|||
|
||||
from oslo_log import log
|
||||
|
||||
from tobiko.openstack import neutron
|
||||
from tobiko.openstack import topology
|
||||
from tobiko.tripleo import _overcloud
|
||||
from tobiko.tripleo import _undercloud
|
||||
|
@ -29,10 +30,10 @@ LOG = log.getLogger(__name__)
|
|||
class TripleoTopology(topology.OpenStackTopology):
|
||||
|
||||
agent_to_service_name_mappings = {
|
||||
'neutron-dhcp-agent': 'tripleo_neutron_dhcp',
|
||||
'neutron-l3-agent': 'tripleo_neutron_l3_agent',
|
||||
'neutron-ovs-agent': 'tripleo_neutron_ovs_agent',
|
||||
'neutron-metadata-agent': 'tripleo_neutron_metadata_agent',
|
||||
neutron.DHCP_AGENT: 'tripleo_neutron_dhcp',
|
||||
neutron.L3_AGENT: 'tripleo_neutron_l3_agent',
|
||||
neutron.OPENVSWITCH_AGENT: 'tripleo_neutron_ovs_agent',
|
||||
neutron.METADATA_AGENT: 'tripleo_neutron_metadata_agent'
|
||||
}
|
||||
|
||||
has_containers = True
|
||||
|
@ -114,8 +115,7 @@ def is_number(text: str):
|
|||
|
||||
def setup_tripleo_topology():
|
||||
if _undercloud.has_undercloud() or _overcloud.has_overcloud():
|
||||
topology.set_default_openstack_topology_class(
|
||||
'tobiko.tripleo.topology.TripleoTopology')
|
||||
topology.set_default_openstack_topology_class(TripleoTopology)
|
||||
|
||||
|
||||
def get_ip_to_nodes_dict(openstack_nodes=None):
|
||||
|
|
Loading…
Reference in New Issue