From c18e3a8d9d8185a387332d47d960634d7d99b9a6 Mon Sep 17 00:00:00 2001 From: Matt McEuen Date: Thu, 4 Apr 2019 20:09:49 -0500 Subject: [PATCH] Add optional external_ip to promjoin Adds an optional external_ip parameter to the prom join script API, and to the Genesis and KubernetesNode schema. This is used to populate the host's IP address in its /etc/hosts file if present, according to normal hosts conventions. If the value is not passed to prom-join or is absent from a Genesis or KubernetesNode document, then the hosts file defaults to the current loopback IP for the hostname (business as usual). Change-Id: I58dc219923b18aaf9c83453b896ce509664d8766 --- examples/basic/Genesis.yaml | 1 + examples/complete/Genesis.yaml | 1 + promenade/control/join_scripts.py | 4 ++++ promenade/schemas/Genesis.yaml | 3 +++ promenade/schemas/KubernetesNode.yaml | 3 +++ promenade/templates/roles/common/etc/hosts | 2 +- tools/g2/lib/promenade.sh | 2 +- tools/gate/config-templates/genesis-config.yaml | 1 + tools/gate/config-templates/joining-host-config.yaml | 4 ++++ 9 files changed, 19 insertions(+), 2 deletions(-) diff --git a/examples/basic/Genesis.yaml b/examples/basic/Genesis.yaml index 560b057e..73c95121 100644 --- a/examples/basic/Genesis.yaml +++ b/examples/basic/Genesis.yaml @@ -10,6 +10,7 @@ metadata: data: hostname: n0 ip: 192.168.77.10 + external_ip: 192.168.77.10 apiserver: arguments: - --authorization-mode=Node,RBAC diff --git a/examples/complete/Genesis.yaml b/examples/complete/Genesis.yaml index 75975e06..33c24dee 100644 --- a/examples/complete/Genesis.yaml +++ b/examples/complete/Genesis.yaml @@ -10,6 +10,7 @@ metadata: data: hostname: n0 ip: 192.168.77.10 + external_ip: 192.168.77.10 armada: target_manifest: cluster-bootstrap labels: diff --git a/promenade/control/join_scripts.py b/promenade/control/join_scripts.py index 2213a86f..ca5948c3 100644 --- a/promenade/control/join_scripts.py +++ b/promenade/control/join_scripts.py @@ -36,7 +36,10 @@ class JoinScriptsResource(BaseResource): def on_get(self, req, resp): leave_kubectl = req.get_param_as_bool('leave_kubectl') design_ref = req.get_param('design_ref', required=True) + # The required IP address to be used by Kubernetes itself ip = req.get_param('ip', required=True) + # The optional IP address to configure as externally-routable + external_ip = req.get_param('external_ip', default='127.0.0.1') hostname = req.get_param('hostname', required=True) # NOTE(sh8121att): Set a default here for backward compatability dns_domain = req.get_param('domain', default='local') @@ -73,6 +76,7 @@ class JoinScriptsResource(BaseResource): 'hostname': hostname, 'domain': dns_domain, 'ip': ip, + 'external_ip': external_ip, 'join_ips': join_ips, 'labels': { 'dynamic': dynamic_labels, diff --git a/promenade/schemas/Genesis.yaml b/promenade/schemas/Genesis.yaml index f5d12db6..a478e9a7 100644 --- a/promenade/schemas/Genesis.yaml +++ b/promenade/schemas/Genesis.yaml @@ -91,6 +91,9 @@ data: ip: $ref: '#/definitions/ip_address' + external_ip: + $ref: '#/definitions/ip_address' + labels: properties: static: diff --git a/promenade/schemas/KubernetesNode.yaml b/promenade/schemas/KubernetesNode.yaml index f699bc9c..db09f816 100644 --- a/promenade/schemas/KubernetesNode.yaml +++ b/promenade/schemas/KubernetesNode.yaml @@ -26,6 +26,9 @@ data: ip: $ref: '#/definitions/ip_address' + external_ip: + $ref: '#/definitions/ip_address' + domain: type: string diff --git a/promenade/templates/roles/common/etc/hosts b/promenade/templates/roles/common/etc/hosts index cb62d012..e59e371b 100644 --- a/promenade/templates/roles/common/etc/hosts +++ b/promenade/templates/roles/common/etc/hosts @@ -1,7 +1,7 @@ # This file is controlled by Promenade. Do not modify. # -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 +{{ config.get_first('Genesis:external_ip', 'KubernetesNode:external_ip', default='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') }} {%- for entry in config.get_path('KubernetesNetwork:hosts_entries', []) %} {{ entry['ip'] }} {{ entry['names'] | join(' ') }} {%- endfor %} diff --git a/tools/g2/lib/promenade.sh b/tools/g2/lib/promenade.sh index 4b152297..13eec04e 100644 --- a/tools/g2/lib/promenade.sh +++ b/tools/g2/lib/promenade.sh @@ -24,7 +24,7 @@ promenade_render_curl_url() { else DESIGN_REF="design_ref=${NGINX_URL}/promenade.yaml" fi - HOST_PARAMS="hostname=${NAME}&ip=$(config_vm_ip "${NAME}")" + HOST_PARAMS="hostname=${NAME}&ip=$(config_vm_ip "${NAME}")&external_ip=$(config_vm_ip "${NAME}")" echo "${BASE_URL}?${DESIGN_REF}&${HOST_PARAMS}&leave_kubectl=true${LABEL_PARAMS}" } diff --git a/tools/gate/config-templates/genesis-config.yaml b/tools/gate/config-templates/genesis-config.yaml index d801dac2..96e41d76 100644 --- a/tools/gate/config-templates/genesis-config.yaml +++ b/tools/gate/config-templates/genesis-config.yaml @@ -10,6 +10,7 @@ metadata: data: hostname: ${GENESIS_HOSTNAME} ip: ${GENESIS_IP} + external_ip: ${GENESIS_IP} labels: dynamic: - calico-etcd=enabled diff --git a/tools/gate/config-templates/joining-host-config.yaml b/tools/gate/config-templates/joining-host-config.yaml index d97c9ca9..25f21ba0 100644 --- a/tools/gate/config-templates/joining-host-config.yaml +++ b/tools/gate/config-templates/joining-host-config.yaml @@ -10,6 +10,7 @@ metadata: data: hostname: ${GENESIS_HOSTNAME} ip: ${GENESIS_IP} + external_ip: ${GENESIS_IP} join_ip: ${MASTER1_IP} labels: dynamic: @@ -40,6 +41,7 @@ metadata: data: hostname: ${MASTER1_HOSTNAME} ip: ${MASTER1_IP} + external_ip: ${MASTER1_IP} join_ip: ${GENESIS_IP} labels: dynamic: @@ -70,6 +72,7 @@ metadata: data: hostname: ${MASTER2_HOSTNAME} ip: ${MASTER2_IP} + external_ip: ${MASTER2_IP} join_ips: - ${GENESIS_IP} - ${MASTER1_IP} @@ -102,6 +105,7 @@ metadata: data: hostname: ${WORKER_HOSTNAME} ip: ${WORKER_IP} + external_ip: ${WORKER_IP} join_ips: - ${GENESIS_IP} - ${MASTER1_IP}