基于变量的ansible docker mount卷

时间:2018-01-05 13:27:52

标签: docker ansible docker-volume

有没有办法在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:

2 个答案:

答案 0 :(得分:3)

这不是你通常会在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"

如果您的条件是主机名或组,您通常会通过使用组或主机变量文件来处理它。例如,如果你想安装音量" foo"适用于" foo_group"中的所有主机主机组和卷" bar"适用于" bar_group"中的所有主机在hostgroup中,您可以使用:

创建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 }}"

希望这里的某些内容能指向正确的方向。如果您想要更有针对性的答案,请随时提供有关您尝试做的更多详细信息。

答案 1 :(得分:2)

字面意思是问题中定义的问题:

volumes:
   - "{{ 'xxx:ccc' if xxx else omit }}" 
   - "{{ 'yyy:ccc' if yyy else omit }}"

我现在无法验证,omit是否适用于此特定模式

或者(猜猜你可能正在寻找的东西):

volumes:
   - "{{ 'xxx:ccc' if my_condition else 'yyy:ccc' }}"