首页 > 解决方案 > 将变量从 Ansible playbook 传递到 docker_compose 任务

问题描述

如何将剧本中的注册输出传递给 docker_compose 任务?在剧本中,我首先创建一个临时目录,并注册结果:

- name: Create temporary deployment directory
  tempfile:
    state: directory
     prefix: test.
  register: tempdir

在剧本的后面,我有一个这样的 docker_compose 任务:

- name: Create and start services
  docker_compose:
    project_name: test
    project_src: "{{ tempdir.path }}"

到目前为止,这可以运行撰写文件并启动容器。但是,在撰写文件本身中,我需要引用卷部分中的 tempdir,以将其挂载到容器中。

我在撰写文件中尝试了这个,这显然不起作用:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - "{{ tempdir.path }}/certs/acme.json:/acme.json"

这不仅限于传递 tempdir,因为我可能还需要将其他变量传递给 compose 文件。例如,来自库存文件。

注意。我对 Ansible 还很陌生,所以如果我混淆了任何术语,请原谅我。

标签: docker-composeansible

解决方案


您可以创建一个 docker-compose 模板文件并使用templateansible 中的模块,将其中的变量复制并替换到您的目的地。

与此类似的东西:

 - name: set docker-compose
   template:
      src: docker-compose.yml.j2
      dest: "{{ your_compose_path }}"

在您的 docker-compose.yml.j2 中,您使用已注册的变量:

 volumes:
   - /var/run/docker.sock:/var/run/docker.sock
   - "{{ tempdir.path }}/certs/acme.json:/acme.json"

推荐阅读