我正在写一个杨模型。是否可以使用基于另一个字段的值设置叶子(字符串或枚举)。例如,我想说如果 x 则字段 a 的值为 b,如果 z 则字段 a 的值为 c。
编辑:我是 yang 的新手,仍在尝试学习它,如果有任何其他想法或运算符可以用来解决这个问题,请随时分享。:D 非常感谢。
我正在写一个杨模型。是否可以使用基于另一个字段的值设置叶子(字符串或枚举)。例如,我想说如果 x 则字段 a 的值为 b,如果 z 则字段 a 的值为 c。
编辑:我是 yang 的新手,仍在尝试学习它,如果有任何其他想法或运算符可以用来解决这个问题,请随时分享。:D 非常感谢。
您可以使用when
和must
构造:YANG 1.1,第 7.5.3 节说:
must语句是可选的,它接受一个包含 XPath 表达式的字符串作为参数(参见第 6.4 节)。它用于正式声明对有效数据的约束。约束是根据第 8 节中的规则执行的。
第 7.5.4.3 节对此进行了说明:
container interface {
leaf ifType {
type enumeration {
enum ethernet;
enum atm;
}
}
leaf ifMTU {
type uint32;
}
must 'ifType != "ethernet" or ifMTU = 1500' {
error-message "An Ethernet MTU must be 1500";
}
must 'ifType != "atm" or'
+ ' (ifMTU <= 17966 and ifMTU >= 64)' {
error-message "An ATM MTU must be 64 .. 17966";
}
}
上when
,第 7.21.5 节写道,
when语句使其父数据定义语句成为条件语句。父数据定义语句定义的节点只有在满足when语句指定的条件时才有效。该语句的参数是一个 XPath 表达式(参见第 6.4 节),用于正式指定此条件。
ConfD 提供了NETCONF 和 YANG 中的 XPath教程;这个例子来自它:
augment /system/login/user {
when “class != ’wheel’”;
leaf uid {
type uint16 {
range “1000 .. 30000”;
}
}
}