File 0001-Interactive-prompt-for-create-user.patch of Package python-keystoneclient

From 370a54c4e512649f6596393d11c636c70a8956ac Mon Sep 17 00:00:00 2001
From: Eric Brown <browne@vmware.com>
Date: Tue, 14 Jan 2014 09:19:42 -0800
Subject: [PATCH] Interactive prompt for create user

Execution of the shell will now prompt the user for a password if argument
'--pass' is specified without a following parameter.  In that way, a user does
not need to pass passwords on the command line.

Usage example:
$ keystone user-create --name bob --tenant admin --pass --enabled true
New Password:
Repeat New Password:

Closes-Bug: #1100116
Change-Id: I1f6d6322830972dfad19ebe2fe63e91f82ed8033
---
 keystoneclient/tests/v2_0/test_shell.py | 15 +++++++++++++++
 keystoneclient/v2_0/shell.py            | 10 +++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)
 mode change 100644 => 100755 keystoneclient/v2_0/shell.py

diff --git a/keystoneclient/tests/v2_0/test_shell.py b/keystoneclient/tests/v2_0/test_shell.py
index 1b6db20..7e10c6e 100644
--- a/keystoneclient/tests/v2_0/test_shell.py
+++ b/keystoneclient/tests/v2_0/test_shell.py
@@ -16,6 +16,7 @@ import cStringIO
 import os
 import sys
 
+import mock
 from mox3 import stubout
 from testtools import matchers
 
@@ -104,6 +105,20 @@ class ShellTests(utils.TestCase):
                  'name': 'new-user',
                  'tenantId': None}})
 
+    @mock.patch('sys.stdin', autospec=True)
+    def test_user_create_password_prompt(self, mock_stdin):
+        with mock.patch('getpass.getpass') as mock_getpass:
+            mock_getpass.return_value = 'newpass'
+            self.run_command('user-create --name new-user --pass')
+            self.fake_client.assert_called_anytime(
+                'POST', '/users',
+                {'user':
+                    {'email': None,
+                     'password': 'newpass',
+                     'enabled': True,
+                     'name': 'new-user',
+                     'tenantId': None}})
+
     def test_user_get(self):
         self.run_command('user-get 1')
         self.fake_client.assert_called_anytime('GET', '/users/1')
diff --git a/keystoneclient/v2_0/shell.py b/keystoneclient/v2_0/shell.py
old mode 100644
new mode 100755
index d241571..235f35f
--- a/keystoneclient/v2_0/shell.py
+++ b/keystoneclient/v2_0/shell.py
@@ -26,6 +26,7 @@ from keystoneclient.v2_0 import client
 
 
 CLIENT_CLASS = client.Client
+ASK_FOR_PASSWORD = object()
 
 
 def require_service_catalog(f):
@@ -70,8 +71,8 @@ def do_user_get(kc, args):
 @utils.arg('--tenant', '--tenant-id', metavar='<tenant>',
            help='New user default tenant')
 @utils.arg('--tenant_id', help=argparse.SUPPRESS)
-@utils.arg('--pass', metavar='<pass>', dest='passwd',
-           help='New user password')
+@utils.arg('--pass', metavar='<pass>', dest='passwd', nargs='?',
+           const=ASK_FOR_PASSWORD, help='New user password')
 @utils.arg('--email', metavar='<email>',
            help='New user email address')
 @utils.arg('--enabled', metavar='<true|false>', default=True,
@@ -84,7 +85,10 @@ def do_user_create(kc, args):
         tenant_id = args.tenant_id
     else:
         tenant_id = None
-    user = kc.users.create(args.name, args.passwd, args.email,
+    new_passwd = args.passwd
+    if args.passwd is ASK_FOR_PASSWORD:
+        new_passwd = utils.prompt_for_password()
+    user = kc.users.create(args.name, new_passwd, args.email,
                            tenant_id=tenant_id,
                            enabled=utils.string_to_bool(args.enabled))
     utils.print_dict(user._info)
-- 
1.8.5.2

openSUSE Build Service is sponsored by