Switch openstack server remove port/network to using sdk

Change-Id: I1540c1f52e9a107dba20eeea9dc323c5510fe2b1
This commit is contained in:
Diwei Zhu 2021-11-14 22:52:14 +00:00
parent 28cd5763de
commit f82afc7f37
4 changed files with 115 additions and 29 deletions

View File

@ -3690,10 +3690,10 @@ class RemovePort(command.Command):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute compute_client = self.app.client_manager.sdk_connection.compute
server = utils.find_resource( server = compute_client.find_server(
compute_client.servers, parsed_args.server) parsed_args.server, ignore_missing=False)
if self.app.client_manager.is_network_endpoint_enabled(): if self.app.client_manager.is_network_endpoint_enabled():
network_client = self.app.client_manager.network network_client = self.app.client_manager.network
@ -3702,7 +3702,11 @@ class RemovePort(command.Command):
else: else:
port_id = parsed_args.port port_id = parsed_args.port
server.interface_detach(port_id) compute_client.delete_server_interface(
port_id,
server=server,
ignore_missing=False,
)
class RemoveNetwork(command.Command): class RemoveNetwork(command.Command):
@ -3723,10 +3727,10 @@ class RemoveNetwork(command.Command):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute compute_client = self.app.client_manager.sdk_connection.compute
server = utils.find_resource( server = compute_client.find_server(
compute_client.servers, parsed_args.server) parsed_args.server, ignore_missing=False)
if self.app.client_manager.is_network_endpoint_enabled(): if self.app.client_manager.is_network_endpoint_enabled():
network_client = self.app.client_manager.network network_client = self.app.client_manager.network
@ -3735,9 +3739,12 @@ class RemoveNetwork(command.Command):
else: else:
net_id = parsed_args.network net_id = parsed_args.network
for inf in server.interface_list(): for inf in compute_client.server_interfaces(server):
if inf.net_id == net_id: if inf.net_id == net_id:
server.interface_detach(inf.port_id) compute_client.delete_server_interface(
inf.port_id,
server=server,
)
class RemoveServerSecurityGroup(command.Command): class RemoveServerSecurityGroup(command.Command):

View File

@ -1072,7 +1072,7 @@ class ServerTests(common.ComputeTestCase):
self.assertNotIn('nics are required after microversion 2.36', self.assertNotIn('nics are required after microversion 2.36',
e.stderr) e.stderr)
def test_server_add_remove_network_port(self): def test_server_add_remove_network(self):
name = uuid.uuid4().hex name = uuid.uuid4().hex
cmd_output = json.loads(self.openstack( cmd_output = json.loads(self.openstack(
'server create -f json ' + 'server create -f json ' +
@ -1085,18 +1085,63 @@ class ServerTests(common.ComputeTestCase):
self.assertIsNotNone(cmd_output['id']) self.assertIsNotNone(cmd_output['id'])
self.assertEqual(name, cmd_output['name']) self.assertEqual(name, cmd_output['name'])
self.addCleanup(self.openstack, 'server delete --wait ' + name)
# add network and check 'public' is in server show
self.openstack( self.openstack(
'server add network ' + name + ' public') 'server add network ' + name + ' public')
cmd_output = json.loads(self.openstack( wait_time = 0
'server show -f json ' + name while wait_time < 60:
)) cmd_output = json.loads(self.openstack(
'server show -f json ' + name
))
if 'public' not in cmd_output['addresses']:
# Hang out for a bit and try again
print('retrying add network check')
wait_time += 10
time.sleep(10)
else:
break
addresses = cmd_output['addresses'] addresses = cmd_output['addresses']
self.assertIn('public', addresses) self.assertIn('public', addresses)
port_name = 'test-port' # remove network and check 'public' is not in server show
self.openstack('server remove network ' + name + ' public')
wait_time = 0
while wait_time < 60:
cmd_output = json.loads(self.openstack(
'server show -f json ' + name
))
if 'public' in cmd_output['addresses']:
# Hang out for a bit and try again
print('retrying remove network check')
wait_time += 10
time.sleep(10)
else:
break
addresses = cmd_output['addresses']
self.assertNotIn('public', addresses)
def test_server_add_remove_port(self):
name = uuid.uuid4().hex
cmd_output = json.loads(self.openstack(
'server create -f json ' +
'--network private ' +
'--flavor ' + self.flavor_name + ' ' +
'--image ' + self.image_name + ' ' +
'--wait ' +
name
))
self.assertIsNotNone(cmd_output['id'])
self.assertEqual(name, cmd_output['name'])
self.addCleanup(self.openstack, 'server delete --wait ' + name)
# create port, record one of its ip address
port_name = uuid.uuid4().hex
cmd_output = json.loads(self.openstack( cmd_output = json.loads(self.openstack(
'port list -f json' 'port list -f json'
@ -1108,17 +1153,44 @@ class ServerTests(common.ComputeTestCase):
'--network private ' + port_name '--network private ' + port_name
)) ))
self.assertIsNotNone(cmd_output['id']) self.assertIsNotNone(cmd_output['id'])
ip_address = cmd_output['fixed_ips'][0]['ip_address']
self.addCleanup(self.openstack, 'port delete ' + port_name)
# add port to server, assert the ip address of the port appears
self.openstack('server add port ' + name + ' ' + port_name) self.openstack('server add port ' + name + ' ' + port_name)
cmd_output = json.loads(self.openstack( wait_time = 0
'server show -f json ' + name while wait_time < 60:
)) cmd_output = json.loads(self.openstack(
'server show -f json ' + name
))
if ip_address not in cmd_output['addresses']['private']:
# Hang out for a bit and try again
print('retrying add port check')
wait_time += 10
time.sleep(10)
else:
break
addresses = cmd_output['addresses']['private']
self.assertIn(ip_address, addresses)
# TODO(diwei): test remove network/port after the commands are switched # remove port, assert the ip address of the port doesn't appear
self.openstack('server remove port ' + name + ' ' + port_name)
self.openstack('server delete ' + name) wait_time = 0
self.openstack('port delete ' + port_name) while wait_time < 60:
cmd_output = json.loads(self.openstack(
'server show -f json ' + name
))
if ip_address in cmd_output['addresses']['private']:
# Hang out for a bit and try again
print('retrying add port check')
wait_time += 10
time.sleep(10)
else:
break
addresses = cmd_output['addresses']['private']
self.assertNotIn(ip_address, addresses)
def test_server_add_remove_volume(self): def test_server_add_remove_volume(self):
volume_wait_for = volume_common.BaseVolumeTests.wait_for_status volume_wait_for = volume_common.BaseVolumeTests.wait_for_status

View File

@ -6973,14 +6973,14 @@ class TestServerRemovePort(TestServer):
# Set method to be tested. # Set method to be tested.
self.methods = { self.methods = {
'interface_detach': None, 'delete_server_interface': None,
} }
self.find_port = mock.Mock() self.find_port = mock.Mock()
self.app.client_manager.network.find_port = self.find_port self.app.client_manager.network.find_port = self.find_port
def _test_server_remove_port(self, port_id): def _test_server_remove_port(self, port_id):
servers = self.setup_servers_mock(count=1) servers = self.setup_sdk_servers_mock(count=1)
port = 'fake-port' port = 'fake-port'
arglist = [ arglist = [
@ -6995,7 +6995,8 @@ class TestServerRemovePort(TestServer):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
servers[0].interface_detach.assert_called_once_with(port_id) self.sdk_client.delete_server_interface.assert_called_with(
port_id, server=servers[0], ignore_missing=False)
self.assertIsNone(result) self.assertIsNone(result)
def test_server_remove_port(self): def test_server_remove_port(self):
@ -7020,17 +7021,18 @@ class TestServerRemoveNetwork(TestServer):
# Set method to be tested. # Set method to be tested.
self.fake_inf = mock.Mock() self.fake_inf = mock.Mock()
self.methods = { self.methods = {
'interface_list': [self.fake_inf], 'server_interfaces': [self.fake_inf],
'interface_detach': None, 'delete_server_interface': None,
} }
self.find_network = mock.Mock() self.find_network = mock.Mock()
self.app.client_manager.network.find_network = self.find_network self.app.client_manager.network.find_network = self.find_network
self.sdk_client.server_interfaces.return_value = [self.fake_inf]
def _test_server_remove_network(self, network_id): def _test_server_remove_network(self, network_id):
self.fake_inf.net_id = network_id self.fake_inf.net_id = network_id
self.fake_inf.port_id = 'fake-port' self.fake_inf.port_id = 'fake-port'
servers = self.setup_servers_mock(count=1) servers = self.setup_sdk_servers_mock(count=1)
network = 'fake-network' network = 'fake-network'
arglist = [ arglist = [
@ -7045,8 +7047,9 @@ class TestServerRemoveNetwork(TestServer):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
servers[0].interface_list.assert_called_once_with() self.sdk_client.server_interfaces.assert_called_once_with(servers[0])
servers[0].interface_detach.assert_called_once_with('fake-port') self.sdk_client.delete_server_interface.assert_called_once_with(
'fake-port', server=servers[0])
self.assertIsNone(result) self.assertIsNone(result)
def test_server_remove_network(self): def test_server_remove_network(self):

View File

@ -0,0 +1,4 @@
---
features:
- |
Switch server remove volume/port to using sdk.