通过从命令行提供多个清单参数或通过配置多个清单参数,可以同时定位多个清单源(目录,动态清单脚本或清单插件支持的文件)
这对于具有多环境的状态下非常有帮助,比如生产环境和开发环境。
从命令行定位两个源
ansible-playbook get_logs.yml -i development -i production
使用目录汇总清单源
- 可以通过组合目录下的多个清单来源和来源类型来创建清单。
- 这对于组合静态和动态主机并将它们作为一个清单进行管理很有用。
- 目录中仅支持如下扩展名:.yaml .yml .json
以下清单结合了清单插件源,动态清单脚本和具有静态主机的文件
inventory/
aliyun.yml # 清单插件,获取阿里云的主机
dynamic-inventory.py # 使用动态脚本添加额外的主机
static-inventory # 添加静态主机和组
group_vars/
all.yml # 给所有的主机指定变量
命令行里使用这个清单目录
ansible-playbook example.yml -i inventory
可以在配置文件中配置
假设这个清单目录的绝对路径是: /etc/ansible/inventory
[defaults]
inventory = /etc/ansible/inventory
要注意变量覆盖
- 如果存在与其他库存来源之间的变量冲突或组依赖关系,则控制库存来源的合并顺序可能很有用。
- 根据文件名按字母顺序合并清单,因此可以通过在文件前添加前缀来控制结果:
inventory/
01-aliyun.yml
02-dynamic-inventory.py
03-static-inventory
group_vars/
all.yml
测试
目录结构
[root@localhost inventory]# tree
.
├── 01-static.yml
└── 02-static.yml
文件内容
[root@localhost inventory]# cat 01-static.yml
[dbservers]
192.168.19.[104:110]
[allservers:children]
dbservers
[allservers:vars]
name = dbserversip
[root@localhost inventory]# cat 02-static.yml
[webservers]
192.168.19.103
[allservers:children]
webservers
[allservers:vars]
name = webserversip
验证变量的值
[root@localhost home]# ansible all -i inventory -m debug -a "var=name"
192.168.19.104 | SUCCESS => {
"name": "webserversip"
}
192.168.19.105 | SUCCESS => {
"name": "webserversip"
}
192.168.19.106 | SUCCESS => {
"name": "webserversip"
}
192.168.19.107 | SUCCESS => {
"name": "webserversip"
}
192.168.19.108 | SUCCESS => {
"name": "webserversip"
}
192.168.19.109 | SUCCESS => {
"name": "webserversip"
}
192.168.19.110 | SUCCESS => {
"name": "webserversip"
}
192.168.19.103 | SUCCESS => {
"name": "webserversip"