ansible как я могу добавить условие в модуль get_url, чтобы не включать или не включать свойства владельца и группы из include_role - PullRequest
1 голос
/ 06 мая 2020

У меня есть include_role, который я использую из плейбука, какой рабочий файл, мне нравится иметь возможность использовать его из разных плейбуков, но не все плейбуки требуют выполнения всех свойств get_url. например:

- name: Download
  include_role:
    name: utilities
    tasks_from: download
  vars:
    dest: "{{ ansible_env.APP }}/"
    url: "{{ url }}"

и эта роль:

---
- name: Download_role
  get_url:
    url_username: "{{ packages_user }}"
    url_password: "{{ packages_pass }}"
    dest: "{{ dest }}"
    url: "{{ url }}"
    owner: "{{ ansible_user|default('ec2-user') }}"
    group: "{{ ansible_user|default('ec2-user') }}" 

теперь вызов по умолчанию для этой роли, он установит свойства владельца и группы по умолчанию для файла, но что, если я этого не сделаю нравится вызывать / использовать свойства владельца и группы, когда я вызываю одну и ту же include_role из другого playbook

могу ли я добавить if / else в Download_role, окружающий владельца и группу? в роли или любым другим ansible магом c методом?

1 Ответ

1 голос
/ 06 мая 2020

Применение фильтра default здесь не имеет смысла

    owner: "{{ ansible_user|default('ec2-user') }}"

Переменная ansible_user всегда определяется.


Чтобы ответить на ваш вопрос:

Q: «Могу ли я добавить if / else в 'Download_role', окружающий владельца и группу? В роли или любой другой Ansible magi c method? "

A: Доступны как if / else , так и метод magi c. Можно использовать if / else

    owner: "{{ 'userA'  if my_condition else 'userB' }}"

или тернарный фильтр

    owner: "{{ my_condition|ternary('userA', 'userB') }}"

Это ограничивает выбор только двумя вариантами. Замените my_condition логической переменной или логическим выражением.


Лучше всего определить значения роли по умолчанию в defaults / main.yml . Например, значения по умолчанию для роли могут выглядеть как
shell> cat roles/utilities/defaults/main.yml
my_user: user_A

Тогда значение параметра owner в роли utilities по умолчанию равно user_A

    owner: "{{ my_user }}"

А вот и волхвы c. Можно выбрать файл со значениями по умолчанию defaults_from , если роль включена include_role. Например, давайте создадим дополнительные файлы по умолчанию

shell> cat roles/utilities/defaults/opt_B.yml
my_user: user_B

shell> cat roles/utilities/defaults/opt_C.yml
my_user: user_C

Затем, например, давайте использовать значения по умолчанию из файла opt_B.yml во включенной роли

- name: Download
  include_role:
    name: utilities
    tasks_from: download
    defaults_from: opt_B.yml

См. Приоритет переменной: где мне поместить переменную?

...