初始化 Nornir

    InitNornir 可以使用配置文件、代码或者两者结合起来使用来初始化一个 Nornir 对象。

    先从配置文件开始看,下面是一个 Nornir 的配置文件

    1. # %load files/config.yaml
    2. ---
    3. inventory:
    4. plugin: SimpleInventory
    5. options:
    6. host_file: "files/inventory/hosts.yaml"
    7. group_file: "files/inventory/groups.yaml"
    8. defaults_file: "files/inventory/defaults.yaml"
    9. runner:
    10. plugin: threaded
    11. options:
    12. num_workers: 100
    1. [2]:
    1. from nornir import InitNornir
    2. nr = InitNornir(config_file="files/config.yaml")

    也可以不用配置文件,通过传参的方式来初始化 Nornir 对象,如下:

    1. [3]:

    或者两种方式混合使用:

      1. from nornir import InitNornir
      2. nr = InitNornir(
      3. config_file="files/config.yaml",
      4. runner={
      5. "plugin": "threaded",
      6. "options": {
      7. "num_workers": 100,
      8. },
      9. },
      10. )
      1. [5]:
      1. from pprint import pprint as print
      2. print(nr.dict())

      这里看到的是运行时指定的 data 参数和所有的主机信息,配置相关的信息则存储在 config 的 dict 方法里,这里可以看到包括默认配置在内的所有配置:

      1. [6]:
      1. print(nr.config.dict())
      1. 'group_file': 'files/inventory/groups.yaml',
      2. 'host_file': 'files/inventory/hosts.yaml'},
      3. 'plugin': 'SimpleInventory',
      4. 'transform_function': '',
      5. 'transform_function_options': {}},
      6. 'logging': {'enabled': True,
      7. 'format': '%(asctime)s - %(name)12s - %(levelname)8s - '
      8. '%(funcName)10s() - %(message)s',
      9. 'level': 'INFO',
      10. 'log_file': 'nornir.log',
      11. 'loggers': ['nornir'],
      12. 'to_console': False},
      13. 'runner': {'options': {'num_workers': 100}, 'plugin': 'threaded'},
      14. 'ssh': {'config_file': 'C:\\Users\\xdai\\.ssh\\config'},
      15. 'user_defined': {}}

      从这两个例子可以看出,Nornir 数据相关的字段都是封装成字典的格式来返回给用户。如果想要取某个部分的值,就可以直接使用字典的方式来取,比如查看配置中的并发数量(注:Nornir 默认的线程池并发是 20):

      1. [7]: