Skip to content

Commit 2e78c11

Browse files
committed
Add options to allow filtering on agent list
Add options to allow filtering via --agent-type and --host on agent list Change-Id: I1800f0777aa92a76b4b95f64f8acc18454809e81 Closes-Bug: #1641868 Partially-Implements: blueprint network-commands-options
1 parent 3816b4b commit 2e78c11

4 files changed

Lines changed: 94 additions & 1 deletion

File tree

doc/source/command-objects/network-agent.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@ List network agents
3535
.. code:: bash
3636
3737
openstack network agent list
38+
[--agent-type <agent-type>]
39+
[--host <host>]
40+
41+
.. option:: --agent-type <agent-type>
42+
43+
List only agents with the specified agent type.
44+
The supported agent types are: dhcp, open-vswitch,
45+
linux-bridge, ofa, l3, loadbalancer, metering,
46+
metadata, macvtap, nic.
47+
48+
.. option:: --host <host>
49+
50+
List only agents running on the specified host
3851

3952
network agent set
4053
-----------------

openstackclient/network/v2/network_agent.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,25 @@ def take_action(self, parsed_args):
7272
class ListNetworkAgent(command.Lister):
7373
_description = _("List network agents")
7474

75+
def get_parser(self, prog_name):
76+
parser = super(ListNetworkAgent, self).get_parser(prog_name)
77+
parser.add_argument(
78+
'--agent-type',
79+
metavar='<agent-type>',
80+
choices=["dhcp", "open-vswitch", "linux-bridge", "ofa", "l3",
81+
"loadbalancer", "metering", "metadata", "macvtap", "nic"],
82+
help=_("List only agents with the specified agent type. "
83+
"The supported agent types are: dhcp, open-vswitch, "
84+
"linux-bridge, ofa, l3, loadbalancer, metering, "
85+
"metadata, macvtap, nic.")
86+
)
87+
parser.add_argument(
88+
'--host',
89+
metavar='<host>',
90+
help=_("List only agents running on the specified host")
91+
)
92+
return parser
93+
7594
def take_action(self, parsed_args):
7695
client = self.app.client_manager.network
7796
columns = (
@@ -92,7 +111,27 @@ def take_action(self, parsed_args):
92111
'State',
93112
'Binary'
94113
)
95-
data = client.agents()
114+
115+
key_value = {
116+
'dhcp': 'DHCP agent',
117+
'open-vswitch': 'Open vSwitch agent',
118+
'linux-bridge': 'Linux bridge agent',
119+
'ofa': 'OFA driver agent',
120+
'l3': 'L3 agent',
121+
'loadbalancer': 'Loadbalancer agent',
122+
'metering': 'Metering agent',
123+
'metadata': 'Metadata agent',
124+
'macvtap': 'Macvtap agent',
125+
'nic': 'NIC Switch agent'
126+
}
127+
128+
filters = {}
129+
if parsed_args.agent_type is not None:
130+
filters['agent_type'] = key_value[parsed_args.agent_type]
131+
if parsed_args.host is not None:
132+
filters['host'] = parsed_args.host
133+
134+
data = client.agents(**filters)
96135
return (column_headers,
97136
(utils.get_item_properties(
98137
s, columns, formatters=_formatters,

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ class TestListNetworkAgent(TestNetworkAgent):
130130
)
131131
data = []
132132
for agent in network_agents:
133+
agent.agent_type = 'DHCP agent'
133134
data.append((
134135
agent.id,
135136
agent.agent_type,
@@ -159,6 +160,40 @@ def test_network_agents_list(self):
159160
self.assertEqual(self.columns, columns)
160161
self.assertEqual(self.data, list(data))
161162

163+
def test_network_agents_list_agent_type(self):
164+
arglist = [
165+
'--agent-type', 'dhcp',
166+
]
167+
verifylist = [
168+
('agent_type', 'dhcp'),
169+
]
170+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
171+
172+
columns, data = self.cmd.take_action(parsed_args)
173+
174+
self.network.agents.assert_called_once_with(**{
175+
'agent_type': self.network_agents[0].agent_type,
176+
})
177+
self.assertEqual(self.columns, columns)
178+
self.assertEqual(self.data, list(data))
179+
180+
def test_network_agents_list_host(self):
181+
arglist = [
182+
'--host', self.network_agents[0].host,
183+
]
184+
verifylist = [
185+
('host', self.network_agents[0].host),
186+
]
187+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
188+
189+
columns, data = self.cmd.take_action(parsed_args)
190+
191+
self.network.agents.assert_called_once_with(**{
192+
'host': self.network_agents[0].host,
193+
})
194+
self.assertEqual(self.columns, columns)
195+
self.assertEqual(self.data, list(data))
196+
162197

163198
class TestSetNetworkAgent(TestNetworkAgent):
164199

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add filters ``--agent-type`` and ``--host``
5+
to ``network agent list`` command
6+
[Bug `1641868 <https://bugs.launchpad.net/bugs/1641868>`_]

0 commit comments

Comments
 (0)