Skip to content

Commit 722be75

Browse files
Huanxuan AoMichael Gugino
andcommitted
Implement "network agent set" command
Add "network agent set" command in network v2 to set network agent properties. Also add the unit test, doc, functional test and release note. Change-Id: Iebaee4c60f8c6b43f538c1b82a38b93178b9ce53 Implements: bp implement-network-agents Co-Authored-By: Michael Gugino <michael.gugino@walmart.com>
1 parent 0b91368 commit 722be75

6 files changed

Lines changed: 158 additions & 2 deletions

File tree

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,36 @@ List network agents
3636
3737
os network agent list
3838
39+
network agent set
40+
-----------------
41+
42+
Set network agent properties
43+
44+
.. program:: network agent set
45+
.. code:: bash
46+
47+
os network agent set
48+
[--description <description>]
49+
[--enable | --disable]
50+
<network-agent>
51+
52+
.. option:: --description <discription>
53+
54+
Set network agent description
55+
56+
.. option:: --enable
57+
58+
Enable network agent
59+
60+
.. option:: --disable
61+
62+
Disable network agent
63+
64+
.. _network_agent_set-network-agent:
65+
.. describe:: <network-agent>
66+
67+
Network agent to modify (ID only)
68+
3969
network agent show
4070
------------------
4171

functional/tests/network/v2/test_network_agent.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,12 @@ def test_network_agent_show(self):
3030
opts = self.get_opts(self.FIELDS)
3131
raw_output = self.openstack('network agent show ' + self.IDs[0] + opts)
3232
self.assertEqual(self.IDs[0] + "\n", raw_output)
33+
34+
def test_network_agent_set(self):
35+
opts = self.get_opts(['admin_state_up'])
36+
self.openstack('network agent set --disable ' + self.IDs[0])
37+
raw_output = self.openstack('network agent show ' + self.IDs[0] + opts)
38+
self.assertEqual("DOWN\n", raw_output)
39+
self.openstack('network agent set --enable ' + self.IDs[0])
40+
raw_output = self.openstack('network agent show ' + self.IDs[0] + opts)
41+
self.assertEqual("UP\n", raw_output)

openstackclient/network/v2/network_agent.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,47 @@ def take_action(self, parsed_args):
9999
) for s in data))
100100

101101

102+
class SetNetworkAgent(command.Command):
103+
"""Set network agent properties"""
104+
105+
def get_parser(self, prog_name):
106+
parser = super(SetNetworkAgent, self).get_parser(prog_name)
107+
parser.add_argument(
108+
'network_agent',
109+
metavar="<network-agent>",
110+
help=(_("Network agent to modify (ID only)"))
111+
)
112+
parser.add_argument(
113+
'--description',
114+
metavar='<description>',
115+
help=_("Set network agent description")
116+
)
117+
admin_group = parser.add_mutually_exclusive_group()
118+
admin_group.add_argument(
119+
'--enable',
120+
action='store_true',
121+
help=_("Enable network agent")
122+
)
123+
admin_group.add_argument(
124+
'--disable',
125+
action='store_true',
126+
help=_("Disable network agent")
127+
)
128+
return parser
129+
130+
def take_action(self, parsed_args):
131+
client = self.app.client_manager.network
132+
obj = client.get_agent(parsed_args.network_agent, ignore_missing=False)
133+
attrs = {}
134+
if parsed_args.description is not None:
135+
attrs['description'] = str(parsed_args.description)
136+
if parsed_args.enable:
137+
attrs['admin_state_up'] = True
138+
if parsed_args.disable:
139+
attrs['admin_state_up'] = False
140+
client.update_agent(obj, **attrs)
141+
142+
102143
class ShowNetworkAgent(command.ShowOne):
103144
"""Display network agent details"""
104145

openstackclient/tests/network/v2/test_network_agent.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,81 @@ def test_network_agents_list(self):
160160
self.assertEqual(self.data, list(data))
161161

162162

163+
class TestSetNetworkAgent(TestNetworkAgent):
164+
165+
_network_agent = (
166+
network_fakes.FakeNetworkAgent.create_one_network_agent())
167+
168+
def setUp(self):
169+
super(TestSetNetworkAgent, self).setUp()
170+
self.network.update_agent = mock.Mock(return_value=None)
171+
self.network.get_agent = mock.Mock(return_value=self._network_agent)
172+
173+
# Get the command object to test
174+
self.cmd = network_agent.SetNetworkAgent(self.app, self.namespace)
175+
176+
def test_set_nothing(self):
177+
arglist = [
178+
self._network_agent.id,
179+
]
180+
verifylist = [
181+
('network_agent', self._network_agent.id),
182+
]
183+
184+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
185+
result = self.cmd.take_action(parsed_args)
186+
187+
attrs = {}
188+
self.network.update_agent.assert_called_once_with(
189+
self._network_agent, **attrs)
190+
self.assertIsNone(result)
191+
192+
def test_set_all(self):
193+
arglist = [
194+
'--description', 'new_description',
195+
'--enable',
196+
self._network_agent.id,
197+
]
198+
verifylist = [
199+
('description', 'new_description'),
200+
('enable', True),
201+
('disable', False),
202+
('network_agent', self._network_agent.id),
203+
]
204+
205+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
206+
result = self.cmd.take_action(parsed_args)
207+
208+
attrs = {
209+
'description': 'new_description',
210+
'admin_state_up': True,
211+
}
212+
self.network.update_agent.assert_called_once_with(
213+
self._network_agent, **attrs)
214+
self.assertIsNone(result)
215+
216+
def test_set_with_disable(self):
217+
arglist = [
218+
'--disable',
219+
self._network_agent.id,
220+
]
221+
verifylist = [
222+
('enable', False),
223+
('disable', True),
224+
('network_agent', self._network_agent.id),
225+
]
226+
227+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
228+
result = self.cmd.take_action(parsed_args)
229+
230+
attrs = {
231+
'admin_state_up': False,
232+
}
233+
self.network.update_agent.assert_called_once_with(
234+
self._network_agent, **attrs)
235+
self.assertIsNone(result)
236+
237+
163238
class TestShowNetworkAgent(TestNetworkAgent):
164239

165240
_network_agent = (
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
22
features:
3-
- Add ``network agent delete``, ``network agent list`` and
4-
``network agent show`` commands.
3+
- Add ``network agent delete``, ``network agent list``, ``network agent show``
4+
and ``network agent set`` commands.
55
[Blueprint `implement-network-agents <https://blueprints.launchpad.net/python-openstackclient/+spec/implement-network-agents>`_]

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ openstack.network.v2 =
357357

358358
network_agent_delete = openstackclient.network.v2.network_agent:DeleteNetworkAgent
359359
network_agent_list = openstackclient.network.v2.network_agent:ListNetworkAgent
360+
network_agent_set = openstackclient.network.v2.network_agent:SetNetworkAgent
360361
network_agent_show = openstackclient.network.v2.network_agent:ShowNetworkAgent
361362

362363
network_create = openstackclient.network.v2.network:CreateNetwork

0 commit comments

Comments
 (0)