Martin Bjorklund <[email protected]> writes:

....

> Ok.  So in this case I suppose I can do:
>
>    container top {
>      leaf foo {
>        type int32;
>        default 0;
>        must '. != 42 or ../bar' {
>          description
>            "If foo is 42, then bar must be be set";
>        }
>      }
>      leaf bar {
>        when '../foo = 42';
>        type int32;
>      }
>    }

Or just

    container top {
      must 'foo != 42 and not(bar) or foo = 42 and bar';
      ...
    }

It also depends on whether you want to let automatically nuke bar if foo
is changed from 42 to something else. I prefer to keep it and report a
semantic error during validation.

>
> It accomplishes the same thing, but it is less clear.

Well, the interaction between mandatory and when has already caused a
lot of confusion. Some people even thought it was clear but their
interpretation was wrong. :-)

Lada

>
>
> /martin
>
>
>> > IMO it doesn't violate the spirit of the rule.  So the question is; is
>> > this allowed?
>> 
>> My answer is that the mandatory property is a syntactic/schema constraint
>> whereas "when" should be treated as a semantic rule because its expression 
>> has
>> to be evaluated on a particular instance. As such, it should not interfere 
>> with
>> schema constraints including mandatory.
>> 
>> If the when expression is more complicated (e.g. involves data from
>> other modules), it may not be possible to determine just by looking
>> at a single module whether an empty datastore is valid or not.
>> 
>> Even in your trivial example, what if an implementation adds a deviation 
>> module
>> changing the default for /top/foo to 42?
>> 
>> Lada
>> 
>> > 
>> > 
>> > /martin
>> > 
>> > P.S. the real data model is a potential solution to a problem with
>> > ietf-alarms from draft-ietf-ccamp-alarm-module:
>> > 
>> >       leaf notify-status-changes {
>> >         type enumeration {
>> >           enum all-state-changes {
>> >             ...
>> >           }
>> >           enum raise-and-clear {
>> >             ...
>> >           }
>> >           enum severity-level {
>> >             ...
>> >           }
>> >         }
>> >         default "all-state-changes";
>> >         description
>> >           ...
>> >       }
>> >       leaf notify-severity-level {
>> >         when '../notify-status-changes = "severity-level"';
>> >         type severity;
>> >         mandatory true;
>> >         ...
>> >       }
>> > 
>> > 
>> > pyang complains that this violates the cited rule.
>> > 
>> > D.S.
>> > 
>> > _______________________________________________
>> > netmod mailing list
>> > [email protected]
>> > https://www.ietf.org/mailman/listinfo/netmod
>> -- 
>> Ladislav Lhotka
>> Head, CZ.NIC Labs
>> PGP Key ID: 0xB8F92B08A9F76C67
>> 
>> _______________________________________________
>> netmod mailing list
>> [email protected]
>> https://www.ietf.org/mailman/listinfo/netmod
>> 

-- 
Ladislav Lhotka
Head, CZ.NIC Labs
PGP Key ID: 0xB8F92B08A9F76C67

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

Reply via email to