ansible:為什麼我不能使用 {{ ansible_facts′ansibl和distributionr電子書____和′′一種ns一世bl和d一世s噸r一世b在噸一世這nr和l和一種s和′‘ansible_distribution_r…
我有像這樣在 localhost 上執行的 ansible 任務
- 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 變數的理解有問題
我試圖不在 , ie, 中引用
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
under的屬性ansible_facts
。任何幫助將不勝感激
更新:我使用下面的說明
- name: debug block: - debug: var: distribution_release - debug: var: ansible_distribution_release - debug: var: "{{ ansible_facts.keys() }}" tags: show
並且find out
distribution_release
沒有定義,ansible_distribution_release
可以直接訪問,但是沒有ansible_distribution_release
ansible_facts中這樣的key,但是確實有一個key叫做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 }}"
查看記憶體事實