動態配置文件
即從外部獲取配置文件,在把ansible.cfg文件中inventory的定義值改成一個執行腳本
腳本必須支持兩個參數:
- --list或者-l,顯示所有的主機以及主機組的信息(JSON格式)。
- --host或者-H,這個參數后面需要指定一個host,運行結果會返回這台主機的所有信息(包括認證信息、主機變量等),也是JSON格式。
1、腳本
vim /tmp/p.py #!/usr/bin/python import sys import json import argparse def lists(): D = {} L=[ "10.240.1.13", "10.240.1.14","10.240.1.15" ] hosts={'hosts': L} D['docker'] = hosts return json.dumps(D,indent=4) def hosts(name): r = {'ansible_ssh_pass': 'xxxx'} return json.dumps(r) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-l', '--list', help='hosts list', action='store_true') parser.add_argument('-H', '--host', help='hosts vars') args = vars(parser.parse_args()) if args['list']: print lists() elif args['host']: print hosts(args['host']) else: parser.print_help() [root@han2 ~]# python /tmp/p.py --list { "docker": { "hosts": [ "10.240.1.103", "10.240.1.104", "10.240.1.105" ] } }
2、修改配置文件
vim /etc/ansible/ansible.cfg inventory = /tmp/p.py
3、使用動態配置
[root@han2 ~]# python /tmp/p.py --host 10.240.1.103 {"ansible_ssh_pass": "123.com"} [root@han2 ~]# ansible all -m ping 10.240.1.103 | SUCCESS => { "changed": false, "ping": "pong" } 10.240.1.104 | SUCCESS => { "changed": false, "ping": "pong" } 10.240.1.105 | SUCCESS => { "changed": false, "ping": "pong" }