Merge "SDK for Neutron IP availabilty and Agents"

This commit is contained in:
Zuul 2025-03-10 21:31:12 +00:00 committed by Gerrit Code Review
commit 34fe9b6d6a
5 changed files with 49 additions and 39 deletions
openstack_dashboard
api
dashboards/admin
info
networks/agents
test

@ -2063,40 +2063,41 @@ def default_quota_get(request, tenant_id=None):
@profiler.trace
def agent_list(request, **params):
agents = neutronclient(request).list_agents(**params)
return [Agent(a) for a in agents['agents']]
agents = networkclient(request).agents(**params)
return [Agent(a.to_dict()) for a in agents]
@profiler.trace
def list_dhcp_agent_hosting_networks(request, network, **params):
agents = neutronclient(request).list_dhcp_agent_hosting_networks(network,
**params)
return [Agent(a) for a in agents['agents']]
agents = networkclient(request).network_hosting_dhcp_agents(network,
**params)
return [Agent(a.to_dict()) for a in agents]
@profiler.trace
def list_l3_agent_hosting_router(request, router, **params):
agents = neutronclient(request).list_l3_agent_hosting_routers(router,
**params)
return [Agent(a) for a in agents['agents']]
agents = networkclient(request).routers_hosting_l3_agents(router,
**params)
return [Agent(a.to_dict()) for a in agents]
@profiler.trace
def show_network_ip_availability(request, network_id):
ip_availability = neutronclient(request).show_network_ip_availability(
ip_availability = networkclient(request).get_network_ip_availability(
network_id)
return ip_availability
return ip_availability.to_dict()
@profiler.trace
def add_network_to_dhcp_agent(request, dhcp_agent, network_id):
body = {'network_id': network_id}
return neutronclient(request).add_network_to_dhcp_agent(dhcp_agent, body)
return networkclient(request).add_dhcp_agent_to_network(
agent=dhcp_agent,
network=network_id)
@profiler.trace
def remove_network_from_dhcp_agent(request, dhcp_agent, network_id):
return neutronclient(request).remove_network_from_dhcp_agent(dhcp_agent,
return networkclient(request).remove_dhcp_agent_from_network(dhcp_agent,
network_id)

@ -169,14 +169,14 @@ def get_network_agent_zone(agent):
def get_network_agent_status(agent):
if agent.admin_state_up:
if agent.is_admin_state_up:
return _('Enabled')
return _('Disabled')
def get_network_agent_state(agent):
if agent.alive:
if agent.is_alive:
return _('Up')
return _('Down')
@ -206,7 +206,7 @@ class NetworkAgentsTable(tables.DataTable):
zone = tables.Column(get_network_agent_zone, verbose_name=_('Zone'))
status = tables.Column(get_network_agent_status, verbose_name=_('Status'))
state = tables.Column(get_network_agent_state, verbose_name=_('State'))
heartbeat_timestamp = tables.Column('heartbeat_timestamp',
heartbeat_timestamp = tables.Column('last_heartbeat_at',
verbose_name=pgettext_lazy(
'Time since the last update',
'Last Updated'),

@ -66,13 +66,13 @@ class AddDHCPAgent(tables.LinkAction):
def get_agent_status(agent):
if agent.admin_state_up:
if agent.is_admin_state_up:
return _('Enabled')
return _('Disabled')
def get_agent_state(agent):
if agent.alive:
if agent.is_alive:
return _('Up')
return _('Down')
@ -86,7 +86,7 @@ class DHCPAgentsTable(tables.DataTable):
host = tables.WrappingColumn('host', verbose_name=_('Host'))
status = tables.Column(get_agent_status, verbose_name=_('Status'))
state = tables.Column(get_agent_state, verbose_name=_('Admin State'))
heartbeat_timestamp = tables.Column('heartbeat_timestamp',
heartbeat_timestamp = tables.Column('last_heartbeat_at',
verbose_name=_('Updated At'),
filters=(utils_filters.parse_isotime,
filters.timesince))

@ -14,7 +14,10 @@
import copy
from openstack.network.v2 import agent as sdk_agent
from openstack.network.v2 import network as sdk_net
from openstack.network.v2 import network_ip_availability as \
sdk_ip_availability
from openstack.network.v2 import port as sdk_port
from openstack.network.v2 import router as sdk_router
from openstack.network.v2 import subnet as sdk_subnet
@ -98,6 +101,8 @@ def data(TEST):
TEST.api_subnetpools_sdk = list()
TEST.api_routers_sdk = list()
TEST.api_routers_with_routes_sdk = list()
TEST.api_agents_sdk = list()
TEST.api_ip_availability_sdk = list()
# 1st network.
network_dict = {'is_admin_state_up': True,
@ -1032,9 +1037,9 @@ def data(TEST):
# 1st agent.
agent_dict = {"binary": "neutron-openvswitch-agent",
"description": None,
"admin_state_up": True,
"heartbeat_timestamp": "2013-07-26 06:51:47",
"alive": True,
"is_admin_state_up": True,
"last_heartbeat_at": "2013-07-26 06:51:47",
"is_alive": True,
"id": "c876ff05-f440-443e-808c-1d34cda3e88a",
"topic": "N/A",
"host": "devstack001",
@ -1043,14 +1048,15 @@ def data(TEST):
"created_at": "2013-07-26 05:23:28",
"configurations": {"devices": 2}}
TEST.api_agents.add(agent_dict)
TEST.api_agents_sdk.append(sdk_agent.Agent(**agent_dict))
TEST.agents.add(neutron.Agent(agent_dict))
# 2nd agent.
agent_dict = {"binary": "neutron-dhcp-agent",
"description": None,
"admin_state_up": True,
"heartbeat_timestamp": "2013-07-26 06:51:48",
"alive": True,
"is_admin_state_up": True,
"last_heartbeat_at": "2013-07-26 06:51:48",
"is_alive": True,
"id": "f0d12e3d-1973-41a2-b977-b95693f9a8aa",
"topic": "dhcp_agent",
"host": "devstack001",
@ -1065,6 +1071,7 @@ def data(TEST):
"networks": 1,
"ports": 1}}
TEST.api_agents.add(agent_dict)
TEST.api_agents_sdk.append(sdk_agent.Agent(**agent_dict))
TEST.agents.add(neutron.Agent(agent_dict))
# Service providers.
@ -1118,6 +1125,8 @@ def data(TEST):
TEST.ip_availability.add(availability)
TEST.api_ip_availability.add(availability)
TEST.api_ip_availability_sdk.append(
sdk_ip_availability.NetworkIPAvailability(**availability))
# qos policies
policy_dict = {'id': 'a21dcd22-7189-cccc-aa32-22adafaf16a7',

@ -992,27 +992,27 @@ class NeutronApiTests(test.APIMockTestCase):
neutronclient.delete_network.assert_called_once_with(network_id)
@mock.patch.object(api.neutron, 'neutronclient')
def test_get_network_ip_availability(self, mock_neutronclient):
network = {'network': self.api_networks.first()}
mock_ip_availability = self.ip_availability.get()
neutronclient = mock_neutronclient.return_value
neutronclient.show_network_ip_availability.return_value = \
@mock.patch.object(api.neutron, 'networkclient')
def test_get_network_ip_availability(self, mock_networkclient):
network = self.api_networks_sdk[0]
mock_ip_availability = self.api_ip_availability_sdk[0]
networkclient = mock_networkclient.return_value
networkclient.get_network_ip_availability.return_value = \
mock_ip_availability
ret_val = api.neutron.show_network_ip_availability(self.request,
network)
self.assertIsInstance(ret_val, dict)
neutronclient.show_network_ip_availability.assert_called_once_with(
networkclient.get_network_ip_availability.assert_called_once_with(
network)
@mock.patch.object(api.neutron, 'neutronclient')
def test_subnet_network_ip_availability(self, mock_neutronclient):
network = {'network': self.api_networks.first()}
mock_ip_availability = self.ip_availability.get()
neutronclient = mock_neutronclient.return_value
neutronclient.show_network_ip_availability.return_value = \
@mock.patch.object(api.neutron, 'networkclient')
def test_subnet_network_ip_availability(self, mock_networkclient):
network = self.api_networks_sdk[0]
mock_ip_availability = self.api_ip_availability_sdk[0]
networkcient = mock_networkclient.return_value
networkcient.get_network_ip_availability.return_value = \
mock_ip_availability
ip_availability = api.neutron. \
@ -1022,7 +1022,7 @@ class NeutronApiTests(test.APIMockTestCase):
ret_val = availabilities.get("subnet_ip_availability", [])
self.assertIsInstance(ret_val, list)
neutronclient.show_network_ip_availability.assert_called_once_with(
networkcient.get_network_ip_availability.assert_called_once_with(
network)
@mock.patch.object(api.neutron, 'networkclient')