ansible,默认是调用/etc/ansible/hosts配置的主机组,同时我们也可以通过 -i 参数指定我们自己的hosts文件配置
hosts配置文件如下:
{
"zbxpython":
{
"host":['SV0390','SSBSV00116','SV0379']
}
"zbxadd":['10.12.19.80','10.12.19.82','10.12.19.83']
}
上面的hosts文件对应的json字符串就是这样的,zbxpython为组名,下面[ ] 内为机器列表
简单例子:
脚本文件:inv.py
#!/usr/bin/python
# encoding:utf-8
import json
aa={
"zbxpython":
{
"host":['SV0390','SSBSV00116','SV0379']
},
"zbxadd":['10.12.19.80','10.12.19.82','10.12.19.83']
}
print json.dumps(aa)
#!/usr/bin/python 表示指定/usr/bin/python来执行此程序,而不需用python inv.py 这种方式执行,有了这句直接可以用./inv.py就可以运行该文件,但必须赋予该文件可执行权限
其实主要就是拼接好指定的字符串,然后在用json.dumps(aa)输出就行,
ansible执行命令:
[autorun@monitor001 ansible]$ ansible -i inv.py abxadd -m shell -a "hostname"
其中
zbxadd指定我们的组名
结果:
附:我自己遇到的一个问题,在windos下写好的脚本传到linux上面,执行提示找不到文件或目录,其实这个问题是文件编码的问题
vi inv.py 输入:set ff 可以查看该文件的编码
可以看到fileformat=dos 我们需要通过 :set ff =unix 或set fileformat = unix 改变文件的编码就可以解决该问题