python-openstackclient 7.1.2__py3-none-any.whl → 7.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -129,10 +129,15 @@ class ClientManager(clientmanager.ClientManager):
129
129
  # TODO(stephenfin): Drop volume_client argument in OSC 8.0 or later.
130
130
  def is_volume_endpoint_enabled(self, volume_client=None):
131
131
  """Check if volume endpoint is enabled"""
132
+ # We check against the service type and all aliases defined by the
133
+ # Service Types Authority
134
+ # https://service-types.openstack.org/service-types.json
132
135
  return (
133
- self.is_service_available('volume') is not False
136
+ self.is_service_available('block-storage') is not False
137
+ or self.is_service_available('volume') is not False
134
138
  or self.is_service_available('volumev3') is not False
135
139
  or self.is_service_available('volumev2') is not False
140
+ or self.is_service_available('block-store') is not False
136
141
  )
137
142
 
138
143
 
@@ -130,7 +130,7 @@ class ShowLimits(command.Lister):
130
130
  if self.app.client_manager.is_volume_endpoint_enabled():
131
131
  volume_client = self.app.client_manager.sdk_connection.volume
132
132
  volume_limits = volume_client.get_limits(
133
- project_id=project_id,
133
+ project=project_id,
134
134
  )
135
135
 
136
136
  if parsed_args.is_absolute:
@@ -249,9 +249,14 @@ class ListQuota(command.Lister):
249
249
  for project_id in project_ids:
250
250
  try:
251
251
  project_data = compute_client.get_quota_set(project_id)
252
+ # NOTE(stephenfin): Unfortunately, Nova raises a HTTP 400 (Bad
253
+ # Request) if the project ID is invalid, even though the project
254
+ # ID is actually the resource's identifier which would normally
255
+ # lead us to expect a HTTP 404 (Not Found).
252
256
  except (
253
- sdk_exceptions.NotFoundException,
257
+ sdk_exceptions.BadRequestException,
254
258
  sdk_exceptions.ForbiddenException,
259
+ sdk_exceptions.NotFoundException,
255
260
  ) as exc:
256
261
  # Project not found, move on to next one
257
262
  LOG.warning(f"Project {project_id} not found: {exc}")
@@ -312,8 +317,8 @@ class ListQuota(command.Lister):
312
317
  try:
313
318
  project_data = volume_client.get_quota_set(project_id)
314
319
  except (
315
- sdk_exceptions.NotFoundException,
316
320
  sdk_exceptions.ForbiddenException,
321
+ sdk_exceptions.NotFoundException,
317
322
  ) as exc:
318
323
  # Project not found, move on to next one
319
324
  LOG.warning(f"Project {project_id} not found: {exc}")
@@ -2648,7 +2648,7 @@ class ListServer(command.Lister):
2648
2648
  'status': parsed_args.status,
2649
2649
  'flavor': flavor_id,
2650
2650
  'image': image_id,
2651
- 'host': parsed_args.host,
2651
+ 'compute_host': parsed_args.host,
2652
2652
  'project_id': project_id,
2653
2653
  'all_projects': parsed_args.all_projects,
2654
2654
  'user_id': user_id,
@@ -184,13 +184,6 @@ def _get_token_resource(client, resource, parsed_name, parsed_domain=None):
184
184
  return parsed_name
185
185
 
186
186
 
187
- def _get_domain_id_if_requested(identity_client, domain_name_or_id):
188
- if not domain_name_or_id:
189
- return None
190
- domain = find_domain(identity_client, domain_name_or_id)
191
- return domain.id
192
-
193
-
194
187
  def find_domain(identity_client, name_or_id):
195
188
  return _find_identity_resource(
196
189
  identity_client.domains, name_or_id, domains.Domain
@@ -198,45 +191,43 @@ def find_domain(identity_client, name_or_id):
198
191
 
199
192
 
200
193
  def find_group(identity_client, name_or_id, domain_name_or_id=None):
201
- domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
202
- if not domain_id:
194
+ if domain_name_or_id is None:
203
195
  return _find_identity_resource(
204
196
  identity_client.groups, name_or_id, groups.Group
205
197
  )
206
- else:
207
- return _find_identity_resource(
208
- identity_client.groups,
209
- name_or_id,
210
- groups.Group,
211
- domain_id=domain_id,
212
- )
198
+
199
+ domain_id = find_domain(identity_client, domain_name_or_id).id
200
+ return _find_identity_resource(
201
+ identity_client.groups,
202
+ name_or_id,
203
+ groups.Group,
204
+ domain_id=domain_id,
205
+ )
213
206
 
214
207
 
215
208
  def find_project(identity_client, name_or_id, domain_name_or_id=None):
216
- domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
217
- if not domain_id:
209
+ if domain_name_or_id is None:
218
210
  return _find_identity_resource(
219
211
  identity_client.projects, name_or_id, projects.Project
220
212
  )
221
- else:
222
- return _find_identity_resource(
223
- identity_client.projects,
224
- name_or_id,
225
- projects.Project,
226
- domain_id=domain_id,
227
- )
213
+ domain_id = find_domain(identity_client, domain_name_or_id).id
214
+ return _find_identity_resource(
215
+ identity_client.projects,
216
+ name_or_id,
217
+ projects.Project,
218
+ domain_id=domain_id,
219
+ )
228
220
 
229
221
 
230
222
  def find_user(identity_client, name_or_id, domain_name_or_id=None):
231
- domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
232
- if not domain_id:
223
+ if domain_name_or_id is None:
233
224
  return _find_identity_resource(
234
225
  identity_client.users, name_or_id, users.User
235
226
  )
236
- else:
237
- return _find_identity_resource(
238
- identity_client.users, name_or_id, users.User, domain_id=domain_id
239
- )
227
+ domain_id = find_domain(identity_client, domain_name_or_id).id
228
+ return _find_identity_resource(
229
+ identity_client.users, name_or_id, users.User, domain_id=domain_id
230
+ )
240
231
 
241
232
 
242
233
  def _find_identity_resource(
@@ -146,12 +146,19 @@ class ListRoleAssignment(command.Lister):
146
146
  domain_id=role_domain_id,
147
147
  )
148
148
 
149
+ user_domain_id = None
150
+ if parsed_args.user_domain:
151
+ user_domain_id = _find_sdk_id(
152
+ identity_client.find_domain,
153
+ name_or_id=parsed_args.user_domain,
154
+ )
155
+
149
156
  user_id = None
150
157
  if parsed_args.user:
151
158
  user_id = _find_sdk_id(
152
159
  identity_client.find_user,
153
160
  name_or_id=parsed_args.user,
154
- domain_id=parsed_args.user_domain,
161
+ domain_id=user_domain_id,
155
162
  )
156
163
  elif parsed_args.authuser:
157
164
  if auth_ref:
@@ -171,6 +178,13 @@ class ListRoleAssignment(command.Lister):
171
178
  name_or_id=parsed_args.domain,
172
179
  )
173
180
 
181
+ project_domain_id = None
182
+ if parsed_args.project_domain:
183
+ project_domain_id = _find_sdk_id(
184
+ identity_client.find_domain,
185
+ name_or_id=parsed_args.project_domain,
186
+ )
187
+
174
188
  project_id = None
175
189
  if parsed_args.project:
176
190
  project_id = _find_sdk_id(
@@ -178,7 +192,7 @@ class ListRoleAssignment(command.Lister):
178
192
  name_or_id=common._get_token_resource(
179
193
  identity_client, 'project', parsed_args.project
180
194
  ),
181
- domain_id=parsed_args.project_domain,
195
+ domain_id=project_domain_id,
182
196
  )
183
197
  elif parsed_args.authproject:
184
198
  if auth_ref:
@@ -187,12 +201,19 @@ class ListRoleAssignment(command.Lister):
187
201
  name_or_id=auth_ref.project_id,
188
202
  )
189
203
 
204
+ group_domain_id = None
205
+ if parsed_args.group_domain:
206
+ group_domain_id = _find_sdk_id(
207
+ identity_client.find_domain,
208
+ name_or_id=parsed_args.group_domain,
209
+ )
210
+
190
211
  group_id = None
191
212
  if parsed_args.group:
192
213
  group_id = _find_sdk_id(
193
214
  identity_client.find_group,
194
215
  name_or_id=parsed_args.group,
195
- domain_id=parsed_args.group_domain,
216
+ domain_id=group_domain_id,
196
217
  )
197
218
 
198
219
  include_names = True if parsed_args.names else None
@@ -225,7 +225,8 @@ class SetService(command.Command):
225
225
  kwargs['name'] = parsed_args.name
226
226
  if parsed_args.description:
227
227
  kwargs['description'] = parsed_args.description
228
- kwargs['is_enabled'] = parsed_args.is_enabled
228
+ if parsed_args.is_enabled is not None:
229
+ kwargs['is_enabled'] = parsed_args.is_enabled
229
230
 
230
231
  identity_client.update_service(service.id, **kwargs)
231
232
 
@@ -249,26 +249,44 @@ class CreateUser(command.ShowOne):
249
249
  def take_action(self, parsed_args):
250
250
  identity_client = self.app.client_manager.sdk_connection.identity
251
251
 
252
+ kwargs = {}
253
+
252
254
  domain_id = None
253
255
  if parsed_args.domain:
254
256
  domain_id = identity_client.find_domain(
255
- name_or_id=parsed_args.domain,
257
+ parsed_args.domain,
256
258
  ignore_missing=False,
257
259
  ).id
260
+ kwargs['domain_id'] = domain_id
258
261
 
259
- project_id = None
260
262
  if parsed_args.project:
261
- project_id = identity_client.find_project(
262
- name_or_id=parsed_args.project,
263
+ project_domain_id = None
264
+ if parsed_args.project_domain:
265
+ project_domain_id = identity_client.find_domain(
266
+ parsed_args.project_domain,
267
+ ignore_missing=False,
268
+ ).id
269
+ kwargs['default_project_id'] = identity_client.find_project(
270
+ parsed_args.project,
263
271
  ignore_missing=False,
264
- domain_id=domain_id,
272
+ domain_id=project_domain_id,
265
273
  ).id
266
274
 
275
+ if parsed_args.description:
276
+ kwargs['description'] = parsed_args.description
277
+
278
+ if parsed_args.email:
279
+ kwargs['email'] = parsed_args.email
280
+
267
281
  is_enabled = True
268
282
  if parsed_args.disable:
269
283
  is_enabled = False
270
- if parsed_args.password_prompt:
271
- parsed_args.password = utils.get_password(self.app.stdin)
284
+
285
+ password = None
286
+ if parsed_args.password:
287
+ password = parsed_args.password
288
+ elif parsed_args.password_prompt:
289
+ password = utils.get_password(self.app.stdin)
272
290
 
273
291
  if not parsed_args.password:
274
292
  LOG.warning(
@@ -278,24 +296,26 @@ class CreateUser(command.ShowOne):
278
296
  )
279
297
  )
280
298
  options = _get_options_for_user(identity_client, parsed_args)
299
+ if options:
300
+ kwargs['options'] = options
281
301
 
282
302
  try:
283
303
  user = identity_client.create_user(
284
- default_project_id=project_id,
285
- description=parsed_args.description,
286
- domain_id=domain_id,
287
- email=parsed_args.email,
288
304
  is_enabled=is_enabled,
289
305
  name=parsed_args.name,
290
- password=parsed_args.password,
291
- options=options,
306
+ password=password,
307
+ **kwargs,
292
308
  )
293
309
  except sdk_exc.ConflictException:
294
310
  if parsed_args.or_show:
311
+ kwargs = {}
312
+ if domain_id:
313
+ kwargs['domain_id'] = domain_id
314
+
295
315
  user = identity_client.find_user(
296
- name_or_id=parsed_args.name,
297
- domain_id=domain_id,
316
+ parsed_args.name,
298
317
  ignore_missing=False,
318
+ **kwargs,
299
319
  )
300
320
  LOG.info(_('Returning existing user %s'), user.name)
301
321
  else:
@@ -4581,7 +4581,7 @@ class _TestServerList(TestServer):
4581
4581
  'status': None,
4582
4582
  'flavor': None,
4583
4583
  'image': None,
4584
- 'host': None,
4584
+ 'compute_host': None,
4585
4585
  'project_id': None,
4586
4586
  'all_projects': False,
4587
4587
  'user_id': None,
@@ -165,10 +165,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
165
165
  arglist = ['--user', self.user.name]
166
166
  verifylist = [
167
167
  ('user', self.user.name),
168
+ ('user_domain', None),
168
169
  ('group', None),
170
+ ('group_domain', None),
169
171
  ('system', None),
170
172
  ('domain', None),
171
173
  ('project', None),
174
+ ('project_domain', None),
172
175
  ('role', None),
173
176
  ('effective', None),
174
177
  ('inherited', False),
@@ -181,6 +184,79 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
181
184
  # containing the data to be listed.
182
185
  columns, data = self.cmd.take_action(parsed_args)
183
186
 
187
+ self.identity_sdk_client.find_user.assert_called_with(
188
+ name_or_id=self.user.name, ignore_missing=False, domain_id=None
189
+ )
190
+ self.identity_sdk_client.role_assignments.assert_called_with(
191
+ role_id=None,
192
+ user_id=self.user.id,
193
+ group_id=None,
194
+ scope_project_id=None,
195
+ scope_domain_id=None,
196
+ scope_system=None,
197
+ effective=None,
198
+ include_names=None,
199
+ inherited_to=None,
200
+ )
201
+
202
+ self.assertEqual(self.columns, columns)
203
+ datalist = (
204
+ (
205
+ self.role.id,
206
+ self.user.id,
207
+ '',
208
+ '',
209
+ self.domain.id,
210
+ '',
211
+ False,
212
+ ),
213
+ (
214
+ self.role.id,
215
+ self.user.id,
216
+ '',
217
+ self.project.id,
218
+ '',
219
+ '',
220
+ False,
221
+ ),
222
+ )
223
+ self.assertEqual(datalist, tuple(data))
224
+
225
+ def test_role_assignment_list_user_with_domain(self):
226
+ self.identity_sdk_client.role_assignments.return_value = [
227
+ self.assignment_with_domain_id_and_user_id,
228
+ self.assignment_with_project_id_and_user_id,
229
+ ]
230
+
231
+ arglist = ['--user', self.user.name, '--user-domain', self.domain.name]
232
+ verifylist = [
233
+ ('user', self.user.name),
234
+ ('user_domain', self.domain.name),
235
+ ('group', None),
236
+ ('group_domain', None),
237
+ ('system', None),
238
+ ('domain', None),
239
+ ('project', None),
240
+ ('role', None),
241
+ ('effective', None),
242
+ ('inherited', False),
243
+ ('names', False),
244
+ ]
245
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
246
+
247
+ # In base command class Lister in cliff, abstract method take_action()
248
+ # returns a tuple containing the column names and an iterable
249
+ # containing the data to be listed.
250
+ columns, data = self.cmd.take_action(parsed_args)
251
+
252
+ self.identity_sdk_client.find_domain.assert_called_with(
253
+ name_or_id=self.domain.name, ignore_missing=False
254
+ )
255
+ self.identity_sdk_client.find_user.assert_called_with(
256
+ name_or_id=self.user.name,
257
+ ignore_missing=False,
258
+ domain_id=self.domain.id,
259
+ )
184
260
  self.identity_sdk_client.role_assignments.assert_called_with(
185
261
  role_id=None,
186
262
  user_id=self.user.id,
@@ -230,10 +306,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
230
306
  arglist = ['--user', self.user.id]
231
307
  verifylist = [
232
308
  ('user', self.user.id),
309
+ ('user_domain', None),
233
310
  ('group', None),
311
+ ('group_domain', None),
234
312
  ('system', None),
235
313
  ('domain', None),
236
314
  ('project', None),
315
+ ('project_domain', None),
237
316
  ('role', None),
238
317
  ('effective', None),
239
318
  ('inherited', False),
@@ -290,10 +369,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
290
369
  arglist = ['--group', self.group.name]
291
370
  verifylist = [
292
371
  ('user', None),
372
+ ('user_domain', None),
293
373
  ('group', self.group.name),
374
+ ('group_domain', None),
294
375
  ('system', None),
295
376
  ('domain', None),
296
377
  ('project', None),
378
+ ('project_domain', None),
297
379
  ('role', None),
298
380
  ('effective', None),
299
381
  ('inherited', False),
@@ -306,6 +388,85 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
306
388
  # containing the data to be listed.
307
389
  columns, data = self.cmd.take_action(parsed_args)
308
390
 
391
+ self.identity_sdk_client.find_group.assert_called_with(
392
+ name_or_id=self.group.name, ignore_missing=False, domain_id=None
393
+ )
394
+ self.identity_sdk_client.role_assignments.assert_called_with(
395
+ role_id=None,
396
+ user_id=None,
397
+ group_id=self.group.id,
398
+ scope_project_id=None,
399
+ scope_domain_id=None,
400
+ scope_system=None,
401
+ effective=None,
402
+ include_names=None,
403
+ inherited_to=None,
404
+ )
405
+
406
+ self.assertEqual(self.columns, columns)
407
+ datalist = (
408
+ (
409
+ self.role.id,
410
+ '',
411
+ self.group.id,
412
+ '',
413
+ self.domain.id,
414
+ '',
415
+ False,
416
+ ),
417
+ (
418
+ self.role.id,
419
+ '',
420
+ self.group.id,
421
+ self.project.id,
422
+ '',
423
+ '',
424
+ False,
425
+ ),
426
+ )
427
+ self.assertEqual(datalist, tuple(data))
428
+
429
+ def test_role_assignment_list_group_with_domain(self):
430
+ self.identity_sdk_client.role_assignments.return_value = [
431
+ self.assignment_with_domain_id_and_group_id,
432
+ self.assignment_with_project_id_and_group_id,
433
+ ]
434
+
435
+ arglist = [
436
+ '--group',
437
+ self.group.name,
438
+ '--group-domain',
439
+ self.domain.name,
440
+ ]
441
+ verifylist = [
442
+ ('user', None),
443
+ ('user_domain', None),
444
+ ('group', self.group.name),
445
+ ('group_domain', self.domain.name),
446
+ ('system', None),
447
+ ('domain', None),
448
+ ('project', None),
449
+ ('project_domain', None),
450
+ ('role', None),
451
+ ('effective', None),
452
+ ('inherited', False),
453
+ ('names', False),
454
+ ]
455
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
456
+
457
+ # In base command class Lister in cliff, abstract method take_action()
458
+ # returns a tuple containing the column names and an iterable
459
+ # containing the data to be listed.
460
+ columns, data = self.cmd.take_action(parsed_args)
461
+
462
+ self.identity_sdk_client.find_domain.assert_called_with(
463
+ name_or_id=self.domain.name, ignore_missing=False
464
+ )
465
+ self.identity_sdk_client.find_group.assert_called_with(
466
+ name_or_id=self.group.name,
467
+ ignore_missing=False,
468
+ domain_id=self.domain.id,
469
+ )
309
470
  self.identity_sdk_client.role_assignments.assert_called_with(
310
471
  role_id=None,
311
472
  user_id=None,
@@ -350,10 +511,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
350
511
  arglist = ['--domain', self.domain.name]
351
512
  verifylist = [
352
513
  ('user', None),
514
+ ('user_domain', None),
353
515
  ('group', None),
516
+ ('group_domain', None),
354
517
  ('system', None),
355
518
  ('domain', self.domain.name),
356
519
  ('project', None),
520
+ ('project_domain', None),
357
521
  ('role', None),
358
522
  ('effective', None),
359
523
  ('inherited', False),
@@ -410,10 +574,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
410
574
  arglist = ['--project', self.project.name]
411
575
  verifylist = [
412
576
  ('user', None),
577
+ ('user_domain', None),
413
578
  ('group', None),
579
+ ('group_domain', None),
414
580
  ('system', None),
415
581
  ('domain', None),
416
582
  ('project', self.project.name),
583
+ ('project_domain', None),
417
584
  ('role', None),
418
585
  ('effective', None),
419
586
  ('inherited', False),
@@ -426,6 +593,85 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
426
593
  # containing the data to be listed.
427
594
  columns, data = self.cmd.take_action(parsed_args)
428
595
 
596
+ self.identity_sdk_client.find_project.assert_called_with(
597
+ name_or_id=self.project.name, ignore_missing=False, domain_id=None
598
+ )
599
+ self.identity_sdk_client.role_assignments.assert_called_with(
600
+ role_id=None,
601
+ user_id=None,
602
+ group_id=None,
603
+ scope_project_id=self.project.id,
604
+ scope_domain_id=None,
605
+ scope_system=None,
606
+ effective=None,
607
+ include_names=None,
608
+ inherited_to=None,
609
+ )
610
+
611
+ self.assertEqual(self.columns, columns)
612
+ datalist = (
613
+ (
614
+ self.role.id,
615
+ self.user.id,
616
+ '',
617
+ self.project.id,
618
+ '',
619
+ '',
620
+ False,
621
+ ),
622
+ (
623
+ self.role.id,
624
+ '',
625
+ self.group.id,
626
+ self.project.id,
627
+ '',
628
+ '',
629
+ False,
630
+ ),
631
+ )
632
+ self.assertEqual(datalist, tuple(data))
633
+
634
+ def test_role_assignment_list_project_with_domain(self):
635
+ self.identity_sdk_client.role_assignments.return_value = [
636
+ self.assignment_with_project_id_and_user_id,
637
+ self.assignment_with_project_id_and_group_id,
638
+ ]
639
+
640
+ arglist = [
641
+ '--project',
642
+ self.project.name,
643
+ '--project-domain',
644
+ self.domain.name,
645
+ ]
646
+ verifylist = [
647
+ ('user', None),
648
+ ('user_domain', None),
649
+ ('group', None),
650
+ ('group_domain', None),
651
+ ('system', None),
652
+ ('domain', None),
653
+ ('project', self.project.name),
654
+ ('project_domain', self.domain.name),
655
+ ('role', None),
656
+ ('effective', None),
657
+ ('inherited', False),
658
+ ('names', False),
659
+ ]
660
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
661
+
662
+ # In base command class Lister in cliff, abstract method take_action()
663
+ # returns a tuple containing the column names and an iterable
664
+ # containing the data to be listed.
665
+ columns, data = self.cmd.take_action(parsed_args)
666
+
667
+ self.identity_sdk_client.find_domain.assert_called_with(
668
+ name_or_id=self.domain.name, ignore_missing=False
669
+ )
670
+ self.identity_sdk_client.find_project.assert_called_with(
671
+ name_or_id=self.project.name,
672
+ ignore_missing=False,
673
+ domain_id=self.domain.id,
674
+ )
429
675
  self.identity_sdk_client.role_assignments.assert_called_with(
430
676
  role_id=None,
431
677
  user_id=None,
@@ -476,10 +722,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
476
722
  ]
477
723
  verifylist = [
478
724
  ('user', None),
725
+ ('user_domain', None),
479
726
  ('group', None),
727
+ ('group_domain', None),
480
728
  ('system', None),
481
729
  ('domain', None),
482
730
  ('project', None),
731
+ ('project_domain', None),
483
732
  ('role', None),
484
733
  ('effective', None),
485
734
  ('inherited', False),
@@ -529,10 +778,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
529
778
  arglist = ['--effective']
530
779
  verifylist = [
531
780
  ('user', None),
781
+ ('user_domain', None),
532
782
  ('group', None),
783
+ ('group_domain', None),
533
784
  ('system', None),
534
785
  ('domain', None),
535
786
  ('project', None),
787
+ ('project_domain', None),
536
788
  ('role', None),
537
789
  ('effective', True),
538
790
  ('inherited', False),
@@ -611,10 +863,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
611
863
  arglist = ['--inherited']
612
864
  verifylist = [
613
865
  ('user', None),
866
+ ('user_domain', None),
614
867
  ('group', None),
868
+ ('group_domain', None),
615
869
  ('system', None),
616
870
  ('domain', None),
617
871
  ('project', None),
872
+ ('project_domain', None),
618
873
  ('role', None),
619
874
  ('effective', None),
620
875
  ('inherited', True),
@@ -707,10 +962,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
707
962
  arglist = ['--names']
708
963
  verifylist = [
709
964
  ('user', None),
965
+ ('user_domain', None),
710
966
  ('group', None),
967
+ ('group_domain', None),
711
968
  ('system', None),
712
969
  ('domain', None),
713
970
  ('project', None),
971
+ ('project_domain', None),
714
972
  ('role', None),
715
973
  ('effective', None),
716
974
  ('inherited', False),
@@ -799,10 +1057,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
799
1057
  ]
800
1058
  verifylist = [
801
1059
  ('user', None),
1060
+ ('user_domain', None),
802
1061
  ('group', None),
1062
+ ('group_domain', None),
803
1063
  ('system', None),
804
1064
  ('domain', None),
805
1065
  ('project', None),
1066
+ ('project_domain', None),
806
1067
  ('role', role_2.name),
807
1068
  ('effective', None),
808
1069
  ('inherited', False),
@@ -311,7 +311,6 @@ class TestServiceSet(identity_fakes.TestIdentityv3):
311
311
  # Set expected values
312
312
  kwargs = {
313
313
  'type': self.service.type,
314
- 'is_enabled': None,
315
314
  }
316
315
  self.identity_sdk_client.update_service.assert_called_with(
317
316
  self.service.id, **kwargs
@@ -338,7 +337,6 @@ class TestServiceSet(identity_fakes.TestIdentityv3):
338
337
  # Set expected values
339
338
  kwargs = {
340
339
  'name': self.service.name,
341
- 'is_enabled': None,
342
340
  }
343
341
  self.identity_sdk_client.update_service.assert_called_with(
344
342
  self.service.id, **kwargs
@@ -365,7 +363,6 @@ class TestServiceSet(identity_fakes.TestIdentityv3):
365
363
  # Set expected values
366
364
  kwargs = {
367
365
  'description': self.service.description,
368
- 'is_enabled': None,
369
366
  }
370
367
  self.identity_sdk_client.update_service.assert_called_with(
371
368
  self.service.id, **kwargs
@@ -91,11 +91,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
91
91
  # Set expected values
92
92
  kwargs = {
93
93
  'name': self.user.name,
94
- 'default_project_id': None,
95
- 'description': None,
96
- 'domain_id': None,
97
- 'email': None,
98
- 'options': {},
99
94
  'is_enabled': True,
100
95
  'password': None,
101
96
  }
@@ -127,11 +122,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
127
122
  # Set expected values
128
123
  kwargs = {
129
124
  'name': self.user.name,
130
- 'default_project_id': None,
131
- 'description': None,
132
- 'domain_id': None,
133
- 'email': None,
134
- 'options': {},
135
125
  'is_enabled': True,
136
126
  'password': 'secret',
137
127
  }
@@ -165,11 +155,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
165
155
  # Set expected values
166
156
  kwargs = {
167
157
  'name': self.user.name,
168
- 'default_project_id': None,
169
- 'description': None,
170
- 'domain_id': None,
171
- 'email': None,
172
- 'options': {},
173
158
  'is_enabled': True,
174
159
  'password': 'abc123',
175
160
  }
@@ -200,12 +185,8 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
200
185
  # Set expected values
201
186
  kwargs = {
202
187
  'name': self.user.name,
203
- 'default_project_id': None,
204
- 'description': None,
205
- 'domain_id': None,
206
188
  'email': 'barney@example.com',
207
189
  'is_enabled': True,
208
- 'options': {},
209
190
  'password': None,
210
191
  }
211
192
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
@@ -236,11 +217,7 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
236
217
  kwargs = {
237
218
  'name': self.user.name,
238
219
  'default_project_id': self.project.id,
239
- 'description': None,
240
- 'domain_id': None,
241
- 'email': None,
242
220
  'is_enabled': True,
243
- 'options': {},
244
221
  'password': None,
245
222
  }
246
223
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
@@ -284,14 +261,13 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
284
261
  kwargs = {
285
262
  'name': self.user.name,
286
263
  'default_project_id': self.project.id,
287
- 'description': None,
288
- 'domain_id': None,
289
- 'email': None,
290
- 'options': {},
291
264
  'is_enabled': True,
292
265
  'password': None,
293
266
  }
294
- self.identity_sdk_client.create_user.assert_called_with(**kwargs)
267
+ self.identity_sdk_client.create_user.assert_called_once_with(**kwargs)
268
+ self.identity_sdk_client.find_domain.assert_called_once_with(
269
+ self.project.domain_id, ignore_missing=False
270
+ )
295
271
 
296
272
  self.assertEqual(self.columns, columns)
297
273
  datalist = (
@@ -328,11 +304,7 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
328
304
  # Set expected values
329
305
  kwargs = {
330
306
  'name': self.user.name,
331
- 'default_project_id': None,
332
- 'description': None,
333
307
  'domain_id': self.domain.id,
334
- 'email': None,
335
- 'options': {},
336
308
  'is_enabled': True,
337
309
  'password': None,
338
310
  }
@@ -361,11 +333,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
361
333
  # Set expected values
362
334
  kwargs = {
363
335
  'name': self.user.name,
364
- 'default_project_id': None,
365
- 'description': None,
366
- 'domain_id': None,
367
- 'email': None,
368
- 'options': {},
369
336
  'is_enabled': True,
370
337
  'password': None,
371
338
  }
@@ -394,11 +361,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
394
361
  # Set expected values
395
362
  kwargs = {
396
363
  'name': self.user.name,
397
- 'default_project_id': None,
398
- 'description': None,
399
- 'domain_id': None,
400
- 'email': None,
401
- 'options': {},
402
364
  'is_enabled': False,
403
365
  'password': None,
404
366
  }
@@ -428,10 +390,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
428
390
  # Set expected values
429
391
  kwargs = {
430
392
  'name': self.user.name,
431
- 'default_project_id': None,
432
- 'description': None,
433
- 'domain_id': None,
434
- 'email': None,
435
393
  'is_enabled': True,
436
394
  'options': {'ignore_lockout_failure_attempts': True},
437
395
  'password': None,
@@ -462,10 +420,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
462
420
  # Set expected values
463
421
  kwargs = {
464
422
  'name': self.user.name,
465
- 'default_project_id': None,
466
- 'description': None,
467
- 'domain_id': None,
468
- 'email': None,
469
423
  'is_enabled': True,
470
424
  'options': {'ignore_lockout_failure_attempts': False},
471
425
  'password': None,
@@ -496,10 +450,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
496
450
  # Set expected values
497
451
  kwargs = {
498
452
  'name': self.user.name,
499
- 'default_project_id': None,
500
- 'description': None,
501
- 'domain_id': None,
502
- 'email': None,
503
453
  'is_enabled': True,
504
454
  'options': {'ignore_password_expiry': True},
505
455
  'password': None,
@@ -530,10 +480,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
530
480
  # Set expected values
531
481
  kwargs = {
532
482
  'name': self.user.name,
533
- 'default_project_id': None,
534
- 'description': None,
535
- 'domain_id': None,
536
- 'email': None,
537
483
  'is_enabled': True,
538
484
  'options': {'ignore_password_expiry': False},
539
485
  'password': None,
@@ -564,10 +510,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
564
510
  # Set expected values
565
511
  kwargs = {
566
512
  'name': self.user.name,
567
- 'default_project_id': None,
568
- 'description': None,
569
- 'domain_id': None,
570
- 'email': None,
571
513
  'is_enabled': True,
572
514
  'options': {'ignore_change_password_upon_first_use': True},
573
515
  'password': None,
@@ -598,10 +540,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
598
540
  # Set expected values
599
541
  kwargs = {
600
542
  'name': self.user.name,
601
- 'default_project_id': None,
602
- 'description': None,
603
- 'domain_id': None,
604
- 'email': None,
605
543
  'is_enabled': True,
606
544
  'options': {'ignore_change_password_upon_first_use': False},
607
545
  'password': None,
@@ -632,10 +570,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
632
570
  # Set expected values
633
571
  kwargs = {
634
572
  'name': self.user.name,
635
- 'default_project_id': None,
636
- 'description': None,
637
- 'domain_id': None,
638
- 'email': None,
639
573
  'is_enabled': True,
640
574
  'options': {'lock_password': True},
641
575
  'password': None,
@@ -666,10 +600,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
666
600
  # Set expected values
667
601
  kwargs = {
668
602
  'name': self.user.name,
669
- 'default_project_id': None,
670
- 'description': None,
671
- 'domain_id': None,
672
- 'email': None,
673
603
  'is_enabled': True,
674
604
  'options': {'lock_password': False},
675
605
  'password': None,
@@ -700,10 +630,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
700
630
  # Set expected values
701
631
  kwargs = {
702
632
  'name': self.user.name,
703
- 'default_project_id': None,
704
- 'description': None,
705
- 'domain_id': None,
706
- 'email': None,
707
633
  'is_enabled': True,
708
634
  'options': {'multi_factor_auth_enabled': True},
709
635
  'password': None,
@@ -734,10 +660,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
734
660
  # Set expected values
735
661
  kwargs = {
736
662
  'name': self.user.name,
737
- 'default_project_id': None,
738
- 'description': None,
739
- 'domain_id': None,
740
- 'email': None,
741
663
  'is_enabled': True,
742
664
  'options': {'multi_factor_auth_enabled': False},
743
665
  'password': None,
@@ -774,10 +696,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
774
696
  # Set expected values
775
697
  kwargs = {
776
698
  'name': self.user.name,
777
- 'default_project_id': None,
778
- 'description': None,
779
- 'domain_id': None,
780
- 'email': None,
781
699
  'is_enabled': True,
782
700
  'options': {
783
701
  'multi_factor_auth_rules': [["password", "totp"], ["password"]]
@@ -815,10 +733,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
815
733
  # Set expected values
816
734
  kwargs = {
817
735
  'name': self.user.name,
818
- 'default_project_id': None,
819
- 'description': None,
820
- 'domain_id': None,
821
- 'email': None,
822
736
  'is_enabled': True,
823
737
  'options': {
824
738
  'ignore_password_expiry': True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-openstackclient
3
- Version: 7.1.2
3
+ Version: 7.1.4
4
4
  Summary: OpenStack Command-line Client
5
5
  Home-page: https://docs.openstack.org/python-openstackclient/latest/
6
6
  Author: OpenStack
@@ -9,15 +9,15 @@ openstackclient/api/image_v2.py,sha256=GSM09toS6rcLzbtyhKl_FvQ7UeWJ3EcvSNBdVIk9r
9
9
  openstackclient/api/object_store_v1.py,sha256=366WuIuu7iXH4r-vdZTWSiopGj8P4MmMa8NePcvh5qk,18183
10
10
  openstackclient/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  openstackclient/common/availability_zone.py,sha256=2TvrpkRQmMHffRZu1x71NFu0tQQNTuo0Voi0er_OvZc,6497
12
- openstackclient/common/clientmanager.py,sha256=dGkJZwEuDmEFIuLyCesCRfEEUHPX5KqxOYvdwtyq1xk,7124
12
+ openstackclient/common/clientmanager.py,sha256=X_hXK580SLUG3n_HY-2owE32eAzB0jTyLq2DMCufLAs,7438
13
13
  openstackclient/common/configuration.py,sha256=kfi4Ph1hEO0z8uJD8d9OuQz2C70Yi7U8pzbc3Tq88lU,2339
14
14
  openstackclient/common/extension.py,sha256=4YK8HjwNtd7fIOzcQ-7PDjIwuF331T924vUcSkzK5pI,5332
15
- openstackclient/common/limits.py,sha256=pCNLq4A1vKxsN27f1G0Qot4gNi-L0z4p7UdGkfx712w,5662
15
+ openstackclient/common/limits.py,sha256=6LSFb7OlaMjN6nfXvnZBSaTwZS09UhpxpBNq7eOs898,5659
16
16
  openstackclient/common/module.py,sha256=biNzeW2KWcaagpvidvNvQuj4JNk1wjXxBnW99tu_nNk,4277
17
17
  openstackclient/common/pagination.py,sha256=ZmEFXprCbSKDtURJTyp5pfe97JuZYKth0MAkEXxrFFU,2728
18
18
  openstackclient/common/progressbar.py,sha256=-Xlth1FbiqZg1j3-zX6DIEp29mD76z2ozxiOybx8K-g,2427
19
19
  openstackclient/common/project_cleanup.py,sha256=f77yjCfhMh_XY2C-riwvbvh3jrMPx_4EzgHflkG8efk,5206
20
- openstackclient/common/quota.py,sha256=w17mvV7YE9V2kBZ-oX47cbh3iKP77g1cu7STD5NpswM,28361
20
+ openstackclient/common/quota.py,sha256=ARlbPzaPR7KIxzvVOSY2RFs5SFHalZ0KpjkzHCmhar4,28697
21
21
  openstackclient/common/versions.py,sha256=yiH0xhCFKpFcZrA0tWz99-eXJ44PEAyH4qZy9Fu9uwk,3838
22
22
  openstackclient/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  openstackclient/compute/client.py,sha256=xntJEyxt_h5s2cI132cDFCOIxrJCu07WbtFLwp3R5dI,1533
@@ -30,7 +30,7 @@ openstackclient/compute/v2/host.py,sha256=1Ow4eJu9HPz-SC0u_eXJskUXaGoyW7X1O2yZIf
30
30
  openstackclient/compute/v2/hypervisor.py,sha256=xkSLqZjaJnVABAKh9ANF9zqy67WaEJeD9NiVL3Frqko,8808
31
31
  openstackclient/compute/v2/hypervisor_stats.py,sha256=Y2Jkkleha8PXnM2VQ2MJtjKxHKchGRyEqmILfPj-Wgw,2161
32
32
  openstackclient/compute/v2/keypair.py,sha256=yM30AVsMmPP1SAqD8_nKXNkeB9WLyL6sd18AjeYIuhM,15730
33
- openstackclient/compute/v2/server.py,sha256=nGL-_cyQssS5-TT_BlQMvHVjOLEh0q2meAKJNVfVDsI,187196
33
+ openstackclient/compute/v2/server.py,sha256=qzozAjygKLZUQ4Dtib1R1_10Sc7zm3axBCP3wt9d3Zw,187204
34
34
  openstackclient/compute/v2/server_backup.py,sha256=GVf_T5iHt0po1vYDDQgUQ_fN3AisHvKozEXY37voWkc,4119
35
35
  openstackclient/compute/v2/server_event.py,sha256=vLtu_LBJ99Fgfj9oRBCVATalRMyqBd3CUjHToVfQB48,10055
36
36
  openstackclient/compute/v2/server_group.py,sha256=s9CjDnmjNUk03VUdAkOn5QHMoSCHV8dtvuLe05ER4Rg,8674
@@ -41,7 +41,7 @@ openstackclient/compute/v2/service.py,sha256=3Y-R9wGnk5kSaMvXzuETd8EFLQwTfMUbdmk
41
41
  openstackclient/compute/v2/usage.py,sha256=ztIv1ucTWWuVe3pfv1jk7Gkf2c6boTrqGdeFKbbfQ5g,9026
42
42
  openstackclient/identity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  openstackclient/identity/client.py,sha256=Miz2eCWbhS-IXaj87J-5qatZPOwZeOn5_MyZ6YMNZ9w,2433
44
- openstackclient/identity/common.py,sha256=5J6nlE9TIo5EywdBqkrWd7Roif5E5Gcp5ucg1_EbD-Y,12306
44
+ openstackclient/identity/common.py,sha256=oWSLTECKJeqyvJH7mY1OZWUSSZZtTVyp4jBQGWFclto,12011
45
45
  openstackclient/identity/v2_0/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  openstackclient/identity/v2_0/catalog.py,sha256=B0nCW-KrPqBJ6CX4_zn7_p6h3Y4VFfmVhs14MhnJ-oY,3484
47
47
  openstackclient/identity/v2_0/ec2creds.py,sha256=QRj4gP54dA-wX27xy55NJwes9PEFRsCSa0bXjB3aZrY,6468
@@ -73,14 +73,14 @@ openstackclient/identity/v3/project.py,sha256=jHpviZg3MYPKCacYs1_jbdafz9EflGHGqu
73
73
  openstackclient/identity/v3/region.py,sha256=jcImUh-kZromTAtXd8aF7kfKBqBwfknP2I5ylYYyb0w,6010
74
74
  openstackclient/identity/v3/registered_limit.py,sha256=mbV4Ci7kNPMbveHg6QQztYISiXcm3VwBv3xR2D-aKvw,11389
75
75
  openstackclient/identity/v3/role.py,sha256=dmuW5j4T9zmNBHuGkIIcolx5aoDmyFGshGSfOZ2swEY,14205
76
- openstackclient/identity/v3/role_assignment.py,sha256=7caVScsft9Z3kwl3DvWLyXiAD9f9fX_1V6JUTGWe_fs,7366
77
- openstackclient/identity/v3/service.py,sha256=Ix_FjH2KezZuyiTmkHYzVDVQTzZFEoTtftJ-2HPQvxE,7406
76
+ openstackclient/identity/v3/role_assignment.py,sha256=pg-43fgY2HK4ymfaYypVOuPMsJoYGBRn4XZxicpX6YY,8018
77
+ openstackclient/identity/v3/service.py,sha256=2VuxiOEuEnqjWEPNryKRe4LLe70-MIndkDXYB_jdW1g,7457
78
78
  openstackclient/identity/v3/service_provider.py,sha256=g-gs09bFJertKjbfFp2ZKPjXtPfNcecBlHWkArGLkvw,7410
79
79
  openstackclient/identity/v3/tag.py,sha256=dcVDheoWxdkwsZYvyJSpzIF2EGpqZtaE0h7x2halscc,3972
80
80
  openstackclient/identity/v3/token.py,sha256=dXP7iRYZRROw3k8knao6NteZeP67mVGCc2Y9jMHudnQ,7399
81
81
  openstackclient/identity/v3/trust.py,sha256=xKIEd1K2S9NFnyJfa58ezEpsvQLVtO6qe4cREqFgkmA,10522
82
82
  openstackclient/identity/v3/unscoped_saml.py,sha256=A-645W2kp0_27NxG03YcEU9EtcCFex6Ojzw4fLApuds,2031
83
- openstackclient/identity/v3/user.py,sha256=yHsvGEHqquY7rpiwybpbNXdlZmX593-Z2_nooOAeVYo,23532
83
+ openstackclient/identity/v3/user.py,sha256=oDz9nfUeDyFsjHMALmNZxrG5qoGROOZ9CoTmNg7EMls,24051
84
84
  openstackclient/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  openstackclient/image/client.py,sha256=I088KrjZ9ubuS_8NDX98W6_lHkdaxbBtRHTHt5q_HC8,1508
86
86
  openstackclient/image/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -294,7 +294,7 @@ openstackclient/tests/unit/compute/v2/test_host.py,sha256=AAcIxoGpVdy1qOkV3lPFyD
294
294
  openstackclient/tests/unit/compute/v2/test_hypervisor.py,sha256=t_Xv7uh4dzv6G-gOG3Eoy7l516cHOwy1xeiBgIyaUKc,17390
295
295
  openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py,sha256=1z8Jhx_CBoN-cu4im3MQc-YPAZlRQfu--3c9UAUmMG4,3020
296
296
  openstackclient/tests/unit/compute/v2/test_keypair.py,sha256=ASoemn6bN_tEKZlHRbhUpjPNydPaqMA22jn6fyAcwGs,25067
297
- openstackclient/tests/unit/compute/v2/test_server.py,sha256=LKLw3-_AmnrK2xj3khVl_Te98HPn-Aay25AQY5HW5Cs,310885
297
+ openstackclient/tests/unit/compute/v2/test_server.py,sha256=Lg2sSCAI9Cenb4xz1hoOwheQul7KxiEhJvXKHdg2rzA,310893
298
298
  openstackclient/tests/unit/compute/v2/test_server_backup.py,sha256=MW2UQQ32cE403Bmihp7s_MYVhVV4NrkwfDdaZ-y5Wu4,7503
299
299
  openstackclient/tests/unit/compute/v2/test_server_event.py,sha256=aZhLD_RgcNDUdCgwVJmpolQlabVWxlrp5edSZBanR_Q,12504
300
300
  openstackclient/tests/unit/compute/v2/test_server_group.py,sha256=Ul0SQ_cIq4mW7TIsm6mDRtCOlboNyy6lClP1Oy3NPAE,14934
@@ -335,13 +335,13 @@ openstackclient/tests/unit/identity/v3/test_protocol.py,sha256=SmV_N8v_dU-mcwa7k
335
335
  openstackclient/tests/unit/identity/v3/test_region.py,sha256=SN7wLeta1wgFjul3_NGzU-TsQQQaZiFbC7sOEFiRl30,10614
336
336
  openstackclient/tests/unit/identity/v3/test_registered_limit.py,sha256=8-Og3hgz2q8i7W1TSFmnRp9MqYzVY1H4SjnOrLVPWKo,17554
337
337
  openstackclient/tests/unit/identity/v3/test_role.py,sha256=pYwuSFEg99MHk1mTKQ0l9XzdER0m2T9YjZHMDxfTvFk,51986
338
- openstackclient/tests/unit/identity/v3/test_role_assignment.py,sha256=mHki0zb-hAB3mbVTa0nr3cmVsHEcoop282IwwbIEtgQ,27161
339
- openstackclient/tests/unit/identity/v3/test_service.py,sha256=tyi-I26tyoO-WdFHe8zogh-8LsrzSfFJaI2E8ntVGHY,15124
338
+ openstackclient/tests/unit/identity/v3/test_role_assignment.py,sha256=LGwD5EApF6BSiXIHBPwgetcjQsRfCjQ62DmVxGFFcOE,35747
339
+ openstackclient/tests/unit/identity/v3/test_service.py,sha256=eFRjaeuJKd4_G1_gSTzAKmLTN035rQjY4E5RnLzMutY,15028
340
340
  openstackclient/tests/unit/identity/v3/test_service_provider.py,sha256=JkO4dBQLGGdJS9etWJzj0wswGmdAAtrCOmfC1hEYzSs,13189
341
341
  openstackclient/tests/unit/identity/v3/test_token.py,sha256=k9Ij_BbGTx9KG6Wf7NiO_th-N7cxGWnIWQMWIlDsGXg,4556
342
342
  openstackclient/tests/unit/identity/v3/test_trust.py,sha256=ox7NuX5Suxrg7wu_06xsUXsnsASex54-RE-Jj0vtF40,13081
343
343
  openstackclient/tests/unit/identity/v3/test_unscoped_saml.py,sha256=gBtouVvKaOTflJ6TMg497ScL4GsVS3lVM_h8XKFExXg,3592
344
- openstackclient/tests/unit/identity/v3/test_user.py,sha256=8QpH_A3YFgqsV3Pzgv7bvPGh5Wk1dFKLvffTrxdffrM,60959
344
+ openstackclient/tests/unit/identity/v3/test_user.py,sha256=BFNh4waeT_eM5IQkzPaeB6gxtDYh9CW1tuEDWbF8rQc,58245
345
345
  openstackclient/tests/unit/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
346
346
  openstackclient/tests/unit/image/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
347
347
  openstackclient/tests/unit/image/v1/fakes.py,sha256=rwYSQK12WxSaX2p-f15e6D94qC6lg1XIgBFvdiJ5aRc,2271
@@ -493,11 +493,11 @@ openstackclient/volume/v3/volume_message.py,sha256=HBBxPEcYoNqGjEbzGIEnIJ1XTcQ2K
493
493
  openstackclient/volume/v3/volume_snapshot.py,sha256=pZ4q_qCwqh4jaGhX28G59wsWDmEc3uXdbpeD176osZg,3186
494
494
  openstackclient/volume/v3/volume_transfer_request.py,sha256=PthOJV2m-pTV1njFzwTpaekXZkET1c6alIJrpuN7R6Q,7530
495
495
  openstackclient/volume/v3/volume_type.py,sha256=DF2MVoW2mIk0ABDLZD8D2sb8JlR7-rRjA4qCnBHRe6o,34039
496
- python_openstackclient-7.1.2.dist-info/AUTHORS,sha256=TRFKS0fs1j9d3_KWaIQfYnNH3gfTnDyBHng0RJAUFeM,21384
497
- python_openstackclient-7.1.2.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
498
- python_openstackclient-7.1.2.dist-info/METADATA,sha256=jrC3N3viJUbcJ8V1HnLHeX0sRlB6jawZMR0ddikiI08,6581
499
- python_openstackclient-7.1.2.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
500
- python_openstackclient-7.1.2.dist-info/entry_points.txt,sha256=9kVhKTeyLPfkXDMI_ALqXvz0zSJEqibJLHHsOdmtT3c,53261
501
- python_openstackclient-7.1.2.dist-info/pbr.json,sha256=LGNHuU0gKlZeEB_mLMluAMpuBrt7SCvOG3xywgiECwo,47
502
- python_openstackclient-7.1.2.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
503
- python_openstackclient-7.1.2.dist-info/RECORD,,
496
+ python_openstackclient-7.1.4.dist-info/AUTHORS,sha256=TRFKS0fs1j9d3_KWaIQfYnNH3gfTnDyBHng0RJAUFeM,21384
497
+ python_openstackclient-7.1.4.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
498
+ python_openstackclient-7.1.4.dist-info/METADATA,sha256=kgsnQMio_eekeFp0wbbLQ1k9JiLJmyUnkzCFkhqaLs4,6581
499
+ python_openstackclient-7.1.4.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
500
+ python_openstackclient-7.1.4.dist-info/entry_points.txt,sha256=9kVhKTeyLPfkXDMI_ALqXvz0zSJEqibJLHHsOdmtT3c,53261
501
+ python_openstackclient-7.1.4.dist-info/pbr.json,sha256=Ath0K2qvjbVogYTdeuTmNoMRajUIwhHfhz_eJUkQVOM,47
502
+ python_openstackclient-7.1.4.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
503
+ python_openstackclient-7.1.4.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ {"git_version": "f42ade43", "is_release": true}
@@ -1 +0,0 @@
1
- {"git_version": "08c84454", "is_release": true}