查看: 88|回复: 0

《网络工程师的Python之路》(nornir官网探寻2-2,Tutorial ...

[复制链接]

1

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-3-10 17:22:46 | 显示全部楼层 |阅读模式
哈喽,大家好,我又来了。本篇继续推进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 'nornir.core.Nornir'>
>>>4.2 字典形式

如果不使用独立的配置文件,我们可以将配置信息写在Python脚本中。
from nornir import InitNornir
nr = InitNornir(
    runner={
        "plugin": "threaded",
        "options": {
            "num_workers": 100,
        },
    },
    inventory={
        "plugin": "SimpleInventory",
        "options": {
            "host_file": "inventory/hosts.yaml",
            "group_file": "inventory/groups.yaml"
        },
    },
)其实就是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="config.yaml",
    runner={
        "plugin": "threaded",
        "options": {
            "num_workers": 50,
        },
    },
)这里等于inventory取配置文件config.yaml内容,而runner由参数传输。
当年这么运行起来以后,可以通过对象方法提取这些信息。
>>> nr.config.runner.options["num_workers"]
50
>>> nr.config.inventory.plugin  
'SimpleInventory'这块大家可以多多尝试一下,可以配合type、print等内置函数进行调测,慢慢摸透其nornir启动及初始化需要调动的资源和返回的信息形式。
四' 本文总结

我们可以不按面向对象的思路来编写脚本代码,但我们完全可以按照面向对象的思维来理解轮子的启动,初始化及方法调用,属性获取等。启动后的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月于广东汕头
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|多点娱乐

GMT+8, 2025-10-20 04:38 , Processed in 0.142101 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表