Skip to content

Commit 8898e02

Browse files
author
Dean Troyer
committed
Identity v3 tests
* Add project, user, role and service v3 tests * Fix issues in commands with enable/disable * Make commands and tests more consistent between versions * Make formatting and comments more consistent Change-Id: Id21e7a5abd7e421a7742f937861ec46b53095fc7
1 parent 7a0a7d6 commit 8898e02

13 files changed

Lines changed: 2982 additions & 183 deletions

File tree

‎openstackclient/identity/v2_0/role.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,19 @@ def get_parser(self, prog_name):
103103
parser.add_argument(
104104
'role',
105105
metavar='<role>',
106-
help='Name or ID of role to delete')
106+
help='Name or ID of role to delete',
107+
)
107108
return parser
108109

109110
def take_action(self, parsed_args):
110111
self.log.debug('take_action(%s)' % parsed_args)
111112
identity_client = self.app.client_manager.identity
112-
role = utils.find_resource(identity_client.roles, parsed_args.role)
113+
114+
role = utils.find_resource(
115+
identity_client.roles,
116+
parsed_args.role,
117+
)
118+
113119
identity_client.roles.delete(role.id)
114120
return
115121

‎openstackclient/identity/v3/project.py‎

Lines changed: 82 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import logging
1919
import six
20-
import sys
2120

2221
from cliff import command
2322
from cliff import lister
@@ -27,63 +26,70 @@
2726

2827

2928
class CreateProject(show.ShowOne):
30-
"""Create project command"""
29+
"""Create new project"""
3130

3231
log = logging.getLogger(__name__ + '.CreateProject')
3332

3433
def get_parser(self, prog_name):
3534
parser = super(CreateProject, self).get_parser(prog_name)
3635
parser.add_argument(
37-
'project_name',
36+
'name',
3837
metavar='<project-name>',
39-
help='New project name')
38+
help='New project name',
39+
)
4040
parser.add_argument(
4141
'--domain',
4242
metavar='<project-domain>',
43-
help='References the domain name or ID which owns the project')
43+
help='Domain owning the project (name or ID)',
44+
)
4445
parser.add_argument(
4546
'--description',
4647
metavar='<project-description>',
47-
help='New project description')
48-
# FIXME (stevemar): need to update enabled/disabled as per Dolph's
49-
# comments in 19999/4
48+
help='New project description',
49+
)
5050
enable_group = parser.add_mutually_exclusive_group()
5151
enable_group.add_argument(
5252
'--enable',
53-
dest='enabled',
5453
action='store_true',
55-
default=True,
56-
help='Enable project')
54+
help='Enable project',
55+
)
5756
enable_group.add_argument(
5857
'--disable',
59-
dest='enabled',
60-
action='store_false',
61-
help='Disable project')
58+
action='store_true',
59+
help='Disable project',
60+
)
6261
return parser
6362

6463
def take_action(self, parsed_args):
6564
self.log.debug('take_action(%s)' % parsed_args)
6665
identity_client = self.app.client_manager.identity
6766

6867
if parsed_args.domain:
69-
domain = utils.find_resource(identity_client.domains,
70-
parsed_args.domain).id
68+
domain = utils.find_resource(
69+
identity_client.domains,
70+
parsed_args.domain,
71+
).id
7172
else:
7273
domain = None
7374

75+
enabled = True
76+
if parsed_args.disable:
77+
enabled = False
78+
7479
project = identity_client.projects.create(
75-
parsed_args.project_name,
76-
domain=domain,
80+
parsed_args.name,
81+
domain,
7782
description=parsed_args.description,
78-
enabled=parsed_args.enabled)
83+
enabled=enabled,
84+
)
7985

8086
info = {}
8187
info.update(project._info)
8288
return zip(*sorted(six.iteritems(info)))
8389

8490

8591
class DeleteProject(command.Command):
86-
"""Delete project command"""
92+
"""Delete project"""
8793

8894
log = logging.getLogger(__name__ + '.DeleteProject')
8995

@@ -92,20 +98,25 @@ def get_parser(self, prog_name):
9298
parser.add_argument(
9399
'project',
94100
metavar='<project>',
95-
help='Name or ID of project to delete')
101+
help='Project to delete (name or ID)',
102+
)
96103
return parser
97104

98105
def take_action(self, parsed_args):
99106
self.log.debug('take_action(%s)' % parsed_args)
100107
identity_client = self.app.client_manager.identity
101-
project = utils.find_resource(identity_client.projects,
102-
parsed_args.project)
108+
109+
project = utils.find_resource(
110+
identity_client.projects,
111+
parsed_args.project,
112+
)
113+
103114
identity_client.projects.delete(project.id)
104115
return
105116

106117

107118
class ListProject(lister.Lister):
108-
"""List project command"""
119+
"""List projects"""
109120

110121
log = logging.getLogger(__name__ + '.ListProject')
111122

@@ -115,7 +126,8 @@ def get_parser(self, prog_name):
115126
'--long',
116127
action='store_true',
117128
default=False,
118-
help='Additional fields are listed in output')
129+
help='List additional fields in output',
130+
)
119131
return parser
120132

121133
def take_action(self, parsed_args):
@@ -133,7 +145,7 @@ def take_action(self, parsed_args):
133145

134146

135147
class SetProject(command.Command):
136-
"""Set project command"""
148+
"""Set project properties"""
137149

138150
log = logging.getLogger(__name__ + '.SetProject')
139151

@@ -142,54 +154,75 @@ def get_parser(self, prog_name):
142154
parser.add_argument(
143155
'project',
144156
metavar='<project>',
145-
help='Name or ID of project to change')
157+
help='Project to change (name or ID)',
158+
)
146159
parser.add_argument(
147160
'--name',
148161
metavar='<new-project-name>',
149-
help='New project name')
162+
help='New project name',
163+
)
150164
parser.add_argument(
151165
'--domain',
152166
metavar='<project-domain>',
153-
help='New domain name or ID that will now own the project')
167+
help='New domain owning the project (name or ID)',
168+
)
154169
parser.add_argument(
155170
'--description',
156171
metavar='<project-description>',
157-
help='New project description')
172+
help='New project description',
173+
)
158174
enable_group = parser.add_mutually_exclusive_group()
159175
enable_group.add_argument(
160176
'--enable',
161-
dest='enabled',
162177
action='store_true',
163-
default=True,
164-
help='Enable project (default)')
178+
help='Enable project',
179+
)
165180
enable_group.add_argument(
166181
'--disable',
167-
dest='enabled',
168-
action='store_false',
169-
help='Disable project')
182+
action='store_true',
183+
help='Disable project',
184+
)
170185
return parser
171186

172187
def take_action(self, parsed_args):
173188
self.log.debug('take_action(%s)' % parsed_args)
174189
identity_client = self.app.client_manager.identity
175-
project = utils.find_resource(identity_client.projects,
176-
parsed_args.project)
177-
kwargs = {}
190+
191+
if (not parsed_args.name
192+
and not parsed_args.description
193+
and not parsed_args.domain
194+
and not parsed_args.enable
195+
and not parsed_args.disable):
196+
return
197+
198+
project = utils.find_resource(
199+
identity_client.projects,
200+
parsed_args.project,
201+
)
202+
203+
kwargs = project._info
178204
if parsed_args.name:
179205
kwargs['name'] = parsed_args.name
180206
if parsed_args.domain:
181-
domain = utils.find_resource(
182-
identity_client.domains, parsed_args.domain).id
183-
kwargs['domain'] = domain
207+
kwargs['domain'] = utils.find_resource(
208+
identity_client.domains,
209+
parsed_args.domain,
210+
).id
184211
if parsed_args.description:
185212
kwargs['description'] = parsed_args.description
186-
if 'enabled' in parsed_args:
187-
kwargs['enabled'] = parsed_args.enabled
188-
189-
if kwargs == {}:
190-
sys.stdout.write("Project not updated, no arguments present")
191-
return
192-
project.update(**kwargs)
213+
if parsed_args.enable:
214+
kwargs['enabled'] = True
215+
if parsed_args.disable:
216+
kwargs['enabled'] = False
217+
if 'id' in kwargs:
218+
del kwargs['id']
219+
if 'domain_id' in kwargs:
220+
# Hack around borken Identity API arg names
221+
kwargs.update(
222+
{'domain': kwargs.pop('domain_id')}
223+
)
224+
225+
identity_client.projects.update(project.id, **kwargs)
193226
return
194227

195228

0 commit comments

Comments
 (0)