Ansible

ansible:為什麼我不能使用 {{ ansible_facts′ansibl和distributionr電子書____和′′一種ns一世bl和d一世s噸r一世b在噸一世這nr和l和一種s和′‘ansible_distribution_r…

  • January 20, 2022

我有像這樣在 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_releaseunder的屬性ansible_facts

任何幫助將不勝感激


更新:我使用下面的說明

- name: debug                                                                                                                                                                                                      
 block:                                                                                                                                                                                                           
   - debug:                                                                                                                                                                                                       
       var: distribution_release                                                                                                                                                                        

   - debug:                                                                                                                                                                                                       
       var: ansible_distribution_release                                                                                                                                                                          

   - debug:                                                                                                                                                                                                       
       var: "{{ ansible_facts.keys() }}"                                                                                                                                                                          
 tags: show       

並且find outdistribution_release沒有定義, ansible_distribution_release可以直接訪問,但是沒有ansible_distribution_releaseansible_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 }}"

查看記憶體事實

引用自:https://serverfault.com/questions/1019859