0
点赞
收藏
分享

微信扫一扫

自动化运维工具Ansible(17)Inventory scripts

脚本限制条件

脚本必须接受`--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

自动化运维工具Ansible(17)Inventory scripts_linux

举报

相关推荐

0 条评论