On 16/03/2017 17:26, Andy Bierman wrote:


On Thu, Mar 16, 2017 at 10:18 AM, Robert Wilton <[email protected] <mailto:[email protected]>> wrote:

    Hi Andy,


    On 16/03/2017 16:17, Andy Bierman wrote:


    On Thu, Mar 16, 2017 at 2:54 AM, Robert Wilton <[email protected]
    <mailto:[email protected]>> wrote:

        Hi Dale,


        On 15/03/2017 19:02, Dale R. Worley wrote:

            JOEY BOYD <[email protected]
            <mailto:[email protected]>> writes:

                module base-module {
                   prefix bmod;

                   feature do-things;

                   container things {
                     if-feature do-things;
                     ...
                   }
                }

                module augment-module {
                   prefix amod;

                   augment "/bmod:do-things" {
                     container other-things {
                     }
                   }
                }

            First question:  I'm not expert in Yang, but as far as I
            can figure out,
            the augment statement is augmenting "container things",
            right?  So the
            augment statement should be 'augment "/bmod:things"' not
            'augment
            "/bmod:do-things"'.

        Yes, the augment should be to "things".


            But on the important question, I don't see it as at all
            unreasonable
            that the augment needs to be qualified by the same
            if-feature.  The
            reason is that if you're reading the text of module
            augment-module, it's
            helpful to have documented, right there, that the
            augmentation depends
            on the presence of a particular feature in the augmented
            module.  And
            it's helpful to know that the designer did, at least for
            one moment,
            think about the fact that the augmentation is conditional.


        It isn't just any if-feature on the container that is being
        augmented that needs to be considered.  You would have to
        consider all if-feature statements by walking up the
        augmented node's ancestors to the top of the tree and combine
        them, or have multiple if-feature statements.

        Further, the 7950 YANG update rules allow for the augmented
        module to be revised and some of those if-feature statements
        to be subsequently removed.  If the augmenting module had
        restated the if-feature conditions then this would probably
        leave the augmenting module unintentionally out of sync with
        the module that it is augmenting.

        In short, I think that if-feature statements work better if
        they act on the given node and all descendant nodes,
        regardless of which module those descendants are defined in.


    "work better"

    Please explain which protocol you are using that allows you to
    manage descendant nodes of unimplemented nodes.

    NETCONF and RESTCONF do not work at all wrt/ accessing such nodes.
    I think that we may be crossing wires:

    It was NETCONF/RESTCONF that I was thinking of, and I am not
    considering managing descendant nodes of unimplemented nodes.

    I think that the question is only whether an augmentation of a
    node that has an if-feature statement also requires the same
    if-feature statement on the augment statement.


no -- I don't think there is any requirement.
As pointed out, the if-features can be anywhere in the ancestor nodes.
If any of them are false for a given server, then the augmenting nodes are inaccessible.
Agreed.



    To quote Joey's example,  I think that both of the following
    modules are valid (presuming that they are both implemented by a
    device) regardless of which features are enabled.  Do you agree?



The modules are valid.
The conformance decision (i.e., which features are advertised and which are not by a server implementation)
does not change the compile-time validity of the YANG modules

Also agreed.

Thanks,
Rob


    module base-module {
       prefix bmod;

       feature things;
       feature widgets;

       container things {
         if-feature things;
         ...
         container widgets {
           if-feature widgets;
           ...
         }
       }
    }

    module augment-module {
       prefix amod;

       augment "/bmod:things" {
         container other-things {
         }
       }

       augment "/bmod:things/bmod:widgets" {
         container other-widgets {
         }
       }
    }

    Thanks,
    Rob




Andy

        Rob


    Andy



            Dale

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


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





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

Reply via email to