Skip to content

Commit a95aad0

Browse files
committed
Add "network agent router set" command
Add a new ``network agent router set`` command that allows updating properties of a router associated to an L3 agent. This leverages the ``update_router_in_agent`` SDK method (PUT on the agent's l3-routers endpoint) added in [1], included in openstacksdk 4.12.0. Currently supports setting ``--ha-chassis-priority``. [1]https://review.opendev.org/c/openstack/openstacksdk/+/983852 Partial-Bug: #2103521 Signed-off-by: Rodolfo Alonso Hernandez <ralonsoh@redhat.com> Change-Id: I68bca1bdf0f10cd4341276519a1ca609150646a1
1 parent 757ecb7 commit a95aad0

4 files changed

Lines changed: 106 additions & 0 deletions

File tree

openstackclient/network/v2/network_agent.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,45 @@ def take_action(self, parsed_args: argparse.Namespace) -> None:
389389
client.remove_router_from_agent(agent, router)
390390

391391

392+
class SetNetworkAgentRouter(command.Command):
393+
_description = _("Set properties of a router associated to an agent")
394+
395+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
396+
parser = super().get_parser(prog_name)
397+
parser.add_argument(
398+
'--ha-chassis-priority',
399+
metavar='<ha-chassis-priority>',
400+
type=int,
401+
required=True,
402+
help=_(
403+
"HA Chassis priority, ranging from [0, 32767]. "
404+
"Only used with --l3 and for ML2/OVN L3 agents"
405+
),
406+
)
407+
parser.add_argument(
408+
'agent_id',
409+
metavar='<agent-id>',
410+
help=_("L3 agent to modify (ID only)"),
411+
)
412+
parser.add_argument(
413+
'router',
414+
metavar='<router>',
415+
help=_("Router to update (name or ID)"),
416+
)
417+
418+
return parser
419+
420+
def take_action(self, parsed_args: argparse.Namespace) -> None:
421+
client = self.app.client_manager.network
422+
agent = client.get_agent(parsed_args.agent_id)
423+
router = client.find_router(parsed_args.router, ignore_missing=False)
424+
client.update_router_in_agent(
425+
agent,
426+
router,
427+
ha_chassis_priority=parsed_args.ha_chassis_priority,
428+
)
429+
430+
392431
class SetNetworkAgent(command.Command):
393432
_description = _("Set network agent properties")
394433

openstackclient/tests/unit/network/v2/test_network_agent.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,66 @@ def test_remove_router_required_options(self):
499499
self.assertIsNone(result)
500500

501501

502+
class TestSetNetworkAgentRouter(TestNetworkAgent):
503+
def setUp(self):
504+
super().setUp()
505+
self._router = network_fakes.create_one_router()
506+
self._agent = network_fakes.create_one_network_agent()
507+
self.network_client.get_agent.return_value = self._agent
508+
self.network_client.find_router.return_value = self._router
509+
self.cmd = network_agent.SetNetworkAgentRouter(self.app, None)
510+
511+
def test_set_no_options(self):
512+
arglist = []
513+
verifylist = []
514+
515+
self.assertRaises(
516+
tests_utils.ParserException,
517+
self.check_parser,
518+
self.cmd,
519+
arglist,
520+
verifylist,
521+
)
522+
523+
def test_set_router_missing_ha_chassis_priority(self):
524+
arglist = [
525+
self._agent.id,
526+
self._router.id,
527+
]
528+
verifylist = []
529+
530+
self.assertRaises(
531+
tests_utils.ParserException,
532+
self.check_parser,
533+
self.cmd,
534+
arglist,
535+
verifylist,
536+
)
537+
538+
def test_set_router_with_ha_chassis_priority(self):
539+
arglist = [
540+
'--ha-chassis-priority',
541+
'200',
542+
self._agent.id,
543+
self._router.id,
544+
]
545+
verifylist = [
546+
('agent_id', self._agent.id),
547+
('router', self._router.id),
548+
('ha_chassis_priority', 200),
549+
]
550+
551+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
552+
result = self.cmd.take_action(parsed_args)
553+
554+
self.network_client.update_router_in_agent.assert_called_with(
555+
self._agent,
556+
self._router,
557+
ha_chassis_priority=200,
558+
)
559+
self.assertIsNone(result)
560+
561+
502562
class TestSetNetworkAgent(TestNetworkAgent):
503563
_network_agent = network_fakes.create_one_network_agent()
504564

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ network_agent_list = "openstackclient.network.v2.network_agent:ListNetworkAgent"
418418
network_agent_remove_network = "openstackclient.network.v2.network_agent:RemoveNetworkFromAgent"
419419
network_agent_remove_router = "openstackclient.network.v2.network_agent:RemoveRouterFromAgent"
420420
network_agent_set = "openstackclient.network.v2.network_agent:SetNetworkAgent"
421+
network_agent_router_set = "openstackclient.network.v2.network_agent:SetNetworkAgentRouter"
421422
network_agent_show = "openstackclient.network.v2.network_agent:ShowNetworkAgent"
422423
network_auto_allocated_topology_create = "openstackclient.network.v2.network_auto_allocated_topology:CreateAutoAllocatedTopology"
423424
network_auto_allocated_topology_delete = "openstackclient.network.v2.network_auto_allocated_topology:DeleteAutoAllocatedTopology"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add a new ``network agent router set`` command that allows updating
5+
properties of a router associated to an ML2/OVN L3 agent. Currently
6+
supports setting ``--ha-chassis-priority``.

0 commit comments

Comments
 (0)