ansible docker 基于变量挂载卷
ansible docker mount volumes based on a variable
有没有办法在 ansible docker_service 模块中的 volumes:
指令下挂载卷?
我想写一个 docker_compose,并有一个变量来选择要挂载的正确卷。
- name: Add docker_service for the Ansible Container
docker_service:
project_name: jro
definition:
version: '3'
services:
ansible:
image: python:3.7.0a3-alpine3.7
volumes:
- {CONDITION xxx} then "xxx:ccc"
- {CONDITION yyy} then "yyy:ccc:
这不是您通常在 Ansible 剧本中处理条件的方式。你没有告诉我们你的条件是什么,所以很难直接回答你的问题,但你可以这样做:
- set_fact:
volume_to_mount: foo
when: condition1
- set_fact:
volume_to_mount: bar
when: condition2
- name: Add docker_service for the Ansible Container
docker_service:
project_name: jro
definition:
version: '3'
services:
ansible:
image: python:3.7.0a3-alpine3.7
volumes:
- "{{volume_to_mount}}:/mountpoint"
如果您的条件是主机名或组,您通常会通过使用组或主机 vars 文件来处理。例如,如果您想为 "foo_group" 主机组中的所有主机安装卷 "foo",并为 "bar_group" 主机组中的所有主机安装卷 "bar",您将创建 group_vars/foo_group.yml
与:
volume_to_mount: foo
和groups_vars/bar_group.yml
与:
volume_to_mount: bar
如果您需要安装 多个 卷,您可以执行与上述类似的操作,但使用列表而不是单个值,例如:
volumes_to_mount:
- "bar:/mount_for_bar"
- "foo:/mount_for_foo"
然后在您的 docker_service
任务中:
- name: Add docker_service for the Ansible Container
docker_service:
project_name: jro
definition:
version: '3'
services:
ansible:
image: python:3.7.0a3-alpine3.7
volumes: "{{ volumes_to_mount }}"
希望这里的内容能为您指明正确的方向。如果您想要更有针对性的答案,请随时提供有关您尝试执行的操作的更多详细信息。
字面上针对问题定义的问题:
volumes:
- "{{ 'xxx:ccc' if xxx else omit }}"
- "{{ 'yyy:ccc' if yyy else omit }}"
我现在无法验证 omit
是否适用于这种特定模式
或者(猜猜您实际上可能在寻找什么):
volumes:
- "{{ 'xxx:ccc' if my_condition else 'yyy:ccc' }}"
有没有办法在 ansible docker_service 模块中的 volumes:
指令下挂载卷?
我想写一个 docker_compose,并有一个变量来选择要挂载的正确卷。
- name: Add docker_service for the Ansible Container
docker_service:
project_name: jro
definition:
version: '3'
services:
ansible:
image: python:3.7.0a3-alpine3.7
volumes:
- {CONDITION xxx} then "xxx:ccc"
- {CONDITION yyy} then "yyy:ccc:
这不是您通常在 Ansible 剧本中处理条件的方式。你没有告诉我们你的条件是什么,所以很难直接回答你的问题,但你可以这样做:
- set_fact:
volume_to_mount: foo
when: condition1
- set_fact:
volume_to_mount: bar
when: condition2
- name: Add docker_service for the Ansible Container
docker_service:
project_name: jro
definition:
version: '3'
services:
ansible:
image: python:3.7.0a3-alpine3.7
volumes:
- "{{volume_to_mount}}:/mountpoint"
如果您的条件是主机名或组,您通常会通过使用组或主机 vars 文件来处理。例如,如果您想为 "foo_group" 主机组中的所有主机安装卷 "foo",并为 "bar_group" 主机组中的所有主机安装卷 "bar",您将创建 group_vars/foo_group.yml
与:
volume_to_mount: foo
和groups_vars/bar_group.yml
与:
volume_to_mount: bar
如果您需要安装 多个 卷,您可以执行与上述类似的操作,但使用列表而不是单个值,例如:
volumes_to_mount:
- "bar:/mount_for_bar"
- "foo:/mount_for_foo"
然后在您的 docker_service
任务中:
- name: Add docker_service for the Ansible Container
docker_service:
project_name: jro
definition:
version: '3'
services:
ansible:
image: python:3.7.0a3-alpine3.7
volumes: "{{ volumes_to_mount }}"
希望这里的内容能为您指明正确的方向。如果您想要更有针对性的答案,请随时提供有关您尝试执行的操作的更多详细信息。
字面上针对问题定义的问题:
volumes:
- "{{ 'xxx:ccc' if xxx else omit }}"
- "{{ 'yyy:ccc' if yyy else omit }}"
我现在无法验证 omit
是否适用于这种特定模式
或者(猜猜您实际上可能在寻找什么):
volumes:
- "{{ 'xxx:ccc' if my_condition else 'yyy:ccc' }}"