Error when i use when statement in yang
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-16-2021 05:31 AM - edited 03-16-2021 05:33 AM
i'm trying to make condition in NSO service that when i chose the device name to check it ned type ( ios or iosxr ) and depending on the output to will create the right container
here is the part of yang that i used :
leaf device { type leafref { path "/ncs:devices/ncs:device/ncs:name"; } } container SR_inputs { container iosxr { when " /ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:device-type/ncs:cli/ncs:ned-id='cisco-iosxr-cli-7.19-id:cisco-iosxr-cli-7.19'" { tailf:dependency "/ncs:devices/ncs:device/ncs:device-type/ncs:cli/ncs:ned-id"; } } }
the compile doesn't give me errors only warning : "warning: The when expression refers to the current node, will probably not work as intended. "
but it doesn't give me the correct output ( no container created after i choose the device )
any help please ?
- Labels:
-
Developer
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-17-2021 01:49 AM
Containers are not "created on demand", the when statement condition is satisfied. The idea of a when statement is to validate when the container should exist. If you want to force the user API call to include the container, you should use the "mandatory true" statement.
RFC6020:
7.19.5. The when Statement
The "when" statement makes its parent data definition statement conditional. The node defined by the parent data definition statement is only valid when the condition specified by the "when" statement is satisfied.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-17-2021 08:59 AM
Thanks @rogaglia for your reply
I think i asked a wrong question.
what i'm searching for exactly is validate when the container should exist.
as i have 2 containers iosxe and iosxr and depending on ned type of device i choose i want to have one to appear
as shown below:
leaf device { type leafref { path "/ncs:devices/ncs:device/ncs:name"; } } container SR_inputs { container iosxr { when " /ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:device-type/ncs:cli/ncs:ned-id='cisco-iosxr-cli-7.19-id:cisco-iosxr-cli-7.19'" { tailf:dependency "/ncs:devices/ncs:device/ncs:device-type/ncs:cli/ncs:ned-id"; } } container iosxe {
when " /ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:device-type/ncs:cli/ncs:ned-id='cisco-ios-cli-6.90-id:cisco-ios-cli-6.90'"
{
tailf:dependency "/ncs:devices/ncs:device/ncs:device-type/ncs:cli/ncs:ned-id";
}
} }
do when can validate xpath ? because as I found when i search that when always validate value not xpath.
thanks
