Hi Ying, We looked at your branch at https://code.launchpad.net/~cisco-openstack/quantum/plugin-framework. The extension code in this branch can be easily incorporated in the extension framework we are proposing.
Just for demo purposes, we put your portprofile extensions into our extension framework :-). You can see this working at lp:~raxnetworking/quantum/cisco_api_extension. The main "extensions" folder in this branch has your portprofiles extension code. Here the cisco plugin advertises that it supports the cisco portprofiles extension by implementing a method called "supports_extension". This has the advantage, as Dan mentions below, of ensuring that the plugin-specific cisco portprofile extension is loaded only if the cisco plugin is enabled. We still need some work around the framework before we raise a merge prop, but this should hopefully remove the confusion around how you can use the extension framework for plugin specific extensions. Thanks, Rajaram On Wed, Jul 20, 2011 at 4:34 AM, Dan Wendlandt <d...@nicira.com> wrote: > Adding main netstack list (now that we have it) to kick-off this discussion > again. > > Ying, the ability for a plugin at registration time to inform the API layer > of a plugin-specific API extension is definitely something I see as > critical. This API extension should be implemented by the plugin, giving > plugins a way to expose user control over a capability that only that plugin > implements. > > At a hight-level, I think of it as: > > 1) framework starts up, reads config, and loads plugin > 2) framework asks plugin what extensions that plugin will the implement. > 3) plugin provides info about each extension it supports, as well as the > method to call (if needed) to handle calls to that API extension (e.g., if a > new API method is introduced). This list of extension info could refer to > "standard" extensions (i.e. those implemented by multiple extensions) or > "plugin-specific" extensions (i.e., those only implemented by the plugin > itself). The only difference, I suspect, would be where the python > class(es) that define the extension are placed in the directory structure. > > It would be helpful for me to understand if this is the same capability you > are looking for, or if not, what additional capabilities you think we need. > > > Dan > > > On Wed, Jul 13, 2011 at 1:50 PM, Ying Liu (yinliu2) <yinl...@cisco.com>wrote: > >> Hi Rajaram and all,**** >> >> ** ** >> >> Thanks for the great work on extension framework.**** >> >> ** ** >> >> Per my understanding, the standard extension mechanism is dealing with >> pure API extensions. (Please correct me if I missed something.) By “pure” >> API extension, I mean **** >> >> **1. **All the extensions just function within web service layer.** >> ** >> >> **2. **Application P adds extended APIs. Those extended APIs are >> only used within P’s scope.**** >> >> ** ** >> >> I agree current extension mechanism is needed for above scenarios. **** >> >> ** ** >> >> However, as discussed earlier, our use case is little different. We need >> tightly coupled plug-in and API (service) extension. That is, when a new >> plug-in is developed, we define some functionalities and resources which are >> not part of quantum core. We need to expose those new resources and actions >> to users through extended REST services. Plus, those extended web services >> become part of quantum services. Any user application can use them with >> proper URL. **** >> >> ** ** >> >> Therefore, we need a different approach for such tightly coupled >> extensions. With current single plug-in quantum framework, the approach we >> took is directly adding new controllers for plug-in’s extended resources and >> actions. When we plug new plug-in into quantum, we anyway need to restart >> quantum service. At that time, we deploy new controllers. **** >> >> **** >> >> Currently, we use this approach to add extended REST services for our >> plug-ins. We will check in code these two days into our branch and will >> send a separate email for community’s review. If you have any questions, >> please let us know.**** >> >> ** ** >> >> Thanks,**** >> >> Ying**** >> >> ** ** >> >> ** ** >> >> ** ** >> >> *From:* Rajaram Mallya [mailto:rajarammal...@gmail.com] >> *Sent:* Wednesday, July 13, 2011 9:52 AM >> *To:* Somik Behera >> *Cc:* Dan Wendlandt; Troy; Ying Liu (yinliu2); Salvatore Orlando; Brad >> Hall; Ram Durairaj (radurair); jorge.willi...@rackspace.com; >> rax_network_service >> *Subject:* Re:Extensions and Plugins**** >> >> ** ** >> >> Hi Somik,**** >> >> ** ** >> >> Thanks for the comments. Agreed that the Use Case 2 mechanism also takes >> care of Use Case 1. The only reason we had the Use Case 1 mechanism was to >> make it more convenient for plugin developers/deployers to have the plugin >> code and related extensions all in one place. But I guess the usefulness of >> this may not be that great when compared to the complexity of having to >> understand two different ways to implement extensions.**** >> >> ** ** >> >> We can go ahead with only the standard extensions mechanism for now. If >> the Use Case 1 mechanism is deemed necessary, we can still implement it >> without causing compatibility problems for private extensions that might >> already be present at that time.**** >> >> ** ** >> >> Thanks,**** >> >> Rajaram**** >> >> ** ** >> >> On Tue, Jul 12, 2011 at 9:52 PM, Somik Behera <so...@nicira.com> wrote:** >> ** >> >> Hi Rajaram et. al., >> >> Thanks for the work so our and the continuing work on extensions with a >> "plugin" mechanism. I agree with your use cases elucidated below that cover >> the requirements I would ask for our extensibility story to address. >> >> The one thing that I am not sure is required or I am just not clear on is >> if we require 2 separate implementation mechanisms. If we just have the >> mechanism of standard extensions as described in Use Case 2, I believe that >> would enable anybody to write private extensions as long as the extension >> plugin packager deploys the extension plugin into the correct "well known" >> location. >> >> With that said, I think if we have 2 separate mechanisms, I am fine with >> that too. Something in the implementation step that is implicit but I would >> like to restate explicitly is: >> >> - "Extensions" as mentioned in both use cases refer to API extensions >> only. >> - A single plugin can implement many "extension" functionality and we will >> have multiple ways for the plugin to advertise which "extensions" it is >> implementing. >> >> Otherwise, I think this proposal is good. We should customize the sample >> extension that extends everything that is "extensible" and illustrates that >> using an implementation of both use cases. That would be a very big step >> forward in enabling the eco-system to start adding functionality into >> Quantum. >> >> Thanks, >> Somik**** >> >> ** ** >> >> On Thu, Jul 7, 2011 at 10:09 AM, Rajaram Mallya <rajarammal...@gmail.com> >> wrote:**** >> >> Hi all,**** >> >> ** ** >> >> As of right now, the extension code we ported from nova has a few >> limitations when it comes to plugins. These limitations should probably be >> addressed before we merge the extension framework into quantum. Based on the >> mails exchanged so far on this we see two distinct use cases for >> Plugin-Extensions interaction. (This is excluding the feature of dynamically >> adding extensions, which could be a separate discussion in itself.)**** >> >> ** ** >> >> 1.Use Case: **** >> >> A plugin could have special extensions that it doesnt share with >> other plugins.**** >> >> Implementation:**** >> >> Plugin will contain the extensions within its plugin directory in >> a well know subfolder. **** >> >> The extension framework can find out which plugin is currently >> loaded and load the plugins extension subfolder.**** >> >> **** >> >> 2. Use Case :**** >> >> There are well known standard extensions that a plugin might want >> to support.**** >> >> Here the APIs of the extension are standardized, but a plugin >> need not support some/any of the extensions.**** >> >> Implementation:**** >> >> Standard extensions exist in a configurable path.**** >> >> Each standard extension defines an interface (an abstract python >> class like QuantumPluginBase).**** >> >> The plugin will advertise which extensions it supports. **** >> >> The extension framework will make a compatibility check to see if >> the plugin has implemented the interface methods required for the std. >> extension.**** >> >> ** ** >> >> Please let us know other possible use cases that you see or alternative >> ideas around implementing them. When we implement this, we can have unit >> test cases that double up as usage examples to make extension usage clear to >> plugin implementors.**** >> >> ** ** >> >> Most of the features for extensions from Jorge's presentation are possible >> with the current extension framework. Some of them like such as extension >> headers, response extensions etc are less obvious in the framework. We are >> currently reshaping the unit tests around these to clearly demonstrate how >> these extensions can be implemented. We see only mime type extensions and >> Vendor id registries missing from the current extensions framework. Not sure >> how important these two things are right now from quantum's point of view. >> **** >> >> Based on Somik's inputs, with a README, the unit tests and some sample >> extensions that implement the features that the extension framework >> supports, I suppose we can make it fairly easy for people to implement >> extensions.**** >> >> ** ** >> >> Thanks, >> Rajaram**** >> >> >> >> **** >> >> -- >> Somik Behera | Nicira Networks, Inc. | so...@nicira.com<sbeh...@nicira.com> | >> office: 650-390-6790 | cell: 512-577-6645**** >> >> ** ** >> > > > > -- > ~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Dan Wendlandt > Nicira Networks, Inc. > www.nicira.com | www.openvswitch.org > Sr. Product Manager > cell: 650-906-2650 > ~~~~~~~~~~~~~~~~~~~~~~~~~~~ > >
-- Mailing list: https://launchpad.net/~netstack Post to : netstack@lists.launchpad.net Unsubscribe : https://launchpad.net/~netstack More help : https://help.launchpad.net/ListHelp