Re: [Netconf] [yang-doctors] YANG Doctor question: empty mandatory choice?

Robert Wilton <rwilton@cisco.com> Wed, 01 August 2018 16:48 UTC

Return-Path: <rwilton@cisco.com>
X-Original-To: netconf@ietfa.amsl.com
Delivered-To: netconf@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 419FD130E44; Wed, 1 Aug 2018 09:48:18 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.509
X-Spam-Level:
X-Spam-Status: No, score=-14.509 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_MED=-0.01, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cisco.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 14HOUC7CI7ab; Wed, 1 Aug 2018 09:48:15 -0700 (PDT)
Received: from aer-iport-1.cisco.com (aer-iport-1.cisco.com [173.38.203.51]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 40014130DDF; Wed, 1 Aug 2018 09:48:14 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=23474; q=dns/txt; s=iport; t=1533142094; x=1534351694; h=subject:to:cc:references:from:message-id:date: mime-version:in-reply-to; bh=/JIpMCkvfuSwIZYnZeXR1Qxyymielas9RFer5XNg8nE=; b=Ob7dFzsx3z7Z+hM2NSqGKGWeK7EFgNIEcw7KGp2KIouiRy0RDtqPNUw+ Z9GDC5rkbxyBpIlsOrnwDXxxIrgctgjr/LSgg9XUNoEkMPlcLv7yeg65U syIUbGtS/YuwTEJ/2YWE5eZHs9cogDtVAT/PVw2jeU/XNcsb3iIwU+do4 4=;
X-IronPort-AV: E=Sophos;i="5.51,432,1526342400"; d="scan'208,217";a="5560737"
Received: from aer-iport-nat.cisco.com (HELO aer-core-4.cisco.com) ([173.38.203.22]) by aer-iport-1.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Aug 2018 16:48:12 +0000
Received: from [10.63.23.106] (dhcp-ensft1-uk-vla370-10-63-23-106.cisco.com [10.63.23.106]) by aer-core-4.cisco.com (8.15.2/8.15.2) with ESMTP id w71GmC8r021104; Wed, 1 Aug 2018 16:48:12 GMT
To: Andy Bierman <andy@yumaworks.com>, "Eric Voit (evoit)" <evoit@cisco.com>
Cc: "yang-doctors@ietf.org" <yang-doctors@ietf.org>, "netconf@ietf.org" <netconf@ietf.org>
References: <727ae35abd394a85812168615acce2d3@XCH-RTP-013.cisco.com> <20180729.175356.1841285666617255654.mbj@tail-f.com> <77080682bf90495caec48436453e4750@XCH-RTP-013.cisco.com> <20180730.204142.1505732335534077415.mbj@tail-f.com> <20180731174827.n5r2jebon45s2cxy@anna.jacobs.jacobs-university.de> <b8dc903dc04a46088bcca106ac45c4fc@XCH-RTP-013.cisco.com> <CABCOCHQPYyWgXS8Y_n5PN-AEQ5myQXX5s0KvkjQnfAh4VOMbrA@mail.gmail.com> <05ee68cd-ccc0-6803-6c71-b3952ee5608d@cisco.com> <CABCOCHRtg9jB0=b5bPPT3MS0QJcwgAY24Fg0RewXhPMR8Y+O0w@mail.gmail.com>
From: Robert Wilton <rwilton@cisco.com>
Message-ID: <958669b9-c523-3c43-eca4-fbc255fc1bc8@cisco.com>
Date: Wed, 01 Aug 2018 17:48:11 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1
MIME-Version: 1.0
In-Reply-To: <CABCOCHRtg9jB0=b5bPPT3MS0QJcwgAY24Fg0RewXhPMR8Y+O0w@mail.gmail.com>
Content-Type: multipart/alternative; boundary="------------AC85DD210534FB1BC0C0994F"
Content-Language: en-US
X-Outbound-SMTP-Client: 10.63.23.106, dhcp-ensft1-uk-vla370-10-63-23-106.cisco.com
X-Outbound-Node: aer-core-4.cisco.com
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/g2dgETSAeqhLl2oTdwAZssxP-JU>
Subject: Re: [Netconf] [yang-doctors] YANG Doctor question: empty mandatory choice?
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: Network Configuration WG mailing list <netconf.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netconf>, <mailto:netconf-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netconf/>
List-Post: <mailto:netconf@ietf.org>
List-Help: <mailto:netconf-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netconf>, <mailto:netconf-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 01 Aug 2018 16:48:18 -0000


On 01/08/2018 17:09, Andy Bierman wrote:
>
>
> On Wed, Aug 1, 2018 at 9:01 AM, Robert Wilton <rwilton@cisco.com 
> <mailto:rwilton@cisco.com>> wrote:
>
>
>
>     On 31/07/2018 21:31, Andy Bierman wrote:
>>
>>
>>     On Tue, Jul 31, 2018 at 12:39 PM, Eric Voit (evoit)
>>     <evoit@cisco.com <mailto:evoit@cisco.com>> wrote:
>>
>>         > From: Juergen Schoenwaelder, July 31, 2018 1:48 PM
>>         >
>>         > On Mon, Jul 30, 2018 at 08:41:42PM +0200, Martin Bjorklund
>>         wrote:
>>         > >
>>         > > The empty mandatory choice does provide value since it
>>         requires that
>>         > > some transport-specific parameters are configured. 
>>         However, can we
>>         > > assume that all transports require configuration
>>         parameters here?
>>         >
>>         > Can you have a receiver without any transport parameters?
>>         >
>>         > > It is probably safest to not have a mandatory choice, and
>>         instead
>>         > > ensure that each transport augements the proper params --
>>         and since
>>         > > this is YANG 1.1, the transport params that are augmented
>>         can actually
>>         > > be marked as mandatory.
>>         >
>>         > Frankly, an empty mandatory choice quite clearly says "this
>>         is incomplete and
>>         > unusable without an augmentation".
>>
>>         My read above is the YANG doctor's position is that we should
>>         *not* use the empty mandatory choice.  Let me know if I got
>>         this wrong.
>>
>>
>>     I do not think a consensus call has been done yet, but I agree
>>     with Juergen
>>     and already raised the point that YANG conformance does not handle a
>>     "MUST augment" use-case very well.
>     I think that "empty choice + mandatory true" it is OK from a
>     conformance perspective.  The concept seems similar to an
>     programmatic interface, abstract class, or even the abstract
>     identity idea that has been proposed for YANG.  If a server
>     implements the module but no augments of the choice then it cannot
>     be configured because the constraint will always fail.  Andy, is
>     your concern that tooling will warn that part of the model is
>     unusable?
>
>
> That is possible.
> I agree with Juergen that a mandatory empty choice clearly indicates 
> that the module is incomplete
> and unusable on its own.  Is that a feature?
Yes, making that indication is the whole purpose of adding the 
"mandatory: true" to the empty choice.  Note, that I see that the 
"mandatory true" is there to say that every configured subscription must 
have a transport configured, which if true, doesn't seem unreasonable.  
I.e. my main point is that I don't have an issue with this generic YANG 
design.

In this particular instance, I'm also fine if "mandatory: true" is left 
out, but I don't really agree with writing the equivalent of "mandatory: 
true" in the description, that seems like a poor compromise.

However, this is probably all bike-shedding.  I think that any of the 
discussed solutions is acceptable, as long as it is obvious to the 
readers of the YANG modules that a case statement must be provided for 
it to be useful, and I make the assumption that sane vendors won't 
enable the "configured" feature, if there is no actual way of 
configuring usable subscriptions.

Perhaps Eric can propose his preferred choice, and we can see if anyone 
still objects, otherwise maybe we can move on?

Thanks,
Rob


>
> Andy
>
>
>     I have to say that much prefer the option of putting "mandatory:
>     true" in the choice than "MUST provide an implementation" in the
>     description because the former is machine readable whilst the
>     latter is not.
>
>     However, I would also be fine not to have the "mandatory: true",
>     but with the choice description to state something along the lines
>     that the empty choice is to allow for augmentations of different
>     transports, and configured subscriptions may not be usable unless
>     at least one transport case statement is available."  But perhaps
>     some implementation will provide the flexibility of defining a
>     single transport for all subscriptions (if this is feasible).
>
>     One other observation that could affect the decision here is that
>     YANG allows "mandatory: true" to be removed in a future revision
>     in a backwards compatible way, but doesn't allow it to be added.
>
>     Thanks,
>     Rob
>
>
>>
>>     I prefer the MUST be in the description-stmt for the choice,
>>     instead of "mandatory true". (I prefer SHOULD but if the WG wants
>>     MUST)
>>
>>
>>     Andy
>>
>>
>>
>>         That would mean that each transport document supporting
>>         configured subscriptions would then augment transport
>>         specific parameters to
>>         "/subscriptions/subscription/receivers/receiver".  And
>>         (assuming the "single transport" decision of IETF100 isn't
>>         changed), that the identity "transport" could be leveraged to
>>         enforce that only a single transport specific set of
>>         credentials are associated with a receiver.
>>
>>         A sample YANG augmentation for NETCONF would then look like:
>>
>>         module ietf-netconf-subscribed-notifications {
>>
>>           prefix nsn;
>>
>>           import ietf-netconf-client { prefix ncc; }
>>           import ietf-subscribed-notifications { prefix sn; }
>>
>>           identity netconf {
>>             base sn:transport;
>>             base sn:inline-address;
>>             description
>>               "NETCONF is used as a transport for notification
>>         messages and
>>                state change notifications.";
>>           }
>>
>>           augment
>>         "/sn:subscriptions/sn:subscription/sn:receivers/sn:receiver" {
>>            when 'derived-from(../../../transport, "nsn:netconf")';
>>            description
>>               "This augmentation allows NETCONF specific parameters
>>         to be
>>               exposed for a receiver.";
>>             leaf netconf-endpoint {
>>               type leafref {
>>                 path
>>         "/ncc:netconf-client/ncc:initiate/ncc:netconf-server" +
>>                         "/ncc:endpoints/ncc:endpoint/ncc:name";
>>               }
>>               mandatory true;
>>               description
>>                 "Remote client which need to initiate the NETCONF
>>         transport if
>>                 an existing NETCONF session from that client is not
>>         available.";
>>             }
>>           }
>>         }
>>
>>         Which results in:
>>           +--rw subscriptions
>>              +--rw subscription*
>>                 +--rw transport         transport {configured}?
>>                 +--rw receivers
>>                    +--rw receiver*
>>                       +--rw nsn:netconf-endpoint leafref
>>
>>         Eric
>>
>>
>>         > /js
>>         > 
>>         > --
>>         > Juergen Schoenwaelder  Jacobs University Bremen gGmbH
>>         > Phone: +49 421 200 3587  Campus Ring 1 | 28759 Bremen | Germany
>>         > Fax:   +49 421 200 3103       
>>          <https://www.jacobs-university.de/
>>         <https://www.jacobs-university.de/>>
>>
>>
>>
>>
>>     _______________________________________________
>>     yang-doctors mailing list
>>     yang-doctors@ietf.org <mailto:yang-doctors@ietf.org>
>>     https://www.ietf.org/mailman/listinfo/yang-doctors
>>     <https://www.ietf.org/mailman/listinfo/yang-doctors>
>
>