ansible-inventory定义

一. 引文:

   在实际工作中,不同的业务会有不同的服务机器(当然,量小的话也有多个业务跑在同一机器上),而不同的业务,所使用的服务组件也大部分会有差异性, 当有多个业务, 每个业务又有大量服务器时,就可以针对不同的业务服务器,划分在不同的业务分组(其实就是自定义的分组)中,在批量操作时,就可以根据不同的分组来进行不同的批量操作(如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])

故: 建议按分组拆分!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值