Python调用ansible API系列(一)获取资产信息
你想让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()