Re: [netmod] <running> vs <intended>

Martin Bjorklund <mbj@tail-f.com> Tue, 19 September 2017 09:57 UTC

Return-Path: <mbj@tail-f.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8C07B126BF0; Tue, 19 Sep 2017 02:57:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 mPZtOnqcpa6y; Tue, 19 Sep 2017 02:57:32 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 6AFED132EDA; Tue, 19 Sep 2017 02:57:32 -0700 (PDT)
Received: from localhost (unknown [173.38.220.41]) by mail.tail-f.com (Postfix) with ESMTPSA id B2C8B1AE02A7; Tue, 19 Sep 2017 11:57:30 +0200 (CEST)
Date: Tue, 19 Sep 2017 11:55:59 +0200
Message-Id: <20170919.115559.1080249872764998055.mbj@tail-f.com>
To: rwilton@cisco.com
Cc: andy@yumaworks.com, j.schoenwaelder@jacobs-university.de, ietfc@btconnect.com, lberger@labn.net, netmod@ietf.org, netmod-chairs@ietf.org, draft-ietf-netmod-revised-datastores@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <99b9a2c6-4bb4-121f-0cba-925cefe09712@cisco.com>
References: <20170918.200734.1805388289423863575.mbj@tail-f.com> <CABCOCHTD_6yQj1QFn0BsPg8hbkuUc9guEB6rhG46W1jnNRh=bA@mail.gmail.com> <99b9a2c6-4bb4-121f-0cba-925cefe09712@cisco.com>
X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/mF9GZcRvzGQ6NGBdP2NmYKdvJ-Y>
Subject: Re: [netmod] <running> vs <intended>
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Sep 2017 09:57:35 -0000

Robert Wilton <rwilton@cisco.com> wrote:
> 
> 
> On 18/09/2017 19:25, Andy Bierman wrote:
> >
> >
> > On Mon, Sep 18, 2017 at 11:07 AM, Martin Bjorklund <mbj@tail-f.com
> > <mailto:mbj@tail-f.com>> wrote:
> >
> >     Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de
> >     <mailto:j.schoenwaelder@jacobs-university.de>> wrote:
> >     > On Mon, Sep 18, 2017 at 05:17:46PM +0100, Robert Wilton wrote:
> >     > >
> >     > > > No.  I do not agree that the MUST in RFC 7950 can be removed.
> >     > > > I do not agree the architecture should update YANG at all.
> >     > > OK.
> >     >
> >     > I am with Andy here. <running> has always had the requirement to be
> >     > valid and we are not supposed to change that. Mechanisms for
> >     inactive
> >     > configuration or templating must be designed to be backwards
> >     compatible
> >     > I think.
> >
> >     Ok.  If we keep the requirement that <running> in itself must be
> >     valid, it just restricts the usefulness/expressiveness of inactive and
> >     template mechanisms, but it might be ok.
> >
> >     I think that even w/o this requirement, the observable behavior for a
> >     client can be backwards compatible.  For example, suppose we have an
> >     inactive access control rule that refers to a non-existing
> >     interface in
> >     <running>.  If a client that doesn't know anything about inactive asks
> >     for the contents of <running>, our implementation removes the inactive
> >     nodes from the reply to the client.  Only a client that opts-in to
> >     inactive will receive a reply with things that looks invalid if you
> >     don't take the inactive annotation into account.
> >
> >
> >
> > There are many ways that validation can fail because inactive nodes
> > are present,
> > and considered part of the validation.
> >
> > e,g, min-elements, max-elements, mandatory, unique.
> >
> > I think we all agree that validation on the enabled nodes is supposed
> > to continue to work.

Yes.

> > Here is an attempt at a backwards-compatible solution:
> >
> > 1) current <get-config> and <get> responses only include enabled
> > nodes.
> > 2) old-style <edit-config> operations do not alter inactive nodes
> > 3) NMDA clients use <get-data>, not <get-config> or <get>.  These
> > responses
> >     include enabled and disabled nodes, so validation does not apply
> > for <running>
> > 4) new style <edit-config> (i.e. <datastore> parameter used) can alter
> > any type of data node
> //I think that inactive should always be an optional extension.  Not
> everything needs the additional complexity.
> 
> Hence rather than tying this function to specific NETCONF operations,
> I would suggest that there should be an extra parameter (like for
> with-defaults) to allow a client to indicate to the server that a get
> or edit request is using the "with-inactive" extension.
> 1) The server should also have a capability (or perhaps a leaf defined
> in YANG library) to indicate that it supports inactive configuration.
> 2) If a client doesn't use the extra "with-inactive" parameter during
> a get request then only active nodes are returned.
> 3) If a client doesn't use the extra "with-inactive" parameter during
> an edit-data request then the request cannot include an extra inactive
> meta-data.  The request is processed in a way that is equivalent to an
> existing NETCONF implementation, but it may unknowingly remove some
> inactive configuration (e.g. via a replace or remove operation on an
> inactive node).  Operations like create, delete, none, replace should
> all treat an inactive target node the same way as in the node doesn't
> exist (e.g. delete on an inactive node would return a "data-missing"
> error), this ensures that the behaviour that an unaware client
> observes is the same as the existing behaviour that it would expect
> from a regular 6241 compliant NETCONF implementation.
> 4) It a client makes a get request including the "with-inactive"
> parameter then they also get the inactive nodes as well, marked with a
> meta-data annotation.
> 5) If a client makes an edit request including the "with-inactive"
> parameter, then the inactive meta-data annotation can be used to label
> inactive nodes.  Inactive nodes are regarded as regular data nodes for
> create/delete/replace/none operation error checking.
> 
> I think that this approach is similar (perhaps even the same) as
> Martin described.

This is indeed how our implementation works (except I think we don't
do 5; if the client sends an "inactive" attribute it doesn't have to
also send with-inactive).

> > Note that the YANG MUST rule still applies, because validation is only
> > done on enabled nodes.
> > It is only the response message representations that cannot be
> > validated, not the contents
> > of <running> on a server.

So the question is how we can make sure that the text in the NMDA
draft covers this yet-to-be-defined feature w/o having to define it
now?  We thought that the current text was sufficient, but do we have
to make any changes to it?


/martin