Make CaaS DNS domains configurable 96/696/2
authorKrisztian Lengyel <krisztian.lengyel@nokia.com>
Fri, 10 May 2019 20:19:16 +0000 (16:19 -0400)
committerKrisztian Lengyel <krisztian.lengyel@nokia.com>
Wed, 15 May 2019 13:58:25 +0000 (09:58 -0400)
Change-Id: I2ebf2a34fb6878daf2fa7956580c72b59d9585d0
Signed-off-by: Krisztian Lengyel <krisztian.lengyel@nokia.com>
cmdatahandlers/src/cmdatahandlers/caas/config.py
cmframework/src/cmframework/utils/cmansibleinventory.py
userconfigtemplate/user_config.yaml

index cd932e2..e897558 100644 (file)
@@ -21,6 +21,7 @@ import jinja2
 
 CAAS_CONFIG_FILE_PATH = "/etc/cmframework/config/"
 CAAS_CONFIG_FILE = "caas.yaml"
+DEFAULT_CAAS_DNS_DOMAIN = "rec.io"
 
 
 class Config(config.Config):
@@ -55,6 +56,8 @@ class Config(config.Config):
         user_conf = self.confman.get_users_config_handler()
         self.config[self.ROOT]['helm_home'] = "/home/" + user_conf.get_admin_user() + "/.helm"
         self.config[self.ROOT]['flavour'] = self.flavour_set()
+        if not self.config[self.ROOT].get('dns_domain', ""):
+            self.config[self.ROOT]['dns_domain'] = DEFAULT_CAAS_DNS_DOMAIN
 
     def set_static_config(self):
         try:
@@ -63,15 +66,25 @@ class Config(config.Config):
                     CAAS_CONFIG_FILE_PATH)).get_template(CAAS_CONFIG_FILE)
             with open(CAAS_CONFIG_FILE_PATH + CAAS_CONFIG_FILE) as config_file:
                 data = yaml.load(config_file)
-            outputText = template.render(data)
-            config_data = yaml.load(outputText)
-            for key in config_data:
-                self.config[self.ROOT][key] = config_data[key]
+            self.config[self.ROOT].update(
+                self._template_config(template, self.config[self.ROOT], data))
         except jinja2.exceptions.TemplateNotFound:
             return
         except Exception:
             raise configerror.ConfigError("Unexpected issue occured!")
 
+    def _template_config(self, template, base_config, initial_data):
+        config_data = initial_data.copy()
+        config_data.update(base_config)
+        outputText = template.render(config_data)
+        previousOutputText = ""
+        while outputText != previousOutputText:
+            config_data = yaml.load(outputText)
+            config_data.update(base_config)
+            outputText = template.render(config_data)
+            previousOutputText = outputText
+        return yaml.load(outputText)
+
     def add_defaults(self):
         if not self.config.get('cloud.caas', ''):
             return
@@ -141,3 +154,7 @@ class Config(config.Config):
 
     def get_caas_parameter(self, parameter):
         return self.config.get(self.ROOT, {}).get(parameter, '')
+
+    def get_kubernetes_domain(self):
+        return 'kubernetes.default.svc.{}'.format(
+            self.config.get(self.ROOT, {}).get('dns_domain', ''))
index eef17db..13db5f2 100644 (file)
@@ -93,7 +93,7 @@ class AnsibleInventory(object):
 
     def set_caas_master_data(self, hostvars, node, caasconf, hostsconf):
         dns = hostvars[node]['ssl_alt_name']['dns']
-        dns.append('kubernetes.default.svc.nokia.net')
+        dns.append(caasconf.get_kubernetes_domain())
         dns.append(caasconf.get_apiserver_in_hosts())
         dns.append(caasconf.get_registry_url())
         dns.append(caasconf.get_update_registry_url())
index 4517eaf..1e1e257 100644 (file)
@@ -248,6 +248,11 @@ caas:
     ### e.g. ["U2FsdGVkX1+WlNST+W.."]
     encrypted_ca_key: '["<ENCRYPTED_CA_KEY>"]'
 
+    ### This parameter defines the DNS domain served by the REC DNS server for example
+    ### in-cluster Kubernetes Services all belongs to this domain DNS queries. 
+    ### Outside of this domain are either rejected, or forwarded to a configured upstream DNS server (if, any).
+    ### The default value is: rec.io
+    #dns_domain: "<VALUE>"
 
 ### Storage configuration
 storage:
@@ -544,4 +549,3 @@ hosts:
         #mgmt_mac: [<VALUE1>, <VALUE2>, ...]
 
 ...
-