Hi RFC 8791 authors,
I have a question regarding YANG data structure extensions (RFC 8791) and
the use of augment-structure. Specifically, is it possible to augment the
root of a YANG data structure?
For example, with the YANG model below, yanglint validates successfully if
the last "sx:augment-structure /foo:mystruct" statement is commented out.
However, if that statement is included, yanglint reports an error:
* Yang model
```
module foo {
namespace "foo";
prefix foo;
import ietf-yang-structure-ext { prefix sx; }
sx:structure mystruct {
container mycontainer {
leaf leaf1 {
type string;
}
}
}
sx:augment-structure /foo:mystruct/foo:mycontainer {
leaf leaf2 {
type string;
}
}
// Augment to the root of the structure, so `leaf3` will be a sibling of
`mycontainer`.
sx:augment-structure /foo:mystruct {
leaf leaf3 {
type string;
}
}
}
```
* Yanglint error
```
libyang err : Augment extension target node "/foo:mystruct" from module
"foo" was not found.
(/foo:{extension='sx:augment-structure'}/{augment='/foo:mystruct'})
```
Moreover, if we cannot use augment-structure to add augments to the root of
a structure, could you please suggest how to make the following leafref
path valid in the YANG model below?
* a.yang
```
module a {
namespace "urn:a";
prefix a;
import b {
prefix b;
}
import ietf-yang-structure-ext {
prefix sx;
}
grouping leafrefs {
leaf leaf1 {
type leafref {
path "/a:top/a:leaf2";
}
}
}
grouping leaves {
leaf leaf2 {
type string;
}
}
container top {
config false;
uses leaves;
}
// Augments 'a:leaf1' into '/b:mystruct/b:mycontainer'. This augmented
// 'a:leaf1' will be a sibling of 'b:myleaf'.
//
// XPath within a structure can only reference nodes inside the same
// structure. Therefore, '/a:top/a:leaf2' must also be augmented into
// 'b:mystruct' to satisfy the leafref path.
sx:augment-structure "/b:mystruct/b:mycontainer" {
uses leafrefs;
}
// This 'augment-structure' attempts to satisfy the leafref path by
augmenting
// '/a:top/a:leaf2' into the root of '/b:mystruct'. However, yanglint
reports
// an error because we are augmenting to the root of a structure.
sx:augment-structure "/b:mystruct" {
container top {
uses leaves;
}
}
// This 'augment-structure' is valid in yanglint but does not satisfy the
// leafref path because it augments '/b:top/a:leaf2', not
'/a:top/a:leaf2'.
sx:augment-structure "/b:mystruct/b:top" {
uses leaves;
}
}
```
* b.yang
```
module b {
namespace "urn:b";
prefix b;
import ietf-yang-structure-ext {
prefix sx;
}
sx:structure mystruct {
container mycontainer {
leaf myleaf {
type string;
}
}
container top { }
}
}
```
Yanglint reports the following error for the second augment-structure
statement:
```
libyang err : Augment extension target node "/b:mystruct" from module "a"
was not found.
(/a:{extension='sx:augment-structure'}/{augment='/b:mystruct'})
```
And the following error for the third augment-structure statement:
```
libyang err : Not found node "top" in path. (/b:mycontainer/a:leaf1)
```
By the way, we found that this use of augment-structure is claimed to be
supported in the following links:
* https://docs.yumaworks.com/en/latest/yangauto/define-abstract-yang.html
*
https://dr2lopez.github.io/yang-provenance/draft-lopez-opsawg-yang-provenance.html
BR/Phu
_______________________________________________
netmod mailing list -- [email protected]
To unsubscribe send an email to [email protected]