Skip to content

Commit f23322c

Browse files
osfricklerbrianphaley
authored andcommitted
Fix parameter handling in server add fixed ip cmd
The fixed_ip_address parameter needs to be passed in a hash with key "ip_address" in order to be processed by the server, the previous arg was simply being ignored. Added a functional test for better coverage. Closes-Bug: 1998927 Change-Id: I6956d2642d8e80fc10c3739f0a571aa7ba276b1a
1 parent 29129a7 commit f23322c

3 files changed

Lines changed: 67 additions & 14 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -290,9 +290,11 @@ def take_action(self, parsed_args):
290290
return ((), ())
291291

292292
kwargs = {
293-
'net_id': net_id,
294-
'fixed_ip': parsed_args.fixed_ip_address,
293+
'net_id': net_id
295294
}
295+
if parsed_args.fixed_ip_address:
296+
kwargs['fixed_ips'] = [
297+
{"ip_address": parsed_args.fixed_ip_address}]
296298
if parsed_args.tag:
297299
kwargs['tag'] = parsed_args.tag
298300

@@ -451,8 +453,7 @@ def take_action(self, parsed_args):
451453
port_id = parsed_args.port
452454

453455
kwargs = {
454-
'port_id': port_id,
455-
'fixed_ip': None,
456+
'port_id': port_id
456457
}
457458

458459
if parsed_args.tag:
@@ -506,8 +507,7 @@ def take_action(self, parsed_args):
506507
net_id = parsed_args.network
507508

508509
kwargs = {
509-
'net_id': net_id,
510-
'fixed_ip': None,
510+
'net_id': net_id
511511
}
512512

513513
if parsed_args.tag:

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,6 +1250,62 @@ def test_server_add_remove_port(self):
12501250
addresses = cmd_output['addresses']['private']
12511251
self.assertNotIn(ip_address, addresses)
12521252

1253+
def test_server_add_fixed_ip(self):
1254+
name = uuid.uuid4().hex
1255+
cmd_output = self.openstack(
1256+
'server create ' +
1257+
'--network private ' +
1258+
'--flavor ' + self.flavor_name + ' ' +
1259+
'--image ' + self.image_name + ' ' +
1260+
'--wait ' +
1261+
name,
1262+
parse_output=True,
1263+
)
1264+
1265+
self.assertIsNotNone(cmd_output['id'])
1266+
self.assertEqual(name, cmd_output['name'])
1267+
self.addCleanup(self.openstack, 'server delete --wait ' + name)
1268+
1269+
# create port, record its ip address to use in later call,
1270+
# then delete - this is to figure out what should be a free ip
1271+
# in the subnet
1272+
port_name = uuid.uuid4().hex
1273+
1274+
cmd_output = self.openstack(
1275+
'port list',
1276+
parse_output=True,
1277+
)
1278+
self.assertNotIn(port_name, cmd_output)
1279+
1280+
cmd_output = self.openstack(
1281+
'port create ' +
1282+
'--network private ' + port_name,
1283+
parse_output=True,
1284+
)
1285+
self.assertIsNotNone(cmd_output['id'])
1286+
ip_address = cmd_output['fixed_ips'][0]['ip_address']
1287+
self.openstack('port delete ' + port_name)
1288+
1289+
# add fixed ip to server, assert the ip address appears
1290+
self.openstack('server add fixed ip --fixed-ip-address ' + ip_address +
1291+
' ' + name + ' private')
1292+
1293+
wait_time = 0
1294+
while wait_time < 60:
1295+
cmd_output = self.openstack(
1296+
'server show ' + name,
1297+
parse_output=True,
1298+
)
1299+
if ip_address not in cmd_output['addresses']['private']:
1300+
# Hang out for a bit and try again
1301+
print('retrying add fixed ip check')
1302+
wait_time += 10
1303+
time.sleep(10)
1304+
else:
1305+
break
1306+
addresses = cmd_output['addresses']['private']
1307+
self.assertIn(ip_address, addresses)
1308+
12531309
def test_server_add_remove_volume(self):
12541310
volume_wait_for = volume_common.BaseVolumeTests.wait_for_status
12551311

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,7 @@ def test_server_add_fixed_ip(self, sm_mock):
423423
self.assertEqual(expected_data, tuple(data))
424424
self.sdk_client.create_server_interface.assert_called_once_with(
425425
servers[0].id,
426-
net_id=network['id'],
427-
fixed_ip=None
426+
net_id=network['id']
428427
)
429428

430429
@mock.patch.object(sdk_utils, 'supports_microversion')
@@ -479,7 +478,7 @@ def test_server_add_fixed_ip_with_fixed_ip(self, sm_mock):
479478
self.sdk_client.create_server_interface.assert_called_once_with(
480479
servers[0].id,
481480
net_id=network['id'],
482-
fixed_ip='5.6.7.8'
481+
fixed_ips=[{'ip_address': '5.6.7.8'}]
483482
)
484483

485484
@mock.patch.object(sdk_utils, 'supports_microversion')
@@ -536,7 +535,7 @@ def test_server_add_fixed_ip_with_tag(self, sm_mock):
536535
self.sdk_client.create_server_interface.assert_called_once_with(
537536
servers[0].id,
538537
net_id=network['id'],
539-
fixed_ip='5.6.7.8',
538+
fixed_ips=[{'ip_address': '5.6.7.8'}],
540539
tag='tag1',
541540
)
542541

@@ -847,7 +846,7 @@ def _test_server_add_port(self, port_id):
847846
result = self.cmd.take_action(parsed_args)
848847

849848
self.sdk_client.create_server_interface.assert_called_once_with(
850-
servers[0], port_id=port_id, fixed_ip=None)
849+
servers[0], port_id=port_id)
851850
self.assertIsNone(result)
852851

853852
def test_server_add_port(self):
@@ -885,7 +884,6 @@ def test_server_add_port_with_tag(self, sm_mock):
885884
self.sdk_client.create_server_interface.assert_called_once_with(
886885
servers[0],
887886
port_id='fake-port',
888-
fixed_ip=None,
889887
tag='tag1')
890888

891889
@mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
@@ -1288,7 +1286,7 @@ def _test_server_add_network(self, net_id):
12881286
result = self.cmd.take_action(parsed_args)
12891287

12901288
self.sdk_client.create_server_interface.assert_called_once_with(
1291-
servers[0], net_id=net_id, fixed_ip=None)
1289+
servers[0], net_id=net_id)
12921290
self.assertIsNone(result)
12931291

12941292
def test_server_add_network(self):
@@ -1327,7 +1325,6 @@ def test_server_add_network_with_tag(self, sm_mock):
13271325
self.sdk_client.create_server_interface.assert_called_once_with(
13281326
servers[0],
13291327
net_id='fake-network',
1330-
fixed_ip=None,
13311328
tag='tag1'
13321329
)
13331330

0 commit comments

Comments
 (0)