From 972dcfcdf71feca95d166e1d9c152fcc097567fd Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Tue, 13 Jun 2017 12:27:31 -0500 Subject: [PATCH] Migrate non-list server interactions to REST Change-Id: I999ea383909d01317f361ef55bee73db9fc1afbf --- shade/_tasks.py | 20 ------- shade/openstackcloud.py | 74 +++++++++++++++---------- shade/tests/functional/test_compute.py | 2 +- shade/tests/unit/test_rebuild_server.py | 24 -------- shade/tests/unit/test_update_server.py | 4 -- 5 files changed, 46 insertions(+), 78 deletions(-) diff --git a/shade/_tasks.py b/shade/_tasks.py index a75a53117..054bfe6ae 100644 --- a/shade/_tasks.py +++ b/shade/_tasks.py @@ -72,26 +72,6 @@ class ServerList(task_manager.Task): return client.nova_client.servers.list(**self.args) -class ServerUpdate(task_manager.Task): - def main(self, client): - return client.nova_client.servers.update(**self.args) - - -class ServerRebuild(task_manager.Task): - def main(self, client): - return client.nova_client.servers.rebuild(**self.args) - - -class ServerSetMetadata(task_manager.Task): - def main(self, client): - return client.nova_client.servers.set_meta(**self.args) - - -class ServerDeleteMetadata(task_manager.Task): - def main(self, client): - return client.nova_client.servers.delete_meta(**self.args) - - class ServerGroupList(task_manager.Task): def main(self, client): return client.nova_client.server_groups.list(**self.args) diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index 13d110faf..e2c4926a9 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -5680,11 +5680,20 @@ class OpenStackCloud( def rebuild_server(self, server_id, image_id, admin_pass=None, detailed=False, bare=False, wait=False, timeout=180): - with _utils.shade_exceptions("Error in rebuilding instance"): - server = self.manager.submit_task(_tasks.ServerRebuild( - server=server_id, image=image_id, password=admin_pass)) + kwargs = {} + if image_id: + kwargs['imageRef'] = image_id + if admin_pass: + kwargs['adminPass'] = admin_pass + + server = self._compute_client.post( + '/servers/{server_id}/action'.format(server_id=server_id), + error_message="Error in rebuilding instance", + json={'rebuild': kwargs}) if not wait: - return server + # TODO(mordred) add expand server next + return self._normalize_server(server) + admin_pass = server.get('adminPass') or admin_pass for count in _utils._iterate_timeout( timeout, @@ -5720,16 +5729,15 @@ class OpenStackCloud( :raises: OpenStackCloudException on operation error. """ - try: - self.manager.submit_task( - _tasks.ServerSetMetadata( - server=self.get_server(name_or_id, bare=True), - metadata=metadata)) - except OpenStackCloudException: - raise - except Exception as e: + server = self.get_server(name_or_id, bare=True) + if not server: raise OpenStackCloudException( - "Error updating metadata: {0}".format(e)) + 'Invalid Server {server}'.format(server=name_or_id)) + + self._compute_client.post( + '/servers/{server_id}/metadata'.format(server_id=server['id']), + json={'metadata': metadata}, + error_message='Error updating server metadata') def delete_server_metadata(self, name_or_id, metadata_keys): """Delete metadata from a server instance. @@ -5741,16 +5749,19 @@ class OpenStackCloud( :raises: OpenStackCloudException on operation error. """ - try: - self.manager.submit_task( - _tasks.ServerDeleteMetadata( - server=self.get_server(name_or_id, bare=True), - keys=metadata_keys)) - except OpenStackCloudException: - raise - except Exception as e: + server = self.get_server(name_or_id, bare=True) + if not server: raise OpenStackCloudException( - "Error deleting metadata: {0}".format(e)) + 'Invalid Server {server}'.format(server=name_or_id)) + + for key in metadata_keys: + error_message = 'Error deleting metadata {key} on {server}'.format( + key=key, server=name_or_id) + self._compute_client.delete( + '/servers/{server_id}/metadata/{key}'.format( + server_id=server['id'], + key=key), + error_message=error_message) def delete_server( self, name_or_id, wait=False, timeout=180, delete_ips=False, @@ -5847,10 +5858,16 @@ class OpenStackCloud( @_utils.valid_kwargs( 'name', 'description') - def update_server(self, name_or_id, **kwargs): + def update_server(self, name_or_id, detailed=False, bare=False, **kwargs): """Update a server. :param name_or_id: Name of the server to be updated. + :param detailed: Whether or not to add detailed additional information. + Defaults to False. + :param bare: Whether to skip adding any additional information to the + server record. Defaults to False, meaning the addresses + dict will be populated as needed from neutron. Setting + to True implies detailed = False. :name: New name for the server :description: New description for the server @@ -5863,12 +5880,11 @@ class OpenStackCloud( raise OpenStackCloudException( "failed to find server '{server}'".format(server=name_or_id)) - with _utils.shade_exceptions( - "Error updating server {0}".format(name_or_id)): - # TODO(mordred) This is not sending back a normalized server - return self.manager.submit_task( - _tasks.ServerUpdate( - server=server['id'], **kwargs)) + return self._normalize_server( + self._compute_client.put( + '/servers/{server_id}'.format(server_id=server['id']), + error_message="Error updating server {0}".format(name_or_id), + json={'server': kwargs})) def create_server_group(self, name, policies): """Create a new server group. diff --git a/shade/tests/functional/test_compute.py b/shade/tests/functional/test_compute.py index 0d198c95a..c4c1e4be0 100644 --- a/shade/tests/functional/test_compute.py +++ b/shade/tests/functional/test_compute.py @@ -382,7 +382,7 @@ class TestCompute(base.BaseFunctionalTestCase): self.assertEqual(set(updated_server.metadata.items()), set([])) self.assertRaises( - exc.OpenStackCloudException, + exc.OpenStackCloudURINotFound, self.user_cloud.delete_server_metadata, self.server_name, ['key1']) diff --git a/shade/tests/unit/test_rebuild_server.py b/shade/tests/unit/test_rebuild_server.py index d7cc14d12..2f5c3c5fc 100644 --- a/shade/tests/unit/test_rebuild_server.py +++ b/shade/tests/unit/test_rebuild_server.py @@ -79,10 +79,6 @@ class TestRebuildServer(base.RequestsMockTestCase): json={ 'rebuild': { 'imageRef': 'a'}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': self.rebuild_server}), dict(method='GET', uri=self.get_mock_url( 'compute', 'public', append=['servers', 'detail']), @@ -109,10 +105,6 @@ class TestRebuildServer(base.RequestsMockTestCase): json={ 'rebuild': { 'imageRef': 'a'}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': self.rebuild_server}), dict(method='GET', uri=self.get_mock_url( 'compute', 'public', append=['servers', 'detail']), @@ -140,10 +132,6 @@ class TestRebuildServer(base.RequestsMockTestCase): json={ 'rebuild': { 'imageRef': 'a'}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': self.rebuild_server}), ]) self.assertEqual( self.rebuild_server['status'], @@ -170,10 +158,6 @@ class TestRebuildServer(base.RequestsMockTestCase): 'rebuild': { 'imageRef': 'a', 'adminPass': password}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': self.rebuild_server}), ]) self.assertEqual( password, @@ -202,10 +186,6 @@ class TestRebuildServer(base.RequestsMockTestCase): 'rebuild': { 'imageRef': 'a', 'adminPass': password}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': self.rebuild_server}), dict(method='GET', uri=self.get_mock_url( 'compute', 'public', append=['servers', 'detail']), @@ -243,10 +223,6 @@ class TestRebuildServer(base.RequestsMockTestCase): json={ 'rebuild': { 'imageRef': 'a'}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': self.rebuild_server}), dict(method='GET', uri=self.get_mock_url( 'compute', 'public', append=['servers', 'detail']), diff --git a/shade/tests/unit/test_update_server.py b/shade/tests/unit/test_update_server.py index db30a7ec4..5f85ccc37 100644 --- a/shade/tests/unit/test_update_server.py +++ b/shade/tests/unit/test_update_server.py @@ -75,10 +75,6 @@ class TestUpdateServer(base.RequestsMockTestCase): json={'server': fake_update_server}, validate=dict( json={'server': {'name': self.updated_server_name}})), - dict(method='GET', - uri=self.get_mock_url( - 'compute', 'public', append=['servers', self.server_id]), - json={'server': fake_update_server}), ]) self.assertEqual( self.updated_server_name,