Skip to content

Commit 742c80a

Browse files
Huihuihhstephenfin
authored andcommitted
Compute: Add tag support for server add fixed ip
Change-Id: I62ed4729dead9f91630d1f568c834c9642965558 Story: 2002195 Task: 21679
1 parent a48c05b commit 742c80a

3 files changed

Lines changed: 96 additions & 5 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,14 @@ def get_parser(self, prog_name):
236236
metavar="<ip-address>",
237237
help=_("Requested fixed IP address"),
238238
)
239+
parser.add_argument(
240+
'--tag',
241+
metavar='<tag>',
242+
help=_(
243+
'Tag for the attached interface. '
244+
'(supported by --os-compute-api-version 2.52 or above)'
245+
)
246+
)
239247
return parser
240248

241249
def take_action(self, parsed_args):
@@ -246,11 +254,23 @@ def take_action(self, parsed_args):
246254

247255
network = compute_client.api.network_find(parsed_args.network)
248256

249-
server.interface_attach(
250-
port_id=None,
251-
net_id=network['id'],
252-
fixed_ip=parsed_args.fixed_ip_address,
253-
)
257+
kwargs = {
258+
'port_id': None,
259+
'net_id': network['id'],
260+
'fixed_ip': parsed_args.fixed_ip_address,
261+
}
262+
263+
if parsed_args.tag:
264+
if compute_client.api_version < api_versions.APIVersion('2.49'):
265+
msg = _(
266+
'--os-compute-api-version 2.49 or greater is required to '
267+
'support the --tag option'
268+
)
269+
raise exceptions.CommandError(msg)
270+
271+
kwargs['tag'] = parsed_args.tag
272+
273+
server.interface_attach(**kwargs)
254274

255275

256276
class AddFloatingIP(network_common.NetworkAndComputeCommand):

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,72 @@ def test_server_add_specific_fixed_ip(self):
177177
extralist = ['--fixed-ip-address', '5.6.7.8']
178178
self._test_server_add_fixed_ip(extralist, '5.6.7.8')
179179

180+
def test_server_add_fixed_ip_with_tag(self):
181+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
182+
'2.49')
183+
184+
servers = self.setup_servers_mock(count=1)
185+
network = compute_fakes.FakeNetwork.create_one_network()
186+
with mock.patch(
187+
'openstackclient.api.compute_v2.APIv2.network_find'
188+
) as net_mock:
189+
net_mock.return_value = network
190+
191+
arglist = [
192+
servers[0].id,
193+
network['id'],
194+
'--fixed-ip-address', '5.6.7.8',
195+
'--tag', 'tag1',
196+
]
197+
verifylist = [
198+
('server', servers[0].id),
199+
('network', network['id']),
200+
('fixed_ip_address', '5.6.7.8'),
201+
('tag', 'tag1'),
202+
]
203+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
204+
result = self.cmd.take_action(parsed_args)
205+
206+
servers[0].interface_attach.assert_called_once_with(
207+
port_id=None,
208+
net_id=network['id'],
209+
fixed_ip='5.6.7.8',
210+
tag='tag1'
211+
)
212+
self.assertIsNone(result)
213+
214+
def test_server_add_fixed_ip_with_tag_pre_v249(self):
215+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
216+
'2.48')
217+
218+
servers = self.setup_servers_mock(count=1)
219+
network = compute_fakes.FakeNetwork.create_one_network()
220+
with mock.patch(
221+
'openstackclient.api.compute_v2.APIv2.network_find'
222+
) as net_mock:
223+
net_mock.return_value = network
224+
225+
arglist = [
226+
servers[0].id,
227+
network['id'],
228+
'--fixed-ip-address', '5.6.7.8',
229+
'--tag', 'tag1',
230+
]
231+
verifylist = [
232+
('server', servers[0].id),
233+
('network', network['id']),
234+
('fixed_ip_address', '5.6.7.8'),
235+
('tag', 'tag1'),
236+
]
237+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
238+
ex = self.assertRaises(
239+
exceptions.CommandError,
240+
self.cmd.take_action,
241+
parsed_args)
242+
self.assertIn(
243+
'--os-compute-api-version 2.49 or greater is required',
244+
str(ex))
245+
180246

181247
@mock.patch(
182248
'openstackclient.api.compute_v2.APIv2.floating_ip_add'
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- Add ``--tag`` option to ``server add fixed ip`` command
4+
when adding a fixed IP to server. Only available starting
5+
with ``--os-compute-api-version 2.49``.

0 commit comments

Comments
 (0)