У меня есть доступная задача, запущенная на локальном хосте, например
- name: add docker repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/debian {{ ansible_facts['ansible_distribution_release'] }} stable"
state: present
filename: docker-ce
Я хочу использовать переменную ansible_facts['ansible_distribution_release']
чтобы получить имя дистрибутива ОС, в моем случае это должно быть buster. Но он сталкивается с такой ошибкой
"Задача включает параметр с неопределенной переменной. Ошибка заключалась в следующем: 'dict object' не имеет атрибута 'ansible_distribution_release'
Я пытался использовать {{ ansible_distribution_release }}
напрямую, и это работает
repo: "deb [arch=amd64] https://download.docker.com/linux/debian {{ ansible_distribution_release }} stable"
Затем я подумал, что мне нужно обращаться только к фактам напрямую, а не к ним как к ключу переменной ansible_facts, но затем я прочитал официальный документ и увидел такие варианты использования, как
{{ ansible_facts['devices']['xvda']['model'] }}
Это заставляет меня подозревать, что я что-то не так понимаю в доступных переменных.
Я старался не цитировать ansible_distribution_release
в []
, т.е. ansible_facts[ansible_distribution_release]
, но без удачи
Я запускаю команду ниже
$ ansible localhost -m setup -a "filter=ansible_distribution_release"
localhost | SUCCESS => {
"ansible_facts": {
"ansible_distribution_release": "buster"
},
"changed": false
}
таким образом доказано, что атрибут с именем ansible_distribution_release
под ansible_facts
.
Любая помощь будет оценена по достоинству
udpate: я использую инструкции, показанные ниже
- name: debug
block:
- debug:
var: distribution_release
- debug:
var: ansible_distribution_release
- debug:
var: "{{ ansible_facts.keys() }}"
tags: show
и узнать distribution_release
не определен, ansible_distribution_release
можно получить напрямую, но нет такого ключа, как ansible_distribution_release
в ansible_facts, но там есть ключ с именем distribution_release
. это отличие от выхода из
ansible localhost -m setup
в документах говорится
INJECT_FACTS_AS_VARS
Факты доступны внутри переменной ansible_facts, этот параметр также подталкивает их как свои собственные переменные в основном пространстве имен. В отличие от словаря ansible_facts, они будут иметь префикс ansible_.
Кажется, я могу получить доступ к фактам в основном пространстве без префикса ansible_
Взгляните на все переменные, доступные хосту (в данном случае localhost)
- hosts: localhost
tasks:
- debug:
var: hostvars.localhost
Приведенные ниже задачи отладки эквивалентны
- debug:
msg: "{{ ansible_facts['distribution_release'] }}"
- debug:
msg: "{{ ansible_distribution_release }}"
Видеть Факты кеширования