Ansible 動態配置文件


 

動態配置文件

即從外部獲取配置文件,在把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"
}    
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM