有条件地向Ansible Playbook中的任务/模块添加属性
我正在开发一个角色,其中我希望启动docker容器,在我的角色中,我有一个任务使用有条件地向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\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 %}
下面是一个您可以使用的可能场景。要点:
- 我们将您的单个
公开给您的用户。我想当然地认为这个var可以是未定义的,也可以是空的网络\u name\u 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) }}"