diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py index 83fa7919f00c..049160459a54 100644 --- a/nova/api/openstack/compute/views/servers.py +++ b/nova/api/openstack/compute/views/servers.py @@ -292,25 +292,24 @@ class ViewBuilder(common.ViewBuilder): server = { "server": { + "accessIPv4": str(ip_v4) if ip_v4 is not None else '', + "accessIPv6": str(ip_v6) if ip_v6 is not None else '', + "addresses": self._get_addresses( + request, instance, extend_address), + "created": utils.isotime(instance["created_at"]), + "flavor": self._get_flavor( + request, instance, show_extra_specs), + "hostId": self._get_host_id(instance), "id": instance["uuid"], + "image": self._get_image(request, instance), + "links": self._get_links( + request, instance["uuid"], self._collection_name), + "metadata": self._get_metadata(instance), "name": instance["display_name"], "status": self._get_vm_status(instance), "tenant_id": instance.get("project_id") or "", "user_id": instance.get("user_id") or "", - "metadata": self._get_metadata(instance), - "hostId": self._get_host_id(instance), - "image": self._get_image(request, instance), - "flavor": self._get_flavor(request, instance, - show_extra_specs), - "created": utils.isotime(instance["created_at"]), "updated": utils.isotime(instance["updated_at"]), - "addresses": self._get_addresses(request, instance, - extend_address), - "accessIPv4": str(ip_v4) if ip_v4 is not None else '', - "accessIPv6": str(ip_v6) if ip_v6 is not None else '', - "links": self._get_links(request, - instance["uuid"], - self._collection_name), # NOTE(sdague): historically this was the # os-disk-config extension, but now that extensions # are gone, we merge these attributes here. @@ -334,14 +333,6 @@ class ViewBuilder(common.ViewBuilder): # attributes after v2.1. They are only in v2.1 for backward compat # with v2.0. server["server"]["OS-EXT-AZ:availability_zone"] = az or '' - if api_version_request.is_supported(request, '2.96'): - pinned_az = self._get_pinned_az(context, instance, provided_az) - server['server']['pinned_availability_zone'] = pinned_az - - if api_version_request.is_supported(request, '2.100'): - server['server']['scheduler_hints'] = ( - self._get_scheduler_hints( - context, instance, provided_sched_hints)) if show_config_drive: server["server"]["config_drive"] = instance["config_drive"] @@ -416,6 +407,9 @@ class ViewBuilder(common.ViewBuilder): context, [instance["uuid"]]) self._add_volumes_attachments(request, server["server"], bdms) + if api_version_request.is_supported(request, '2.9'): + server["server"]["locked"] = bool(instance["locked_by"]) + if api_version_request.is_supported(request, '2.16'): if show_host_status is None: unknown_only = self._get_host_status_unknown_only( @@ -435,22 +429,14 @@ class ViewBuilder(common.ViewBuilder): host_status == fields.HostStatus.UNKNOWN): server["server"]['host_status'] = host_status - if api_version_request.is_supported(request, "2.9"): - server["server"]["locked"] = (True if instance["locked_by"] - else False) - - if api_version_request.is_supported(request, "2.73"): - server["server"]["locked_reason"] = (instance.system_metadata.get( - "locked_reason")) - - if api_version_request.is_supported(request, "2.19"): + if api_version_request.is_supported(request, '2.19'): server["server"]["description"] = instance.get( - "display_description") + "display_description") - if api_version_request.is_supported(request, "2.26"): + if api_version_request.is_supported(request, '2.26'): server["server"]["tags"] = [t.tag for t in instance.tags] - if api_version_request.is_supported(request, "2.63"): + if api_version_request.is_supported(request, '2.63'): trusted_certs = None if instance.trusted_certs: trusted_certs = instance.trusted_certs.ids @@ -461,14 +447,27 @@ class ViewBuilder(common.ViewBuilder): server['server']['server_groups'] = self._get_server_groups( context, instance) + if api_version_request.is_supported(request, '2.73'): + server["server"]["locked_reason"] = ( + instance.system_metadata.get("locked_reason")) + # TODO(stephenfin): Remove this check once we remove the # OS-EXT-SRV-ATTR:hostname policy checks from the policy is Y or later if api_version_request.is_supported(request, '2.90'): # API 2.90 made this field visible to non-admins, but we only show # it if it's not already added if not show_extended_attr: - server["server"]["OS-EXT-SRV-ATTR:hostname"] = \ - instance.hostname + server["server"]["OS-EXT-SRV-ATTR:hostname"] = ( + instance.hostname) + + if show_AZ: + if api_version_request.is_supported(request, '2.96'): + pinned_az = self._get_pinned_az(context, instance, provided_az) + server['server']['pinned_availability_zone'] = pinned_az + + if api_version_request.is_supported(request, '2.100'): + server['server']['scheduler_hints'] = self._get_scheduler_hints( + context, instance, provided_sched_hints) return server