Re: [netmod] attributes in draft-lhotka-netmod-yang-json

Andy Bierman <andy@yumaworks.com> Fri, 21 March 2014 15:38 UTC

Return-Path: <andy@yumaworks.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 583261A098A for <netmod@ietfa.amsl.com>; Fri, 21 Mar 2014 08:38:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.978
X-Spam-Level:
X-Spam-Status: No, score=-1.978 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham
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 k5pGkrU_WFs2 for <netmod@ietfa.amsl.com>; Fri, 21 Mar 2014 08:38:04 -0700 (PDT)
Received: from mail-qa0-f50.google.com (mail-qa0-f50.google.com [209.85.216.50]) by ietfa.amsl.com (Postfix) with ESMTP id 39D591A09AA for <netmod@ietf.org>; Fri, 21 Mar 2014 08:37:55 -0700 (PDT)
Received: by mail-qa0-f50.google.com with SMTP id o15so2562616qap.37 for <netmod@ietf.org>; Fri, 21 Mar 2014 08:37:45 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=eIU8RVK04Oy24WSXDMDy0HFbVihwqjnmoDUTd/cBShM=; b=RlY3f1ycDlpCuQzc0EIzHB9xRrl3yFdhEtEFS+qeOn2AQTEXFhEtkaGBLPAtCjVw+O Um9+BFauFh3LE0QjaR1DAJ/Uox0ma/zFmE0cYMgjCHHPU1wSpkTsMee71/WbHTwzf1vK omNVJy/55qUYtyGnLXKFMqQppSMsfN/I56uVVCGLgASA7Qx1kWHx0dBNfzZgiJ7GJH7r kQEhh5OCY3dPgga4Ac0knX2cEyXpXKGy7M4QYXl7XsU7dYJnDCL4RuLdoCsEiAO/AVyr efhT3q6QQ0D7/2P9+6kOZ0saCQi6fO1EcqNEN9OTgTl51dTCQ/Uhl/KXGmU2/vZNl1h6 U3Pg==
X-Gm-Message-State: ALoCoQn4D5151CBLKCkls5nXMCLcILGCwkbKHLUMwaWQV9tzpp44q6VoCM/lcvXshgpYLknEKl0x
MIME-Version: 1.0
X-Received: by 10.224.112.6 with SMTP id u6mr33272890qap.78.1395416265651; Fri, 21 Mar 2014 08:37:45 -0700 (PDT)
Received: by 10.140.104.194 with HTTP; Fri, 21 Mar 2014 08:37:45 -0700 (PDT)
In-Reply-To: <CABCOCHT3AJR0u=-GV1eM8geL-F2j7HSBsw0uBb1DYDvZio6eCA@mail.gmail.com>
References: <3FADE5E8-88AC-4FD0-A2F6-72F408FAFFC4@juniper.net> <20140320.150426.496532825.mbj@tail-f.com> <CABCOCHT3AJR0u=-GV1eM8geL-F2j7HSBsw0uBb1DYDvZio6eCA@mail.gmail.com>
Date: Fri, 21 Mar 2014 08:37:45 -0700
Message-ID: <CABCOCHSM7CwAPFOZ4qzzTtTRRX0LWE2Gb+ZWzmDpwBGSKRGhOg@mail.gmail.com>
From: Andy Bierman <andy@yumaworks.com>
To: Martin Bjorklund <mbj@tail-f.com>
Content-Type: multipart/alternative; boundary="001a11c2e848d407b604f51faae8"
Archived-At: http://mailarchive.ietf.org/arch/msg/netmod/utyiULB2f-ENd4ntsRDaVq0FH4w
Cc: "netmod@ietf.org" <netmod@ietf.org>
Subject: Re: [netmod] attributes in draft-lhotka-netmod-yang-json
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.15
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: <http://www.ietf.org/mail-archive/web/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: Fri, 21 Mar 2014 15:38:09 -0000

On Thu, Mar 20, 2014 at 8:25 AM, Andy Bierman <andy@yumaworks.com> wrote:

>
>
>
> On Thu, Mar 20, 2014 at 7:04 AM, Martin Bjorklund <mbj@tail-f.com> wrote:
>
>> Dean Bogdanovic <deanb@juniper.net> wrote:
>> > Hi,
>> >
>> > In draft yang leaf node is defined as name value pair in json
>> >
>> > If it would be represented, as an object then we can assign attributes
>> to it.
>> >
>> > Example
>> > "host-name" {
>> >    "data" : "router",
>> >       "attributes" : { "protect" : protect}
>> > }
>> >
>> > We need attributes for several things, so lets try to figure out how to
>> enable
>> > them.
>>
>> I agree that the lack of attributes is a problem with the JSON
>> mapping.
>>
>> The problem with your solution is that it adds noise to the normal
>> case where there are no attributes.  We're using another encoding:
>>
>>    "host-name": "router",
>>    "@host-name": {
>>        "protect": "protect",
>>        ...
>>     }
>>
>> Yep, not very elegant...
>>
>>

More importantly, it doesn't work for lists or leaf-lists.
The attributes cannot be siblings (or ancestors) of the target data node.

Consider the following YANG data-stmt, and how an attribute
would be encoded in every data node (as a worse-case example).


container top {
  list A {
    key id;
    leaf id { type string; }
    leaf-list aa { type int8; }
  }
  leaf host-name { type string; }
}

Plain JSON

{ "top" : {
  "A" : [
    { "id":"entry-1",
      "aa": [42, 19]
    },
    { "id":"entry-2",
      "aa" : [99, 11]
    } ]
  },
  "host-name":"router"
}

Add attribute to each node:
   leaf owner { type string; }

With Owner Attribute using RESTCONF encoding:

{ "top" : {
  "@owner":"system",
  "A" : [
    { "@owner":"admin1",
      "id" : {
        "@owner":"admin1",
        "id": "entry-1"
      },
      "aa" : [ { "@owner":"admin1",  "aa": 42 },
                 { "@owner":"admin1",  "aa": 19 } ]
    },
    { "@owner":"admin2",
      "id" : {
        "@owner":"admin2",
        "id": "entry-2"
      },
      "aa" : [ { "@owner":"admin2",  "aa": 99 },
                 { "@owner":"admin2",  "aa": 11 } ]
    } ]
  },
  "host-name" : { "@owner":"system",
                         "host-name":"router" }
}


This is not elegant either, but it works for all YANG node types.
How would your encoding look for this example?



Andy




>
> This is how RESTCONF encodes these attributes in a leaf:
> (see sec. 3.4.1)
>
>    "host-name" : {
>        "@protect" : "protect",
>        "host-name" : "router"
>    }
>
> Lada says that this is a YANG to JSON mapping and YANG has no attributes,
> so the attribute encoding is in RESTCONF.  I think it would be better
> if there was 1 mapping, instead of a different mapping in each protocol
> that uses this JSON encoding of YANG data.
>
> I do not think YANG needs to model attributes!
> The protocol may need to use them to tag data with meta-data.
> We do not need to model some leafs as attributes and others
> as child nodes in YANG data models.  Use RelaxNG instead
> of YANG to do that.
>
>
>
>
>> /martin
>>
>>
> Andy
>
>
>> _______________________________________________
>> netmod mailing list
>> netmod@ietf.org
>> https://www.ietf.org/mailman/listinfo/netmod
>>
>
>