Skip to content

Commit d6a2762

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add user CRUD commands"
2 parents d6a4fb8 + 0740d85 commit d6a2762

2 files changed

Lines changed: 255 additions & 1 deletion

File tree

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
# Copyright 2012 OpenStack LLC.
2+
# All Rights Reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
5+
# not use this file except in compliance with the License. You may obtain
6+
# a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
# License for the specific language governing permissions and limitations
14+
# under the License.
15+
#
16+
# vim: tabstop=4 shiftwidth=4 softtabstop=4
17+
18+
"""
19+
User action implementations
20+
"""
21+
22+
import logging
23+
24+
from cliff import lister
25+
from cliff import show
26+
27+
from openstackclient.common import command
28+
from openstackclient.common import utils
29+
30+
31+
class CreateUser(command.OpenStackCommand, show.ShowOne):
32+
"""Create user command"""
33+
34+
api = 'identity'
35+
log = logging.getLogger(__name__ + '.CreateUser')
36+
37+
def get_parser(self, prog_name):
38+
parser = super(CreateUser, self).get_parser(prog_name)
39+
parser.add_argument(
40+
'name',
41+
metavar='<user-name>',
42+
help='New user name',
43+
)
44+
parser.add_argument(
45+
'--password',
46+
metavar='<user-password>',
47+
help='New user password',
48+
)
49+
parser.add_argument(
50+
'--email',
51+
metavar='<user-email>',
52+
help='New user email address',
53+
)
54+
parser.add_argument(
55+
'--tenant',
56+
metavar='<tenant>',
57+
help='New default tenant name or ID',
58+
)
59+
enable_group = parser.add_mutually_exclusive_group()
60+
enable_group.add_argument(
61+
'--enable',
62+
dest='enabled',
63+
action='store_true',
64+
default=True,
65+
help='Enable user',
66+
)
67+
enable_group.add_argument(
68+
'--disable',
69+
dest='enabled',
70+
action='store_false',
71+
help='Disable user',
72+
)
73+
return parser
74+
75+
def get_data(self, parsed_args):
76+
self.log.debug('get_data(%s)' % parsed_args)
77+
identity_client = self.app.client_manager.identity
78+
if parsed_args.tenant:
79+
tenant_id = utils.find_resource(
80+
identity_client.tenants, parsed_args.tenant).id
81+
else:
82+
tenant_id = None
83+
user = identity_client.users.create(
84+
parsed_args.name,
85+
parsed_args.password,
86+
parsed_args.email,
87+
tenant_id=tenant_id,
88+
enabled=parsed_args.enabled,
89+
)
90+
91+
info = {}
92+
info.update(user._info)
93+
return zip(*sorted(info.iteritems()))
94+
95+
96+
class DeleteUser(command.OpenStackCommand):
97+
"""Delete user command"""
98+
99+
api = 'identity'
100+
log = logging.getLogger(__name__ + '.DeleteUser')
101+
102+
def get_parser(self, prog_name):
103+
parser = super(DeleteUser, self).get_parser(prog_name)
104+
parser.add_argument(
105+
'user',
106+
metavar='<user>',
107+
help='Name or ID of user to delete',
108+
)
109+
return parser
110+
111+
def run(self, parsed_args):
112+
self.log.debug('run(%s)' % parsed_args)
113+
identity_client = self.app.client_manager.identity
114+
user = utils.find_resource(
115+
identity_client.users, parsed_args.user)
116+
identity_client.users.delete(user.id)
117+
return
118+
119+
120+
class ListUser(command.OpenStackCommand, lister.Lister):
121+
"""List user command"""
122+
123+
api = 'identity'
124+
log = logging.getLogger(__name__ + '.ListUser')
125+
126+
def get_parser(self, prog_name):
127+
parser = super(ListUser, self).get_parser(prog_name)
128+
parser.add_argument(
129+
'--tenant',
130+
metavar='<tenant>',
131+
help='Name or ID of tenant to filter users',
132+
)
133+
parser.add_argument(
134+
'--long',
135+
action='store_true',
136+
default=False,
137+
help='Additional fields are listed in output',
138+
)
139+
return parser
140+
141+
def get_data(self, parsed_args):
142+
self.log.debug('get_data(%s)' % parsed_args)
143+
if parsed_args.long:
144+
columns = ('ID', 'Name', 'TenantId', 'Email', 'Enabled')
145+
else:
146+
columns = ('ID', 'Name')
147+
data = self.app.client_manager.identity.users.list()
148+
return (columns,
149+
(utils.get_item_properties(
150+
s, columns,
151+
formatters={},
152+
) for s in data),
153+
)
154+
155+
156+
class SetUser(command.OpenStackCommand):
157+
"""Set user command"""
158+
159+
api = 'identity'
160+
log = logging.getLogger(__name__ + '.SetUser')
161+
162+
def get_parser(self, prog_name):
163+
parser = super(SetUser, self).get_parser(prog_name)
164+
parser.add_argument(
165+
'user',
166+
metavar='<user>',
167+
help='Name or ID of user to change',
168+
)
169+
parser.add_argument(
170+
'--password',
171+
metavar='<user-password>',
172+
help='New user password',
173+
)
174+
parser.add_argument(
175+
'--email',
176+
metavar='<user-email>',
177+
help='New user email address',
178+
)
179+
parser.add_argument(
180+
'--tenant',
181+
metavar='<tenant>',
182+
help='New default tenant name or ID',
183+
)
184+
enable_group = parser.add_mutually_exclusive_group()
185+
enable_group.add_argument(
186+
'--enable',
187+
dest='enabled',
188+
action='store_true',
189+
default=True,
190+
help='Enable user (default)',
191+
)
192+
enable_group.add_argument(
193+
'--disable',
194+
dest='enabled',
195+
action='store_false',
196+
help='Disable user',
197+
)
198+
return parser
199+
200+
def run(self, parsed_args):
201+
self.log.debug('run(%s)' % parsed_args)
202+
identity_client = self.app.client_manager.identity
203+
user = utils.find_resource(
204+
identity_client.users, parsed_args.user)
205+
kwargs = {}
206+
if parsed_args.name:
207+
kwargs['name'] = parsed_args.name
208+
if parsed_args.email:
209+
kwargs['email'] = parsed_args.email
210+
if parsed_args.tenant:
211+
tenant_id = utils.find_resource(
212+
identity_client.tenants, parsed_args.tenant).id
213+
kwargs['tenantId'] = tenant_id
214+
if 'enabled' in parsed_args:
215+
kwargs['enabled'] = parsed_args.enabled
216+
217+
if not len(kwargs):
218+
stdout.write("User not updated, no arguments present")
219+
return
220+
identity_client.users.delete(user.id)
221+
return
222+
223+
224+
class ShowUser(command.OpenStackCommand, show.ShowOne):
225+
"""Show user command"""
226+
227+
api = 'identity'
228+
log = logging.getLogger(__name__ + '.ShowUser')
229+
230+
def get_parser(self, prog_name):
231+
parser = super(ShowUser, self).get_parser(prog_name)
232+
parser.add_argument(
233+
'user',
234+
metavar='<user>',
235+
help='Name or ID of user to display',
236+
)
237+
return parser
238+
239+
def get_data(self, parsed_args):
240+
self.log.debug('get_data(%s)' % parsed_args)
241+
identity_client = self.app.client_manager.identity
242+
user = utils.find_resource(
243+
identity_client.users, parsed_args.user)
244+
245+
info = {}
246+
info.update(user._info)
247+
return zip(*sorted(info.iteritems()))

‎setup.py‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,15 @@ def read(fname):
7272
'delete_tenant=' +
7373
'openstackclient.identity.v2_0.tenant:Delete_Tenant',
7474
'list_tenant=openstackclient.identity.v2_0.tenant:List_Tenant',
75-
'show_tenant=openstackclient.identity.v2_0.tenant:Show_Tenant',
7675
'set_tenant=openstackclient.identity.v2_0.tenant:Set_Tenant',
76+
'show_tenant=openstackclient.identity.v2_0.tenant:Show_Tenant',
77+
'create_user=' +
78+
'openstackclient.identity.v2_0.user:CreateUser',
79+
'delete_user=' +
80+
'openstackclient.identity.v2_0.user:DeleteUser',
81+
'list_user=openstackclient.identity.v2_0.user:ListUser',
82+
'set_user=openstackclient.identity.v2_0.user:SetUser',
83+
'show_user=openstackclient.identity.v2_0.user:ShowUser',
7784
]
7885
}
7986
)

0 commit comments

Comments
 (0)