一. 引文:
在实际工作中,不同的业务会有不同的服务机器(当然,量小的话也有多个业务跑在同一机器上),而不同的业务,所使用的服务组件也大部分会有差异性, 当有多个业务, 每个业务又有大量服务器时,就可以针对不同的业务服务器,划分在不同的业务分组(其实就是自定义的分组)中,在批量操作时,就可以根据不同的分组来进行不同的批量操作(如group1分组批量安装Apache,group2分组批量安装tomcat等),ansible中的inventory就是定义/记录各分组的主机info的一个组件。
二. 概述:
ansible默认的inventory是一个静态的INI格式文件(/etc/ansible/hosts),也可以通过ANSIBLE_HOSTS环境变量指定或者运行ansible和ansible-playbook时用-i 参数指定。
三. 定义方法:
[pass]
10.5.11.18 ansible_ssh_pass='password' #定义主机/ip 使用内置变量定义SSH登陆密码
[group]
10.5.11.18:23 #定义ssh的端口(更改默认端口22的情况下使用)
[group2]
test11-1[1:20].com #定义数字范围匹配1..20之间
test[a:z].com #定义字母范围匹配a..z之间
[test]
10.5.11.1[1:2] #定义范围1..2
[test:vars] #针对test组定义了端口及超时的内置变量
http_port='22'
halon_system_timeout=30
[test2:children] #定义了一个test2的组,包含test组的主机
test
测试:
如果在线上有大量项目分组的情况下,所有inventory定义在一个文件中,是很不方便管理的,在修改时,还有可能造成误操作, 解决办法就是对其进行拆解,本人比较倾向于按照项目拆分,一个项目一个文件,这样方便管理。
在使用分拆方式前,先看下多个主机组在同一文件中定义的问题:
# cat aaaa
[pass]
10.5.11.18:23 #默认端口22,故意定义为23,会报错
[test]
10.5.11.18 #这个按照默认设置
10.5.11.1[1:2]
执行结果:
可发现当我pass组中定义了一个错误的参数,尽管执行的是test分组,但认为报错。
接下来把pass和test分别放在两个不同文件,需要修改配置文件指定inventory路径为目录或使用内置变量:
# export ANSIBLE_HOSTS=/tmp/hosts/
# cat /tmp/hosts/aaa /tmp/hosts/bbb
[pass]
10.5.11.18:23
[test]
10.5.11.18:22
10.5.11.1[1:2]
查看执行结果:
(也可通过--list-hosts查看一个分组下的主机[# ansible test -i /tmp/hosts/ --list-hosts])
故: 建议按分组拆分!