Ansible Dynamic Inventory的使用案例,可以集合CMDB生成

ansible有个hosts文件,这个文件默认是静态的 使用是,我们需要编辑相关主机或者主机组变量什么的,官方的Inventory 是通过调用外部脚本生成指定格式的json串
这样做的好处是 可以直接从数据库拉取相关信息,可以结合cmdb使用
官网的 dynamic inventory 介绍:
http://docs.ansible.com/intro_dynamic_inventory.html

  1. #!/usr/bin/env python  
  2.   
  3. import MySQLdb  
  4. import sys  
  5.   
  6. try:  
  7.         import json  
  8. except ImportError:  
  9.         import simplejson as json   
  10.   
  11. def grouplist():  
  12.         test = MySQLdb.connect(db=’ince’,host=’172.16.10.54′,user=’python_dev’,passwd=’python_dev’,charset=’utf8′)  
  13.         inventory = {}  
  14.         inventory[‘local’] = [ ‘127.0.0.1’ ]  
  15.         cur = test.cursor()  
  16.         cur.execute(“select type,name from hosts”)  
  17.         for row in cur.fetchall():  
  18.                 group = row[0]  
  19.                 if group is None:  
  20.                         group = ‘ungrouped’  
  21.                 if not group in inventory:  
  22.                         inventory[group] = {  
  23.                                 ‘hosts’ : []  
  24.                         }  
  25.                 inventory[group][‘hosts’].append(row[1])  
  26.         cur.close()  
  27.         print json.dumps(inventory,indent=4)  
  28.   
  29.   
  30. if __name__==’__main__‘:  
  31.         grouplist()  
  32.   
  33. —–   
  34. 执行上面脚本,会生成如下结果的主机和组信息,是不是和我们想要的是一样的…..  
  35. {  
  36.     “ungrouped”: {  
  37.         “hosts”: [  
  38.             “172.16.10.251”  
  39.         ]  
  40.     },   
  41.     “db”: {  
  42.         “hosts”: [  
  43.             “172.16.10.54”  
  44.         ]  
  45.     },   
  46.     “app”: {  
  47.         “hosts”: [  
  48.             “172.16.10.55”  
  49.         ]  
  50.     },   
  51.     “local”: [  
  52.         “127.0.0.1”  
  53.     ]  
  54. }