您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
inventory(inventory1)
交换机,脚本,插件inventory(inventory1)
发布时间:2016-12-08加入收藏来源:互联网点击:
很多朋友想了解关于inventory的一些资料信息,下面是小编整理的与inventory相关的内容分享给大家,一起来看看吧。
版权声明:我已加入“维权骑士”的版权保护计划,知乎专栏“网路行者”下的所有文章均为我本人(知乎ID:弈心)原创,未经允许不得转载。
如果你喜欢我的文章,请关注我的知乎专栏“网路行者”, 里面有更多像本文一样深度讲解计算机网络技术的优质文章。
前几天有位知乎读者私信问我如何在Nornir的脚本中将一台设备的hostname, model, 序列号等信息取出并打印出来。
这个问题涉及到Nornir中十分重要的一个插件:Inventory,本篇就来讲下如何通过Inventory来获取上述读者提到的数据并将它们打印出来。
什么是Inventory?Inventory是Nornir中最重要的插件之一,用来管理由Nornir操控的网络设备,记录这些设备的IP地址、SSH登录用户名和密码、OS版本、分组等等以及其他一些可选的信息。Nornir本身自带了一个叫做SimpleInventory的插件来管理设备,SimpleInventory插件由hosts.yaml, groups.yaml以及defaults.yal三个yaml文件组成,是的,我在第一篇Nornir教程《弈心:网络工程师的Python之路 -- Nornir3.0.0》中已经重点介绍过这三个yaml文件的使用方法和作用,相信大家对它们不会感到陌生。
首先回顾一下前面几个实验中用到的hosts.yaml文件中的内容:
这里可以看到我在hosts.yaml中保存了4台交换机的信息,本篇实验就来讲下如何在Nornir脚本中按需将上面host.yaml各个交换机对应的数据取出并打印出来。
实验12:使用Nornir3.0.0 + Inventory获取设备的参数本文是Nornir3.0.0的系列教程,本篇的实验是该系列的第12个实验。
实验平台:
本文承接《弈心:网络工程师的Python之路 -- Nornir3.0.0》的内容,还是老规矩:一台CentOS 8主机(192.168.2.1)上跑Nornir,下面连上5台试验用的虚拟三层思科交换机IP从192.168.2.11到192.168.2.15。
实验目的:
学习如何使用Nornir的inventory来获取hosts.yaml中保存的设备的参数,这里我们将提取出交换机SW1对应的name, hostname, username, password, platform, groups, data等参数。
实验代码:
为了向大家演示如何通过inventory插件获取hosts.yaml中设备对应的参数,这里我们要用到实验11中讲到的ipdb。首先创建一个名为nornir12.py的脚本文件,然后放入下列代码:
import ipdbfrom nornir import InitNornirfrom nornir_netmiko import netmiko_send_commandfrom nornir_utils.plugins.functions import print_resultnr = InitNornir(config_file='config.yaml')ipdb.set_trace()运行脚本后直接进入ipdb解释器,这里我们通过InitNornir()将Nornir初始化并将它赋值给了nr这个变量。要使用inventory插件很简单,只需输入nr.inventory.hosts即可看到hosts.yaml中保存的4个交换机的名称(sw1, sw2, sw3, sw4),而从大括号可以判断出nr.inventory.hosts返回的值为一个字典:
既然是字典,那我们就可以通过键名来获取对应的值,这里进一步输入nr.inventory.hosts['sw1']后即得到了交换机sw1对应的值,而通过type()函数我们可以看到该值的数据类型为Nornir特有的nornir.core.inventory.Host类型:
针对该数据类型我们可以直接调用hosts.yaml中对应的参数来获取相应的值,举例如下:
这里我们可以查看hosts.yaml,对上面的返回的值一一做对比验证:
这里需要注意nr.inventory.hosts['sw1'].groups返回的值的类型为列表,而nr.inventory.hosts['sw1'].data返回的值的类型为字典,我们还可以通过索引号和键名继续对它们包含的数据和元素做过滤,这里留给大家自行尝试。
如果要获取其他交换机的数据,则只需将nr.inventory.hosts['sw1']中的sw1替换成sw2、sw3等等即可,是不是很简单明了?
接下来我们将脚本nornir12.py稍作修改,将sw1的各项参数全部通过inventory打印出来,
import ipdbfrom nornir import InitNornirfrom nornir_netmiko import netmiko_send_commandfrom nornir_utils.plugins.functions import print_resultnr = InitNornir(config_file='config.yaml')#ipdb.set_trace()print (nr.inventory.hosts['sw1'].name)print (nr.inventory.hosts['sw1'].hostname)print (nr.inventory.hosts['sw1'].username)print (nr.inventory.hosts['sw1'].password)print (nr.inventory.hosts['sw1'].platform)print (nr.inventory.hosts['sw1'].groups)print (nr.inventory.hosts['sw1'].data)运行脚本看效果:
下期文章将介绍Nornir中Task的使用方法。
本文到此结束,希望对大家有所帮助呢。
上一篇:同工不同酬(同工不同酬案例)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |