render "join" script into config map

This commit is contained in:
Mark Burnett 2017-07-01 13:57:53 -05:00
parent 3d2b4ab8d6
commit 4757f2f762
6 changed files with 118 additions and 1 deletions

View File

@ -50,3 +50,15 @@ spec:
- 8.8.4.4
#http_proxy: http://proxy.example.com:8080
#https_proxy: https://proxy.example.com:8080
---
apiVersion: promenade/v1
kind: Versions
metadata:
cluster: example
name: example
target: all
spec:
images:
promenade: quay.io/attcomdev/promenade:latest
packages:
docker: docker.io=1.12.6-0ubuntu1~16.04.1

View File

@ -33,6 +33,7 @@ class Document:
'Node',
'PrivateKey',
'PublicKey',
'Versions',
}
def __init__(self, data):
@ -68,6 +69,9 @@ class Document:
def __getitem__(self, key):
return self.data['spec'][key]
def get(self, key, default=None):
return self.data['spec'].get(key, default)
class Configuration:
def __init__(self, documents):

View File

@ -33,6 +33,7 @@ class Generator:
def generate_all(self, output_dir):
cluster = self.input_config['Cluster']
network = self.input_config['Network']
versions = self.input_config['Versions']
cluster_name = cluster.metadata['name']
LOG.info('Generating configuration for cluster "%s"', cluster_name)
@ -91,6 +92,7 @@ class Generator:
network,
sa_pub,
sa_priv,
versions,
]
for hostname, data in cluster['nodes'].items():
@ -142,6 +144,7 @@ class Generator:
node,
proxy_cert,
proxy_cert_key,
versions,
]
role_specific_documents = []

View File

@ -38,7 +38,9 @@ class Renderer:
LOG.debug('Templating "%s" into "%s"', path, target_path)
env = jinja2.Environment(undefined=jinja2.StrictUndefined)
env = jinja2.Environment(
loader=jinja2.PackageLoader('promenade', 'templates/include'),
undefined=jinja2.StrictUndefined)
env.filters['b64enc'] = _base64_encode
with open(path) as f:

View File

@ -0,0 +1,18 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: drydock
spec: {}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: promenade-join-sh
namespace: drydock
data:
join.sh: |-
{%- filter indent(4, True) %}
{% include "up.sh" %}
{%- endfilter %}

View File

@ -0,0 +1,78 @@
#!/usr/bin/env bash
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root." 1>&2
exit 1
fi
if [ "x$1" = "x" ]; then
echo "Path to node configuration required." 1>&2
exit 1
fi
set -ex
#Proxy Variables
http_proxy={{ config['Network'].get('http_proxy', '') }}
https_proxy={{ config['Network'].get('https_proxy', '') }}
no_proxy={{ config['Network'].get('no_proxy', '') }}
DOCKER_HTTP_PROXY=${DOCKER_HTTP_PROXY:-${HTTP_PROXY:-${http_proxy}}}
DOCKER_HTTPS_PROXY=${DOCKER_HTTPS_PROXY:-${HTTPS_PROXY:-${https_proxy}}}
DOCKER_NO_PROXY=${DOCKER_NO_PROXY:-${NO_PROXY:-${no_proxy}}}
mkdir -p /etc/docker
cat <<EOS > /etc/docker/daemon.json
{
"live-restore": true,
"storage-driver": "overlay2"
}
EOS
#Configuration for Docker Behind a Proxy
mkdir -p /etc/systemd/system/docker.service.d
#Set HTTPS Proxy Variable
cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=${DOCKER_HTTP_PROXY}"
EOF
#Set HTTPS Proxy Variable
cat <<EOF > /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=${DOCKER_HTTPS_PROXY}"
EOF
#Set No Proxy Variable
cat <<EOF > /etc/systemd/system/docker.service.d/no-proxy.conf
[Service]
Environment="NO_PROXY=${DOCKER_NO_PROXY}"
EOF
#Reload systemd and docker if present
systemctl daemon-reload
systemctl restart docker || true
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y -qq --no-install-recommends \
{{ config['Versions']['packages']['docker'] }}
if [ -f "${PROMENADE_LOAD_IMAGE}" ]; then
echo === Loading updated promenade image ===
docker load -i "${PROMENADE_LOAD_IMAGE}"
fi
docker run -t --rm \
--net host \
-v /:/target \
{{ config['Versions']['images']['promenade'] }} \
promenade \
-v \
up \
--hostname $(hostname) \
--config-path /target$(realpath $1) 2>&1
touch /var/lib/prom.done