<div>Hi Ying,</div><div><meta charset="utf-8"><blockquote type="cite"><span style="border-collapse: separate; font-family: 'Lucida Grande'; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-size: medium; "><div lang="EN-US" link="blue" vlink="purple">
<div><div style="margin-top: 0in; margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0.5in; font-size: 10.5pt; font-family: Consolas; "><font class="Apple-style-span" color="#993300"><i>1. <span> </span>Extension standard.</i></font></div>
</div></div></span></blockquote></div><div><div class="gmail_quote"><div style="font-family: Times; font-size: medium; "><meta charset="utf-8"><blockquote type="cite"><span style="border-collapse: separate; font-family: 'Lucida Grande'; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-size: medium; "><div lang="EN-US" link="blue" vlink="purple">
<div><div style="margin-top: 0in; margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0.5in; font-size: 10.5pt; font-family: Consolas; "><font class="Apple-style-span" color="#993300"><i>One extension could be added is "attribute extension" to existing resources. In our use case, we need to create Portprofile and later refer it as a port's attribute. With current framework, we can create "Portprofile" as a resource through "ResourceExtension". But how does the plug-in know about this extension and refer the portprofile when the port is created?</i></font></div>
</div></div></span></blockquote></div></div></div><div>If by 'attribute extension' you mean something like adding the portprofile info to the get response of the port resource, this can be handled through the current RequestExtension. The RequestExtensionTest in test_extensions.py should give you an example of this.</div>
<div>While creating either the RequestExtension or the ResourceExtension, you would have added some sort of a handler for it. Now this handler should be able to call the plugin code that adds/retrieves the port profile. All this custom Extensions code would be sitting in a configurable folder within quantum itself to make this possible. Jorge or the Titans could correct me if im wrong on on any of this.</div>
<div><meta charset="utf-8"><blockquote type="cite"><span style="border-collapse: separate; font-family: 'Lucida Grande'; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-size: medium; "><div lang="EN-US" link="blue" vlink="purple">
<div><div style="margin-top: 0in; margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: 10.5pt; font-family: Consolas; ">   <font class="Apple-style-span" color="#cc0000"><i>2. Relationship between extension and plug-in.</i></font></div>
</div></div></span></blockquote></div><div>Extensions is the middleware which can call plugin code. The plugin code need not know about extensions at all.</div><meta charset="utf-8"><div>A Plugin that has special features would need a specific extension that would be able to expose resources or actions or attributes by calling the plugin code.</div>
<div>If a single extension wants to cater to multiple plugins, that is also possible if these plugins have a uniform interface that the extension can understand.</div><div><br></div><div>When we consider extensions along with plugins we could have some new scenarios to consider.</div>
<div>One of them is the ability to switch off extensions based on the plugin loaded.</div><div>Right now all extensions are enabled by default, we dont have a way of turning off extensions (i think). This could cause problems when plugins have specific extensions. Since we load all extensions, extensions that dont make sense to the currently loaded plugin will still be enabled. Loading all extensions will also cause confusion to a client making the GET /extensions call. This call would return extensions of all the plugins instead of listing only those extensions that can work with the current plugin.</div>
<div>This could be fixed in a couple of ways that I can think of right now:</div><div>1) We could enhance the extension framework to load extensions from multiple folders (Currently all extensions are expected to be in a single folder). </div>
<div>    Then we can keep plugin specific extensions in their own folders, and change configuration to load only those folders that make sense for the current plugin.</div><div>2) The Extension framework could ask each extension if it should load the extension.</div>
<div>    Then, each plugin specific extension could check if its plugin is loaded and decide whether it should also be loaded.</div><div><br></div><div>Thanks,</div><div>Rajaram</div><div><br></div><div><br></div><div class="gmail_quote">
On Fri, Jun 10, 2011 at 2:49 AM, Troy Toman <span dir="ltr"><<a href="mailto:troy.toman@rackspace.com">troy.toman@rackspace.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">





<div style="word-wrap:break-word">
Ying,
<div><br>
</div>
<div>I can provide some insight since I am in the current timezone. Comments below. Perhaps Santhosh or are team can provide some additional thoughts later.</div>
<div><br>
</div>
<div>Troy</div>
<div><br>
<div><div class="im">
<div>On Jun 9, 2011, at 4:10 PM, Ying Liu (yinliu2) wrote:</div>
<br>
<blockquote type="cite"><span style="border-collapse:separate;font-family:'Lucida Grande';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium">
<div lang="EN-US" link="blue" vlink="purple">
<div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
Hi all,</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
Thanks Santhosh for the great work about Quantum_Framework.</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
I looked at the code and have some questions.</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0.5in;font-size:10.5pt;font-family:Consolas">
<span>1.<span> <span> </span></span></span>Extension standard.</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0.5in;font-size:10.5pt;font-family:Consolas">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0.5in;font-size:10.5pt;font-family:Consolas">
In the netstack meeting, we agreed to adopt Openstack's extension standard. Jorge is still working on the standard draft. I'm not sure whether this work followed old extension mechanism or Jorge's presentation on the summit. One extension could be added is
 "attribute extension" to existing resources. In our use case, we need to create Portprofile and later refer it as a port's attribute. With current framework, we can create "Portprofile" as a resource through "ResourceExtension". But how does the plug-in know
 about this extension and refer the portprofile when the port is created?</div>
</div>
</div>
</span></blockquote>
<div><br>
</div></div>
This initial Quantum extensions merge prop essentially ports the current extension code that is in Nova and puts it into Quantum. I'm not completely sure how the current Nova extension code maps to Jorge's summit presentation but I think it should be pretty
 close. Perhaps Jorge or someone form Team Titan can answer that. </div>
<div><br>
</div>
<div><br>
</div>
<div><div class="im">
<blockquote type="cite"><span style="border-collapse:separate;font-family:'Lucida Grande';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium">
<div lang="EN-US" link="blue" vlink="purple">
<div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0.5in;font-size:10.5pt;font-family:Consolas">
</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:10.5pt;font-family:Consolas">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:10.5pt;font-family:Consolas">
   2. Relationship between extension and plug-in.</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:10.5pt;font-family:Consolas">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0.5in;font-size:10.5pt;font-family:Consolas">
Extension seems be separated from the plug-in. If we want to extend existing plug-in, can we do it through extensions' api? How is extension made aware of plug-in’s existence? And how does the plug-in know the new resources created by extensions?</div>

</div>
</div>
</span></blockquote>
<div><br>
</div>
</div><div>Since Nova doesn't have plug-ins in the same way as Quantum, I don't know that we've considered that relationship fully. It is a good topic for discussion. </div>
<div><br>
</div>
<blockquote type="cite"><span style="border-collapse:separate;font-family:'Lucida Grande';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium">
<div lang="EN-US" link="blue" vlink="purple">
<div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0.5in;font-size:10.5pt;font-family:Consolas">
</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:10.5pt;font-family:Consolas">
 </div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:10.5pt;font-family:Consolas">
Best,</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:10.5pt;font-family:Consolas">
Ying</div>
<div style="margin-top:0in;margin-right:0in;margin-bottom:0.0001pt;margin-left:0in;font-size:11pt;font-family:Calibri, sans-serif">
 </div>
</div>
_______________________________________________<br>
Mailing list:<span> </span><a href="https://launchpad.net/~openstack" style="color:blue;text-decoration:underline" target="_blank">https://launchpad.net/~openstack</a><br>
Post to     :<span> </span><a href="mailto:openstack@lists.launchpad.net" style="color:blue;text-decoration:underline" target="_blank">openstack@lists.launchpad.net</a><br>
Unsubscribe :<span> </span><a href="https://launchpad.net/~openstack" style="color:blue;text-decoration:underline" target="_blank">https://launchpad.net/~openstack</a><br>
More help   :<span> </span><a href="https://help.launchpad.net/ListHelp" style="color:blue;text-decoration:underline" target="_blank">https://help.launchpad.net/ListHelp</a><br>
</div>
</span></blockquote>
</div>
<br>
</div>
<pre>Confidentiality Notice: This e-mail message (including any attached or
embedded documents) is intended for the exclusive and confidential use of the
individual or entity to which this message is addressed, and unless otherwise
expressly indicated, is confidential and privileged information of Rackspace.
Any dissemination, distribution or copying of the enclosed material is prohibited.
If you receive this transmission in error, please notify us immediately by e-mail
at <a href="mailto:abuse@rackspace.com" target="_blank">abuse@rackspace.com</a>, and delete the original message.
Your cooperation is appreciated.
</pre></div>

<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">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><br>
<br></blockquote></div><br>