summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago da Silva <thiago@redhat.com>2013-11-25 12:18:03 -0500
committerLuis Pabon <lpabon@redhat.com>2013-11-29 14:01:11 -0800
commitdb63e2e59962d9b8d1cb009ec25198a621c61f9f (patch)
treeff2f903b46162484b820dd57f171540a7e705f0a
parent6474e030bf91fb7985d9238f9f1031c0c8626067 (diff)
adding tabular output to swauth-list
swauth-list now shows lists of accounts, users and groups in a tabular format (default). JSON and plain-text options are still available Change-Id: I897009f5f6c05aa4c14e306bb6ad35234e993fcd Signed-off-by: Thiago da Silva <thiago@redhat.com> Reviewed-on: http://review.gluster.org/6347 Reviewed-by: Luis Pabon <lpabon@redhat.com> Tested-by: Luis Pabon <lpabon@redhat.com> Reviewed-on: http://review.gluster.org/6372
-rwxr-xr-xgluster/swift/common/middleware/gswauth/bin/swauth-list22
-rw-r--r--glusterfs-openstack-swift.spec1
-rw-r--r--test/functional_auth/gswauth/test_gswauth_cli.py17
-rw-r--r--tools/test-requires1
4 files changed, 34 insertions, 7 deletions
diff --git a/gluster/swift/common/middleware/gswauth/bin/swauth-list b/gluster/swift/common/middleware/gswauth/bin/swauth-list
index c49af04..7ad0974 100755
--- a/gluster/swift/common/middleware/gswauth/bin/swauth-list
+++ b/gluster/swift/common/middleware/gswauth/bin/swauth-list
@@ -26,6 +26,7 @@ from sys import argv, exit
from swift.common.bufferedhttp import http_connect_raw as http_connect
from swift.common.utils import urlparse
+from prettytable import PrettyTable
if __name__ == '__main__':
gettext.install('swauth', unicode=1)
@@ -34,11 +35,11 @@ Usage: %prog [options] [account] [user]
If [account] and [user] are omitted, a list of accounts will be output.
-If [account] is included but not [user], an account's information will be
-output, including a list of users within the account.
+If [account] is included but not [user], a list of users within the account
+will be output.
-If [account] and [user] are included, the user's information will be output,
-including a list of groups the user belongs to.
+If [account] and [user] are included, a list of groups the user belongs to
+will be ouptput.
If the [user] is '.groups', the active groups for the account will be listed.
'''.strip())
@@ -46,6 +47,10 @@ If the [user] is '.groups', the active groups for the account will be listed.
action='store_true', default=False, help='Changes the output from '
'JSON to plain text. This will cause an account to list only the '
'users and a user to list only the groups.')
+ parser.add_option('-j', '--json', dest='json_format',
+ action='store_true', default=False, help='Output in JSON format. '
+ 'This will print all information about given account or user, '
+ 'including stored password.')
parser.add_option('-A', '--admin-url', dest='admin_url',
default='http://127.0.0.1:8080/auth/', help='The URL to the auth '
'subsystem (default: http://127.0.0.1:8080/auth/')
@@ -82,5 +87,12 @@ If the [user] is '.groups', the active groups for the account will be listed.
info = json.loads(body)
for group in info[['accounts', 'users', 'groups'][len(args)]]:
print group['name']
- else:
+ elif options.json_format:
print body
+ else:
+ info = json.loads(body)
+ h = ['accounts', 'users', 'groups'][len(args)]
+ table = PrettyTable([h.title()])
+ for group in info[h]:
+ table.add_row([group['name']])
+ print table
diff --git a/glusterfs-openstack-swift.spec b/glusterfs-openstack-swift.spec
index c8ec54e..2fc0588 100644
--- a/glusterfs-openstack-swift.spec
+++ b/glusterfs-openstack-swift.spec
@@ -23,6 +23,7 @@ BuildRequires: python-setuptools
Requires : memcached
Requires : openssl
Requires : python
+Requires : python-prettytable
Requires : openstack-swift = 1.10.0
Requires : openstack-swift-account = 1.10.0
Requires : openstack-swift-container = 1.10.0
diff --git a/test/functional_auth/gswauth/test_gswauth_cli.py b/test/functional_auth/gswauth/test_gswauth_cli.py
index 2e6db11..f6c08df 100644
--- a/test/functional_auth/gswauth/test_gswauth_cli.py
+++ b/test/functional_auth/gswauth/test_gswauth_cli.py
@@ -34,6 +34,10 @@ class Utils:
return commands.getstatusoutput('swauth-delete-account %s -A %s -U %s -K %s' % (account_name,authurl, user, key))
@classmethod
+ def listAccounts(self,authurl='http://127.0.0.1:8080/auth/',user=config['admin_user'],key=config['admin_key']):
+ return commands.getstatusoutput('swauth-list -A %s -U %s -K %s' % (authurl, user, key))
+
+ @classmethod
def swauthPrep(self,authurl='http://127.0.0.1:8080/auth/',user=config['admin_user'],key=config['admin_key']):
return commands.getstatusoutput('swauth-prep -A %s -U %s -K %s' % (authurl, user, key))
@@ -56,8 +60,8 @@ class Utils:
@classmethod
def cleanAll(self):
#TODO:It's a dirty hack,any suggestions?
- commands.getstatusoutput('rm -rf '+os.path.join(config['devices'], config['gsmetadata_volume'], '*'))
- commands.getstatusoutput('rm -rf '+os.path.join(config['devices'], config['gsmetadata_volume'], '.*'))
+ commands.getstatusoutput('sudo rm -rf '+os.path.join(config['devices'], config['gsmetadata_volume'], '*'))
+ return commands.getstatusoutput('sudo rm -rf '+os.path.join(config['devices'], config['gsmetadata_volume'], '.*'))
class TestSwauthPrep(unittest.TestCase):
@@ -158,6 +162,15 @@ class TestAccount(unittest.TestCase):
self.assertNotEqual(status, 0, 'account deletion failed for accountdoesnotexist'+output)
#TODO:more cases
+ def testListAcounts(self):
+ (status,output)=Utils.addAccount('test')
+ self.assertEqual(status, 0, 'account creation failed'+output)
+
+ (status,output)=Utils.listAccounts()
+ self.assertEqual(output,
+ '+----------+\n| Accounts |\n+----------+\n| test |\n+----------+',
+ 'swauth-list failed:\n%s' % output)
+
class TestUser(unittest.TestCase):
diff --git a/tools/test-requires b/tools/test-requires
index 874e96f..6bf711e 100644
--- a/tools/test-requires
+++ b/tools/test-requires
@@ -11,3 +11,4 @@ nosehtmloutput
sphinx>=1.1.2
mock>=0.8.0
python-keystoneclient
+prettytable