Nornir 继承模型

让我们通过示例看看继承模型是如何工作的。让我们从再次查看groups文件开始:

# groups file
%highlight_file inventory/groups.yaml

 1 ---
 2 global:
 3     data:
 4         domain: global.local
 5         asn: 1
 6 
 7 eu:
 8     data:
 9         asn: 65100
10 
11 bma:
12     groups:
13         - eu
14         - global
15 
16 cmh:
17     data:
18         asn: 65000
19         vlans:
20           100: frontend
21           200: backend

hostleaf01.bma属于组bma,而host又属于组euglobal。hostspine00.cmh属于该组cmh,该组不属于任何其他组。

数据解析的工作方式是对所有父组进行递归迭代,并尝试查看该父组(或其任何父级)是否包含数据。例如:

leaf01_bma = nr.inventory.hosts["leaf01.bma"]
leaf01_bma["domain"]  # comes from the group `global`

'acme.local'

leaf01_bma["asn"]  # comes from group `eu`

65100

如果host和父母均没有特定值,则将返回defaults的值。

leaf01_cmh = nr.inventory.hosts["leaf01.cmh"]
leaf01_cmh["domain"]  # comes from defaults

'acme.local'

如果nornir无法解析数据,您应该照常获取KeyError:

try:
    leaf01_cmh["non_existent"]
except KeyError as e:
    print(f"Couldn't find key: {e}")

Couldn't find key: 'non_existent'

您也可以尝试使用data属性在没有递归解析的情况下访问数据。例如,如果我们尝试访问,则leaf01_cmh.data["domain"]由于host本身没有该数据,应该会收到错误消息:

try:
    leaf01_cmh.data["domain"]
except KeyError as e:
    print(f"Couldn't find key: {e}")

Couldn't find key: 'domain'

觉得文章有用?

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