Skip to content

Commit 77a45fe

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Compute: Add tag support for server add fixed ip"
2 parents d59057a + 742c80a commit 77a45fe

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
@@ -182,6 +182,72 @@ def test_server_add_specific_fixed_ip(self):
182182
extralist = ['--fixed-ip-address', '5.6.7.8']
183183
self._test_server_add_fixed_ip(extralist, '5.6.7.8')
184184

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

186252
@mock.patch(
187253
'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)