From 498a8215bdc75bb4630004d812be5702f82f728e Mon Sep 17 00:00:00 2001
From: Gary Kotton <gkotton@vmware.com>
Date: Sun, 17 Dec 2017 10:38:50 +0200
Subject: [PATCH] NSX_V3: enable non native DHCP to work with AZ support

The dhcp and metadata prodiles do not need to be set.

Change-Id: I5e7f50d9e9c8517372e04317b17f99434aaba080
---
 .../plugins/nsx_v3/availability_zones.py      | 44 +++++++++++--------
 vmware_nsx/plugins/nsx_v3/plugin.py           |  8 ----
 2 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/vmware_nsx/plugins/nsx_v3/availability_zones.py b/vmware_nsx/plugins/nsx_v3/availability_zones.py
index 98f8800913..9677d9e770 100644
--- a/vmware_nsx/plugins/nsx_v3/availability_zones.py
+++ b/vmware_nsx/plugins/nsx_v3/availability_zones.py
@@ -37,27 +37,33 @@ class NsxV3AvailabilityZone(common_az.ConfiguredAvailabilityZone):
     def init_from_config_section(self, az_name):
         az_info = config.get_nsxv3_az_opts(self.name)
 
-        # The optional parameters will get the global values if not
-        # defined for this AZ
-        self.metadata_proxy = az_info.get('metadata_proxy')
-        if not self.metadata_proxy:
-            raise nsx_exc.NsxInvalidConfiguration(
-                opt_name="metadata_proxy",
-                opt_value='None',
-                reason=(_("metadata_proxy for availability zone %s "
-                          "must be defined") % az_name))
+        if cfg.CONF.nsx_v3.native_dhcp_metadata:
+            # The optional parameters will get the global values if not
+            # defined for this AZ
+            self.metadata_proxy = az_info.get('metadata_proxy')
+            if not self.metadata_proxy:
+                raise nsx_exc.NsxInvalidConfiguration(
+                    opt_name="metadata_proxy",
+                    opt_value='None',
+                    reason=(_("metadata_proxy for availability zone %s "
+                              "must be defined") % az_name))
 
-        self.dhcp_profile = az_info.get('dhcp_profile')
-        if not self.dhcp_profile:
-            raise nsx_exc.NsxInvalidConfiguration(
-                opt_name="dhcp_profile",
-                opt_value='None',
-                reason=(_("dhcp_profile for availability zone %s "
-                          "must be defined") % az_name))
+            self.dhcp_profile = az_info.get('dhcp_profile')
+            if not self.dhcp_profile:
+                raise nsx_exc.NsxInvalidConfiguration(
+                    opt_name="dhcp_profile",
+                    opt_value='None',
+                    reason=(_("dhcp_profile for availability zone %s "
+                              "must be defined") % az_name))
 
-        self.native_metadata_route = az_info.get('native_metadata_route')
-        if self.native_metadata_route is None:
-            self.native_metadata_route = cfg.CONF.nsx_v3.native_metadata_route
+            self.native_metadata_route = az_info.get('native_metadata_route')
+            if self.native_metadata_route is None:
+                nmr = cfg.CONF.nsx_v3.native_metadata_route
+                self.native_metadata_route = nmr
+        else:
+            self.metadata_proxy = None
+            self.dhcp_profile = None
+            self.native_metadata_route = None
 
         self.dns_domain = az_info.get('dns_domain')
         if self.dns_domain is None:
diff --git a/vmware_nsx/plugins/nsx_v3/plugin.py b/vmware_nsx/plugins/nsx_v3/plugin.py
index 94de6b7554..f7d094b41f 100644
--- a/vmware_nsx/plugins/nsx_v3/plugin.py
+++ b/vmware_nsx/plugins/nsx_v3/plugin.py
@@ -375,14 +375,6 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
             return lb_driver_v2.DummyLoadbalancerDriverV2()
 
     def init_availability_zones(self):
-        # availability zones are supported only with native dhcp
-        # if not - the default az will be loaded and used internally only
-        if (cfg.CONF.nsx_v3.availability_zones and
-            not cfg.CONF.nsx_v3.native_dhcp_metadata):
-            msg = _("Availability zones are not supported without native "
-                    "DHCP metadata")
-            LOG.error(msg)
-            raise n_exc.InvalidInput(error_message=msg)
         validate_default = not self._is_sub_plugin
         self._availability_zones_data = nsx_az.NsxV3AvailabilityZones(
             validate_default=validate_default)