diff --git a/shade/_adapter.py b/shade/_adapter.py index 6a67c1c0a..9abd9d3f1 100644 --- a/shade/_adapter.py +++ b/shade/_adapter.py @@ -140,7 +140,9 @@ class ShadeAdapter(adapter.Adapter): 'security_group_rule', 'security_group_rules', 'users', 'user', 'projects', 'tenants', 'project', 'tenant', 'servers', 'server', - 'flavor', 'flavors', 'baymodels']: + 'flavor', 'flavors', 'baymodels', 'aggregate', + 'aggregates', 'availabilityZoneInfo', + 'flavor_access', 'output', 'server_groups']: if key in result_json.keys(): self._log_request_id(response) return result_json diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index 585eac2f7..b221684ac 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -1771,12 +1771,13 @@ class OpenStackCloud( list could not be fetched. """ try: - zones = self._compute_client.get('/os-availability-zone') + data = self._compute_client.get('/os-availability-zone') except OpenStackCloudHTTPError: self.log.debug( "Availability zone list could not be fetched", exc_info=True) return [] + zones = meta.get_and_munchify('availabilityZoneInfo', data) ret = [] for zone in zones: if zone['zoneState']['available'] or unavailable: @@ -2033,9 +2034,10 @@ class OpenStackCloud( :returns: A list of server group dicts. """ - return self._compute_client.get( + data = self._compute_client.get( '/os-server-groups', error_message="Error fetching server group list") + return meta.get_and_munchify('server_groups', data) def get_compute_limits(self, name_or_id=None): """ Get compute limits for a project @@ -2769,9 +2771,10 @@ class OpenStackCloud( "Console log requested for invalid server") try: - return self._compute_client.post( + data = self._compute_client.post( '/servers/{server}/action'.format(server=server['id']), json={'os-getConsoleOutput': {'length': length}}) + return meta.get_and_munchify('output', data) except OpenStackCloudBadRequest: return "" diff --git a/shade/operatorcloud.py b/shade/operatorcloud.py index 51e4af830..dd4ac631a 100644 --- a/shade/operatorcloud.py +++ b/shade/operatorcloud.py @@ -1606,9 +1606,10 @@ class OperatorCloud(openstackcloud.OpenStackCloud): with _utils.shade_exceptions("Error trying to list access from " "flavor ID {flavor}".format( flavor=flavor_id)): - projects = self._compute_client.get( + data = self._compute_client.get( '/flavors/{id}/os-flavor-access'.format(id=flavor_id)) - return _utils.normalize_flavor_accesses(projects) + return _utils.normalize_flavor_accesses( + meta.get_and_munchify('flavor_access', data)) def create_role(self, name): """Create a Keystone role. @@ -1836,9 +1837,10 @@ class OperatorCloud(openstackcloud.OpenStackCloud): :returns: A list of aggregate dicts. """ - return self._compute_client.get( + data = self._compute_client.get( '/os-aggregates', error_message="Error fetching aggregate list") + return meta.get_and_munchify('aggregates', data) def get_aggregate(self, name_or_id, filters=None): """Get an aggregate by name or ID. @@ -1871,7 +1873,7 @@ class OperatorCloud(openstackcloud.OpenStackCloud): :raises: OpenStackCloudException on operation error. """ - return self._compute_client.post( + data = self._compute_client.post( '/os-aggregates', json={'aggregate': { 'name': name, @@ -1879,6 +1881,7 @@ class OperatorCloud(openstackcloud.OpenStackCloud): }}, error_message="Unable to create host aggregate {name}".format( name=name)) + return meta.get_and_munchify('aggregate', data) @_utils.valid_kwargs('name', 'availability_zone') def update_aggregate(self, name_or_id, **kwargs): @@ -1897,11 +1900,12 @@ class OperatorCloud(openstackcloud.OpenStackCloud): raise OpenStackCloudException( "Host aggregate %s not found." % name_or_id) - return self._compute_client.put( + data = self._compute_client.put( '/os-aggregates/{id}'.format(id=aggregate['id']), json={'aggregate': kwargs}, error_message="Error updating aggregate {name}".format( name=name_or_id)) + return meta.get_and_munchify('aggregate', data) def delete_aggregate(self, name_or_id): """Delete a host aggregate. @@ -1943,10 +1947,11 @@ class OperatorCloud(openstackcloud.OpenStackCloud): err_msg = "Unable to set metadata for host aggregate {name}".format( name=name_or_id) - return self._compute_client.post( + data = self._compute_client.post( '/os-aggregates/{id}/action'.format(id=aggregate['id']), json={'set_metadata': {'metadata': metadata}}, error_message=err_msg) + return meta.get_and_munchify('aggregate', data) def add_host_to_aggregate(self, name_or_id, host_name): """Add a host to an aggregate.