<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body 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 class="moz-txt-link-freetext" 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=">
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=">
</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>
Joe Meadows<br>
HNAS Engineering<br>
Hitachi Data Systems<br>
<br>
</body>
</html>