forked from extern/podman-compose
more readable type checking
This commit is contained in:
parent
095c83be10
commit
079cc0fd9b
@ -1,4 +1,4 @@
|
|||||||
#! /usr/bin/env python
|
#! /usr/bin/python3
|
||||||
|
|
||||||
# https://docs.docker.com/compose/compose-file/#service-configuration-reference
|
# https://docs.docker.com/compose/compose-file/#service-configuration-reference
|
||||||
# https://docs.docker.com/samples/
|
# https://docs.docker.com/samples/
|
||||||
@ -14,8 +14,8 @@ import argparse
|
|||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
import fnmatch
|
|
||||||
|
|
||||||
|
# import fnmatch
|
||||||
# fnmatch.fnmatchcase(env, "*_HOST")
|
# fnmatch.fnmatchcase(env, "*_HOST")
|
||||||
|
|
||||||
import json
|
import json
|
||||||
@ -25,6 +25,10 @@ PY3 = sys.version_info[0] == 3
|
|||||||
if PY3:
|
if PY3:
|
||||||
basestring = str
|
basestring = str
|
||||||
|
|
||||||
|
is_str = lambda s: isinstance(s, basestring)
|
||||||
|
is_dict = lambda d: isinstance(d, dict)
|
||||||
|
is_list = lambda l: not is_str(l) and not is_dict(l) and hasattr(l, "__iter__")
|
||||||
|
|
||||||
# docker and docker-compose support subset of bash variable substitution
|
# docker and docker-compose support subset of bash variable substitution
|
||||||
# https://docs.docker.com/compose/compose-file/#variable-substitution
|
# https://docs.docker.com/compose/compose-file/#variable-substitution
|
||||||
# https://docs.docker.com/compose/env-file/
|
# https://docs.docker.com/compose/env-file/
|
||||||
@ -61,9 +65,9 @@ def rec_subs(value, dicts):
|
|||||||
"""
|
"""
|
||||||
do bash-like substitution in value and if list of dictionary do that recursively
|
do bash-like substitution in value and if list of dictionary do that recursively
|
||||||
"""
|
"""
|
||||||
if hasattr(value, "items"):
|
if is_dict(value):
|
||||||
value = dict([(k, rec_subs(v, dicts)) for k, v in value.items()])
|
value = dict([(k, rec_subs(v, dicts)) for k, v in value.items()])
|
||||||
elif isinstance(value, basestring):
|
elif is_str(value):
|
||||||
value = var_re.sub(lambda m: dicts_get(dicts, m.group(1).strip('{}')), value)
|
value = var_re.sub(lambda m: dicts_get(dicts, m.group(1).strip('{}')), value)
|
||||||
sub_def = lambda m: dicts_get(dicts, m.group(1), m.group(3), m.group(2) == ':')
|
sub_def = lambda m: dicts_get(dicts, m.group(1), m.group(3), m.group(2) == ':')
|
||||||
value = var_def_re.sub(sub_def, value)
|
value = var_def_re.sub(sub_def, value)
|
||||||
@ -77,7 +81,6 @@ def rec_subs(value, dicts):
|
|||||||
|
|
||||||
|
|
||||||
# helper functions
|
# helper functions
|
||||||
|
|
||||||
def try_int(i, fallback=None):
|
def try_int(i, fallback=None):
|
||||||
try:
|
try:
|
||||||
return int(i)
|
return int(i)
|
||||||
@ -87,7 +90,6 @@ def try_int(i, fallback=None):
|
|||||||
pass
|
pass
|
||||||
return fallback
|
return fallback
|
||||||
|
|
||||||
|
|
||||||
def norm_as_list(src):
|
def norm_as_list(src):
|
||||||
"""
|
"""
|
||||||
given a dictionary {key1:value1, key2: None} or list
|
given a dictionary {key1:value1, key2: None} or list
|
||||||
@ -95,9 +97,9 @@ def norm_as_list(src):
|
|||||||
"""
|
"""
|
||||||
if src is None:
|
if src is None:
|
||||||
dst = []
|
dst = []
|
||||||
elif isinstance(src, dict):
|
elif is_dict(src):
|
||||||
dst = [("{}={}".format(k, v) if v else k) for k, v in src.items()]
|
dst = [("{}={}".format(k, v) if v else k) for k, v in src.items()]
|
||||||
elif hasattr(src, '__iter__'):
|
elif is_list(src):
|
||||||
dst = list(src)
|
dst = list(src)
|
||||||
else:
|
else:
|
||||||
dst = [src]
|
dst = [src]
|
||||||
@ -111,9 +113,9 @@ def norm_as_dict(src):
|
|||||||
"""
|
"""
|
||||||
if src is None:
|
if src is None:
|
||||||
dst = {}
|
dst = {}
|
||||||
elif isinstance(src, dict):
|
elif is_dict(src):
|
||||||
dst = dict(src)
|
dst = dict(src)
|
||||||
elif hasattr(src, '__iter__'):
|
elif is_list(src):
|
||||||
dst = [i.split("=", 1) for i in src if i]
|
dst = [i.split("=", 1) for i in src if i]
|
||||||
dst = dict([(a if len(a) == 2 else (a[0], None)) for a in dst])
|
dst = dict([(a if len(a) == 2 else (a[0], None)) for a in dst])
|
||||||
else:
|
else:
|
||||||
@ -339,10 +341,10 @@ def container_to_args(cnt, dirname):
|
|||||||
# args.append('--init')
|
# args.append('--init')
|
||||||
entrypoint = cnt.get('entrypoint')
|
entrypoint = cnt.get('entrypoint')
|
||||||
if entrypoint is not None:
|
if entrypoint is not None:
|
||||||
if isinstance(entrypoint, list):
|
if is_str(entrypoint):
|
||||||
args.extend(['--entrypoint', json.dumps(entrypoint)])
|
|
||||||
else:
|
|
||||||
args.extend(['--entrypoint', entrypoint])
|
args.extend(['--entrypoint', entrypoint])
|
||||||
|
else:
|
||||||
|
args.extend(['--entrypoint', json.dumps(entrypoint)])
|
||||||
args.append(cnt.get('image')) # command, ..etc.
|
args.append(cnt.get('image')) # command, ..etc.
|
||||||
command = cnt.get('command')
|
command = cnt.get('command')
|
||||||
if command is not None:
|
if command is not None:
|
||||||
|
Loading…
Reference in New Issue
Block a user