Re: [NGO] external module properties

Andy Bierman <ietf@andybierman.com> Thu, 01 May 2008 22:26 UTC

Return-Path: <ngo-bounces@ietf.org>
X-Original-To: ngo-archive@optimus.ietf.org
Delivered-To: ietfarch-ngo-archive@core3.amsl.com
Received: from core3.amsl.com (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 2FB713A6942; Thu, 1 May 2008 15:26:51 -0700 (PDT)
X-Original-To: ngo@core3.amsl.com
Delivered-To: ngo@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 5D2763A68E7 for <ngo@core3.amsl.com>; Thu, 1 May 2008 15:26:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.333
X-Spam-Level:
X-Spam-Status: No, score=-2.333 tagged_above=-999 required=5 tests=[AWL=0.266, BAYES_00=-2.599]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pXoIabkWXTxr for <ngo@core3.amsl.com>; Thu, 1 May 2008 15:26:48 -0700 (PDT)
Received: from smtp113.sbc.mail.mud.yahoo.com (smtp113.sbc.mail.mud.yahoo.com [68.142.198.212]) by core3.amsl.com (Postfix) with SMTP id 0B2BD3A699F for <ngo@ietf.org>; Thu, 1 May 2008 15:26:47 -0700 (PDT)
Received: (qmail 35377 invoked from network); 1 May 2008 22:26:49 -0000
Received: from unknown (HELO ?127.0.0.1?) (andybierman@att.net@67.126.241.42 with plain) by smtp113.sbc.mail.mud.yahoo.com with SMTP; 1 May 2008 22:26:48 -0000
X-YMail-OSG: YHY4ys8VM1mSWQSjLdn24F8kwRd09FfWEEdbyc6Q2lMLIMSTNKEP.AeAuQD4VNYVZhyfW.M20ZeR6Vz61CZJWBffZOtWha_LKxe0QuHYmt1rXOaObVJXcoPa0ZI4lRSYwg9iVx_tLpksBH_TpXOf4Qwb
X-Yahoo-Newman-Property: ymail-3
Message-ID: <481A43A5.5060303@andybierman.com>
Date: Thu, 01 May 2008 15:26:45 -0700
From: Andy Bierman <ietf@andybierman.com>
User-Agent: Thunderbird 2.0.0.12 (Windows/20080213)
MIME-Version: 1.0
To: Martin Bjorklund <mbj@tail-f.com>
References: <20080501.223155.101151882.mbj@tail-f.com> <200805012045.m41KjmAp009395@idle.juniper.net> <20080501.232635.78733212.mbj@tail-f.com>
In-Reply-To: <20080501.232635.78733212.mbj@tail-f.com>
Cc: ngo@ietf.org
Subject: Re: [NGO] external module properties
X-BeenThere: ngo@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: NETCONF Goes On - discussions on future work and extensions to NETCONF <ngo.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/ngo>, <mailto:ngo-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/pipermail/ngo>
List-Post: <mailto:ngo@ietf.org>
List-Help: <mailto:ngo-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ngo>, <mailto:ngo-request@ietf.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: ngo-bounces@ietf.org
Errors-To: ngo-bounces@ietf.org

Martin Bjorklund wrote:
> Phil Shafer <phil@juniper.net> wrote:
>> Martin Bjorklund writes:

I am strongly opposed to any import or include
mechanism for a specific version of a module.
It seems hard enough to deploy one version of a standard
data model at a time.

I prefer a simple system in which the agent advertises which
version of the module is implemented, and therefore
associated with the module namespace URI.  The manager
must then decide if it can use that version of the module or not.

I don't think this has been a problem in SMIv2, and it has
not been demonstrated (yet) to be a problem in YANG.
This is a good feature to save to YANG 2.0, in the future.

I don't see how multiple sub-agents within a single agent can implement
different versions of the same module, without using different
namespace URIs for each variant.  (Maybe somebody can explain
it to me;-)


Andy


>>> The problem is when a vendor needs to implement A rev 2 in a device,
>>> and also B.  B imports A rev 1.  So the device needs to implement A
>>> rev 1 *and* A rev 2.   This is something that we have talked about
>>> before, and dismissed as being too complicated in general.
>> I'm hoping (having not implemented it yet ;^) that this won't be that
>> bad.  If I have a hierarchy in my C module that uses a grouping
>> from B that uses the original revision of A, and another place in
>> my C that wants to use the new A with a new leaf that has the content
>> I want, I just need to track the module inclusion and imports to
>> know which revision of A I am getting the grouping from.
> 
> A YANG module defines types, groupings, data, rpc, and notifications.
> All of these can be referenced by an importing modules (types and
> groupings are obvious; data can be referenced through keyrefs,
> augments, and must expressions; and rpc/notifs can be augmented).  I
> agree that supporting multiple versions of a module in order to handle
> types and grouping should be fairly straight-forward.  But when it
> comes to data/rpc/notifs the device must choose one version to
> implement.  It would have to be a version no earlier than the latest
> version referenced by any other module implemented on the device.
> 
> For example:
> 
>   module a {
>      revision "2008-04-25";
> 
>      container foo { ... }
>   }
> 
>   module a {
>      revision "2008-05-01";
> 
>      container foo { ... }
>      container bar { ... }
>   }
> 
>   module b {
>      revision "2008-04-26";
>      import a { 
>        revision "2008-04-25";
>        prefix a;
>      }
>   
>      augment "/a:foo" {
>        container baz { ... }
>      }
>   }
> 
> 
> A device must be allowed to announce that it implements:
> 
>     a:2008-05-01
>     b:2008-04-26
> 
> Maybe it's not a problem...  but the schema discovery mechanism will
> have to support these cases.  There would be two separate lists of
> schemas; one list with the data/rpc/notifs that the device implements,
> and an extended list which includes older versions and
> type/grouping-only modules.
> 
> 
>>> But you talk about behavioural changes.  In the current design of
>>> YANG, the idea has been that a module cannot be updated in a way that
>>> changes the behaviour for importers and includers.  Thus you don't
>>> have to rev B just b/c A is updated.
>> If I add a new leaf to a grouping in A that B doesn't know about,
>> B will break if I use the new A.  If I can't say which A I want,
>> then the grouping in A cannot be allowed to change.  This means
>> that the contents of groupings, types, etc are locked for all time,
>> which is a pretty strong limitation.
> 
> Yes.  A couple of solutions have been mentioned already, and another
> alternative is to keep this limitation, and force people to define new
> groupings in this case; essentially putting the version into the name:
> 
>    // original definition
>    grouping foo {
>      container bar;
>    }
> 
>    // next revision adds a new item to foo, but since we can't do
>    // that we'll define a new grouping:
>    grouping foo2 {
>      uses foo;
>      container baz { ... }
>    }
> 
> 
> 
> /martin
> 
> _______________________________________________
> NGO mailing list
> NGO@ietf.org
> https://www.ietf.org/mailman/listinfo/ngo
> 
> 
> 


_______________________________________________
NGO mailing list
NGO@ietf.org
https://www.ietf.org/mailman/listinfo/ngo