Skip to content

Commit d8f1cbd

Browse files
committed
add multi-delete support for identity
This is part2. Add support for these objects: identity.project(v2.0) identity.role(v2.0) identity.user(v2.0) identity.project(v3) identity.role(v3) identity.user(v3) identity.group(v3) Closes-Bug: #1400597 Change-Id: I270434d657cf4ddc23c3aba2c704d6ef184b0dbc
1 parent 3541b0a commit d8f1cbd

16 files changed

Lines changed: 103 additions & 90 deletions

File tree

‎doc/source/command-objects/project.rst‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,16 @@ Create new project
4747

4848
New project name
4949

50-
project delete
51-
--------------
50+
project(s) delete
51+
-----------------
5252

53-
Delete an existing project
53+
Delete project(s)
5454

55-
.. program:: project delete
55+
.. program:: project(s) delete
5656
.. code:: bash
5757
5858
os project delete
59-
<project>
59+
<project> [<project> ...]
6060
6161
.. option:: --domain <domain>
6262

‎doc/source/command-objects/role.rst‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ Create new role
5656

5757
New role name
5858

59-
role delete
60-
-----------
59+
role(s) delete
60+
--------------
6161

62-
Delete an existing role
62+
Delete role(s)
6363

64-
.. program:: role delete
64+
.. program:: role(s) delete
6565
.. code:: bash
6666
6767
os role delete
68-
<role>
68+
<role> [<role> ...]
6969
7070
.. option:: <role>
7171

‎doc/source/command-objects/user.rst‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,16 @@ Create new user
6969

7070
New user name
7171

72-
user delete
73-
-----------
72+
user(s) delete
73+
--------------
7474

75-
Delete user
75+
Delete user(s)
7676

77-
.. program:: user delete
77+
.. program:: user(s) delete
7878
.. code:: bash
7979
8080
os user delete
81-
<user>
81+
<user> [<user> ...]
8282
8383
.. option:: --domain <domain>
8484

‎openstackclient/identity/v2_0/project.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,29 +104,30 @@ def take_action(self, parsed_args):
104104

105105

106106
class DeleteProject(command.Command):
107-
"""Delete an existing project"""
107+
"""Delete project(s)"""
108108

109109
log = logging.getLogger(__name__ + '.DeleteProject')
110110

111111
def get_parser(self, prog_name):
112112
parser = super(DeleteProject, self).get_parser(prog_name)
113113
parser.add_argument(
114-
'project',
114+
'projects',
115115
metavar='<project>',
116-
help=_('Project to delete (name or ID)'),
116+
nargs="+",
117+
help=_('Project(s) to delete (name or ID)'),
117118
)
118119
return parser
119120

120121
def take_action(self, parsed_args):
121122
self.log.debug('take_action(%s)', parsed_args)
122123
identity_client = self.app.client_manager.identity
123124

124-
project = utils.find_resource(
125-
identity_client.tenants,
126-
parsed_args.project,
127-
)
128-
129-
identity_client.tenants.delete(project.id)
125+
for project in parsed_args.projects:
126+
project_obj = utils.find_resource(
127+
identity_client.tenants,
128+
project,
129+
)
130+
identity_client.tenants.delete(project_obj.id)
130131
return
131132

132133

‎openstackclient/identity/v2_0/role.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -114,29 +114,30 @@ def take_action(self, parsed_args):
114114

115115

116116
class DeleteRole(command.Command):
117-
"""Delete an existing role"""
117+
"""Delete role(s)"""
118118

119119
log = logging.getLogger(__name__ + '.DeleteRole')
120120

121121
def get_parser(self, prog_name):
122122
parser = super(DeleteRole, self).get_parser(prog_name)
123123
parser.add_argument(
124-
'role',
124+
'roles',
125125
metavar='<role>',
126-
help=_('Role to delete (name or ID)'),
126+
nargs="+",
127+
help=_('Role(s) to delete (name or ID)'),
127128
)
128129
return parser
129130

130131
def take_action(self, parsed_args):
131132
self.log.debug('take_action(%s)', parsed_args)
132133
identity_client = self.app.client_manager.identity
133134

134-
role = utils.find_resource(
135-
identity_client.roles,
136-
parsed_args.role,
137-
)
138-
139-
identity_client.roles.delete(role.id)
135+
for role in parsed_args.roles:
136+
role_obj = utils.find_resource(
137+
identity_client.roles,
138+
role,
139+
)
140+
identity_client.roles.delete(role_obj.id)
140141
return
141142

142143

‎openstackclient/identity/v2_0/user.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -128,29 +128,30 @@ def take_action(self, parsed_args):
128128

129129

130130
class DeleteUser(command.Command):
131-
"""Delete user"""
131+
"""Delete user(s)"""
132132

133133
log = logging.getLogger(__name__ + '.DeleteUser')
134134

135135
def get_parser(self, prog_name):
136136
parser = super(DeleteUser, self).get_parser(prog_name)
137137
parser.add_argument(
138-
'user',
138+
'users',
139139
metavar='<user>',
140-
help=_('User to delete (name or ID)'),
140+
nargs="+",
141+
help=_('User(s) to delete (name or ID)'),
141142
)
142143
return parser
143144

144145
def take_action(self, parsed_args):
145146
self.log.debug('take_action(%s)', parsed_args)
146147
identity_client = self.app.client_manager.identity
147148

148-
user = utils.find_resource(
149-
identity_client.users,
150-
parsed_args.user,
151-
)
152-
153-
identity_client.users.delete(user.id)
149+
for user in parsed_args.users:
150+
user_obj = utils.find_resource(
151+
identity_client.users,
152+
user,
153+
)
154+
identity_client.users.delete(user_obj.id)
154155
return
155156

156157

‎openstackclient/identity/v3/group.py‎

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -159,16 +159,17 @@ def take_action(self, parsed_args):
159159

160160

161161
class DeleteGroup(command.Command):
162-
"""Delete group command"""
162+
"""Delete group(s)"""
163163

164164
log = logging.getLogger(__name__ + '.DeleteGroup')
165165

166166
def get_parser(self, prog_name):
167167
parser = super(DeleteGroup, self).get_parser(prog_name)
168168
parser.add_argument(
169-
'group',
169+
'groups',
170170
metavar='<group>',
171-
help='Name or ID of group to delete')
171+
nargs="+",
172+
help='Group(s) to delete (name or ID)')
172173
parser.add_argument(
173174
'--domain',
174175
metavar='<domain>',
@@ -180,16 +181,18 @@ def take_action(self, parsed_args):
180181
self.log.debug('take_action(%s)', parsed_args)
181182
identity_client = self.app.client_manager.identity
182183

184+
domain = None
183185
if parsed_args.domain:
184186
domain = common.find_domain(identity_client, parsed_args.domain)
185-
group = utils.find_resource(identity_client.groups,
186-
parsed_args.group,
187-
domain_id=domain.id)
188-
else:
189-
group = utils.find_resource(identity_client.groups,
190-
parsed_args.group)
191-
192-
identity_client.groups.delete(group.id)
187+
for group in parsed_args.groups:
188+
if domain is not None:
189+
group_obj = utils.find_resource(identity_client.groups,
190+
group,
191+
domain_id=domain.id)
192+
else:
193+
group_obj = utils.find_resource(identity_client.groups,
194+
group)
195+
identity_client.groups.delete(group_obj.id)
193196
return
194197

195198

‎openstackclient/identity/v3/project.py‎

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,17 @@ def take_action(self, parsed_args):
117117

118118

119119
class DeleteProject(command.Command):
120-
"""Delete an existing project"""
120+
"""Delete project(s)"""
121121

122122
log = logging.getLogger(__name__ + '.DeleteProject')
123123

124124
def get_parser(self, prog_name):
125125
parser = super(DeleteProject, self).get_parser(prog_name)
126126
parser.add_argument(
127-
'project',
127+
'projects',
128128
metavar='<project>',
129-
help='Project to delete (name or ID)',
129+
nargs="+",
130+
help='Project(s) to delete (name or ID)',
130131
)
131132
parser.add_argument(
132133
'--domain',
@@ -139,16 +140,18 @@ def take_action(self, parsed_args):
139140
self.log.debug('take_action(%s)', parsed_args)
140141
identity_client = self.app.client_manager.identity
141142

143+
domain = None
142144
if parsed_args.domain:
143145
domain = common.find_domain(identity_client, parsed_args.domain)
144-
project = utils.find_resource(identity_client.projects,
145-
parsed_args.project,
146-
domain_id=domain.id)
147-
else:
148-
project = utils.find_resource(identity_client.projects,
149-
parsed_args.project)
150-
151-
identity_client.projects.delete(project.id)
146+
for project in parsed_args.projects:
147+
if domain is not None:
148+
project_obj = utils.find_resource(identity_client.projects,
149+
project,
150+
domain_id=domain.id)
151+
else:
152+
project_obj = utils.find_resource(identity_client.projects,
153+
project)
154+
identity_client.projects.delete(project_obj.id)
152155
return
153156

154157

‎openstackclient/identity/v3/role.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -177,29 +177,30 @@ def take_action(self, parsed_args):
177177

178178

179179
class DeleteRole(command.Command):
180-
"""Delete an existing role"""
180+
"""Delete role(s)"""
181181

182182
log = logging.getLogger(__name__ + '.DeleteRole')
183183

184184
def get_parser(self, prog_name):
185185
parser = super(DeleteRole, self).get_parser(prog_name)
186186
parser.add_argument(
187-
'role',
187+
'roles',
188188
metavar='<role>',
189-
help='Role to delete (name or ID)',
189+
nargs="+",
190+
help='Role(s) to delete (name or ID)',
190191
)
191192
return parser
192193

193194
def take_action(self, parsed_args):
194195
self.log.debug('take_action(%s)', parsed_args)
195196
identity_client = self.app.client_manager.identity
196197

197-
role = utils.find_resource(
198-
identity_client.roles,
199-
parsed_args.role,
200-
)
201-
202-
identity_client.roles.delete(role.id)
198+
for role in parsed_args.roles:
199+
role_obj = utils.find_resource(
200+
identity_client.roles,
201+
role,
202+
)
203+
identity_client.roles.delete(role_obj.id)
203204
return
204205

205206

‎openstackclient/identity/v3/user.py‎

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,17 @@ def take_action(self, parsed_args):
137137

138138

139139
class DeleteUser(command.Command):
140-
"""Delete user"""
140+
"""Delete user(s)"""
141141

142142
log = logging.getLogger(__name__ + '.DeleteUser')
143143

144144
def get_parser(self, prog_name):
145145
parser = super(DeleteUser, self).get_parser(prog_name)
146146
parser.add_argument(
147-
'user',
147+
'users',
148148
metavar='<user>',
149-
help='User to delete (name or ID)',
149+
nargs="+",
150+
help='User(s) to delete (name or ID)',
150151
)
151152
parser.add_argument(
152153
'--domain',
@@ -159,16 +160,18 @@ def take_action(self, parsed_args):
159160
self.log.debug('take_action(%s)', parsed_args)
160161
identity_client = self.app.client_manager.identity
161162

163+
domain = None
162164
if parsed_args.domain:
163165
domain = common.find_domain(identity_client, parsed_args.domain)
164-
user = utils.find_resource(identity_client.users,
165-
parsed_args.user,
166-
domain_id=domain.id)
167-
else:
168-
user = utils.find_resource(identity_client.users,
169-
parsed_args.user)
170-
171-
identity_client.users.delete(user.id)
166+
for user in parsed_args.users:
167+
if domain is not None:
168+
user_obj = utils.find_resource(identity_client.users,
169+
user,
170+
domain_id=domain.id)
171+
else:
172+
user_obj = utils.find_resource(identity_client.users,
173+
user)
174+
identity_client.users.delete(user_obj.id)
172175
return
173176

174177

0 commit comments

Comments
 (0)