Условно добавить свойства в задачу / модуль в Ansible Playbook - PullRequest
0 голосов
/ 11 февраля 2020

Я разрабатываю роль, в которой хочу запустить контейнер docker. Среди задач в моей роли у меня есть одна, использующая для этого модуль docker_container:

- 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 %}

1 Ответ

0 голосов
/ 11 февраля 2020

Вот возможный сценарий, который вы можете использовать. Ключевые моменты:

  • Мы сохраняем ваш сингл network_name_var, который предоставляется вашему пользователю. Я считал само собой разумеющимся, что эта переменная может быть либо неопределенной, либо пустой.
  • Мы определяем определение полного списка сети динамически, если переменная имеет установленное значение. В противном случае этот список не устанавливается.
  • Мы используем omit заполнитель , чтобы не определять сети в модуле, если это необходимо.
- 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) }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...