1.Ansible Inventory 介紹;python
Ansible Inventory 是包含靜態 Inventory
和動態 Inventory
兩部分的,靜態 Inventory 指的是在文件中指定的主機和組,動態 Inventory 指經過外部腳本獲取主機列表,並按照 ansible 所要求的格式返回給 ansilbe 命令的。這部分通常會結合 CMDB 資管系統、雲計算平臺等獲取主機信息。因爲主機資源通常會動態的進行增減,而這些系統通常會智能更新。咱們能夠經過這些工具提供的 API 或者接入庫查詢等方式返回主機列表。mysql
2.mysql數據結構以下;sql
3.本章節演示從mysql數據做爲數據源生成動態ansible 主機;數據庫
#!/usr/bin/env python36 def commmysql(): import mysql.connector import json mydb = mysql.connector.connect( host="192.168.1.23", # 數據庫主機地址 user="root", # 數據庫用戶名 passwd="123456", database="test" ) mycursor = mydb.cursor() mycursor.execute(" select host,`group` from ansible_hosts;") #mycursor. myresult = mycursor.fetchall() data = dict() #####查詢出group分組並去重############# groups = list(set([i[1].decode() for i in myresult])) data["all"] = {"children": groups} data["_meta"] = {"hostvars": {}} for group in groups: data[group] = dict() data[group]["hosts"] = list() for x in myresult: if x[1].decode("utf-8") == group: data[group]["hosts"].append(x[0].decode("utf-8")) return json.dumps(data,indent=3) def main(): from optparse import OptionParser parse = OptionParser() parse.add_option("-l", "--list", action="store_true", dest="list", default=False) (option, arges) = parse.parse_args() if option.list: print(commmysql()) else: print("abc") if __name__ == '__main__': from optparse import OptionParser parse = OptionParser() parse.add_option("-l", "--list", action="store_true", dest="list", default=False) (option, arges) = parse.parse_args() if option.list: print(commmysql()) else: print("test")
4.數據格式結果以下;json
5.ansible 執行動態主機以下;數據結構