Skip to content

Commit

Permalink
Support variable substitution with service's environment
Browse files Browse the repository at this point in the history
This commit introduces the ability to substitute environment variables
within the 'environment' section of the service definition.

This allows for more dynamic configuration of services.

Signed-off-by: Songmin Li <[email protected]>
  • Loading branch information
lisongmin authored and p12tic committed Jul 26, 2024
1 parent dbbd695 commit b5eaf31
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add ability to substitute variables with the environment of the service.
15 changes: 15 additions & 0 deletions podman_compose.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,16 @@ def rec_subs(value, subs_dict):
do bash-like substitution in value and if list of dictionary do that recursively
"""
if is_dict(value):
if 'environment' in value and is_dict(value['environment']):
# Load service's environment variables
subs_dict = subs_dict.copy()
svc_envs = {k: v for k, v in value['environment'].items() if k not in subs_dict}
# we need to add `svc_envs` to the `subs_dict` so that it can evaluate the
# service environment that reference to another service environment.
subs_dict.update(svc_envs)
svc_envs = rec_subs(svc_envs, subs_dict)
subs_dict.update(svc_envs)

value = {k: rec_subs(v, subs_dict) for k, v in value.items()}
elif is_str(value):

Expand Down Expand Up @@ -1823,6 +1833,11 @@ def _parse_compose_file(self):
"COMPOSE_FILE": pathsep.join(relative_files),
"COMPOSE_PATH_SEPARATOR": pathsep,
})

if args and 'env' in args and args.env:
env_vars = norm_as_dict(args.env)
self.environ.update(env_vars)

compose = {}
# Iterate over files primitively to allow appending to files in-loop
files_iter = iter(files)
Expand Down
7 changes: 4 additions & 3 deletions tests/integration/env-tests/container-compose.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
version: '3'
version: "3"

services:
env-test:
image: busybox
command: sh -c "export | grep ZZ"
environment:
- ZZVAR1=myval1

ZZVAR1: myval1
ZZVAR2: 2-$ZZVAR1
ZZVAR3: 3-$ZZVAR2

0 comments on commit b5eaf31

Please sign in to comment.