<div dir="ltr">Hello, Joe<div><br></div><div>It is  bug, "<span style="color:rgb(24,54,145);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:16.7999992370605px;white-space:pre">region_name"</span> is not used as should be. Feel free to file a bug for it.</div><div><br></div><div>Kind Regards<br>Valeriy Ponomaryov<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 30, 2015 at 8:23 PM, Joe Meadows <span dir="ltr"><<a href="mailto:Joe.Meadows@hds.com" target="_blank">Joe.Meadows@hds.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">







<div bgcolor="#FFFFFF" text="#000000">

Hi,<br>

<br>

I work for Hitachi Data Systems (HDS) and am developing Manila support for our HNAS line of NAS server.  The HNAS server has an internal REST server so I am implementing the Manila API natively on the server.  For various reasons this is a better fit than the

 standard Python driver implementation.<br>

<br>

This implementation means that each HNAS server is its own endpoint so it gets added to Keystone as an endpoint using the Manila service Id.  I am using regions to distinguish between multiple HNAS servers or other Manila endpoints.  Therefore, when I add each

 HNAS endpoint I give that endpoint a unique region name.<br>

<br>

Initially this worked exactly as expected when using a Manila client that I installed from GitHub following the instructions at

<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__netapp.github.io_openstack_2014_08_15_manila-2Ddevstack_&d=AwMGaQ&c=DZ-EF4pZfxGSU6MfABwx0g&r=zHvLuN-cA8dJrDKv-7gpbBCgBAKPaAzJfG6sccaIdHHNpjwlcFjsdjPhFr9XPGnV&m=V37u0qx0ILzWPG7XsUs5_D2uR6KRjHYV2vSQ20UQnEA&s=gagpiobFCwxAaoXUTt9lRA6-g4vNiC_VDR-TQDX8IR0&e=" target="_blank">

http://netapp.github.io/openstack/2014/08/15/manila-devstack/</a>.  <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__netapp.github.io_openstack_2014_08_15_manila-2Ddevstack_&d=AwMGaQ&c=DZ-EF4pZfxGSU6MfABwx0g&r=zHvLuN-cA8dJrDKv-7gpbBCgBAKPaAzJfG6sccaIdHHNpjwlcFjsdjPhFr9XPGnV&m=V37u0qx0ILzWPG7XsUs5_D2uR6KRjHYV2vSQ20UQnEA&s=gagpiobFCwxAaoXUTt9lRA6-g4vNiC_VDR-TQDX8IR0&e=" target="_blank">

</a>For example, I could do 'manila --os-region-name HNAS1 list' and the request would route to the correct endpoint (i.e. HNAS server).  This Manila client shows version 1.0.2.<br>

<br>

Recently I tried this setup on another developer's OpenStack installation and the region name was ignored, though this client also claimed to be version 1.0.2.  Next I used pip to install python-manilaclient onto another machine, version 1.1.0, and again the

 region is ignored.  <br>

<br>

I stepped through the client code and found that when v1/client.py::__init__() searches for an endpoint it always takes the first one, never checking the region. 

<br>

<br>

I made a small change which makes the client behave how I'd like it to.  If region is not specified it retains the original behavior of returning the first endpoint.  If a region is specified then it will return the first endpoint with a matching region.  The

 patch is below, my changes are between the #JAMJAM comments.<br>

<br>

--- a/client.py    2015-04-22 16:05:10.000000000 -0700<br>

+++ b/client.py    2015-04-22 16:00:56.000000000 -0700<br>

@@ -142,10 +142,21 @@<br>

                 service_type)<br>

 <br>

             if service_type in catalog:<br>

-                for e_type, endpoint in catalog.get(service_type)[0].items():<br>

-                    if str(e_type).lower() == str(endpoint_type).lower():<br>

-                        service_catalog_url = endpoint<br>

-                        break<br>

+                # JAMJAM START<br>

+                srvCat=catalog.get(service_type)<br>

+                for catalogEntry in srvCat:<br>

+                    if region_name != "":<br>

+                        region=catalogEntry.get("region")<br>

+                        if region != region_name:<br>

+                            continue;<br>

+                    #for e_type, endpoint in catalog.get(service_type)[0].items():<br>

+                # JAMJAM END<br>

+                    for e_type, endpoint in catalogEntry.items():<br>

+                        if str(e_type).lower() == str(endpoint_type).lower():<br>

+                            service_catalog_url = endpoint<br>

+                            break<br>

+                        if service_catalog_url:<br>

+                            break<br>

 <br>

         if not service_catalog_url:<br>

             raise RuntimeError("Could not find Manila endpoint in catalog")<br>

<br>

So now, the obvious questions are; Is there already a way to specify a region that the Manila client will honor?  Is this patch fixing something?  Is this not a valid use of regions for Manila?<br>

<br>

Many thanks in advance   <br><span class=""><font color="#888888">

 Joe Meadows<br>

 HNAS Engineering<br>

 Hitachi Data Systems<br>

<br>

</font></span></div>



<br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</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><br></blockquote></div>
</div></div>