Skip to content

Commit d9ad0b5

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Switch openstack server remove port/network to using sdk"
2 parents e02fd2a + f82afc7 commit d9ad0b5

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
@@ -3709,10 +3709,10 @@ def get_parser(self, prog_name):
37093709
return parser
37103710

37113711
def take_action(self, parsed_args):
3712-
compute_client = self.app.client_manager.compute
3712+
compute_client = self.app.client_manager.sdk_connection.compute
37133713

3714-
server = utils.find_resource(
3715-
compute_client.servers, parsed_args.server)
3714+
server = compute_client.find_server(
3715+
parsed_args.server, ignore_missing=False)
37163716

37173717
if self.app.client_manager.is_network_endpoint_enabled():
37183718
network_client = self.app.client_manager.network
@@ -3721,7 +3721,11 @@ def take_action(self, parsed_args):
37213721
else:
37223722
port_id = parsed_args.port
37233723

3724-
server.interface_detach(port_id)
3724+
compute_client.delete_server_interface(
3725+
port_id,
3726+
server=server,
3727+
ignore_missing=False,
3728+
)
37253729

37263730

37273731
class RemoveNetwork(command.Command):
@@ -3742,10 +3746,10 @@ def get_parser(self, prog_name):
37423746
return parser
37433747

37443748
def take_action(self, parsed_args):
3745-
compute_client = self.app.client_manager.compute
3749+
compute_client = self.app.client_manager.sdk_connection.compute
37463750

3747-
server = utils.find_resource(
3748-
compute_client.servers, parsed_args.server)
3751+
server = compute_client.find_server(
3752+
parsed_args.server, ignore_missing=False)
37493753

37503754
if self.app.client_manager.is_network_endpoint_enabled():
37513755
network_client = self.app.client_manager.network
@@ -3754,9 +3758,12 @@ def take_action(self, parsed_args):
37543758
else:
37553759
net_id = parsed_args.network
37563760

3757-
for inf in server.interface_list():
3761+
for inf in compute_client.server_interfaces(server):
37583762
if inf.net_id == net_id:
3759-
server.interface_detach(inf.port_id)
3763+
compute_client.delete_server_interface(
3764+
inf.port_id,
3765+
server=server,
3766+
)
37603767

37613768

37623769
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
@@ -7028,14 +7028,14 @@ def setUp(self):
70287028

70297029
# Set method to be tested.
70307030
self.methods = {
7031-
'interface_detach': None,
7031+
'delete_server_interface': None,
70327032
}
70337033

70347034
self.find_port = mock.Mock()
70357035
self.app.client_manager.network.find_port = self.find_port
70367036

70377037
def _test_server_remove_port(self, port_id):
7038-
servers = self.setup_servers_mock(count=1)
7038+
servers = self.setup_sdk_servers_mock(count=1)
70397039
port = 'fake-port'
70407040

70417041
arglist = [
@@ -7050,7 +7050,8 @@ def _test_server_remove_port(self, port_id):
70507050

70517051
result = self.cmd.take_action(parsed_args)
70527052

7053-
servers[0].interface_detach.assert_called_once_with(port_id)
7053+
self.sdk_client.delete_server_interface.assert_called_with(
7054+
port_id, server=servers[0], ignore_missing=False)
70547055
self.assertIsNone(result)
70557056

70567057
def test_server_remove_port(self):
@@ -7075,17 +7076,18 @@ def setUp(self):
70757076
# Set method to be tested.
70767077
self.fake_inf = mock.Mock()
70777078
self.methods = {
7078-
'interface_list': [self.fake_inf],
7079-
'interface_detach': None,
7079+
'server_interfaces': [self.fake_inf],
7080+
'delete_server_interface': None,
70807081
}
70817082

70827083
self.find_network = mock.Mock()
70837084
self.app.client_manager.network.find_network = self.find_network
7085+
self.sdk_client.server_interfaces.return_value = [self.fake_inf]
70847086

70857087
def _test_server_remove_network(self, network_id):
70867088
self.fake_inf.net_id = network_id
70877089
self.fake_inf.port_id = 'fake-port'
7088-
servers = self.setup_servers_mock(count=1)
7090+
servers = self.setup_sdk_servers_mock(count=1)
70897091
network = 'fake-network'
70907092

70917093
arglist = [
@@ -7100,8 +7102,9 @@ def _test_server_remove_network(self, network_id):
71007102

71017103
result = self.cmd.take_action(parsed_args)
71027104

7103-
servers[0].interface_list.assert_called_once_with()
7104-
servers[0].interface_detach.assert_called_once_with('fake-port')
7105+
self.sdk_client.server_interfaces.assert_called_once_with(servers[0])
7106+
self.sdk_client.delete_server_interface.assert_called_once_with(
7107+
'fake-port', server=servers[0])
71057108
self.assertIsNone(result)
71067109

71077110
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)