ansible动态inventory获取主机列表

ansible,默认是调用/etc/ansible/hosts配置的主机组,同时我们也可以通过 -i 参数指定我们自己的hosts文件配置

hosts配置文件如下:

ansible动态inventory获取主机列表_第1张图片

{
    "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指定我们的组名

结果:

ansible动态inventory获取主机列表_第2张图片


附:我自己遇到的一个问题,在windos下写好的脚本传到linux上面,执行提示找不到文件或目录,其实这个问题是文件编码的问题

vi inv.py   输入:set ff   可以查看该文件的编码

ansible动态inventory获取主机列表_第3张图片

可以看到fileformat=dos 我们需要通过 :set ff =unix  或set fileformat = unix  改变文件的编码就可以解决该问题



你可能感兴趣的:(Python)