summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Martinelli <stevemar@ca.ibm.com>2015-09-10 16:06:32 -0500
committerLin Hua Cheng <os.lcheng@gmail.com>2015-10-02 01:20:06 +0000
commit4733fd0d3cd328a8abbd62cbfabd973b0986c58c (patch)
tree26a504a93cc3d587bc49e03d2256a6a7ce8dbb81
parenta4483a05137bbd3ed416b6a61687315095ccced7 (diff)
downloadpython-openstackclient-4733fd0d3cd328a8abbd62cbfabd973b0986c58c.tar.gz
Add support for showing account details
add the command `openstack account show` that lists details about the object store account that the user authenticated against. Partial-Bug: #1501943 Change-Id: I1246dafee812b63a41d43be4e3598224364a2c11
-rw-r--r--doc/source/command-objects/account.rst10
-rw-r--r--openstackclient/api/object_store_v1.py21
-rw-r--r--openstackclient/object/v1/account.py14
-rw-r--r--setup.cfg1
4 files changed, 45 insertions, 1 deletions
diff --git a/doc/source/command-objects/account.rst b/doc/source/command-objects/account.rst
index 6783fd6b..db4ad9b1 100644
--- a/doc/source/command-objects/account.rst
+++ b/doc/source/command-objects/account.rst
@@ -19,6 +19,16 @@ Set account properties
Set a property on this account (repeat option to set multiple properties)
+account show
+------------
+
+Display account details
+
+.. program:: account show
+.. code:: bash
+
+ os account show
+
account unset
-------------
diff --git a/openstackclient/api/object_store_v1.py b/openstackclient/api/object_store_v1.py
index c817b650..afc5b4c1 100644
--- a/openstackclient/api/object_store_v1.py
+++ b/openstackclient/api/object_store_v1.py
@@ -411,6 +411,23 @@ class APIv1(api.BaseAPI):
# registered in the catalog
self.create("", headers=headers)
+ def account_show(self):
+ """Show account details"""
+
+ # NOTE(stevemar): Just a HEAD request to the endpoint already in the
+ # catalog should be enough.
+ response = self._request("HEAD", "")
+ data = {}
+ for k, v in response.headers.iteritems():
+ data[k] = v
+ # Map containers, bytes and objects a bit nicer
+ data['Containers'] = data.pop('x-account-container-count', None)
+ data['Objects'] = data.pop('x-account-object-count', None)
+ data['Bytes'] = data.pop('x-account-bytes-used', None)
+ # Add in Account info too
+ data['Account'] = self._find_account_id()
+ return data
+
def account_unset(
self,
properties,
@@ -433,3 +450,7 @@ class APIv1(api.BaseAPI):
if headers:
self.create("", headers=headers)
+
+ def _find_account_id(self):
+ url_parts = urlparse(self.endpoint)
+ return url_parts.path.split('/')[-1]
diff --git a/openstackclient/object/v1/account.py b/openstackclient/object/v1/account.py
index 1f38b96a..4ff890ce 100644
--- a/openstackclient/object/v1/account.py
+++ b/openstackclient/object/v1/account.py
@@ -13,10 +13,11 @@
"""Account v1 action implementations"""
-
import logging
from cliff import command
+from cliff import show
+import six
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -46,6 +47,17 @@ class SetAccount(command.Command):
)
+class ShowAccount(show.ShowOne):
+ """Display account details"""
+
+ log = logging.getLogger(__name__ + '.ShowAccount')
+
+ @utils.log_method(log)
+ def take_action(self, parsed_args):
+ data = self.app.client_manager.object_store.account_show()
+ return zip(*sorted(six.iteritems(data)))
+
+
class UnsetAccount(command.Command):
"""Unset account properties"""
diff --git a/setup.cfg b/setup.cfg
index f33e7c6d..c8432707 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -332,6 +332,7 @@ openstack.network.v2 =
openstack.object_store.v1 =
account_set = openstackclient.object.v1.account:SetAccount
+ account_show = openstackclient.object.v1.account:ShowAccount
account_unset = openstackclient.object.v1.account:UnsetAccount
container_create = openstackclient.object.v1.container:CreateContainer
container_delete = openstackclient.object.v1.container:DeleteContainer