你想讓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()

