使用 SNMP 从网络硬件采集 Ansible facts

注:本文作者是 Patrick Ogenstad,原文是 Gathering Ansible facts from network devices using SNMP

注:这篇博客里面的文章大部分是关于网络的,所以网络工程师多看看可以。SA 有时候也会协助网络工程师处理收集网络硬件的信息,所以也是需要的。

注:我只捡重要的说,详细看强力推荐原文。

一个 Ansible SNMP 模块

当我们需要管理网络硬件的时候,但是大部分的网络硬件是不支持安装客户端或者是允许 Python 脚本的,所以我们就需要使用 SNMP 来收集网络硬件的信息。本文就是讲解结合 Ansible 来采集网络硬件的信息,作者自己使用 Python 写了一个 SNMP 的采集模块。

下面是两个你可以在一个 playbook 中设置的任务的例子:

# Gather facts with SNMP version 2
- snmp_facts: host={{ inventory_hostname }} version=2c community=public
 Gather facts using SNMP version 3
- snmp_facts:
host={{ inventory_hostname }}
version=v3
level=authPriv
integrity=sha
privacy=aes
username=snmp-user
authkey=abc12345
privkey=def6789

该模块要求 pysnmp 安装在你的 Ansible 服务器上。为了使用这个模块你可以添加它的目录到 $ANSIBLE_LIBRARY 变量,或者是为这个模块在当前的 library 目录创建一个子目录,通常是 /usr/share/ansible

使用这些 facts

你或许会想:“这实际没有做任何事情!”这是正确的。这个模块是一个收集模块,并且仅仅从你的网络硬件收集信息。其他模块将被需要利用这些使用 snmp_facts 收集的信息。比如你可以在 playbooks 中使用这些 facts 与 Jason Edelman 已经做的工具一起工作。另外一个选择就是同 Ansible 模块系统一起使用这些信息,为了构建和修改配置文件。

如果你使用 ansible / ansible-playbook 的详细选项 -v,你将看到从每台主机采集到的信息。

ansible-snmp-facts-verbose.png

什么能被采集

在该模块的第一版本我采集了:

  • sysDescr – System Description
  • sysObjectId – System Object ID, uniquely identifies the device class
  • sysUpTime – Basic counter (just in seconds in this version)
  • sysContact – SNMP Contact
  • sysName – System Name
  • sysLocation – SNMP Location
  • All IPv4 addresses
  • Interfaces – Name, Description, Speed, Physical address, admin and operational status

snmp_facts 的未来计划

有很多东西可以通过 SNMP 采集到 Ansible facts。仅举几件事情,我们有 CDP 或 LLDP 的邻居信息,路由表,NAT 设置,OSPF 邻居,IPv6 地址,mac 地址表,VRF 信息等等。因为对于每个硬件类型来说 sysobjectid 是唯一的,未来的一个选项可能就是首先运行一个集合仅仅只获取基本的信息,然后在一个 playbook 通过一个查找函数传递 sysobjectid 给 Jinja 模板,为了取回设备类别。这样将有可能运行其他集合,但只针对特定设备。比如你想对你所有的交换机来使用这个收集 LLDP 信息,但是你有一些 Cisco 交换机和一些华为交换机。问题就是华为不使用开放的 LLDP-MIB,但是使用 HUAWEI-LLDP-MIB 代替。假设对于 lldp 我们有一个模块选项,它通过 true/false/huawei 选项来确定是否是华为设备。这里你可以手工的组织你的在两个组和两个任务。或者你可以第一次运行一个收集任务来获取 sysobjectid,做一个查询来获取设备类别。设备类别将被注册到一个变量,你可以在以下的任务中动态使用。

该模块的 github

有需求的可以通过 fork 他这个模块然后根据自己的业务需求来改动,会 Python 和 Ansible 就行。

比如我们可以通过这个模块然后格式化下数据存进数据库,然后定时取出来信息对比,同时版本库管理问题,当你做一个网络变更的时候,可以新旧版本对比,看自己变更了哪些东西,如果出错回滚也方便,一键回滚。


yexiaoxiaobai
刀锋上的跳舞的 SRE,喜爱 Perl, Python, Go,常被正则婊戏耍,热衷于鼓捣一些小玩具。

就是不告诉你 O(∩_∩)O哈哈~。

4.8k 声望
873 粉丝
0 条评论
推荐阅读
K8S client-go Patch example
使用Patch方式更新K8S的 API Objects 一共有三种方式:strategic merge patch, json-patch,json merge patch。关于这三种方式的文字描述区别可看官方文档update-api-object-kubectl-patch。

yexiaobai2阅读 12.1k评论 1

什么是内网穿透?为什么使用内网穿透?
微信公众号的开发过程中,微信服务器和项目的后端会相互发送信息。如果需要测试,就必须保证项目可以被公网访问,但大多数情况下家庭网络都是经过了运营商层层 NAT 之后的网络,并没有公网IP,此时就需要使用内网...

LYX66663阅读 574

Ubuntu系统下的snmp安装配置
snmp(Simple Network Management Protocol,简单网络管理协议),该协议的实现以及应用是采用C/S模型的特殊模式:代理/管理站模型。

龚正阳1阅读 1.6k评论 1

Wireshark网卡无法找到或没有显示的问题
最近在处理公司内网域名解析的问题,发现配置好一个新域名在内网环境可以正常解析成内网IP,但使用深信服VPN却无法正常解析,并且其他域名使用深信服VPN可以正常解析,所以参考《内网域名解析配置和简单排错》排...

岚哲阅读 1.4k

集简云 x 中能科技 丨助力企业实现人财数字化建设
CLIS中能科技——中国领先锂电储能系统集成服务商;致力于为全球客户提供性能卓越,技术领先的储能产品;首创的CM-GTS产能模块全球快速迁移系统,帮助全球合作伙伴们快速构建本土化生产能力。

集简云阅读 1.1k

知乎推广无需API开发集成连接并打通金数据
运营人员需每天需要将知乎推广上产生的线索录入到金数据表单中,便于运营负责人查看并分配给相关的销售人员及时跟进,但人工手动同步数据费时费力,且易出错。此外,时效性不强导致线索无法实现快速响应。因此,...

集简云阅读 1.1k

KaiwuDB 安装配置
KaiwuDB 集群的安装配置,主要分为三个方面:安装前准备,配置参数详解Ansible自动化安装第一部分:安装前的准备KaiwuDB 相较于目前主流数据库(Oracle、Mysql等)在产品交付形式和安装部署方式上有很大的区别,...

KaiwuDB阅读 974

封面图

就是不告诉你 O(∩_∩)O哈哈~。

4.8k 声望
873 粉丝
宣传栏