Hi Ying,<div><br></div><div>Thanks for the detailed example.  You are correct, this is inline with what I was thinking. </div><div><br></div><div>A "data extension" mechanism like this would let any interested party cleanly expose additional properties for API port objects, and as Alex mentioned, potentially for API network objects as well.  From an internal Quantum architecture perspective, we'll have to discuss how this data gets passed to the plugin, what validation happens at the API layer, as well as how plugins are able go beyond basic data extension to add new API methods and objects.  This is what I'd like to tackle with the blueprint: <a href="https://blueprints.launchpad.net/network-service/+spec/quantum-api-extensions">https://blueprints.launchpad.net/network-service/+spec/quantum-api-extensions</a></div>

<div><br></div><div>During the meeting tomorrow we can see if people are largely on the same page, in which case we can move on to the blueprint on this.  </div><div><br></div><div>Dan</div><div><br></div><div><br><div class="gmail_quote">

On Mon, May 23, 2011 at 7:48 PM, Ying Liu (yinliu2) <span dir="ltr"><<a href="mailto:yinliu2@cisco.com">yinliu2@cisco.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Hi Dan,</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal">

<span style="font-size:11.0pt;color:#1F497D">Totally agree. “Data Extensions” is the way we can extend the <key, value> list for non-base keys. </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Actually, we can use this mechanism to extend the extensible <key, value> construct proposed earlier, assuming that data construct is already in the name space. </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">The extension can be something like this (pdf and wadl files defines extension content):</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"><extension name="Port Configuration Extension"</span></p><p class="MsoNormal">

<span style="font-size:11.0pt;color:#1F497D">               namespace="<a href="http://docs.rackspacecloud.com/network/api/ext/conf/v1.0" target="_blank">http://docs.rackspacecloud.com/network/api/ext/conf/v1.0</a>"</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">alias="CSCO-CONF"</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"><               </span></p><p class="MsoNormal">

<span style="font-size:11.0pt;color:#1F497D">        <atom:link rel="describedby" type="application/pdf"</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">                   href="<a href="http://docs.ciscocloud.com/network/api/ext/net-conf-20111111.pdf" target="_blank">http://docs.ciscocloud.com/network/api/ext/net-conf-20111111.pdf</a>"/></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">        <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">                   href="<a href="http://docs.ciscocloud.com/network/api/ext/net-conf.wadl" target="_blank">http://docs.ciscocloud.com/network/api/ext/net-conf.wadl</a>"/></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">        <description></span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">            Adds the configurations to the port.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">        </description></span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">   </extension></span></p><p class="MsoNormal">

<span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">The data extension:</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">{</span></p><p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">    "port" : {</span></p>

<p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">        "id" : 8,</span></p><p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">        "name" : "My L2 Network",</span></p>

<p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">        "created_at" : "2011-05-18 18:30:40",</span></p><p class="MsoNormal" style="background:silver">

<span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">        "status" : "Active",</span></p><p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">        "configureations" : {</span></p>

<p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">               "<i>COSO-CONF:acl</i>" : "</span><span style="color:#23302D">permit ip any 209.165.201.2 255.255.255.255</span><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">",</span></p>

<p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">               "vlan_segment" : "5"</span></p><p class="MsoNormal" style="background:silver">

<span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">               }</span></p><p class="MsoNormal" style="background:silver"><span style="font-size:10.0pt;font-family:"Courier New";color:#23302D">}</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Thus, the registration, discovery and promotion mechanism can all follow the standard extension mechanism.  Just my understanding, please correct me if I missed something here.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Best,</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Ying</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">

<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> Dan Wendlandt [mailto:<a href="mailto:dan@nicira.com" target="_blank">dan@nicira.com</a>] <br><b>Sent:</b> Monday, May 23, 2011 4:54 PM<br>

<b>To:</b> Alex Neefus<br><b>Cc:</b> Ying Liu (yinliu2); <a href="mailto:openstack@lists.launchpad.net" target="_blank">openstack@lists.launchpad.net</a><br><b>Subject:</b> Re: [Openstack] [NetStack] Quantum Service API extension proposal</span></p>

</div></div><div><div></div><div class="h5"><p class="MsoNormal"> </p><p class="MsoNormal"> </p><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal"> </p><div><p class="MsoNormal">On Mon, May 23, 2011 at 1:05 PM, Alex Neefus <<a href="mailto:alex@mellanox.com" target="_blank">alex@mellanox.com</a>> wrote:</p>

<div><div><p class="MsoNormal"><span style="color:#1F497D">Hi All – </span></p><p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">I wanted to lend support to this proposal, however I don’t think we should be so quick to say this whole thing is an extension.  </span> </p>

</div></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Hi Alex, all, </p><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">I'd like to try and level-set here for a minute, as I don't believe people are saying that such a mechanism itself would be an extension, but rather that it would be a mechanism for plugins to expose extensions.  </p>

</div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Here is the situation as I understand it:  I believe most people would feel that having a conf/cap/profile attribute on ports and networks in the core API is (at least) one reasonable way of letting plugins exposing additional data via the Quantum API.  Where the issue of OpenStack extensions would come in is providing a mechanism to introduce new key-value pairs to something like the conf/cap/profile attribute.  I'm not expert on API extensibility, but doing so seems to be a direct application of the "Data Extensions" portion of the OpenStack extensions proposal (see slide 29 of <a href="http://www.slideshare.net/RackerWilliams/openstack-extensions" target="_blank">http://www.slideshare.net/RackerWilliams/openstack-extensions</a>)</p>

</div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">The OpenStack extensions proposal focuses on standardizing several key questions around introducing new data, such as these key-value pairs: </p></div>
<div>
<p class="MsoNormal">- How do you prevent naming conflicts between keys?  </p></div><div><p class="MsoNormal">- How does someone easily determine whether a Quantum instance supports a certain type of functionality (i.e., a certain key)?</p>

</div><div><p class="MsoNormal">- How does one get access to documentation on the format + type of the "value" portion of the key-value pair? (values may be nested objects in complex scenarios).  </p></div><div>

<p class="MsoNormal">- How do we handle the official "promotion" of a key-value pair from an extension to being part of the "base"?  </p></div><div><p class="MsoNormal">  </p></div><div><p class="MsoNormal">

In my opinion these all seem like good things to standardize across OpenStack services and hence be part of Quantum.  </p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">My original response was motivated by the fact that the proposal didn't seem to mention using the OpenStack extension mechanism to expose non "base" key-value pairs in the conf/cap/profile attribute.  Based on Rick's response it seems like the plan is in fact to try and use OpenStack extensions, so I'm hoping we're largely on the same page, fingers crossed :)   </p>

</div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Dan</p></div></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal"> </p></div><blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">

<div><div><p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">We benefit a lot from having a standard capabilities mechanism as part of our core Quantum API. I like Ying’s key value method as well. I think it’s logical, clean and scalable. I propose that basic read access of “cap” off of our major objects: network, port, interface be included in our first release. </span></p>

<p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">So in summary I would like to encourage us to add:</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black">GET  /networks/{net_id}/conf</span></p>

<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black">GET  /networks/{net_id}/ports/{port_id}/conf/</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black">GET  {entity}/VIF/conf/</span></p>

<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black"> </span></p><p class="MsoNormal"><span style="color:#1F497D">Each of these would return a list of keys.</span></p><p class="MsoNormal">

<span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">Additionally Quantum base should support </span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black">GET  /networks/{net_id}/conf/{key}</span></p>

<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black">GET  /networks/{net_id}/ports/{port_id}/conf/{key}</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black">GET  {entity}/VIF/conf/{key}</span></p>

<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black"> </span></p><p class="MsoNormal"><span style="color:#1F497D">Where {key} is the name of either a standard capability or an extention capability. We can define an error code now to designate a capability not supported by the plugin. (i.e. 472 – CapNotSupported)</span></p>

<p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">Finally we don’t need to standardize on every capability that might be supported if we provide this simple mechanism. Specific capabilities Key,Value sets can be added later but or included as vendor specific extensions.</span></p>

<p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">I’m happy to add this to the wiki if there is consensus. <span style="background:yellow">Rick/Dan</span> – Maybe this should be a topic for Tuesdays meeting. </span></p>

<p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">Alex</span></p><p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="color:#1F497D">---</span></p>

<p class="MsoNormal"><span style="color:#1F497D">Alex Neefus</span></p><p class="MsoNormal"><span style="color:#1F497D">Senior System Engineer | Mellanox Technologies</span></p><p class="MsoNormal"><span style="color:#1F497D">(o) <a href="tel:617.337.3116" target="_blank">617.337.3116</a> | (m) <a href="tel:201.208.5771" target="_blank">201.208.5771</a> | (f) <a href="tel:617.337.3019" target="_blank">617.337.3019</a></span></p>

<p class="MsoNormal"><span style="color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black"> </span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black"> </span></p>

<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";color:black"> </span></p><p class="MsoNormal"><span style="color:#1F497D"> </span></p><div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">

<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> openstack-bounces+alex=<a href="http://mellanox.com" target="_blank">mellanox.com</a>@<a href="http://lists.launchpad.net" target="_blank">lists.launchpad.net</a> [mailto:<a href="mailto:openstack-bounces%2Balex" target="_blank">openstack-bounces+alex</a>=<a href="http://mellanox.com" target="_blank">mellanox.com</a>@<a href="http://lists.launchpad.net" target="_blank">lists.launchpad.net</a>] <b>On Behalf Of </b>Ying Liu (yinliu2)<br>

<b>Sent:</b> Saturday, May 21, 2011 1:10 PM<br><b>To:</b> <a href="mailto:openstack@lists.launchpad.net" target="_blank">openstack@lists.launchpad.net</a><br><b>Subject:</b> [Openstack] [NetStack] Quantum Service API extension proposal</span></p>

</div></div><div><div><p class="MsoNormal"> </p><p class="MsoNormal">Hi all,</p><p class="MsoNormal"> </p><p class="MsoNormal">We just posted a proposal for OpenStack Quantum Service API extension on community wiki page at <a href="http://wiki.openstack.org/QuantumAPIExtensions?action=AttachFile&do=view&target=quantum_api_extension.pdf" target="_blank">http://wiki.openstack.org/QuantumAPIExtensions?action=AttachFile&do=view&target=quantum_api_extension.pdf</a></p>

<p class="MsoNormal">or </p><p class="MsoNormal"><a href="http://wiki.openstack.org/QuantumAPIExtensions?action=AttachFile&do=view&target=quantum_api_extension.docx" target="_blank">http://wiki.openstack.org/QuantumAPIExtensions?action=AttachFile&do=view&target=quantum_api_extension.docx</a></p>

<p class="MsoNormal"> </p><p class="MsoNormal">Please review and let us know your comments/suggestions. An etherpad page is created for API extension discussion <a href="http://etherpad.openstack.org/uWXwqQNU4s" target="_blank">http://etherpad.openstack.org/uWXwqQNU4s</a></p>

<p class="MsoNormal"> </p><p class="MsoNormal">Best,</p><p class="MsoNormal">Ying</p></div></div></div></div><p class="MsoNormal" style="margin-bottom:12.0pt"><br>_______________________________________________<br>Mailing list: <a href="https://launchpad.net/~openstack" target="_blank">https://launchpad.net/~openstack</a><br>

Post to     : <a href="mailto:openstack@lists.launchpad.net" target="_blank">openstack@lists.launchpad.net</a><br>Unsubscribe : <a href="https://launchpad.net/~openstack" target="_blank">https://launchpad.net/~openstack</a><br>

More help   : <a href="https://help.launchpad.net/ListHelp" target="_blank">https://help.launchpad.net/ListHelp</a></p></blockquote></div><p class="MsoNormal" style="margin-bottom:12.0pt"><br><br clear="all"><br>-- <br>~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>

Dan Wendlandt <br>Nicira Networks, Inc. <br><a href="http://www.nicira.com" target="_blank">www.nicira.com</a> | <a href="http://www.openvswitch.org" target="_blank">www.openvswitch.org</a><br>Sr. Product Manager <br>cell: <a href="tel:650-906-2650" value="+16509062650" target="_blank">650-906-2650</a><br>

~~~~~~~~~~~~~~~~~~~~~~~~~~~</p></div></div></div></div></div></div></blockquote></div><br><br clear="all"><br>-- <br>~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>Dan Wendlandt <br>Nicira Networks, Inc. <br><a href="http://www.nicira.com">www.nicira.com</a> | <a href="http://www.openvswitch.org">www.openvswitch.org</a><br>

Sr. Product Manager <br>cell: 650-906-2650<br>~~~~~~~~~~~~~~~~~~~~~~~~~~~<br><br>
</div>