From: Salvatore Date: Fri, 7 Jun 2013 15:08:47 +0000 (+0200) Subject: Nicira plugin: always fetch lports from correct lswitch X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=8305495f161a485263807bc4c663d4578a96d559;p=openstack-build%2Fneutron-build.git Nicira plugin: always fetch lports from correct lswitch Bug 1188652 Remove get_logical_port_status which required a lswitch uuid, and replace it with a call to query_lswitch_ports, which does not require it. Change-Id: I6c7d0403f37b2c9fb4332a8d34dcaa9050ced3fc --- diff --git a/quantum/plugins/nicira/QuantumPlugin.py b/quantum/plugins/nicira/QuantumPlugin.py index 8787e1d65..9631f424f 100644 --- a/quantum/plugins/nicira/QuantumPlugin.py +++ b/quantum/plugins/nicira/QuantumPlugin.py @@ -1361,19 +1361,28 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2, # If there's no nvp IP do not bother going to NVP and put # the port in error state if nvp_id: - try: - port = nvplib.get_logical_port_status( - self.cluster, quantum_db_port['network_id'], - nvp_id) - quantum_db_port["admin_state_up"] = ( - port["admin_status_enabled"]) - if port["fabric_status_up"]: - quantum_db_port["status"] = ( - constants.PORT_STATUS_ACTIVE) + # Find the NVP port corresponding to quantum port_id + # Do not query by nvp id as the port might be on + # an extended switch and we do not store the extended + # swiwtch uuid + results = nvplib.query_lswitch_lports( + self.cluster, '*', + relations='LogicalPortStatus', + filters={'tag': id, 'tag_scope': 'q_port_id'}) + if results: + port = results[0] + port_status = port["_relations"]["LogicalPortStatus"] + quantum_db_port["admin_state_up"] = ( + port["admin_status_enabled"]) + if port_status["fabric_status_up"]: + quantum_db_port["status"] = ( + constants.PORT_STATUS_ACTIVE) + else: + quantum_db_port["status"] = ( + constants.PORT_STATUS_DOWN) else: - quantum_db_port["status"] = constants.PORT_STATUS_DOWN - except q_exc.NotFound: - quantum_db_port["status"] = constants.PORT_STATUS_ERROR + quantum_db_port["status"] = ( + constants.PORT_STATUS_ERROR) else: quantum_db_port["status"] = constants.PORT_STATUS_ERROR return quantum_db_port diff --git a/quantum/plugins/nicira/nvplib.py b/quantum/plugins/nicira/nvplib.py index e6f6ff0d6..a4a0cf3e9 100644 --- a/quantum/plugins/nicira/nvplib.py +++ b/quantum/plugins/nicira/nvplib.py @@ -651,23 +651,6 @@ def delete_port(cluster, switch, port): raise exception.QuantumException() -def get_logical_port_status(cluster, switch, port): - query = ("/ws.v1/lswitch/" + switch + "/lport/" - + port + "?relations=LogicalPortStatus") - try: - res_obj = do_single_request(HTTP_GET, query, cluster=cluster) - except NvpApiClient.ResourceNotFound as e: - LOG.error(_("Port or Network not found, Error: %s"), str(e)) - raise exception.PortNotFound(port_id=port, net_id=switch) - except NvpApiClient.NvpApiException as e: - raise exception.QuantumException() - res = json.loads(res_obj) - # copy over admin_status_enabled - res["_relations"]["LogicalPortStatus"]["admin_status_enabled"] = ( - res["admin_status_enabled"]) - return res["_relations"]["LogicalPortStatus"] - - def get_port_by_display_name(clusters, lswitch, display_name): """Return (url, cluster_id) of port or raises PortNotFound.""" query = ("/ws.v1/lswitch/%s/lport?display_name=%s&fields=*" % diff --git a/quantum/tests/unit/nicira/etc/fake_get_lswitch_lport.json b/quantum/tests/unit/nicira/etc/fake_get_lswitch_lport.json index f9c29c3ff..16b78dd87 100644 --- a/quantum/tests/unit/nicira/etc/fake_get_lswitch_lport.json +++ b/quantum/tests/unit/nicira/etc/fake_get_lswitch_lport.json @@ -2,6 +2,7 @@ "_relations": {"LogicalPortStatus": {"type": "LogicalSwitchPortStatus", + "admin_status_enabled": true, "fabric_status_up": false, "_href": "/ws.v1/lswitch/%(ls_uuid)s/lport/%(uuid)s/status", "_schema": "/ws.v1/schema/LogicalSwitchPortStatus"}