Skip to content

Commit f82afc7

Browse files
committed
Switch openstack server remove port/network to using sdk
Change-Id: I1540c1f52e9a107dba20eeea9dc323c5510fe2b1
1 parent 28cd576 commit f82afc7

4 files changed

Lines changed: 114 additions & 28 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3690,10 +3690,10 @@ def get_parser(self, prog_name):
36903690
return parser
36913691

36923692
def take_action(self, parsed_args):
3693-
compute_client = self.app.client_manager.compute
3693+
compute_client = self.app.client_manager.sdk_connection.compute
36943694

3695-
server = utils.find_resource(
3696-
compute_client.servers, parsed_args.server)
3695+
server = compute_client.find_server(
3696+
parsed_args.server, ignore_missing=False)
36973697

36983698
if self.app.client_manager.is_network_endpoint_enabled():
36993699
network_client = self.app.client_manager.network
@@ -3702,7 +3702,11 @@ def take_action(self, parsed_args):
37023702
else:
37033703
port_id = parsed_args.port
37043704

3705-
server.interface_detach(port_id)
3705+
compute_client.delete_server_interface(
3706+
port_id,
3707+
server=server,
3708+
ignore_missing=False,
3709+
)
37063710

37073711

37083712
class RemoveNetwork(command.Command):
@@ -3723,10 +3727,10 @@ def get_parser(self, prog_name):
37233727
return parser
37243728

37253729
def take_action(self, parsed_args):
3726-
compute_client = self.app.client_manager.compute
3730+
compute_client = self.app.client_manager.sdk_connection.compute
37273731

3728-
server = utils.find_resource(
3729-
compute_client.servers, parsed_args.server)
3732+
server = compute_client.find_server(
3733+
parsed_args.server, ignore_missing=False)
37303734

37313735
if self.app.client_manager.is_network_endpoint_enabled():
37323736
network_client = self.app.client_manager.network
@@ -3735,9 +3739,12 @@ def take_action(self, parsed_args):
37353739
else:
37363740
net_id = parsed_args.network
37373741

3738-
for inf in server.interface_list():
3742+
for inf in compute_client.server_interfaces(server):
37393743
if inf.net_id == net_id:
3740-
server.interface_detach(inf.port_id)
3744+
compute_client.delete_server_interface(
3745+
inf.port_id,
3746+
server=server,
3747+
)
37413748

37423749

37433750
class RemoveServerSecurityGroup(command.Command):

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

Lines changed: 83 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,7 +1072,7 @@ def test_server_create_with_empty_network_option_latest(self):
10721072
self.assertNotIn('nics are required after microversion 2.36',
10731073
e.stderr)
10741074

1075-
def test_server_add_remove_network_port(self):
1075+
def test_server_add_remove_network(self):
10761076
name = uuid.uuid4().hex
10771077
cmd_output = json.loads(self.openstack(
10781078
'server create -f json ' +
@@ -1085,18 +1085,63 @@ def test_server_add_remove_network_port(self):
10851085

10861086
self.assertIsNotNone(cmd_output['id'])
10871087
self.assertEqual(name, cmd_output['name'])
1088+
self.addCleanup(self.openstack, 'server delete --wait ' + name)
10881089

1090+
# add network and check 'public' is in server show
10891091
self.openstack(
10901092
'server add network ' + name + ' public')
10911093

1094+
wait_time = 0
1095+
while wait_time < 60:
1096+
cmd_output = json.loads(self.openstack(
1097+
'server show -f json ' + name
1098+
))
1099+
if 'public' not in cmd_output['addresses']:
1100+
# Hang out for a bit and try again
1101+
print('retrying add network check')
1102+
wait_time += 10
1103+
time.sleep(10)
1104+
else:
1105+
break
1106+
addresses = cmd_output['addresses']
1107+
self.assertIn('public', addresses)
1108+
1109+
# remove network and check 'public' is not in server show
1110+
self.openstack('server remove network ' + name + ' public')
1111+
1112+
wait_time = 0
1113+
while wait_time < 60:
1114+
cmd_output = json.loads(self.openstack(
1115+
'server show -f json ' + name
1116+
))
1117+
if 'public' in cmd_output['addresses']:
1118+
# Hang out for a bit and try again
1119+
print('retrying remove network check')
1120+
wait_time += 10
1121+
time.sleep(10)
1122+
else:
1123+
break
1124+
1125+
addresses = cmd_output['addresses']
1126+
self.assertNotIn('public', addresses)
1127+
1128+
def test_server_add_remove_port(self):
1129+
name = uuid.uuid4().hex
10921130
cmd_output = json.loads(self.openstack(
1093-
'server show -f json ' + name
1131+
'server create -f json ' +
1132+
'--network private ' +
1133+
'--flavor ' + self.flavor_name + ' ' +
1134+
'--image ' + self.image_name + ' ' +
1135+
'--wait ' +
1136+
name
10941137
))
10951138

1096-
addresses = cmd_output['addresses']
1097-
self.assertIn('public', addresses)
1139+
self.assertIsNotNone(cmd_output['id'])
1140+
self.assertEqual(name, cmd_output['name'])
1141+
self.addCleanup(self.openstack, 'server delete --wait ' + name)
10981142

1099-
port_name = 'test-port'
1143+
# create port, record one of its ip address
1144+
port_name = uuid.uuid4().hex
11001145

11011146
cmd_output = json.loads(self.openstack(
11021147
'port list -f json'
@@ -1108,17 +1153,44 @@ def test_server_add_remove_network_port(self):
11081153
'--network private ' + port_name
11091154
))
11101155
self.assertIsNotNone(cmd_output['id'])
1156+
ip_address = cmd_output['fixed_ips'][0]['ip_address']
1157+
self.addCleanup(self.openstack, 'port delete ' + port_name)
11111158

1159+
# add port to server, assert the ip address of the port appears
11121160
self.openstack('server add port ' + name + ' ' + port_name)
11131161

1114-
cmd_output = json.loads(self.openstack(
1115-
'server show -f json ' + name
1116-
))
1162+
wait_time = 0
1163+
while wait_time < 60:
1164+
cmd_output = json.loads(self.openstack(
1165+
'server show -f json ' + name
1166+
))
1167+
if ip_address not in cmd_output['addresses']['private']:
1168+
# Hang out for a bit and try again
1169+
print('retrying add port check')
1170+
wait_time += 10
1171+
time.sleep(10)
1172+
else:
1173+
break
1174+
addresses = cmd_output['addresses']['private']
1175+
self.assertIn(ip_address, addresses)
11171176

1118-
# TODO(diwei): test remove network/port after the commands are switched
1177+
# remove port, assert the ip address of the port doesn't appear
1178+
self.openstack('server remove port ' + name + ' ' + port_name)
11191179

1120-
self.openstack('server delete ' + name)
1121-
self.openstack('port delete ' + port_name)
1180+
wait_time = 0
1181+
while wait_time < 60:
1182+
cmd_output = json.loads(self.openstack(
1183+
'server show -f json ' + name
1184+
))
1185+
if ip_address in cmd_output['addresses']['private']:
1186+
# Hang out for a bit and try again
1187+
print('retrying add port check')
1188+
wait_time += 10
1189+
time.sleep(10)
1190+
else:
1191+
break
1192+
addresses = cmd_output['addresses']['private']
1193+
self.assertNotIn(ip_address, addresses)
11221194

11231195
def test_server_add_remove_volume(self):
11241196
volume_wait_for = volume_common.BaseVolumeTests.wait_for_status

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6973,14 +6973,14 @@ def setUp(self):
69736973

69746974
# Set method to be tested.
69756975
self.methods = {
6976-
'interface_detach': None,
6976+
'delete_server_interface': None,
69776977
}
69786978

69796979
self.find_port = mock.Mock()
69806980
self.app.client_manager.network.find_port = self.find_port
69816981

69826982
def _test_server_remove_port(self, port_id):
6983-
servers = self.setup_servers_mock(count=1)
6983+
servers = self.setup_sdk_servers_mock(count=1)
69846984
port = 'fake-port'
69856985

69866986
arglist = [
@@ -6995,7 +6995,8 @@ def _test_server_remove_port(self, port_id):
69956995

69966996
result = self.cmd.take_action(parsed_args)
69976997

6998-
servers[0].interface_detach.assert_called_once_with(port_id)
6998+
self.sdk_client.delete_server_interface.assert_called_with(
6999+
port_id, server=servers[0], ignore_missing=False)
69997000
self.assertIsNone(result)
70007001

70017002
def test_server_remove_port(self):
@@ -7020,17 +7021,18 @@ def setUp(self):
70207021
# Set method to be tested.
70217022
self.fake_inf = mock.Mock()
70227023
self.methods = {
7023-
'interface_list': [self.fake_inf],
7024-
'interface_detach': None,
7024+
'server_interfaces': [self.fake_inf],
7025+
'delete_server_interface': None,
70257026
}
70267027

70277028
self.find_network = mock.Mock()
70287029
self.app.client_manager.network.find_network = self.find_network
7030+
self.sdk_client.server_interfaces.return_value = [self.fake_inf]
70297031

70307032
def _test_server_remove_network(self, network_id):
70317033
self.fake_inf.net_id = network_id
70327034
self.fake_inf.port_id = 'fake-port'
7033-
servers = self.setup_servers_mock(count=1)
7035+
servers = self.setup_sdk_servers_mock(count=1)
70347036
network = 'fake-network'
70357037

70367038
arglist = [
@@ -7045,8 +7047,9 @@ def _test_server_remove_network(self, network_id):
70457047

70467048
result = self.cmd.take_action(parsed_args)
70477049

7048-
servers[0].interface_list.assert_called_once_with()
7049-
servers[0].interface_detach.assert_called_once_with('fake-port')
7050+
self.sdk_client.server_interfaces.assert_called_once_with(servers[0])
7051+
self.sdk_client.delete_server_interface.assert_called_once_with(
7052+
'fake-port', server=servers[0])
70507053
self.assertIsNone(result)
70517054

70527055
def test_server_remove_network(self):
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Switch server remove volume/port to using sdk.

0 commit comments

Comments
 (0)