|
哈喽,大家好,我又来了。本篇继续推进Nornir官方手册一点点,主要内容是初始化nornir对象。前面两篇文章,有读者反馈,我把原文直接引用过来,阅读体验比较一般。从本文开始,我就不复制原文了,而是直接翻译和表述我的理解,尽量贴合原文。请你看我的文章时,对照着原文去看,或者请直接去看官网原文。
〇、参考说明
本人写作的目录入口,如果不知道从何读起,建议从这篇《目录》开始,链接如下:
非常感谢 @弈心 王印老师在他的专栏文章中对Nornir历史故事做了介绍,同时精心编排了十几个教学实验带领我们快速把这个模块使用起来。链接如下:
手册原文连接:Initializing Nornir — nornir 3.1.1 documentation,对应的是这一块内容。

四、初始化 Nornir(Initializing Nornir )
启动nornir最简单的方式是使用函数InitNornir。通过InitNornir,配合配置文件或脚本代码,来启动nornir。
4.1 配置文件
我们来一份配置文件config.yaml。
---
inventory:
plugin: SimpleInventory
options:
host_file: "inventory/hosts.yaml"
group_file: "inventory/groups.yaml"
defaults_file: "inventory/defaults.yaml"
runner:
plugin: threaded
options:
num_workers: 100现在我们创建一个nornir对象。
from nornir import InitNornir
nr = InitNornir(config_file="config.yaml")此时你如果按照它这样弄,然后运行代码的话,是会报错的!不过我们根据提示,很快可以定位到问题。

我们把实验文件夹进行调整,参考其它实验的配置文件。《网络工程师的Python之路》(nornir实验1,nornir_napalm,Windows,华为)

这样脚本运行就不会有错误,我们也可以通过console方式来测试。
>>> nr = InitNornir(config_file="config.yaml")
>>> type(nr)
<class &#39;nornir.core.Nornir&#39;>
>>>4.2 字典形式
如果不使用独立的配置文件,我们可以将配置信息写在Python脚本中。
from nornir import InitNornir
nr = InitNornir(
runner={
&#34;plugin&#34;: &#34;threaded&#34;,
&#34;options&#34;: {
&#34;num_workers&#34;: 100,
},
},
inventory={
&#34;plugin&#34;: &#34;SimpleInventory&#34;,
&#34;options&#34;: {
&#34;host_file&#34;: &#34;inventory/hosts.yaml&#34;,
&#34;group_file&#34;: &#34;inventory/groups.yaml&#34;
},
},
)其实就是InitNornir调用时,传输参数不同而已,简单说就是换汤不换药!
我们顺着这个链接,看看InitNornir的初始化魔法方法就知道了。
nornir.__init__ — nornir 3.1.1 documentation

- config_file 默认值是空,str类型,如果调用则传递配置文件的路径,见2.1例子。
- **kwargs 字典解包,可根据这个类nornir.core.configuration.Config类传入对应的信息,见2.2例子。
这里如果你Python基础比较薄弱的话,可能有有点懵,不过没关系,你结合例子细细感受一下。
4.3 组合使用
除上述两种方式分别使用之外,我们也可以进它们进行组合使用。
from nornir import InitNornir
nr = InitNornir(
config_file=&#34;config.yaml&#34;,
runner={
&#34;plugin&#34;: &#34;threaded&#34;,
&#34;options&#34;: {
&#34;num_workers&#34;: 50,
},
},
)这里等于inventory取配置文件config.yaml内容,而runner由参数传输。
当年这么运行起来以后,可以通过对象方法提取这些信息。
>>> nr.config.runner.options[&#34;num_workers&#34;]
50
>>> nr.config.inventory.plugin
&#39;SimpleInventory&#39;这块大家可以多多尝试一下,可以配合type、print等内置函数进行调测,慢慢摸透其nornir启动及初始化需要调动的资源和返回的信息形式。
四&#39; 本文总结
我们可以不按面向对象的思路来编写脚本代码,但我们完全可以按照面向对象的思维来理解轮子的启动,初始化及方法调用,属性获取等。启动后的nornir对象就是一个“东西”,这个东西就有自己的方法和属性,我们即可使用一些诸如id、dir、 type、print等常规方法来摸索调试。
本文虽主要介绍了InitNornir的使用,但实际与nornir.core.configuration这一配置类也有很大的关系,链接如下:nornir.core.configuration — nornir 3.1.1 documentation

这里我们首次尝试了nornir的API文档,后续一些类和函数的详细介绍和使用方法,我们即可直接在这里查询。
好了,内容不多,希望通过本文,你可以把nornir初始化,启动起来!
我读过的书、用过的物(持续更新)
祝贺!你终于看完了!
我全开源写作,不设任何付费阅读内容,内容有疑问随时交流,文章反复打磨!
欢迎关注点赞收藏评论交流,如果觉得特别认可,可挑一篇最喜欢的打赏 1元 支持。感谢!
发布2023年02月于广东汕头
更新2023年02月于广东汕头 |
|