From a71b3859ad6da5c244ea0845355e2623299d0793 Mon Sep 17 00:00:00 2001
From: Adit Sarfaty <asarfaty@vmware.com>
Date: Wed, 31 Jan 2018 10:29:40 +0200
Subject: [PATCH] AdminUtils: Skip unsupported resources

Some admin util resources depends on external libreries that are not
always installed.
This patch will skip those, so the rest of the resources can be used.

Change-Id: I860f054fdadfe9ced93c3ba77f9b5d82b07da9fa
---
 vmware_nsx/shell/resources.py | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/vmware_nsx/shell/resources.py b/vmware_nsx/shell/resources.py
index 36f0b557f7..53f112652d 100644
--- a/vmware_nsx/shell/resources.py
+++ b/vmware_nsx/shell/resources.py
@@ -291,10 +291,34 @@ cli_opts = [cfg.StrOpt('fmt',
             ]
 
 
+# Describe dependencies between admin utils resources and external libraries
+# that are not always installed
+resources_dependencies = {
+    'nsxv': {'gw_edges': ['neutron_dynamic_routing.extensions']}}
+
+
+def verify_external_dependencies(plugin_name, resource):
+    if plugin_name in resources_dependencies:
+        deps = resources_dependencies[plugin_name]
+        if resource in deps:
+            for d in deps[resource]:
+                try:
+                    importlib.import_module(d)
+                except ImportError:
+                    return False
+    return True
+
+
 def init_resource_plugin(plugin_name, plugin_dir):
     plugin_resources = get_resources(plugin_dir)
     for resource in plugin_resources:
         if (resource != '__init__'):
+            # skip unsupported resources
+            if not verify_external_dependencies(plugin_name, resource):
+                LOG.info("Skipping resource %s because of dependencies",
+                         resource)
+                continue
+            # load the resource
             importlib.import_module(
                 "vmware_nsx.shell.admin.plugins."
                 "{}.resources.".format(plugin_name) + resource)