Switch openstack server remove port/network to using sdk
Change-Id: I1540c1f52e9a107dba20eeea9dc323c5510fe2b1
This commit is contained in:
		| @@ -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): | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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): | ||||||
|   | |||||||
| @@ -0,0 +1,4 @@ | |||||||
|  | --- | ||||||
|  | features: | ||||||
|  |   - | | ||||||
|  |     Switch server remove volume/port to using sdk. | ||||||
		Reference in New Issue
	
	Block a user
	 Diwei Zhu
					Diwei Zhu