ansible动态inventory获取主机列表

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

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  改变文件的编码就可以解决该问题



点这里可以跳转到人工智能网站

发表评论