Hello,
want to use device-groups to ease the selection of devices.
For testing I start with a static group name "PE-group".
I start trying with YANG-path below and always got this error message:
error: bad argument value "/ncs:devices/ncs:device-group[ncs:name = 'PE-group']/ncs:device-name", should be of type path-arg
leaf device_PE { tailf:info "PE Router"; type leafref { path "/ncs:devices/ncs:device-group[ncs:name = 'PE-group']/ncs:device-name"; } mandatory 'true'; }
Doublecheck if anything is wrong with the path in general by replacing the constant value with a current() reference:
leaf device_PE { tailf:info "PE Router"; type leafref { //path "/ncs:devices/ncs:device-group[ncs:name = current()/../group_name]/ncs:device-name"; } mandatory 'true'; } leaf group_name { type string; default 'PE-group'; }
With this yang file anything works as expected.
Any idea want's wrong with the expression with the constant value?
Regards
Lothar
Solved! Go to Solution.
The YANG standard RFC6020 restricts an xpath to a path-arg, defined as:
path-arg-str = < a string that matches the rule path-arg > path-arg = absolute-path / relative-path absolute-path = 1*("/" (node-identifier *path-predicate)) relative-path = 1*(".." "/") descendant-path descendant-path = node-identifier [*path-predicate absolute-path] path-predicate = "[" *WSP path-equality-expr *WSP "]" path-equality-expr = node-identifier *WSP "=" *WSP path-key-expr path-key-expr = current-function-invocation *WSP "/" *WSP rel-path-keyexpr rel-path-keyexpr = 1*(".." *WSP "/" *WSP) *(node-identifier *WSP "/" *WSP) node-identifier
Which is a little bit of a mouthful, but the key here is that path-key-expr can only be current() plus a path, or a pure relative path. Which unfortunately means that it cannot be a string.
The YANG standard RFC6020 restricts an xpath to a path-arg, defined as:
path-arg-str = < a string that matches the rule path-arg > path-arg = absolute-path / relative-path absolute-path = 1*("/" (node-identifier *path-predicate)) relative-path = 1*(".." "/") descendant-path descendant-path = node-identifier [*path-predicate absolute-path] path-predicate = "[" *WSP path-equality-expr *WSP "]" path-equality-expr = node-identifier *WSP "=" *WSP path-key-expr path-key-expr = current-function-invocation *WSP "/" *WSP rel-path-keyexpr rel-path-keyexpr = 1*(".." *WSP "/" *WSP) *(node-identifier *WSP "/" *WSP) node-identifier
Which is a little bit of a mouthful, but the key here is that path-key-expr can only be current() plus a path, or a pure relative path. Which unfortunately means that it cannot be a string.