On 06/11/2012 11:28 AM, Dan Wendlandt wrote:
> 
> 
> On Mon, Jun 11, 2012 at 6:15 AM, Robert Kukura <rkuk...@redhat.com
> <mailto:rkuk...@redhat.com>> wrote:
> 
>     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.
> 
> 
> Just shoving values into a post and having them passed in as kwargs
> works (we've done this in the past), but what I don't like about that
> approach is that if we don't actually use an extension, there's no good
> way for an API user to query the set of supported extensions and see if
> that extension is running.  Likewise, if extra arguments are passed into
> the plugin as kwargs, an API might pass them in and believe they were
> accepted, when in fact they were just ignored by the plugin.  

Good points Dan. I'm definitely exposing the provider-networks
functionality as a proper extension so it can be queried, etc. As I
mentioned, the extended request and response body attributes will belong
to the provider extension namespace.

Regarding the "ignored by the plugin" point, I've been thinking the
extension should define a provider:network_type argument. Any plugin
supporting the provider extension would be required to raise an
exception if the network_type argument indicated a type that it didn't
support. Each value of network_type would correspond to a set of
additional arguments (i.e. provider:vlan_id) that a plugin supporting
that network_type would need to honor. The default value for
network_type would be 'virtual', indicating the standard quantum
functionality is desired. Initial network_type values would be
'virtual', 'vlan', and 'flat', and maybe 'gre' for openvswitch. Does
something like this make sense?

-Bob

> 
> Dan
>  
> 
> 
>     -Bob
> 
>     >
>     > Thanks,
>     > Irena
>     >
>     > -----Original Message-----
>     > From: netstack-bounces+irenab=mellanox....@lists.launchpad.net
>     <mailto:mellanox....@lists.launchpad.net>
>     [mailto:netstack-bounces+irenab
>     <mailto:netstack-bounces%2Birenab>=mellanox....@lists.launchpad.net
>     <mailto:mellanox....@lists.launchpad.net>] On Behalf Of Robert Kukura
>     > Sent: Friday, June 08, 2012 6:21 PM
>     > To: Dan Wendlandt; netstack@lists.launchpad.net
>     <mailto: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>
>     >>> <mailto: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>
>     <http://www.nicira.com>
>     >>> twitter: danwendlandt
>     >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     >>>
>     >>
>     >>
>     >> _______________________________________________
>     >> Mailing list: https://launchpad.net/~openstack
>     >> Post to     : openst...@lists.launchpad.net
>     <mailto: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
>     <mailto:netstack@lists.launchpad.net>
>     > Unsubscribe : https://launchpad.net/~netstack
>     > More help   : https://help.launchpad.net/ListHelp
> 
> 
> 
> 
> -- 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Dan Wendlandt 
> Nicira, Inc: www.nicira.com <http://www.nicira.com>
> twitter: danwendlandt
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 



-- 
Mailing list: https://launchpad.net/~netstack
Post to     : netstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~netstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to