管理主機清單變量
使用變量的原則
變量創建的位置
- 角色的defaults或vars目錄
- 主機清單
- playbook或主機清單所在位置的子目錄
group_vars
和host_vars
- play或角色或任務
無論在哪創建變量,都應該遵守一些規則:
- 保持簡潔
- 不要重復造輪子。不要反復在多個位置創建相同的變量。
- 把變量組織到小的、可讀性強的文件中
變量的合并和優先級
主機清單變量優先級從低到高
- 角色defaults中的變量
- 主機清單中定義的組變量
- inventory目錄下
group_vars/all
目錄中為主機組all定義的組變量 - playbook目錄下
group_vars/all
目錄中為playbook定義的組變量 - inventory目錄下
group_vars
目錄中為其他主機組定義的組變量 - playbook目錄下
group_vars
目錄中為playbook定義的組變量 - 主機清單中定義的主機變量
- 在主機清單的
host_vars
目錄中創建的變量 - 在playbook的
hosts_vars
目錄中創建的變量 - facts變量和緩存變量
play變量的優先級
從低到高依次是:
- play中通過vars聲明的變量
- play中通過
vars_prompt
獲取的變量 - play中通過
vars_files
聲明的變量 - 角色的vars目錄中聲明的變量
- block中通過vars聲明的變量
- task中通過vars聲明的變量
- 通過
include_vars
加載的變量 - 通過
set_fact
模塊創建的變量和通過register注冊的變量 - 當加載角色時導入的參數,或通過
include_role
模塊加載的參數 - 通過
include_tasks
模塊設置的變量 - 通過
ansible-playboo -e
指定的額外變量
將變量從主機清單中分離出來
- 建議的組變量結構
[user@demo project3]$ tree -F group_vars
group_vars/ # 組變量定義目錄
├── all/ # 組all
│ └── common.yml # 定義所有組都需要的變量
├── db_servers/ # 組db_servers
│ ├── mysql.yml # 定義mysql相關的變量,文件名隨意
│ └── firewall.yml
├── lb_servers/
│ ├── firewall.yml
│ ├── haproxy.yml
│ └── ssl.yml
└── web_servers/├── firewall.yml├── webapp.yml└── apache.yml
特殊的主機變量
ansible_connection
:用于指定連接方式(ssh、smart、local)。ansible_host
:當連接到被管理的主機時,使用的真實的IP地址或FQDN。ansible_port
:遠程主機的端口號。ansible_user
:遠程連接時采用的用戶。
用于識別主機的變量
inventory_hostname
:主機清單中的主機名ansible_host
:主機的真正IP地址,或FQDNansible_facts['hostname']
:事實變量取得的主機名- `ansible_facts[‘fqdn’]:事實變量取得的FQDN