Python之 ansible 動態Inventory 腳本;

1.Ansible Inventory  介紹;python

Ansible Inventory 是包含靜態 Inventory動態 Inventory 兩部分的,靜態 Inventory 指的是在文件中指定的主機和組,動態 Inventory 指經過外部腳本獲取主機列表,並按照 ansible 所要求的格式返回給 ansilbe 命令的。這部分通常會結合 CMDB 資管系統、雲計算平臺等獲取主機信息。因爲主機資源通常會動態的進行增減,而這些系統通常會智能更新。咱們能夠經過這些工具提供的 API 或者接入庫查詢等方式返回主機列表。mysql


2.mysql數據結構以下;sql


image.png



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


image.png


5.ansible 執行動態主機以下;數據結構


image.png

相關文章
相關標籤/搜索