api: Pass request to 'addresses' view builder

We'll need this to add some microversion-specific behavior in the near
future. An out-of-date comment is removed.

Change-Id: Ia6a13e3c25f4276a595026a4cda7944898da43b7
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane 2021-08-05 11:28:55 +01:00
parent b543f8226c
commit 0942163c82
3 changed files with 15 additions and 14 deletions

View File

@ -25,10 +25,6 @@ from nova.policies import ips as ips_policies
class IPsController(wsgi.Controller):
"""The servers addresses API controller for the OpenStack API."""
# Note(gmann): here using V2 view builder instead of V3 to have V2.1
# server ips response same as V2 which does not include "OS-EXT-IPS:type"
# & "OS-EXT-IPS-MAC:mac_addr". If needed those can be added with
# microversion by using V2.1 view builder.
_view_builder_class = views_addresses.ViewBuilder
def __init__(self):
@ -42,7 +38,7 @@ class IPsController(wsgi.Controller):
context.can(ips_policies.POLICY_ROOT % 'index',
target={'project_id': instance.project_id})
networks = common.get_networks_for_instance(context, instance)
return self._view_builder.index(networks)
return self._view_builder.index(req, networks)
@wsgi.expected_errors(404)
def show(self, req, server_id, id):
@ -55,4 +51,4 @@ class IPsController(wsgi.Controller):
msg = _("Instance is not a member of specified network")
raise exc.HTTPNotFound(explanation=msg)
return self._view_builder.show(networks[id], id)
return self._view_builder.show(req, networks[id], id)

View File

@ -24,7 +24,7 @@ class ViewBuilder(common.ViewBuilder):
_collection_name = "addresses"
def basic(self, ip, extend_address=False):
def basic(self, request, ip, extend_address=False):
"""Return a dictionary describing an IP address."""
address = {
"version": ip["version"],
@ -37,15 +37,17 @@ class ViewBuilder(common.ViewBuilder):
})
return address
def show(self, network, label, extend_address=False):
def show(self, request, network, label, extend_address=False):
"""Returns a dictionary describing a network."""
all_ips = itertools.chain(network["ips"], network["floating_ips"])
return {label: [self.basic(ip, extend_address) for ip in all_ips]}
return {
label: [self.basic(request, ip, extend_address) for ip in all_ips],
}
def index(self, networks, extend_address=False):
def index(self, request, networks, extend_address=False):
"""Return a dictionary describing a list of networks."""
addresses = collections.OrderedDict()
for label, network in networks.items():
network_dict = self.show(network, label, extend_address)
network_dict = self.show(request, network, label, extend_address)
addresses[label] = network_dict[label]
return dict(addresses=addresses)
return {'addresses': addresses}

View File

@ -525,10 +525,13 @@ class ViewBuilder(common.ViewBuilder):
# Hide server addresses while the server is building.
if instance.vm_state == vm_states.BUILDING:
return {}
context = request.environ["nova.context"]
networks = common.get_networks_for_instance(context, instance)
return self._address_builder.index(networks,
extend_address)["addresses"]
return self._address_builder.index(
request, networks, extend_address,
)["addresses"]
def _get_image(self, request, instance):
image_ref = instance["image_ref"]