脚本限制条件
脚本必须接受`--list`和 `--host <hostname>` 参数
当使用单个 `--list` 参数调用脚本时,脚本必须输出到标准输出,就是输出到终端,其中包含要管理的所有组的JSON编码的哈希或字典。
每个组的值应该是包含每个主机列表,任何子组和潜在组变量的哈希或字典,或者仅是主机列表:
{
    "group001": {
        "hosts": ["host001", "host002"],
        "vars": {
            "var1": true
        },
        "children": ["group002"]
    },
    "group002": {
        "hosts": ["host003","host004"],
        "vars": {
            "var2": 500
        },
        "children":[]
    }
}如果组中的任何元素为空,则可以从输出中将其省略。
当使用 `host <hostname>` 参数(其中<hostname>是上面的主机)进行调用时,脚本必须打印一个空的JSON哈希/字典或含有这个主机变量的哈希/字典,以使其可用于模板和剧本。例如:
{
    "VAR001": "VALUE",
    "VAR002": "VALUE",
}打印变量是可选的。如果脚本不执行此操作,则应打印一个空的哈希或字典。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys       #调用模块
import json       #调用模块
import argparse   #argparse模块可以用来方便地读取命令行参数
def lists():  #定义函数
    dic = {}  #建立空字典
    host_list = [ '192.168.19.{}'.format(str(i)) for i in range(104,110) ]   #for循环4到10的主机地址列表
    hosts_dict = {'hosts': host_list}                                     #host_list形成hosts的字典
    dic['computes'] = hosts_dict  #静态文件中的组,在这里定义了主机信息,定义组名"computes"
    
    return json.dumps(dic,indent=4)   #json.dumps将一个Python数据结构转换为JSON
                                      #indent每层级缩进4个空格
def hosts(name):                      #创建hosts变量字典
    dic = {'ansibl_ssh_pass': '12345'}
    return json.dumps(dic)
if __name__ == '__main__':    #if条件 系统变量 __name__用于标识所在模块的模块名
                               确保只有单独运行该模块时,此表达式才成立,才可以进入此判断语法
                               
    parser = argparse.ArgumentParser()     #parser处理参数的模块
    parser.add_argument('-l', '--list', help='host list', action='store_true')  #添加"-l","--list"变量
    parser.add_argument('-H', '--host', help='hosts vars')              #添加"-H","--host" 变量    
    args = vars(parser.parse_args())                                #用来处理前面的写法
    if args['list']:
        print( lists() )     #有list参数就会打印list的值
    elif args['host']:       
        print( hosts(args['host']) ) #有host参数就会打印host的值
    else:
        parser.print_help() #都没有就会打印hep用法执行
py脚本放到inventory目录下
[root@localhost home]# ansible all -i inventory/ --list-host










