summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2021-09-30 15:32:00 +0200
committerRadomir Dopieralski <openstack@sheep.art.pl>2021-11-22 15:15:20 +0100
commit56c7b502c0162733c54663ef33de23928c31046f (patch)
treec1117fa8438003eef3402973c9ef4925321731b5
parentd5cb761763988217cdd00a7981a62e2083fd381f (diff)
downloadpython-keystoneclient-56c7b502c0162733c54663ef33de23928c31046f.tar.gz
Add access to /v3/auth/systems
Closes-bug: 1945649 Change-Id: I7df5d9bf3cfb0e58e0e129a56170c8fe33523a4c
-rw-r--r--keystoneclient/tests/unit/v3/test_auth_manager.py14
-rw-r--r--keystoneclient/v3/auth.py23
-rw-r--r--keystoneclient/v3/system.py26
3 files changed, 63 insertions, 0 deletions
diff --git a/keystoneclient/tests/unit/v3/test_auth_manager.py b/keystoneclient/tests/unit/v3/test_auth_manager.py
index 1857960..dec8b0c 100644
--- a/keystoneclient/tests/unit/v3/test_auth_manager.py
+++ b/keystoneclient/tests/unit/v3/test_auth_manager.py
@@ -62,3 +62,17 @@ class AuthProjectsTest(utils.ClientTestCase):
for d in domains:
self.assertIsInstance(d, auth.Domain)
+
+ def test_get_systems(self):
+ body = {'system': [{
+ 'all': True,
+ }]}
+
+ self.stub_url('GET', ['auth', 'system'], json=body)
+
+ systems = self.client.auth.systems()
+ system = systems[0]
+
+ self.assertEqual(1, len(systems))
+ self.assertIsInstance(system, auth.System)
+ self.assertTrue(system.all)
diff --git a/keystoneclient/v3/auth.py b/keystoneclient/v3/auth.py
index 6b8d6e9..4d85e24 100644
--- a/keystoneclient/v3/auth.py
+++ b/keystoneclient/v3/auth.py
@@ -16,10 +16,12 @@ from keystoneauth1 import plugin
from keystoneclient import base
from keystoneclient.v3 import domains
from keystoneclient.v3 import projects
+from keystoneclient.v3 import system
Domain = domains.Domain
Project = projects.Project
+System = system.System
class AuthManager(base.Manager):
@@ -31,6 +33,7 @@ class AuthManager(base.Manager):
_PROJECTS_URL = '/auth/projects'
_DOMAINS_URL = '/auth/domains'
+ _SYSTEM_URL = '/auth/system'
def projects(self):
"""List projects that the specified token can be rescoped to.
@@ -67,3 +70,23 @@ class AuthManager(base.Manager):
'domains',
obj_class=Domain,
endpoint_filter=endpoint_filter)
+
+ def systems(self):
+ """List Systems that the specified token can be rescoped to.
+
+ At the moment this is either empty or "all".
+
+ :returns: a list of systems.
+ :rtype: list of :class:`keystoneclient.v3.systems.System`.
+
+ """
+ try:
+ return self._list(self._SYSTEM_URL,
+ 'system',
+ obj_class=System)
+ except exceptions.EndpointNotFound:
+ endpoint_filter = {'interface': plugin.AUTH_INTERFACE}
+ return self._list(self._SYSTEM_URL,
+ 'system',
+ obj_class=System,
+ endpoint_filter=endpoint_filter)
diff --git a/keystoneclient/v3/system.py b/keystoneclient/v3/system.py
new file mode 100644
index 0000000..8d3edaf
--- /dev/null
+++ b/keystoneclient/v3/system.py
@@ -0,0 +1,26 @@
+# Copyright 2021 OpenStack Foundation
+# 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.
+
+from keystoneclient import base
+
+
+class System(base.Resource):
+ """Represents the deployment system, with all the services in it.
+
+ Attributes:
+ * all: boolean
+ """
+
+ pass