* YANG Leafref feature update

* Closer adherence to RFC 7950. Some of this is changed behavior, some is new feature.
  * Essentially instead of looking at the referring leaf, context is referred(target) node
  * Validation uses referred node
    * Validation changed to use type of referred node, instead of just "string"
  * Auto-cli
    * Changed to use type of referred node for typecheck
    * Completion uses referred node
  * Required instance / less strict validation
    * New: Leafrefs must refer to existing data leaf ONLY IF YANG `required-instance` is true
    * Previous: All leafrefs must refer to existing data leaf node
* Fixed: [Autocli does not offer completions for leafref to identityref #254](https://github.com/clicon/clixon/issues/254)
This commit is contained in:
Olof hagsand 2021-08-16 13:57:51 +02:00
parent 8db716ca07
commit 980718178a
18 changed files with 1151 additions and 115 deletions

View file

@ -47,11 +47,13 @@ module example{
description "Absolute references existing interfaces in if module";
type leafref {
path "/if:interfaces/if:interface/if:name";
require-instance true;
}
}
leaf relname {
type leafref {
path "../../if:interfaces/if:interface/if:name";
require-instance true;
}
}
leaf address {
@ -59,12 +61,14 @@ module example{
type leafref {
path "../../if:interfaces/if:interface[if:name = current()/../relname]"
+ "/ip:ipv4/ip:address/ip:ip";
require-instance true;
}
}
leaf wrong {
description "References leading nowhere in yang";
type leafref {
path "/ip:interfaces/ip:interface/ip:name";
require-instance true;
}
}
}
@ -76,6 +80,7 @@ module example{
leaf template{
type leafref{
path "/sender/name";
require-instance true;
}
}
}