mirror of
https://github.com/containers/podman-compose.git
synced 2025-02-18 11:20:55 +01:00
simpler passing of env
This commit is contained in:
parent
f177712585
commit
31b8bb477d
@ -189,19 +189,18 @@ var_re = re.compile(r"""
|
|||||||
)
|
)
|
||||||
""", re.VERBOSE)
|
""", re.VERBOSE)
|
||||||
|
|
||||||
def rec_subs(value, dicts):
|
def rec_subs(value, subs_dict):
|
||||||
"""
|
"""
|
||||||
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 is_dict(value):
|
if is_dict(value):
|
||||||
value = dict([(k, rec_subs(v, dicts)) for k, v in value.items()])
|
value = dict([(k, rec_subs(v, subs_dict)) for k, v in value.items()])
|
||||||
elif is_str(value):
|
elif is_str(value):
|
||||||
def convert(m):
|
def convert(m):
|
||||||
if m.group("escaped") is not None:
|
if m.group("escaped") is not None:
|
||||||
return "$"
|
return "$"
|
||||||
name = m.group("named") or m.group("braced")
|
name = m.group("named") or m.group("braced")
|
||||||
for d in dicts:
|
value = subs_dict.get(name)
|
||||||
value = d.get(name)
|
|
||||||
if value is not None:
|
if value is not None:
|
||||||
return "%s" % value
|
return "%s" % value
|
||||||
if m.group("err") is not None:
|
if m.group("err") is not None:
|
||||||
@ -209,7 +208,7 @@ def rec_subs(value, dicts):
|
|||||||
return m.group("default") or ""
|
return m.group("default") or ""
|
||||||
value = var_re.sub(convert, value)
|
value = var_re.sub(convert, value)
|
||||||
elif hasattr(value, "__iter__"):
|
elif hasattr(value, "__iter__"):
|
||||||
value = [rec_subs(i, dicts) for i in value]
|
value = [rec_subs(i, subs_dict) for i in value]
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def norm_as_list(src):
|
def norm_as_list(src):
|
||||||
@ -949,7 +948,7 @@ def rec_merge(target, *sources):
|
|||||||
ret = rec_merge_one(target, source)
|
ret = rec_merge_one(target, source)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def resolve_extends(services, service_names, dotenv_dict):
|
def resolve_extends(services, service_names, environ):
|
||||||
for name in service_names:
|
for name in service_names:
|
||||||
service = services[name]
|
service = services[name]
|
||||||
ext = service.get("extends", {})
|
ext = service.get("extends", {})
|
||||||
@ -962,7 +961,7 @@ def resolve_extends(services, service_names, dotenv_dict):
|
|||||||
content = yaml.safe_load(f) or {}
|
content = yaml.safe_load(f) or {}
|
||||||
if "services" in content:
|
if "services" in content:
|
||||||
content = content["services"]
|
content = content["services"]
|
||||||
content = rec_subs(content, [os.environ, dotenv_dict])
|
content = rec_subs(content, environ)
|
||||||
from_service = content.get(from_service_name, {})
|
from_service = content.get(from_service_name, {})
|
||||||
normalize_service(from_service)
|
normalize_service(from_service)
|
||||||
else:
|
else:
|
||||||
@ -1086,16 +1085,15 @@ class PodmanCompose:
|
|||||||
|
|
||||||
|
|
||||||
dotenv_path = os.path.join(dirname, ".env")
|
dotenv_path = os.path.join(dirname, ".env")
|
||||||
|
self.environ = dict(os.environ)
|
||||||
if os.path.isfile(dotenv_path):
|
if os.path.isfile(dotenv_path):
|
||||||
with open(dotenv_path, 'r') as f:
|
with open(dotenv_path, 'r') as f:
|
||||||
dotenv_ls = [l.strip() for l in f if l.strip() and not l.startswith('#')]
|
dotenv_ls = [l.strip() for l in f if l.strip() and not l.startswith('#')]
|
||||||
dotenv_dict = dict([l.split("=", 1) for l in dotenv_ls if "=" in l])
|
self.environ.update(dict([l.split("=", 1) for l in dotenv_ls if "=" in l]))
|
||||||
else:
|
|
||||||
dotenv_dict = {}
|
|
||||||
# TODO: should read and respect those env variables
|
# TODO: should read and respect those env variables
|
||||||
# see: https://docs.docker.com/compose/reference/envvars/
|
# see: https://docs.docker.com/compose/reference/envvars/
|
||||||
# see: https://docs.docker.com/compose/env-file/
|
# see: https://docs.docker.com/compose/env-file/
|
||||||
dotenv_dict.update({
|
self.environ.update({
|
||||||
"COMPOSE_FILE": os.path.basename(filename),
|
"COMPOSE_FILE": os.path.basename(filename),
|
||||||
"COMPOSE_PROJECT_NAME": self.project_name,
|
"COMPOSE_PROJECT_NAME": self.project_name,
|
||||||
"COMPOSE_PATH_SEPARATOR": ":",
|
"COMPOSE_PATH_SEPARATOR": ":",
|
||||||
@ -1110,7 +1108,7 @@ class PodmanCompose:
|
|||||||
exit(1)
|
exit(1)
|
||||||
content = normalize(content)
|
content = normalize(content)
|
||||||
#print(filename, json.dumps(content, indent = 2))
|
#print(filename, json.dumps(content, indent = 2))
|
||||||
content = rec_subs(content, [os.environ, dotenv_dict])
|
content = rec_subs(content, self.environ)
|
||||||
rec_merge(compose, content)
|
rec_merge(compose, content)
|
||||||
# debug mode
|
# debug mode
|
||||||
if len(files)>1:
|
if len(files)>1:
|
||||||
@ -1125,7 +1123,7 @@ class PodmanCompose:
|
|||||||
flat_deps(services, with_extends=True)
|
flat_deps(services, with_extends=True)
|
||||||
service_names = sorted([ (len(srv["_deps"]), name) for name, srv in services.items() ])
|
service_names = sorted([ (len(srv["_deps"]), name) for name, srv in services.items() ])
|
||||||
service_names = [ name for _, name in service_names]
|
service_names = [ name for _, name in service_names]
|
||||||
resolve_extends(services, service_names, dotenv_dict)
|
resolve_extends(services, service_names, self.environ)
|
||||||
flat_deps(services)
|
flat_deps(services)
|
||||||
service_names = sorted([ (len(srv["_deps"]), name) for name, srv in services.items() ])
|
service_names = sorted([ (len(srv["_deps"]), name) for name, srv in services.items() ])
|
||||||
service_names = [ name for _, name in service_names]
|
service_names = [ name for _, name in service_names]
|
||||||
|
Loading…
Reference in New Issue
Block a user