69 lines
2.0 KiB
Python
Executable File
69 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import subprocess
|
|
import tempfile
|
|
import argparse
|
|
try:
|
|
from mako.template import Template
|
|
except:
|
|
subprocess.check_output("pip3 install mako", shell=True)
|
|
from mako.template import Template
|
|
|
|
BASEDIR = os.path.abspath(os.path.dirname(__file__) + "/..")
|
|
|
|
EMBLEM_HOSTS = [
|
|
'themblem.com',
|
|
'www.themblem.com',
|
|
'dev.themblem.com',
|
|
'emblem-dev.hond.cloud',
|
|
]
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--image", "-i", required=True)
|
|
parser.add_argument("--db-host", "-d", required=True)
|
|
parser.add_argument("--kubeconfig", required=True)
|
|
parser.add_argument("--namespace","-n", required=True)
|
|
parser.add_argument("--emblem-env","-e", required=True)
|
|
return parser.parse_args()
|
|
|
|
def read_file(path):
|
|
with open(path, 'r') as f:
|
|
return f.read()
|
|
|
|
|
|
def render_template(template, **kwargs):
|
|
t = Template(template)
|
|
return t.render(**kwargs)
|
|
|
|
def wait_for_pod(kubeconfig, ns, ts):
|
|
while True:
|
|
time.sleep(1)
|
|
cmd = ['kubectl', '--kubeconfig', kubeconfig, 'get', 'pod',
|
|
'-n', ns,
|
|
'-l', 'deploy-timestamp=' + ts]
|
|
out = subprocess.check_output(cmd, encoding='utf-8')
|
|
if 'Running' in out.split():
|
|
return
|
|
|
|
def main():
|
|
args = parse_args()
|
|
tmpl_file = os.path.join(BASEDIR, "deploy/all.yaml.tmpl")
|
|
template = read_file(tmpl_file)
|
|
ts = str(time.time())
|
|
t = render_template(template, image=args.image, db_host=args.db_host, emblem_env=args.emblem_env, hosts=EMBLEM_HOSTS,
|
|
deploy_timestamp=ts)
|
|
f = tempfile.NamedTemporaryFile(suffix='.yaml', delete=False)
|
|
f.write(t.encode())
|
|
f.flush()
|
|
kubeconfig = os.path.join(BASEDIR, "deploy/kubeconfig")
|
|
cmd = ['kubectl', '--kubeconfig', args.kubeconfig, '-n', args.namespace,
|
|
'apply', '-f', f.name]
|
|
subprocess.check_output(cmd)
|
|
wait_for_pod(args.kubeconfig, args.namespace, ts)
|
|
|
|
sys.exit(main())
|