<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}
span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">As far as I know, such capabilities are planned in the HEAT project.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Ilya Shakhat [mailto:ishakhat@mirantis.com]
<br>
<b>Sent:</b> Wednesday, January 30, 2013 3:37 PM<br>
<b>To:</b> OpenStack Development Mailing List<br>
<b>Subject:</b> Re: [openstack-dev] LBaaS Pool Member API<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hi Srini, <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The current LBaaS API can be thought as low-level API. I agree that there should be one more layer that handles VM Group and whenever it changes calls LBaaS API and modifies members. That layer may also handle things like monitoring (restart
hanging instances), performance (expand VM group), etc. I suppose it is an area we need to consider for the post-grizzly release.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Ilya<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">2013/1/29 Addepalli Srini-B22160 <<a href="mailto:B22160@freescale.com" target="_blank">B22160@freescale.com</a>><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks Anand and Ilya</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I understood your answer. From you answer, I understand that there would be some other layer of
API on top of the currently defined API.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">But as I understand the API defined here
</span><span style="font-family:"Arial","sans-serif""><a href="http://wiki.openstack.org/Quantum/LBaaS/API_1.0" target="_blank">http://wiki.openstack.org/Quantum/LBaaS/API_1.0</a> it
</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">is expected to be used by Horizon. If that is indeed the case, don’t you think this is the API where “VM Group” configuration should go as part of pool member definition?
I am thinking that there would be some other logic in plugin or driver to enumerate the IP addresses of “VM Group” and configure the LB device or LB VM. Is there a need for additional layer of API on top of this?</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Srini</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Ilya Shakhat [mailto:<a href="mailto:ishakhat@mirantis.com" target="_blank">ishakhat@mirantis.com</a>]
<br>
<b>Sent:</b> Monday, January 28, 2013 7:15 AM<br>
<b>To:</b> OpenStack Development Mailing List<br>
<b>Subject:</b> Re: [openstack-dev] LBaaS Pool Member API</span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi Ravi, <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">During discussions of API we considered several use cases and chose more specific case when member is specified by IP address. This makes API more low-level and covers case when
user balances between existing VMs. To implement the use case of "elastic" members it will be needed additional layer, that communicates with Nova and Quantum core from one side and LBaaS API on the other. That solution is subject of future feature requests. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt">Ilya<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">2013/1/28 Ravi Chunduru <<a href="mailto:ravivsn@gmail.com" target="_blank">ravivsn@gmail.com</a>><o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt">I am posting this question on behalf of Srini as per his request that his mail got rejected. Discard if original mail is received.<o:p></o:p></p>
<pre><span style="font-family:"Arial","sans-serif"">Hi,</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">I am not sure this question was answered earlier.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">Pool Member API as defined <a href="http://wiki.openstack.org/Quantum/LBaaS/API_1.0" target="_blank">http://wiki.openstack.org/Quantum/LBaaS/API_1.0</a> =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> is shown below for easy reference.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">"address" parameter is IP address of VM that is expected to take up the loa=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">d.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">In Openstack environment, application VMs' IP addresses are assigned dyna=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">mically by Quantum IPAM. This API (Add Pool member) seems to be expectin=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">g IP address. Admin configuring LB may not know the IP address. Moreover =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">these application VMs are brought up dynamically upon the load and also bro=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">ught down when load goes down. That is, pool members need to be added or r=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">emoved dynamically. So, my question is who would be calling this API? It =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">can't be through Horizon pages as user don't know the IP addresses.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">To make client and GUI development easier, is it not good to take "VM grou=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">p" instead of "address"? Internally, quantum can figure out the IP add=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">resses of VMs in the VM group (by monitoring VM bring up/down events) and =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">program the LB device dynamically with the IP addresses.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">My understanding is that in openstack world, VM grouping is typically achi=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">eved using "metadata" that is passed to 'nova boot'. "Role" metadata key=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> is normally used to represent the role of VM. If that is indeed the case,=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> "role" value can be taken as input to this API (Add Pool Member) function=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">. For example, tenant can use VM group called "Web-Server-Group-10". W=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">hen tenant brings up webserver VM that need to participate in taking up the=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> load, it can be given "Web-Server-Group-10" as "role". Tenant can also=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> configure the LB with "Web-Server-Group-10" as pool member. As long as =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">quantum LB plugin has intelligence to enumerate the IP addresses of VMs tha=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">t are brought up with "Web-Server-Group_10", it should be able to configur=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">e load balancer device using appropriate LB drivers.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">I am not sure whether this is a valid concern. If it is not, can somebody =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">point me to right place on how this problem is solved?</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> Create Pool Members</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">Verb URI Description</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">POST /v1.0/members Add members to pools.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> Normal Response Code(s): 202</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> Error Response Code(s): serviceFault (500), serviceUnavailable =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">(503), unauthorized (401), badRequest (400), overLimit (413)</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> When a member is created, it is assigned a unique identifier th=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">at can be used for mutating operations such as changing the admin_state or =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">the weight of a member, or removing the member from the pool.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> The caller of this operation must specify at least the followin=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">g attributes of the Pool:</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">* tenant_id: only required if the caller has an admin role and wants =</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">to create a pool for another tenant.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">* address: the IP address of the pool member on the pool's network.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">* port: The port on which the pool member listens for requests or con=</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">nections.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">* pool_id: The pool to which the member belongs.</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif""> </span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">Thanks</span><o:p></o:p></pre>
<pre><span style="font-family:"Arial","sans-serif"">Srini</span><o:p></o:p></pre>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#888888"> </span><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#888888">Ravi</span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"><br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><o:p></o:p></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>