From 00114141078cc201befa4d13f69aae23d3b3152d Mon Sep 17 00:00:00 2001 From: Scott Hussey Date: Mon, 6 Aug 2018 20:53:35 -0500 Subject: [PATCH] Supporting setting domain on nodes - During the genesis or join operation when /etc/hosts and /etc/resolv.conf are controlled by Promeande, we need to support including a domain name. This can be configured by YAML definition or by the join-script API. To support backward compatability use a default of 'local' when no domain is specified. Testing: `./tools/gate.sh resiliency` has passed locally Change-Id: Ia0d300912d3ec25eb7f1cb9c580eaa40b5b4addb --- promenade/config.py | 20 +++++++++++++------- promenade/control/join_scripts.py | 3 +++ promenade/schemas/Genesis.yaml | 3 +++ promenade/schemas/KubernetesNode.yaml | 3 +++ promenade/templates/roles/common/etc/hosts | 2 +- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/promenade/config.py b/promenade/config.py index 25319a43..821ba067 100644 --- a/promenade/config.py +++ b/promenade/config.py @@ -75,23 +75,29 @@ class Configuration: jinja2.StrictUndefined( 'No match found for path %s' % path)) - def get_first(self, *paths): + def get_first(self, *paths, default=None): result = self._get_first(*paths) if result: return result else: - return jinja2.StrictUndefined( - 'Nothing found matching paths: %s' % ','.join(paths)) + if default: + return default + else: + return jinja2.StrictUndefined( + 'Nothing found matching paths: %s' % ','.join(paths)) - def get(self, *, kind=None, name=None, schema=None): + def get(self, *, kind=None, name=None, schema=None, default=None): result = _get(self.documents, kind=kind, schema=schema, name=name) if result: return result['data'] else: - return jinja2.StrictUndefined( - 'No document found matching kind=%s schema=%s name=%s' % - (kind, schema, name)) + if default: + return default + else: + return jinja2.StrictUndefined( + 'No document found matching kind=%s schema=%s name=%s' % + (kind, schema, name)) def iterate(self, *, kind=None, schema=None, labels=None, name=None): if kind is not None: diff --git a/promenade/control/join_scripts.py b/promenade/control/join_scripts.py index 313d9e68..569b7e2a 100644 --- a/promenade/control/join_scripts.py +++ b/promenade/control/join_scripts.py @@ -39,6 +39,8 @@ class JoinScriptsResource(BaseResource): design_ref = req.get_param('design_ref', required=True) ip = req.get_param('ip', required=True) hostname = req.get_param('hostname', required=True) + # NOTE(sh8121att): Set a default here for backward compatability + dns_domain = req.get_param('domain', default='local') dynamic_labels = _get_param_list(req, 'labels.dynamic') static_labels = _get_param_list(req, 'labels.static') @@ -70,6 +72,7 @@ class JoinScriptsResource(BaseResource): }, 'data': { 'hostname': hostname, + 'domain': dns_domain, 'ip': ip, 'join_ip': join_ip, 'labels': { diff --git a/promenade/schemas/Genesis.yaml b/promenade/schemas/Genesis.yaml index d2616983..12f9b5b5 100644 --- a/promenade/schemas/Genesis.yaml +++ b/promenade/schemas/Genesis.yaml @@ -81,6 +81,9 @@ data: hostname: $ref: '#/definitions/hostname' + domain: + type: string + ip: $ref: '#/definitions/ip_address' diff --git a/promenade/schemas/KubernetesNode.yaml b/promenade/schemas/KubernetesNode.yaml index 34a29571..e9c1f28b 100644 --- a/promenade/schemas/KubernetesNode.yaml +++ b/promenade/schemas/KubernetesNode.yaml @@ -26,6 +26,9 @@ data: ip: $ref: '#/definitions/ip_address' + domain: + type: string + join_ip: $ref: '#/definitions/ip_address' diff --git a/promenade/templates/roles/common/etc/hosts b/promenade/templates/roles/common/etc/hosts index d93d1eea..cb62d012 100644 --- a/promenade/templates/roles/common/etc/hosts +++ b/promenade/templates/roles/common/etc/hosts @@ -1,6 +1,6 @@ # This file is controlled by Promenade. Do not modify. # -127.0.0.1 {{ config.get_first('Genesis:hostname', 'KubernetesNode:hostname') }} +127.0.0.1 {{ config.get_first('Genesis:hostname', 'KubernetesNode:hostname') }}.{{ config.get_first('Genesis:domain', 'KubernetesNode:domain', default='local') }} {{ config.get_first('Genesis:hostname', 'KubernetesNode:hostname') }} 127.0.0.1 localhost {%- for entry in config.get_path('KubernetesNetwork:hosts_entries', []) %} {{ entry['ip'] }} {{ entry['names'] | join(' ') }}