docker-compose - 将变量从 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-compose 模板文件并使用template
ansible 中的模块,将其中的变量复制并替换到您的目的地。
与此类似的东西:
- 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"
推荐阅读
- selenium - 为什么我无法点击“Accept Cookies”弹出窗口的提交按钮?
- c# - 运算符 || 不能应用于“bool”和“bool”类型的操作数?
- pointers - 奇怪的输出二维数组c ++
- vba - 访问 - 未触发 MouseDown 事件
- java - 当检测到某种声音(例如拍手)时触发 android 应用
- python - Python InDesign 脚本:如何运行预检检查?
- java - 数组 = 复杂数据类型 = 类?
- spring-boot - 使用 spring 云流 kafka 绑定消费者和启用 DLQ 覆盖重试尝试
- css - 翻译经典的 css 样式表以响应样式组件使用 + 选择器
- loops - Ansible 循环通过 json 输出并添加索引