首页 文章

基于变量的ansible docker mount卷

提问于
浏览
-1

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

  • 3

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

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

    我现在无法验证,如果省略将在此特定模式中工作

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

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

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

    希望这里有一些东西可以指向正确的方向 . 如果您想要更有针对性的答案,请随时提供有关您尝试做的更多详细信息 .

相关问题