summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-12-04 08:57:38 +1300
committerLingxian Kong <anlin.kong@gmail.com>2020-12-04 08:57:39 +1300
commit5d19f8e40a90bd2381b683ac5959f73d3377557f (patch)
tree3149306831d83b33a6188f9c6c36d41864274935
parent77c043062b2ea651684be2059fd7b27a29e6e684 (diff)
downloadtrove-5d19f8e40a90bd2381b683ac5959f73d3377557f.tar.gz
Add Neutron extension check before calling some APIs
Story: 2008415 Task: 41356 Change-Id: I5c1717892a167d119e596a11ae8d41e4edc1d27c
-rw-r--r--trove/common/neutron.py29
1 files changed, 28 insertions, 1 deletions
diff --git a/trove/common/neutron.py b/trove/common/neutron.py
index 1f9d65ec..1c11dcb1 100644
--- a/trove/common/neutron.py
+++ b/trove/common/neutron.py
@@ -13,6 +13,7 @@
# limitations under the License.
import netaddr
from oslo_log import log as logging
+from neutronclient.common import exceptions as neutron_exceptions
from trove.common import cfg
from trove.common import clients
@@ -22,6 +23,28 @@ CONF = cfg.CONF
LOG = logging.getLogger(__name__)
MGMT_NETWORKS = None
MGMT_CIDRS = None
+NEUTRON_EXTENSION_CACHE = {}
+PROJECT_ID_EXT_ALIAS = 'project-id'
+
+
+def check_extension_enabled(client, extension_alias):
+ """Check if an extension is enabled in Neutron."""
+ global NEUTRON_EXTENSION_CACHE
+
+ if extension_alias in NEUTRON_EXTENSION_CACHE:
+ status = NEUTRON_EXTENSION_CACHE[extension_alias]
+ LOG.debug(f"Neutron extension {extension_alias} cached as "
+ f"{'enabled' if status else 'disabled'}")
+ else:
+ try:
+ client.show_extension(extension_alias)
+ LOG.debug(f'Neutron extension {extension_alias} found enabled')
+ NEUTRON_EXTENSION_CACHE[extension_alias] = True
+ except neutron_exceptions.NotFound:
+ LOG.debug(f'Neutron extension {extension_alias} is not enabled')
+ NEUTRON_EXTENSION_CACHE[extension_alias] = False
+
+ return NEUTRON_EXTENSION_CACHE[extension_alias]
def get_management_networks(context):
@@ -132,7 +155,11 @@ def make_port_public(client, port_id, project_id):
}
}
if project_id:
- fip_body['floatingip']['project_id'] = project_id
+ if check_extension_enabled(client, PROJECT_ID_EXT_ALIAS):
+ project_id_key = 'project_id'
+ else:
+ project_id_key = 'tenant_id'
+ fip_body['floatingip'][project_id_key] = project_id
try:
LOG.debug(f"Creating floating IP for the port {port_id}, "