Nornir ipdb:如何检查复杂的结构

Python附带了一个称为pdb的调试器。python调试器非常强大,确实有助于对代码进行故障排除。您可以在此处找到官方文档。ipdb建立在ipython和pdb的基础上,为用户提供了更多的交互体验。

这个方法不是很广泛,只是一个非常快速而肮脏的演示,以展示其某些功能以及如何在nornir中使用它。它没有假定以前的知识,但也没有在解释上花费太多,因此希望用户提供足够的资料以进行进一步的研究。

安装ipdb

首先,您需要安装ipython,然后按照官方指南进行操作,然后需要安装ipdb。您可以通过pip安装后者:

pip install ipdb

检查结果

为了演示起见,我编写了一些返回结果的代码。该代码并不重要,但是它的作用是:

  1. 读取一个Yaml文件,其中包含一堆我们要在设备上配置的用户
  2. 连接到几个网络设备并配置用户
  3. 检查哪些用户已经配置,我们需要哪些用户并计算两个列表;一个包含我们需要配置的用户的列表,另一个包含我们需要删除的用户的列表。
  4. 最后,我们将这些列表传递给模板,然后生成一些配置。

让我们从获得结果后立即插入一个断点开始(第56行):

../_images/1.png

如果执行脚本,我们将在该代码点获得一个shell。

../_images/2.png

现在,我们可以开始使用python代码来了解对象的工作原理:

../_images/3.png

上面的输出表明该对象是类型的AggregatedResult。该文档肯定会说明它是如何工作的,但是我们可以继续使用它。输出还表明该对象可能是带有键spine00.bma和的类似于字典的对象spine01.bma。让我们继续挖掘。

../_images/4.png

有趣的是,您可以按<tab>以获得自动补全功能。在这种情况下,r.<tab>向我们展示了该对象提供的可用方法。看到,,等方法keysitems再加上的输出,print(r)似乎可以证实我们的理论,该对象可能是类似dict的对象。

让我们测试一下理论:

../_images/5.png

好吧,看来我们是对的。请注意,我们提取了一个MultiResult属于密钥的,spine00.bma并将其分配给变量以供进一步检查。这个新MultiResult对象看起来像一个列表。让我们再次使用<tab>来查看提供哪些方法:

../_images/6.png

有了方法,如appendextend等等,这肯定看起来像一个列表。根据先前的输出,该元素1似乎是task的结果napalm_get,让我们看看是否可以提取它:

../_images/7.png

太好了,现在ng_result有了运行task的结果napalm_get。让我们继续挖掘:

../_images/8.png

瞧,这个新的对象有类似的属性changedresultdiff,等等,所以看起来我们终于设法挖了我们的目标,并找出如何得到我们想要的东西。下一个  以前

觉得文章有用?

点个广告表达一下你的爱意吧 !😁