diff --git a/promenade/config.py b/promenade/config.py index 28e12008..29164f6f 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 0d9283e2..2213a86f 100644 --- a/promenade/control/join_scripts.py +++ b/promenade/control/join_scripts.py @@ -38,6 +38,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') @@ -69,6 +71,7 @@ class JoinScriptsResource(BaseResource): }, 'data': { 'hostname': hostname, + 'domain': dns_domain, 'ip': ip, 'join_ips': join_ips, '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 13eb46e4..f699bc9c 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(' ') }}