Linux运维-ansible-python开发-获取inventroy信息

在使用ansible的过程中,如果能结合python语言,则如虎添翼,带来更多的灵活性,实现更复杂的功能。以下代码使用python语言,获取inventory信息。

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
# 核心类
# 用于读取YAML和JSON格式的文件
from ansible.parsing.dataloader import DataLoader
# 用于导入资产文件
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.31.170.225")
    print(host)
    # 获取该主机所有变量
    print(host.get_vars())
    # 获取该主机所属的组
    print(host.get_groups())


def main():
    InventoryManagerStudy()

if __name__ == "__main__":
    try:
        main()
    finally:
        sys.exit()

以下代码用于定义变量信息,这些变量会传递给yml文件使用

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
# 核心类
# 用于读取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()
相关推荐
AAA@峥16 分钟前
Ceph RBD 块存储全解析:原理与实操汇总
运维·分布式·ceph
2301_7779983435 分钟前
Linux线程控制——从线程创建到线程分离(第三部分:线程等待 pthread_join)
linux·运维·服务器·c语言·c++
维核科技1 小时前
AI Agent从“玩具“进化成“劳动力“:2026年智能体商业化元年
运维·人工智能·服务器维修·gpu维修
谜之锋1 小时前
Linux 源码编译安装 net-snmp-5.9.1 并配置使用 SNMPv3
linux·运维·服务器·snmpv3
RuiZN1 小时前
Muduo---Channel类
运维·服务器·c++
一直在努力学习的菜鸟1 小时前
阿里云2G2核的服务器可以做什么?
linux·运维
ShineWinsu1 小时前
对于Linux:自定义协议(基于TCP)实现网络计算器的解析
linux·网络·c++·网络协议·tcp/ip·面试·网络计算器
可涵不会debug1 小时前
【LangChain系列】 零基础入门实战:从环境搭建到 LCEL 链式完整 Demo 详解
运维·服务器·langchain·vibe coding
tedcloud1232 小时前
Orca 部署指南:开源 AI 推理服务的 Linux 部署实践
linux·运维·服务器·人工智能·开源·自动化·excel
公众号:fuwuqiBMC2 小时前
(转自“服务器BMC”)服务器BMC芯片——AST2800
运维·服务器