Convert dcm alias to script

Enhance possibilities of dcm command for handy using
* define new commnads
* dump services
* services order startup
This commit is contained in:
Martin Blazik
2020-11-20 17:50:41 +01:00
parent 68750d5829
commit b53b8b7951
2 changed files with 118 additions and 5 deletions

116
bin/dcm Executable file
View File

@@ -0,0 +1,116 @@
#!/usr/bin/env python3
"""
pulsar
# wait-for-pulsar <check-delay> <max-duration>
pulsar-create-namespace
# wait-for-pulsar-create-namespace - wanted return code 0
postgres redis jaeger router
# wait-for-postgres
# jeste poresit fazovani
metadata-api-new aqe afm-exec-api result-cache scan-model sql-executor swagger-ui
"""
import subprocess
import yaml
import pprint
import os
import re
from sys import argv
from time import time, sleep
def split(text):
return re.split(r'\s+', text)
def prefix_join(prefix, array):
return " ".join([prefix + " " + item for item in array])
def dc_files(files):
return prefix_join("-f", files)
def load_dc_file(dc_file):
with open(dc_file) as yamlFile:
dc = yaml.load(yamlFile, Loader=yaml.FullLoader)
return dc
def dc_services(dc_file):
dc = load_dc_file(dc_file)
return [service for service in dc["services"].keys()]
def dump_services(files):
for filename in files:
for service in dc_services(filename):
print(service)
def dump_files(files):
for file in files:
print(file)
def check_pulsar():
return False
def check_postgres():
return False
def wait_for(check, delay, duration):
start = time()
while time() - start < duration:
if check():
return True
else:
sleep(delay)
def try_load_list(name, default):
if name in os.environ:
return split(os.environ[name])
else:
return default
DCF = ["docker-compose.yaml", "docker-compose-monitoring.yaml"]
DCF = try_load_list("DCF", DCF)
TIGER_SERVICES = [
"afm-exec-api",
"metadata-api-new",
"aqe",
"result-cache",
"scan-model",
"sql-executor"
]
TIGER_SERVICES = try_load_list("SERVICES", TIGER_SERVICES)
COMMANDS = {
"files": lambda: dump_files(DCF),
"services": lambda: dump_services(DCF)
# deps - vypis zavyslosti
# logs - aby se nemuselo zadavat tolik argumentu
}
def main():
args = " ".join(argv[1:])
cmd = " ".join(["docker-compose", dc_files(DCF), args])
print(cmd)
returned_value = subprocess.call(cmd, shell=True)
exit(returned_value)
if __name__ == '__main__':
action = argv[1] if len(argv) > 1 else None
if action in COMMANDS:
COMMANDS[action]()
else:
main()