---------- Forwarded message --------- From: Phú Liên <[email protected]> Date: Thu, Oct 2, 2025 at 1:36 PM Subject: Re: [netmod] Question about using augment-structure to augment the root node of a Yang data structure To: Andy Bierman <[email protected]>
Hi Andy, Thank you for your confirmation. I can now request a bug fix for Yanglint. Best regards, Phu On Thu, Oct 2, 2025 at 12:02 AM Andy Bierman <[email protected]> wrote: > > > On Wed, Oct 1, 2025 at 12:56 AM Phú Liên <[email protected]> wrote: > >> 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? >> >> > > I do not see any text in RFC 8791 that prohibits augmenting the structure. > A valid path argument is provided to the extension. > > sx:augment-structure /foo:mystruct > > The structure 'mystruct' should be treated like a top-level NP container. > It shares the same namespace as real data-def-stmts. > > > Andy > > * 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] >> >
_______________________________________________ netmod mailing list -- [email protected] To unsubscribe send an email to [email protected]
