你想讓ansible工作首先就需要設定資產資訊,那麼我們如何透過使用Python調取Ansible的API來獲取資產資訊呢?
要提前準備一個hosts檔案
獲取組或者主機
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from collections import namedtuple # 核心類 # 用於讀取YAML和JSON格式的檔案 from ansible.parsing.dataloader import DataLoader # 用於儲存各類變數資訊 from ansible.vars.manager import VariableManager # 用於匯入資產檔案 from ansible.inventory.manager import InventoryManager # InventoryManager類的呼叫方式 def InventoryManagerStudy(): dl = DataLoader() # loader= 表示是用什麼方式來讀取檔案 sources=就是資產檔案列表,裡面可以是相對路徑也可以是絕對路徑 im = InventoryManager(loader=dl, sources=["hosts"]) # 獲取指定資產檔案中所有的組以及組裡面的主機資訊,返回的是字典,組名是鍵,主機列表是值 allGroups = im.get_groups_dict() print(allGroups) # 獲取指定組的主機列表 print(im.get_groups_dict().get("test")) # 獲取指定主機,這裡返回的是host的例項 host = im.get_host("172.16.48.242") print(host) # 獲取該主機所有變數 print(host.get_vars()) # 獲取該主機所屬的組 print(host.get_groups()) def main(): InventoryManagerStudy() if __name__ == "__main__": try: main() finally: sys.exit()
獲取變數
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from collections import namedtuple # 核心類 # 用於讀取YAML和JSON格式的檔案 from ansible.parsing.dataloader import DataLoader # 用於儲存各類變數資訊 from ansible.vars.manager import VariableManager # 用於匯入資產檔案 from ansible.inventory.manager import InventoryManager # VariableManager類的呼叫方式 def VariablManagerStudy(): dl = DataLoader() im = InventoryManager(loader=dl, sources=["hosts"]) vm = VariableManager(loader=dl, inventory=im) # 必須要先獲取主機,然後查詢特定主機才能看到某個主機的變數 host = im.get_host("172.16.48.242") # 動態新增變數 vm.set_host_variable(host=host, varname="AAA", value="aaa") # 獲取指定主機的變數 print(vm.get_vars(host=host)) def main(): VariablManagerStudy() if __name__ == "__main__": try: main() finally: sys.exit()