有条件地向Ansible Playbook中的任务/模块添加属性

有条件地向Ansible Playbook中的任务/模块添加属性,ansible,Ansible,我正在开发一个角色,其中我希望启动docker容器,在我的角色中,我有一个任务使用docker\u容器模块来完成: - name: Launch docker container docker_container: name: abc ... 这很好,但是现在我想有一个变量来定义这个容器是否需要连接到特定的docker网络。 如果我需要,可以: - name: Launch docker container docker_container: name: abc

我正在开发一个角色,其中我希望启动docker容器,在我的角色中,我有一个任务使用
docker\u容器
模块来完成:

- name: Launch docker container
  docker_container:
    name: abc
    ...
这很好,但是现在我想有一个变量来定义这个容器是否需要连接到特定的docker网络。 如果我需要,可以:

- name: Launch docker container
  docker_container:
    name: abc
    networks:
      - name: '{{ network_name_var}}'
        ...

但是我想允许用户不定义它,在这种情况下,不应该添加
networks:…
属性。 我没有找到一个简单的方法来实现这一点,是吗

从语义上讲,我想要这样的东西:

- name: Launch docker container
  docker_container:
    name: abc
{% if network_name_var is defined %}
    networks:
      - name: '{{ network_name_var}}'
        ...
{% endif %}


下面是一个您可以使用的可能场景。要点:

  • 我们将您的单个
    网络\u name\u var
    公开给您的用户。我想当然地认为这个var可以是未定义的,也可以是空的
  • 如果var有一个值集,我们将动态定义完整的网络列表定义。否则此列表将保持未设置状态
  • 如果需要,我们使用不在模块中定义任何网络
- name: demo playbook for omit
  hosts: localhost

  tasks:
    - name: set the list of networks for our container
      # don't define anywhere else. it should only exist
      # if network_name_var is set
      set_fact:
        my_networks:
          - name: '{{ network_name_var }}'
      when: network_name_var | default('') | length > 0

    - name: make sure container is started
      docker_container:
        name: abc
        networks: "{{ my_networks | default(omit) }}"