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' }}"