Ansible 變量


1. 變量來源

  • inventoryfile中定義
  • playbook中定義
  • include文件和角色中定義變量
  • 系統facts  ansible hostname -m setup
  • local facts

2. 變量的使用

  {{ ansible_eth0["ipv4"]["address"] }}  或者 {{ ansible_eth0.ipv4.address }}.  復雜變量可以像字典或者熟悉一樣訪問. 效果一樣

3. 本地變量

  ansible hostname -m setup 可以獲取固定的系統facts,  在playbook中設置gather_fact:yes, playbook會自動獲取遠程機器的facts.  但是ansible也支持用戶自定義facts

  如果目標機器上有/etc/ansible/facts.d/目錄, 在該目錄下有.fact結尾的json ini 或者可執行並返回json過的腳本, 都可以作為本地便變量

  例如

 /etc/ansible/facts.d/preferences.fact:

[general]
asdf=1
bar=2

 

   使用變量  {{ ansible_local.preferences.general.asdf }}

4. 魔法變量

  • hostvars 可以讓你調用其他host的變量和facts,  即使你沒有在這個機器上執行過playbook, 你仍然可以訪問變量, 但是不能訪問facts. 例如: {{ hostvars['test.example.com']['ansible_distribution'] }}
  • group_names 當前host所在的group的組名列表.   包括其父組
  • groups 所有組包括組中的hosts
  • inventory_hostname 配置在inventory文件中當前機器的hostname
  • play_hosts 執行當前playbook的所有機器的列表
  • inventory_dir inventory文件的路徑
  • inventory_file inventory文件的路徑和文件名
  • role_path 當前role的路徑

5. 變量作用域

  • 全局作用域:  設置在config, 環境變量, 和命令行中的變量
  • play:  作用於play和包含的structure, 變量, role中的default和vars
  • host:  inventory, facts和register產生的變量, 只作用於某個host

  Note 1:  子組的變量會覆蓋父組的變量,  host的變量會覆蓋其組的變量

  Note 2:  變量優先級

      roles/x/defaults/main.yml -> inventory file  ->  roles/x/vars/main.yml -> 調用role時的參數 ->  role play 中的變量 -> 執行命令-e 傳入的變量.

6. fact緩存

  如果想在一個host上訪問另一個host的fact 必須設置gathering setting to smart, 否則,如果你想訪問另一個機器的fact, 那你必須在另外一台機器上執行過gather_fact.

  inventory 里面聲明的變量是否和上面有同樣的要求, 待驗證-???

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM