ansible进阶02
管理主机清单变量
使用变量的原则
变量创建的位置
- 角色的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