让我们通过示例看看继承模型是如何工作的。让我们从再次查看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又属于组eu
和global
。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'