summaryrefslogtreecommitdiff
path: root/cinderclient/contrib
diff options
context:
space:
mode:
authorIvan Kolodyazhny <e0ne@e0ne.info>2017-01-31 14:33:32 +0200
committerIvan Kolodyazhny <e0ne@e0ne.info>2017-03-24 13:24:50 +0200
commit60f92db7049b4f66e5198b86bfecc1029b6cdccd (patch)
tree632f138c58ac784dec276e8c0c29e240fd425397 /cinderclient/contrib
parent29d29a7cd4c31fd96157beae90cb483403afe1af (diff)
downloadpython-cinderclient-60f92db7049b4f66e5198b86bfecc1029b6cdccd.tar.gz
Fix noauth support
This patch includes several improvements: 1. Use keystoneauth1 plugin mechanism for auth plugins. 2. Implements CinderNoAuthPlugin. 3. Deletes non-working cinderclient.auth_plugin module. 4. Deprecates --bypass-url in flavor of --os-endpoint to be consistent with keystoneauth1 plugins. 5. Deprecates in --os-auth-system in falvor of --os-auth-type to be consistent with keystoneauth1 plugins. Both bypass_url and os_auth_system params are not changed for client objects to not break backward compatibility for Python API. How to use noauth with cinderclient CLI: OS_USER_ID=userid OS_PROJECT_ID=projectis cinder --os-auth-type noauth --os-endpoint=http://localhost:8776/v2 list Change-Id: I3be59a5a39235acbc3334e0a0b797081507a5c88 Closes-Bug: #1657156
Diffstat (limited to 'cinderclient/contrib')
-rw-r--r--cinderclient/contrib/__init__.py0
-rw-r--r--cinderclient/contrib/noauth.py77
2 files changed, 77 insertions, 0 deletions
diff --git a/cinderclient/contrib/__init__.py b/cinderclient/contrib/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cinderclient/contrib/__init__.py
diff --git a/cinderclient/contrib/noauth.py b/cinderclient/contrib/noauth.py
new file mode 100644
index 0000000..59cc51e
--- /dev/null
+++ b/cinderclient/contrib/noauth.py
@@ -0,0 +1,77 @@
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import os
+
+from keystoneauth1 import loading
+from keystoneauth1 import plugin
+
+
+class CinderNoAuthPlugin(plugin.BaseAuthPlugin):
+ def __init__(self, user_id, project_id=None, roles=None, endpoint=None):
+ self._user_id = user_id
+ self._project_id = project_id if project_id else user_id
+ self._endpoint = endpoint
+ self._roles = roles
+ self.auth_token = '%s:%s' % (self._user_id,
+ self._project_id)
+
+ def get_headers(self, session, **kwargs):
+ return {'x-user-id': self._user_id,
+ 'x-project-id': self._project_id,
+ 'X-Auth-Token': self.auth_token}
+
+ def get_user_id(self, session, **kwargs):
+ return self._user_id
+
+ def get_project_id(self, session, **kwargs):
+ return self._project_id
+
+ def get_endpoint(self, session, **kwargs):
+ return '%s/%s' % (self._endpoint, self._project_id)
+
+ def invalidate(self):
+ pass
+
+
+class CinderOpt(loading.Opt):
+ @property
+ def argparse_args(self):
+ return ['--%s' % o.name for o in self._all_opts]
+
+ @property
+ def argparse_default(self):
+ # select the first ENV that is not false-y or return None
+ for o in self._all_opts:
+ v = os.environ.get('Cinder_%s' % o.name.replace('-', '_').upper())
+ if v:
+ return v
+ return self.default
+
+
+class CinderNoAuthLoader(loading.BaseLoader):
+ plugin_class = CinderNoAuthPlugin
+
+ def get_options(self):
+ options = super(CinderNoAuthLoader, self).get_options()
+ options.extend([
+ CinderOpt('user-id', help='User ID', required=True,
+ metavar="<cinder user id>"),
+ CinderOpt('project-id', help='Project ID',
+ metavar="<cinder project id>"),
+ CinderOpt('endpoint', help='Cinder endpoint',
+ dest="endpoint", required=True,
+ metavar="<cinder endpoint>"),
+ ])
+ return options