diff options
-rw-r--r-- | library/recipes/docker_compose/lib/__init__.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/library/recipes/docker_compose/lib/__init__.py b/library/recipes/docker_compose/lib/__init__.py index 93fe7133e7..affdb08369 100644 --- a/library/recipes/docker_compose/lib/__init__.py +++ b/library/recipes/docker_compose/lib/__init__.py @@ -24,7 +24,28 @@ class DockerComposeRecipeException(Exception): super(DockerComposeRecipeException, self).__init__("[[bad]]{}[[rst]]".format(msg)) +def avoid_env_interpolation(env=None): + # For more info see + # - https://docs.docker.com/compose/compose-file/12-interpolation + # - https://github.com/docker/compose/issues/9704 + # - https://st.yandex-team.ru/YA-1810 + + env = env or os.environ + replaced = [] + + for key, val in env.items(): + if "$" in val: + replaced.append(key) + env[key] = re.sub(r"((^\$$)|([^\$]\$$)|(\$[^\$\{A-Za-z]))", r"\1$", val) + + if replaced: + logger.debug("Replacing $ with $$ to avoid incorrect interpolation for %s. Fore more info see https://docs.docker.com/compose/compose-file/12-interpolation", replaced) + return env + + def start(argv): + avoid_env_interpolation(env=os.environ) + args = _parse_args(argv) yml_file, cwd = get_compose_file_and_cwd(argv) @@ -78,6 +99,8 @@ def start(argv): def stop(argv): + avoid_env_interpolation(env=os.environ) + if yatest.common.get_param("docker-pause"): library.python.testing.recipe.tty() try: |