Thanks Alex.  Sorry about those sloppy mistakes.  I agree about the ../a-list 
and I should have said count > 0.

In the 2nd part of my email, my intention was to only allow foo to be 
configured if a-list has at least one entry configured.   So I don't think 
min-elements 1 would work.  I don't want to always require an entry in a-list.  
I only want to require one if foo is configured.

I guess this also achieves the same thing right ?
      must "../a-list[entry=*]";

If foo has a default value, then does that mean the "must" is evaluated even if 
foo is deleted from the config ?
    leaf foo {
      must "../a-list";   <- always evaluated because of default ?
      type uint16;
      default 5;
    }
If the must is always evaluated then it would be the equivalent of having 
min-elements 1 in a-list.

Rgds,
Jason

From: Alex Campbell [mailto:[email protected]]
Sent: Tuesday, March 27, 2018 9:57 PM
To: Sterne, Jason (Nokia - CA/Ottawa) <[email protected]>; [email protected]
Subject: Re: YANG 'must' Xpaths, predicates and wildcards


Hi,



For one thing, it should be ../a-list since a-list is not a child of foo.

Also - if foo is not configured and has no default value, then any must 
expressions in foo are not evaluated because it is not part of the "accessible 
tree". (I tested this in ConfD)

Apart from these issues, yes it will behave as you expect - it will fail if 
a-list contains no entries.



must "count(a-list) > 1"; is not equivalent since it requires at least two 
entries.



However, you can more simply add a min-elements 1; statement to a-list to 
achieve the same goal - no XPath required.



________________________________
From: netmod <[email protected]<mailto:[email protected]>> on 
behalf of Sterne, Jason (Nokia - CA/Ottawa) 
<[email protected]<mailto:[email protected]>>
Sent: Wednesday, 28 March 2018 1:10 p.m.
To: [email protected]<mailto:[email protected]>
Subject: [netmod] YANG 'must' Xpaths, predicates and wildcards

Hi all,

I'm pretty sure that this xpath (e.g. in a must statement) isn't correct:

              (A) ../container-a/list-b[name=*]/some-leaf

and should just be this instead:

              (B) ../container-a/list-b/some-leaf

Or is the * an allowable wildcard for a key value in a predicate ?

I also had a question about whether the following "must" correctly checks that 
at least one entry exists in a-list.

  container c1 {
    leaf foo {
      must "a-list";
      type uint16;
    }
    list a-list {
      key "entry";
      leaf entry {
        type uint16;
      }
      leaf another-entry {
        type uint32;
      }
    }
  }

I think I could also replace that must with the following:
      must "count(a-list) > 1";
but does must "a-list"; achieve the same thing ?

Rgds,
Jason
_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to