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

雷横
• 阅读 7071

注:本文作者是 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,你将看到从每台主机采集到的信息。

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

什么能被采集

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

  • 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 就行。

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

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
4年前
List的Select 和Select().tolist()
List<PersondelpnewList<Person{newPerson{Id1,Name"小明1",Age11,Sign0},newPerson{Id2,Name"小明2",Age12,
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这