Migrate non-list server interactions to REST

Change-Id: I999ea383909d01317f361ef55bee73db9fc1afbf
This commit is contained in:
Monty Taylor
2017-06-13 12:27:31 -05:00
parent 0d7fc5940a
commit 972dcfcdf7
5 changed files with 46 additions and 78 deletions

View File

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

View File

@@ -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.

View File

@@ -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'])

View File

@@ -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']),

View File

@@ -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,