summaryrefslogtreecommitdiff
path: root/cinderclient/v3/pools.py
diff options
context:
space:
mode:
authorscottda <scott.dangelo@hpe.com>2016-03-31 09:20:29 -0600
committerscottda <scott.dangelo@hpe.com>2016-04-18 10:49:51 -0600
commit27e6f6f7f85ef0e5fcc37b96e67c870b84880760 (patch)
tree1e433f8e2ec54e208441eca98eaf2dde0c97561b /cinderclient/v3/pools.py
parent6e0b5f451c045484001696494ca5d9e89dbf6a40 (diff)
downloadpython-cinderclient-27e6f6f7f85ef0e5fcc37b96e67c870b84880760.tar.gz
Add /v3 endpoint support for cinderclient
Add support for Cinder API /v3 endpoint. A couple of unit tests for /v3 endpoint were added to v3/test_shell.py to ensure that the v3 shell works, and to also test that modules work with: from cinderclient.v2.availability_zones import * syntax. Change-Id: I6ae0ada221bebb4ab1850d9c99b10fcbb585201f Implements: https://blueprints.launchpad.net/python-cinderclient/+spec/add-v3-endpoint-support
Diffstat (limited to 'cinderclient/v3/pools.py')
-rw-r--r--cinderclient/v3/pools.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/cinderclient/v3/pools.py b/cinderclient/v3/pools.py
new file mode 100644
index 0000000..2f72605
--- /dev/null
+++ b/cinderclient/v3/pools.py
@@ -0,0 +1,62 @@
+# Copyright (C) 2015 Hewlett-Packard Development Company, L.P.
+# 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.
+
+"""Pools interface (v3 extension)"""
+
+import six
+
+from cinderclient import base
+
+
+class Pool(base.Resource):
+ NAME_ATTR = 'name'
+
+ def __repr__(self):
+ return "<Pool: %s>" % self.name
+
+
+class PoolManager(base.Manager):
+ """Manage :class:`Pool` resources."""
+ resource_class = Pool
+
+ def list(self, detailed=False):
+ """Lists all
+
+ :rtype: list of :class:`Pool`
+ """
+ if detailed is True:
+ pools = self._list("/scheduler-stats/get_pools?detail=True",
+ "pools")
+ # Other than the name, all of the pool data is buried below in
+ # a 'capabilities' dictionary. In order to be consistent with the
+ # get-pools command line, these elements are moved up a level to
+ # be attributes of the pool itself.
+ for pool in pools:
+ if hasattr(pool, 'capabilities'):
+ for k, v in six.iteritems(pool.capabilities):
+ setattr(pool, k, v)
+
+ # Remove the capabilities dictionary since all of its
+ # elements have been copied up to the containing pool
+ del pool.capabilities
+ return pools
+ else:
+ pools = self._list("/scheduler-stats/get_pools", "pools")
+
+ # avoid cluttering the basic pool list with capabilities dict
+ for pool in pools:
+ if hasattr(pool, 'capabilities'):
+ del pool.capabilities
+ return pools