[openstack-dev] [Quantum][LBaaS] LBaaS API 1.0 spec draft

Palanisamy, Anand apalanisamy at paypal.com
Mon Oct 29 22:41:49 UTC 2012


Youcef & Team,

Finally, I got sometime today after 1 week of marathon with OpenStack PROD release issues.  I could not follow up LBaaS mailing thread.

Please let me know if we are ready to create Blue Prints today or we want to do it as part of tomorrow's meeting.

Thanks
Anand

From: Youcef Laribi <Youcef.Laribi at eu.citrix.com<mailto:Youcef.Laribi at eu.citrix.com>>
Date: Mon, 29 Oct 2012 18:23:54 +0000
To: Ilya Shakhat <ishakhat at mirantis.com<mailto:ishakhat at mirantis.com>>
Cc: Sachin Thakkar <sthakkar at vmware.com<mailto:sthakkar at vmware.com>>, Serge Maskalik <smaskalik at vmware.com<mailto:smaskalik at vmware.com>>, Eugene Nikanorov <enikanorov at mirantis.com<mailto:enikanorov at mirantis.com>>, Samuel Bercovici <SamuelB at radware.com<mailto:SamuelB at radware.com>>, Rudra Rugge <rrugge at vmware.com<mailto:rrugge at vmware.com>>, Alex Gosse <Alex.Gosse at riverbed.com<mailto:Alex.Gosse at riverbed.com>>, Leon Cui <lcui at vmware.com<mailto:lcui at vmware.com>>, Brent Busby <bbusby at ebay.com<mailto:bbusby at ebay.com>>, Kobi Samoray <KobiS at Radware.com<mailto:KobiS at Radware.com>>, "apalanisamy at paypal.com<mailto:apalanisamy at paypal.com>" <apalanisamy at paypal.com<mailto:apalanisamy at paypal.com>>, John Gruber <J.Gruber at F5.com<mailto:J.Gruber at F5.com>>, Chinmay Naik <cnaik at paypal.com<mailto:cnaik at paypal.com>>, Oleg Bondarev <obondarev at mirantis.com<mailto:obondarev at mirantis.com>>, Eugene Kirpichev <ekirpichev at mirantis.com<mailto:ekirpichev at mirantis.com>>, Roman Alekseenkov <ralekseenkov at mirantis.com<mailto:ralekseenkov at mirantis.com>>, Salvatore Orlando <sorlando at nicira.com<mailto:sorlando at nicira.com>>, Peter Mellquist <peter.mellquist at hp.com<mailto:peter.mellquist at hp.com>>, Dan Wendlandt <dan at nicira.com<mailto:dan at nicira.com>>, "OpenStack Development Mailing List (openstack-dev at lists.openstack.org<mailto:openstack-dev at lists.openstack.org>)" <openstack-dev at lists.openstack.org<mailto:openstack-dev at lists.openstack.org>>
Subject: RE: [openstack-dev][Quantum][LBaaS] LBaaS API 1.0 spec draft

Hi Ilya,

Thanks to you and the team for your detailed review and your comments, much appreciated! Let me go through them:
Last Tuesday we discussed where to put 'lb_method' attribute and decided to keep it in both VIP and Pool and implement inheritance. Well.. from fresh view this looks confusing, There will be some users who will operate with lb_method via VIP and others - via Pool, and sooner or later one type will take over other. The inheritance could be useful if we had >1 pools, but we've decided to put this out of core scope. For case of multiple pools it would be more appropriate to call attribute 'selector' or 'rule', just like in F5.
Yes only one pool is supported in Core API, but we wanted to keep the door open to people who want to build L7 rules extensions and add several pools. In this case, they will need the lb_method on pool as each pool might be using a different method for load-balancing. But I guess, if they are extending the VIP object (to configure L7 rules and to add “extra” pools), they can also extend the Pool object and add an “lb_method” attribute to it too, so this can be removed from core. Let’s discuss this in tomorrow’s meeting.
How to retrieve error details for async calls? May we add an attribute 'error_details' to all objects and fill it in case of error?
Good question. Ideally, all validation should be done on the request at submission time, and once it is accepted, the request should succeed asynchronously on the plugin. But realistically, validation might not be rigorous enough at submission time, and an error might still be discovered later by the plugin, so when status of a resource is set to “ERROR”, we could have another field as you suggest in all resources explaining what caused the status to be set to “ERROR”.

For DELETE requests if no body is returned then HTTP code should be 204 "No Content". As an alternative way we may want to return object that is scheduled for deletion with status=PENDING_DELETE and HTTP code 202.
Yes good point. I’ll update the spec.
We introduced operations to retrieve list of supported protocols and LB methods. Besides these there are two more that are driver-dependent: health monitoring and session persistence. I suppose we need to add operations for them too.
I would regard the type of health monitors and session persistence methods described in the spec as mandatory for all drivers to supported. If they are not supported by some drivers, then we should remove them from the core spec. There should be some guarantee for users of the API that some functionality is supported by al drivers/plugins. Extensions (through drivers) can add extra lb methods, protocols, health monitors, session persistence types, etc.  May be we can replace this by a capability call to list everything rather than having a separate API for each. I’ll see what the other OpenStack projects do.
In Remove a Pool operation there's a note: "Attempting to remove a pool that is used in a VIP will result in a badRequest (400) error. First remove the pool from the VIP, then you can destroy the pool and its members." Since VIP.pool_id is now scalar value would it be more correct to require removal of the whole VIP object before removing Pool?
I don’t think this will entirely solve the problem because sometimes you might want to remove the pool but keep the VIP. The idea I had is that you remove the pool from the VIP by replacing it the VIP’s pool_id with another Pool that you created. That way, you ensure that a VIP always has a pool and at the same time, break the association between the VIP and the old pool. The old pool now being free (not attached to any VIP), can be safely removed.
Let's add a note that all update operations adopt patch semantics (like Quantum does)
Good point. Yes, the semantics of “PUT” in REST is not universally agreed upon :)

Normal Response Code for 'List VIPs' and 'Retrieve VIP details' should be 200 (not 202)
In 'Delete Health Monitor' operation the title for example should be "Delete a TCP Monitor" (not Update)
Good catches. Will update.
Youcef

From: Ilya Shakhat [mailto:ishakhat at mirantis.com]
Sent: Monday, October 29, 2012 6:59 AM
To: Youcef Laribi
Cc: Sachin Thakkar; Serge Maskalik; Eugene Nikanorov; Samuel Bercovici; Rudra Rugge; Alex Gosse; Leon Cui; Brent Busby; Kobi Samoray; Anand Palanisamy; John Gruber; Chinmay Naik; Oleg Bondarev; Eugene Kirpichev; Roman Alekseenkov; Salvatore Orlando; Peter Mellquist; Dan Wendlandt; OpenStack Development Mailing List (openstack-dev at lists.openstack.org<mailto:openstack-dev at lists.openstack.org>)
Subject: Re: [openstack-dev][Quantum][LBaaS] LBaaS API 1.0 spec draft

Youcef,

Please find comments and questions below:

  1.  Last Tuesday we discussed where to put 'lb_method' attribute and decided to keep it in both VIP and Pool and implement inheritance. Well.. from fresh view this looks confusing, There will be some users who will operate with lb_method via VIP and others - via Pool, and sooner or later one type will take over other. The inheritance could be useful if we had >1 pools, but we've decided to put this out of core scope. For case of multiple pools it would be more appropriate to call attribute 'selector' or 'rule', just like in F5.
  2.  How to retrieve error details for async calls? May we add an attribute 'error_details' to all objects and fill it in case of error?
  3.  For DELETE requests if no body is returned then HTTP code should be 204 "No Content". As an alternative way we may want to return object that is scheduled for deletion with status=PENDING_DELETE and HTTP code 202.
  4.  We introduced operations to retrieve list of supported protocols and LB methods. Besides these there are two more that are driver-dependent: health monitoring and session persistence. I suppose we need to add operations for them too.
  5.  In Remove a Pool operation there's a note: "Attempting to remove a pool that is used in a VIP will result in a badRequest (400) error. First remove the pool from the VIP, then you can destroy the pool and its members." Since VIP.pool_id is now scalar value would it be more correct to require removal of the whole VIP object before removing Pool?
  6.  Let's add a note that all update operations adopt patch semantics (like Quantum does)
  7.  Normal Response Code for 'List VIPs' and 'Retrieve VIP details' should be 200 (not 202)
  8.  In 'Delete Health Monitor' operation the title for example should be "Delete a TCP Monitor" (not Update)
Thanks for great job on putting this together! We are ready to start the implementation.

Ilya.


2012/10/27 Youcef Laribi <Youcef.Laribi at eu.citrix.com<mailto:Youcef.Laribi at eu.citrix.com>>
I have put a first draft of the LBaaS API on the wiki page  http://wiki.openstack.org/Quantum/LBaaS/API_1.0, so please have a look before next week’s meeting. There is still some work to be done on it, but the essential details to start the implementation should be there.

Thanks,
Youcef
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20121029/9ded2983/attachment-0001.html>


More information about the OpenStack-dev mailing list