Это то, что я придумал для одного хоста
- name: Check for Let's Encrypt certificate
block:
- name: Set default for variable
set_fact:
use_letsencrypt: false
- name: Get stat for cert file
stat:
path: /etc/letsencrypt/live/{{ hostname }}/cert.pem
register: certificate_file
- name: Set letsencrypt to true if certificate exists
set_fact:
use_letsencrypt: true
when: certificate_file.stat.exists
Как я могу сделать это более СУХИМ? Передайте ему имя хоста, и он вернет значение true или false для переменной.
Изменить: дополнительная информация, чтобы было понятнее. Уже нормально работает как есть.
Я хочу использовать приведенный выше фрагмент для более чем одного хоста в разных сценариях, не копируя и не вставляя фрагмент каждый раз.
Я использую переменную use_letsencrypt в разных файлах конфигурации почты и Интернета и хочу сказать: «Я занят настройкой конфигурации для example.com, есть ли у меня для нее сертификат».
ХОРОШО. Итак, поигравшись и прочитав еще несколько документов, я нашел ответ.
Вы можете поместить приведенный выше фрагмент в отдельную роль и просто включать его каждый раз, когда он вам нужен.
- name: Set use_letsencrypt
include_role:
name: has_letsencrypt
vars:
hostname: example.com
Таким образом, он действует как модуль, и вы просто передаете ему var. Теперь я могу использовать этот фрагмент несколько раз в разных сборниках.
Я не уверен, правильно ли я вас понял.
Я ожидаю, что опубликованный код - это всего лишь отрывок из полной пьесы.
Чтобы временно передать переменную, вы можете использовать параметр -e в ansible-playbook:
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
set additional variables as key=value or
YAML/JSON, if filename prepend with @
Итак, вы бы запустили ansible-playbook, например:
ansible-playbook -e "hostname=YourHostname" your.yaml
И если вы не хотите запускаться на всех узлах, указанных в playbook / роли, вы также можете ограничить его из командной строки. Используйте параметр -l:
-l SUBSET, --limit=SUBSET
further limit selected hosts to an additional
pattern
Тогда команда будет такой:
ansible-playbook -e "hostname=YourHostname" -l YourHostname your.yaml
Если вы хотите, чтобы ansible получал локальное имя хоста, это доступно через модуль настройки. Поднос для использования {{ansible_hostname}} вместо вашего {{hostname}}.
Если вы хотите увидеть полный список переменных, предоставляемых модулем установки, просто запустите:
ansible -m setup <your host>