[openstack-dev] Manila client (v1.1.0) region support
Joe Meadows
Joe.Meadows at hds.com
Thu Apr 30 17:23:04 UTC 2015
Hi,
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.
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.
Initially this worked exactly as expected when using a Manila client that I installed from GitHub following the instructions at https://urldefense.proofpoint.com/v2/url?u=http-3A__netapp.github.io_openstack_2014_08_15_manila-2Ddevstack_&d=AwIGaQ&c=DZ-EF4pZfxGSU6MfABwx0g&r=zHvLuN-cA8dJrDKv-7gpbBCgBAKPaAzJfG6sccaIdHHNpjwlcFjsdjPhFr9XPGnV&m=V37u0qx0ILzWPG7XsUs5_D2uR6KRjHYV2vSQ20UQnEA&s=gagpiobFCwxAaoXUTt9lRA6-g4vNiC_VDR-TQDX8IR0&e= . <https://urldefense.proofpoint.com/v2/url?u=http-3A__netapp.github.io_openstack_2014_08_15_manila-2Ddevstack_&d=AwIGaQ&c=DZ-EF4pZfxGSU6MfABwx0g&r=zHvLuN-cA8dJrDKv-7gpbBCgBAKPaAzJfG6sccaIdHHNpjwlcFjsdjPhFr9XPGnV&m=V37u0qx0ILzWPG7XsUs5_D2uR6KRjHYV2vSQ20UQnEA&s=gagpiobFCwxAaoXUTt9lRA6-g4vNiC_VDR-TQDX8IR0&e= > 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.
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.
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.
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.
--- a/client.py 2015-04-22 16:05:10.000000000 -0700
+++ b/client.py 2015-04-22 16:00:56.000000000 -0700
@@ -142,10 +142,21 @@
service_type)
if service_type in catalog:
- for e_type, endpoint in catalog.get(service_type)[0].items():
- if str(e_type).lower() == str(endpoint_type).lower():
- service_catalog_url = endpoint
- break
+ # JAMJAM START
+ srvCat=catalog.get(service_type)
+ for catalogEntry in srvCat:
+ if region_name != "":
+ region=catalogEntry.get("region")
+ if region != region_name:
+ continue;
+ #for e_type, endpoint in catalog.get(service_type)[0].items():
+ # JAMJAM END
+ for e_type, endpoint in catalogEntry.items():
+ if str(e_type).lower() == str(endpoint_type).lower():
+ service_catalog_url = endpoint
+ break
+ if service_catalog_url:
+ break
if not service_catalog_url:
raise RuntimeError("Could not find Manila endpoint in catalog")
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?
Many thanks in advance
Joe Meadows
HNAS Engineering
Hitachi Data Systems
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150430/d6a4a211/attachment.html>
More information about the OpenStack-dev
mailing list