On 06/10/2012 03:19 PM, Irena Berezovsky wrote: > Hi Robert, > May I add to your question also considerations regarding network creation - > POST operation? > I may be wrong in my understanding, but it seems to me that in case of > RequestExtension it will be possible to create Provider Network via a single > call. > In case of ResourceExtension it will require 2 calls; one for network > creation and second for "provider" attributes setting for previously created > network. Am I right? > In case of ResourceExtension Plugin on network creation should behave > differently for "provider" and other(virtual) network, i.e. skip VLAN > allocation. Seems that Plugin should be aware about Network type already > during network creation. > What do you think?
Hi Irena, I'd like to avoid this sort of two-step resource creation process. Adding new optional arguments to the existing POST operation that creates a new resource such as network seems to work, at least with JSON. I haven't looked into XML support for this yet. These arguments get passed through to the plugin as kwargs. Their names should use the extension's namespace prefix, but otherwise I don't think any explicit support in the extension framework is involved. -Bob > > Thanks, > Irena > > -----Original Message----- > From: netstack-bounces+irenab=mellanox....@lists.launchpad.net > [mailto:netstack-bounces+irenab=mellanox....@lists.launchpad.net] On Behalf > Of Robert Kukura > Sent: Friday, June 08, 2012 6:21 PM > To: Dan Wendlandt; netstack@lists.launchpad.net > Subject: [Netstack] Provider Networks extension advice (was Re: [Openstack] > question on get_network_details api call) > > Dan, Netstackers, > > I need some advice ASAP so I can proceed with the provider-networks BP > (https://blueprints.launchpad.net/quantum/+spec/provider-networks) > implementation. This BP will be implemented using a "provider" extension that > adds a number of optional attributes (eg. vlan tags) to the core network > resource. These attributes will be settable by and visible to those with > admin rights. > > The main decision I'm looking for advice on is whether to implement this > extension as a RequestExtension or as a ResourceExtension. See the email > quoted below for details. > > If implemented as a RequestExtension, these provider attributes would be > returned along with the core attributes from "GET > /tenants/{tenant_id}/networks/{network_id}.json", and potentially from all > API actions that return the core attributes. > > If implemented as a ResourceExtension, the provider attributes would be > accessed from a separate sub-resource, such as "GET > /tenants/{tenant_id}/networks/{network_id}/provider.json". > > As Dan suggested below, I think it would be preferable to extend the core > resource itself rather than define a new sub-resource. This would mean using > the RequestExtension approach. The issue with this is that I see no way to > support XML with this approach, but the ResourceExtension approach can > support both JSON and XML. > > Is the RequestExtension approach preferable? Is it acceptable even if it > cannot (currently) support XML? Or is there a way to extend the XML using a > RequestExtension that I'm missing? > > Thanks, > > -Bob > > > On 06/07/2012 05:19 PM, Robert Kukura wrote: >> On 06/02/2012 01:56 PM, Dan Wendlandt wrote: >>> Hi Irena, Bob, Salvatore, >>> >>> Just catching up the thread, and looping the netstack and openstack >>> lists in as well, as this info is general useful in my opinion. >>> >>> Our model with Quantum, like Nova, is that it is definitely ok to >>> extend the content of a core object with additional attributes. >>> These attributes should be formatted properly as extended attribute, >>> so that the "key" of the attribute is >>> <extension-alias>:<attribute-name> >>> >>> This is done pretty commonly within Nova. Two simple examples are: >>> - nova/api/openstack/compute/contrib/scheduler_hints.py >>> - nova/api/openstack/compute/contrib/extended_status.py >>> >>> I do not believe you need to (or should) modify the view-builder code >>> for the core object when you want to add an extended attribute to it. >> >> Thanks Dan! I've now had some success implementing an extension that >> creates a RequestExtension that adds extended attributes to the >> response for a core resource. At least with JSON - I have not been >> able to figure out how to do this for XML, if that is even possible in >> quantum. >> >>> Instead, the extension framework has you write a wsgi controller >>> specific to the extension that is inserted as its own stage into the >>> wsgi request and response processing pipeline. Thus, when the >>> request is passed in, your code gets a chance to parse the data, and >>> the the response is passed back, your code gets a chance to add data to it. >> >> The above description sounds more like a ResourceExtension than a >> RequestExtension. A ResourceExtension introduces a new Controller, >> whereas a RequestExtension just adds a handler function called by the >> core's RequestExtensionController. All examples and descriptions I've >> seen use ResourceExtension to introduce a new type of resource. Are >> you suggesting this mechanism can also be used to extend an existing >> core resource? Would this have any advantage over using a >> RequestExtension? I still don't see any way a ResourceExtension could >> add extended attributes into an XML response. >> >>> >>> Using the Nova code as example is probably the best bet if you can >>> find a good example within quantum. Quantum's extension framework >>> (and several other openstack projects) all use essentially the same model. >> >> The nova and quantum code seem to have diverged significantly. The >> nova examples use a nova.api.openstack.wsgi.extends decorator on >> methods of an extension-implemented Controller to do "request >> extensions", but quantum doesn't have this decorator. Also, nova uses >> XML templates that are extensible, whereas the _serialization_metadata >> in quantum core resources does not seem to be extensible. >> >> At this point, quantum's RequestExtension mechanism seems able to do >> the job for the provider-networks BP, assuming that a JSON-only >> solution is acceptable. If both JSON and XML support are needed, then, >> unless I am missing something, creating a new (sub-)resource using a >> ResourceExtension (similar to the portstats extension) seems like the >> only straightforward option. >> >> -Bob >> >>> >>> Dan >>> >>> >>> On Sat, Jun 2, 2012 at 8:43 AM, Robert Kukura <rkuk...@redhat.com >>> <mailto:rkuk...@redhat.com>> wrote: >>> >>> On 06/02/2012 05:02 AM, Irena Berezovsky wrote: >>> > Hi, >>> > Bob, Dan, >>> > I ran into following wiki page: >>> > >>> >>> http://wiki.openstack.org/QuantumAPIExtensionsaction=AttachFile&do=view&target=quantum_api_extension.pdf >>> >>> <http://wiki.openstack.org/QuantumAPIExtensionsaction=AttachFile&do=view&target=quantum_api_extension.pdf> >>> > 'port profile' is exactly what I was looking for to expose in the >>> plugin. >>> > I would like to add the port profile retrieval capability and >>> contribute the implementation. >>> > >>> > Can you please advise if there is any disagreement on getting it >>> into core API? Shall I do it via extension? >>> > Bob, seems that you are dealing with similar issues. >>> > What do you suggest? >>> > >>> > Thanks a lot, >>> > Irena >>> >>> Irena, >>> >>> I'm not sure there is any consensus around using a "network profile" for >>> this. I did see that document as well as archived discussion about >>> defining "port profile" and "network profile" as extensible collections >>> of attributes. But the existing "port profile" extension looks to be >>> Cisco-specific, and seems to serve a somewhat different purpose. >>> >>> My current thinking is that we'd be better off long term following the >>> lead of Nova and other projects in supporting "extension data" within >>> the existing resources instead of requiring introduction of a new >>> resource just to hold plugin-specific attributes. >>> >>> But, in the short term, it might make the most sense for each extension >>> just to provide its own resource extension with its attributes. That's >>> what I'm tentatively planning to do for the provider-network blueprint, >>> but would reconsider if there was consensus that either the "extension >>> data" support or a more general "network profile" should be added now. >>> >>> -Bob >>> >>> >>> >>> >>> -- >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> Dan Wendlandt >>> Nicira, Inc: www.nicira.com <http://www.nicira.com> >>> twitter: danwendlandt >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >> >> >> _______________________________________________ >> Mailing list: https://launchpad.net/~openstack >> Post to : openst...@lists.launchpad.net >> Unsubscribe : https://launchpad.net/~openstack >> More help : https://help.launchpad.net/ListHelp > > > -- > Mailing list: https://launchpad.net/~netstack > Post to : netstack@lists.launchpad.net > Unsubscribe : https://launchpad.net/~netstack > More help : https://help.launchpad.net/ListHelp -- Mailing list: https://launchpad.net/~netstack Post to : netstack@lists.launchpad.net Unsubscribe : https://launchpad.net/~netstack More help : https://help.launchpad.net/ListHelp