python-openstackclient 7.0.0__py3-none-any.whl → 7.1.0__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.
- openstackclient/common/clientmanager.py +22 -30
- openstackclient/common/limits.py +3 -4
- openstackclient/common/quota.py +28 -23
- openstackclient/compute/v2/aggregate.py +29 -23
- openstackclient/compute/v2/hypervisor.py +5 -3
- openstackclient/compute/v2/server.py +4 -3
- openstackclient/identity/v3/application_credential.py +17 -17
- openstackclient/identity/v3/service.py +5 -5
- openstackclient/releasenotes/notes/volume-backup-created-at-list-b49ec893ae1f6b0d.yaml +4 -0
- openstackclient/tests/functional/identity/v3/common.py +2 -2
- openstackclient/tests/functional/identity/v3/test_application_credential.py +7 -7
- openstackclient/tests/functional/identity/v3/test_limit.py +2 -2
- openstackclient/tests/functional/identity/v3/test_registered_limit.py +1 -1
- openstackclient/tests/functional/identity/v3/test_service.py +3 -3
- openstackclient/tests/unit/compute/v2/test_aggregate.py +70 -42
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +29 -3
- openstackclient/tests/unit/compute/v2/test_server.py +18 -57
- openstackclient/tests/unit/fakes.py +1 -1
- openstackclient/tests/unit/identity/v3/test_application_credential.py +17 -17
- openstackclient/tests/unit/identity/v3/test_service.py +6 -6
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -0
- openstackclient/volume/v2/volume_backup.py +2 -0
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/AUTHORS +2 -0
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/METADATA +3 -2
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/RECORD +30 -29
- python_openstackclient-7.1.0.dist-info/pbr.json +1 -0
- python_openstackclient-7.0.0.dist-info/pbr.json +0 -1
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/WHEEL +0 -0
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/entry_points.txt +0 -0
- {python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/top_level.txt +0 -0
|
@@ -116,7 +116,6 @@ class ClientManager(clientmanager.ClientManager):
|
|
|
116
116
|
|
|
117
117
|
def is_network_endpoint_enabled(self):
|
|
118
118
|
"""Check if the network endpoint is enabled"""
|
|
119
|
-
|
|
120
119
|
# NOTE(dtroyer): is_service_available() can also return None if
|
|
121
120
|
# there is no Service Catalog, callers here are
|
|
122
121
|
# not expecting that so fold None into True to
|
|
@@ -125,43 +124,37 @@ class ClientManager(clientmanager.ClientManager):
|
|
|
125
124
|
|
|
126
125
|
def is_compute_endpoint_enabled(self):
|
|
127
126
|
"""Check if Compute endpoint is enabled"""
|
|
128
|
-
|
|
129
127
|
return self.is_service_available('compute') is not False
|
|
130
128
|
|
|
131
|
-
|
|
129
|
+
# TODO(stephenfin): Drop volume_client argument in OSC 8.0 or later.
|
|
130
|
+
def is_volume_endpoint_enabled(self, volume_client=None):
|
|
132
131
|
"""Check if volume endpoint is enabled"""
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
# for v3 it is a tuple (3, 0)
|
|
139
|
-
if endpoint_data.api_version and isinstance(
|
|
140
|
-
endpoint_data.api_version, tuple
|
|
141
|
-
):
|
|
142
|
-
volume_version = endpoint_data.api_version[0]
|
|
143
|
-
else:
|
|
144
|
-
# Setting volume_version as 2 here if it doesn't satisfy the
|
|
145
|
-
# conditions for version 3
|
|
146
|
-
volume_version = 2
|
|
147
|
-
if (
|
|
148
|
-
self.is_service_available("volumev%s" % volume_version)
|
|
149
|
-
is not False
|
|
150
|
-
):
|
|
151
|
-
return True
|
|
152
|
-
elif self.is_service_available('volume') is not False:
|
|
153
|
-
return True
|
|
154
|
-
else:
|
|
155
|
-
return False
|
|
132
|
+
return (
|
|
133
|
+
self.is_service_available('volume') is not False
|
|
134
|
+
or self.is_service_available('volumev3') is not False
|
|
135
|
+
or self.is_service_available('volumev2') is not False
|
|
136
|
+
)
|
|
156
137
|
|
|
157
138
|
|
|
158
139
|
# Plugin Support
|
|
159
140
|
|
|
160
141
|
|
|
142
|
+
def _on_load_failure_callback(
|
|
143
|
+
manager: stevedore.ExtensionManager,
|
|
144
|
+
ep: importlib.metadata.EntryPoint,
|
|
145
|
+
err: Exception,
|
|
146
|
+
) -> None:
|
|
147
|
+
sys.stderr.write(
|
|
148
|
+
f"WARNING: Failed to import plugin {ep.group}:{ep.name}: {err}.\n"
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
|
|
161
152
|
def get_plugin_modules(group):
|
|
162
153
|
"""Find plugin entry points"""
|
|
163
154
|
mod_list = []
|
|
164
|
-
mgr = stevedore.ExtensionManager(
|
|
155
|
+
mgr = stevedore.ExtensionManager(
|
|
156
|
+
group, on_load_failure_callback=_on_load_failure_callback
|
|
157
|
+
)
|
|
165
158
|
for ep in mgr:
|
|
166
159
|
LOG.debug('Found plugin %s', ep.name)
|
|
167
160
|
|
|
@@ -180,9 +173,8 @@ def get_plugin_modules(group):
|
|
|
180
173
|
module = importlib.import_module(module_name)
|
|
181
174
|
except Exception as err:
|
|
182
175
|
sys.stderr.write(
|
|
183
|
-
"WARNING: Failed to import plugin {}:
|
|
184
|
-
|
|
185
|
-
)
|
|
176
|
+
f"WARNING: Failed to import plugin {ep.group}:{ep.name}: "
|
|
177
|
+
f"{err}.\n"
|
|
186
178
|
)
|
|
187
179
|
continue
|
|
188
180
|
|
openstackclient/common/limits.py
CHANGED
|
@@ -101,9 +101,6 @@ class ShowLimits(command.Lister):
|
|
|
101
101
|
return parser
|
|
102
102
|
|
|
103
103
|
def take_action(self, parsed_args):
|
|
104
|
-
compute_client = self.app.client_manager.sdk_connection.compute
|
|
105
|
-
volume_client = self.app.client_manager.sdk_connection.volume
|
|
106
|
-
|
|
107
104
|
project_id = None
|
|
108
105
|
if parsed_args.project is not None:
|
|
109
106
|
identity_client = self.app.client_manager.identity
|
|
@@ -125,11 +122,13 @@ class ShowLimits(command.Lister):
|
|
|
125
122
|
volume_limits = None
|
|
126
123
|
|
|
127
124
|
if self.app.client_manager.is_compute_endpoint_enabled():
|
|
125
|
+
compute_client = self.app.client_manager.sdk_connection.compute
|
|
128
126
|
compute_limits = compute_client.get_limits(
|
|
129
127
|
reserved=parsed_args.is_reserved, tenant_id=project_id
|
|
130
128
|
)
|
|
131
129
|
|
|
132
|
-
if self.app.client_manager.is_volume_endpoint_enabled(
|
|
130
|
+
if self.app.client_manager.is_volume_endpoint_enabled():
|
|
131
|
+
volume_client = self.app.client_manager.sdk_connection.volume
|
|
133
132
|
volume_limits = volume_client.get_limits(
|
|
134
133
|
project_id=project_id,
|
|
135
134
|
)
|
openstackclient/common/quota.py
CHANGED
|
@@ -565,33 +565,42 @@ class SetQuota(common.NetDetectionMixin, command.Command):
|
|
|
565
565
|
msg = _('--force cannot be used with --class or --default')
|
|
566
566
|
raise exceptions.CommandError(msg)
|
|
567
567
|
|
|
568
|
-
compute_client = self.app.client_manager.sdk_connection.compute
|
|
569
|
-
volume_client = self.app.client_manager.sdk_connection.volume
|
|
570
|
-
|
|
571
568
|
compute_kwargs = {}
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
if value is not None:
|
|
575
|
-
compute_kwargs[k] = value
|
|
569
|
+
volume_kwargs = {}
|
|
570
|
+
network_kwargs = {}
|
|
576
571
|
|
|
577
|
-
if
|
|
578
|
-
|
|
572
|
+
if self.app.client_manager.is_compute_endpoint_enabled():
|
|
573
|
+
compute_client = self.app.client_manager.sdk_connection.compute
|
|
579
574
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
575
|
+
for k, v in COMPUTE_QUOTAS.items():
|
|
576
|
+
value = getattr(parsed_args, k, None)
|
|
577
|
+
if value is not None:
|
|
578
|
+
compute_kwargs[k] = value
|
|
579
|
+
|
|
580
|
+
if compute_kwargs and parsed_args.force is True:
|
|
581
|
+
compute_kwargs['force'] = parsed_args.force
|
|
582
|
+
|
|
583
|
+
if self.app.client_manager.is_volume_endpoint_enabled():
|
|
584
|
+
volume_client = self.app.client_manager.sdk_connection.volume
|
|
585
|
+
|
|
586
|
+
for k, v in VOLUME_QUOTAS.items():
|
|
587
|
+
value = getattr(parsed_args, k, None)
|
|
588
|
+
if value is not None:
|
|
589
|
+
if (
|
|
590
|
+
parsed_args.volume_type
|
|
591
|
+
and k in IMPACT_VOLUME_TYPE_QUOTAS
|
|
592
|
+
):
|
|
593
|
+
k = k + '_%s' % parsed_args.volume_type
|
|
594
|
+
volume_kwargs[k] = value
|
|
587
595
|
|
|
588
|
-
network_kwargs = {}
|
|
589
596
|
if self.app.client_manager.is_network_endpoint_enabled():
|
|
597
|
+
network_client = self.app.client_manager.network
|
|
598
|
+
|
|
590
599
|
for k, v in NETWORK_QUOTAS.items():
|
|
591
600
|
value = getattr(parsed_args, k, None)
|
|
592
601
|
if value is not None:
|
|
593
602
|
network_kwargs[k] = value
|
|
594
|
-
|
|
603
|
+
elif self.app.client_manager.is_compute_endpoint_enabled():
|
|
595
604
|
for k, v in NOVA_NETWORK_QUOTAS.items():
|
|
596
605
|
value = getattr(parsed_args, k, None)
|
|
597
606
|
if value is not None:
|
|
@@ -632,11 +641,7 @@ class SetQuota(common.NetDetectionMixin, command.Command):
|
|
|
632
641
|
compute_client.update_quota_set(project, **compute_kwargs)
|
|
633
642
|
if volume_kwargs:
|
|
634
643
|
volume_client.update_quota_set(project, **volume_kwargs)
|
|
635
|
-
if
|
|
636
|
-
network_kwargs
|
|
637
|
-
and self.app.client_manager.is_network_endpoint_enabled()
|
|
638
|
-
):
|
|
639
|
-
network_client = self.app.client_manager.network
|
|
644
|
+
if network_kwargs:
|
|
640
645
|
network_client.update_quota(project, **network_kwargs)
|
|
641
646
|
|
|
642
647
|
|
|
@@ -192,40 +192,46 @@ class ListAggregate(command.Lister):
|
|
|
192
192
|
|
|
193
193
|
aggregates = list(compute_client.aggregates())
|
|
194
194
|
|
|
195
|
+
if sdk_utils.supports_microversion(compute_client, '2.41'):
|
|
196
|
+
column_headers = ("ID", "UUID")
|
|
197
|
+
columns = ("id", "uuid")
|
|
198
|
+
else:
|
|
199
|
+
column_headers = ("ID",)
|
|
200
|
+
columns = ("id",)
|
|
201
|
+
|
|
202
|
+
column_headers += (
|
|
203
|
+
"Name",
|
|
204
|
+
"Availability Zone",
|
|
205
|
+
)
|
|
206
|
+
columns += (
|
|
207
|
+
"name",
|
|
208
|
+
"availability_zone",
|
|
209
|
+
)
|
|
210
|
+
|
|
195
211
|
if parsed_args.long:
|
|
196
212
|
# Remove availability_zone from metadata because Nova doesn't
|
|
197
213
|
for aggregate in aggregates:
|
|
198
214
|
if 'availability_zone' in aggregate.metadata:
|
|
199
215
|
aggregate.metadata.pop('availability_zone')
|
|
200
|
-
|
|
201
|
-
column_headers
|
|
202
|
-
"ID",
|
|
203
|
-
"Name",
|
|
204
|
-
"Availability Zone",
|
|
216
|
+
|
|
217
|
+
column_headers += (
|
|
205
218
|
"Properties",
|
|
206
219
|
"Hosts",
|
|
207
220
|
)
|
|
208
|
-
columns
|
|
209
|
-
"
|
|
210
|
-
"
|
|
211
|
-
"Availability Zone",
|
|
212
|
-
"Metadata",
|
|
213
|
-
"Hosts",
|
|
214
|
-
)
|
|
215
|
-
else:
|
|
216
|
-
column_headers = columns = (
|
|
217
|
-
"ID",
|
|
218
|
-
"Name",
|
|
219
|
-
"Availability Zone",
|
|
221
|
+
columns += (
|
|
222
|
+
"metadata",
|
|
223
|
+
"hosts",
|
|
220
224
|
)
|
|
221
225
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
return (
|
|
227
|
+
column_headers,
|
|
228
|
+
(
|
|
229
|
+
utils.get_item_properties(
|
|
230
|
+
s, columns, formatters=_aggregate_formatters
|
|
231
|
+
)
|
|
232
|
+
for s in aggregates
|
|
233
|
+
),
|
|
227
234
|
)
|
|
228
|
-
return (column_headers, data)
|
|
229
235
|
|
|
230
236
|
|
|
231
237
|
class RemoveAggregateHost(command.ShowOne):
|
|
@@ -165,9 +165,11 @@ class ShowHypervisor(command.ShowOne):
|
|
|
165
165
|
|
|
166
166
|
def take_action(self, parsed_args):
|
|
167
167
|
compute_client = self.app.client_manager.sdk_connection.compute
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
|
|
169
|
+
hypervisor_id = compute_client.find_hypervisor(
|
|
170
|
+
parsed_args.hypervisor, ignore_missing=False, details=False
|
|
171
|
+
).id
|
|
172
|
+
hypervisor = compute_client.get_hypervisor(hypervisor_id).copy()
|
|
171
173
|
|
|
172
174
|
# Some of the properties in the hypervisor object need to be processed
|
|
173
175
|
# before they get reported to the user. We spend this section
|
|
@@ -3587,6 +3587,9 @@ class RebuildServer(command.ShowOne):
|
|
|
3587
3587
|
if parsed_args.name is not None:
|
|
3588
3588
|
kwargs['name'] = parsed_args.name
|
|
3589
3589
|
|
|
3590
|
+
if parsed_args.password is not None:
|
|
3591
|
+
kwargs['admin_password'] = parsed_args.password
|
|
3592
|
+
|
|
3590
3593
|
if parsed_args.preserve_ephemeral is not None:
|
|
3591
3594
|
kwargs['preserve_ephemeral'] = parsed_args.preserve_ephemeral
|
|
3592
3595
|
|
|
@@ -3725,9 +3728,7 @@ class RebuildServer(command.ShowOne):
|
|
|
3725
3728
|
msg = _("The server status is not ACTIVE, SHUTOFF or ERROR.")
|
|
3726
3729
|
raise exceptions.CommandError(msg)
|
|
3727
3730
|
|
|
3728
|
-
server = compute_client.rebuild_server(
|
|
3729
|
-
server, image, admin_password=parsed_args.password, **kwargs
|
|
3730
|
-
)
|
|
3731
|
+
server = compute_client.rebuild_server(server, image, **kwargs)
|
|
3731
3732
|
|
|
3732
3733
|
if parsed_args.wait:
|
|
3733
3734
|
if utils.wait_for_status(
|
|
@@ -186,15 +186,15 @@ class CreateApplicationCredential(command.ShowOne):
|
|
|
186
186
|
application_credential['roles'] = msg
|
|
187
187
|
|
|
188
188
|
columns = (
|
|
189
|
-
'
|
|
190
|
-
'
|
|
191
|
-
'
|
|
192
|
-
'
|
|
193
|
-
'
|
|
194
|
-
'
|
|
195
|
-
'
|
|
196
|
-
'
|
|
197
|
-
'
|
|
189
|
+
'id',
|
|
190
|
+
'name',
|
|
191
|
+
'description',
|
|
192
|
+
'project_id',
|
|
193
|
+
'roles',
|
|
194
|
+
'unrestricted',
|
|
195
|
+
'access_rules',
|
|
196
|
+
'expires_at',
|
|
197
|
+
'secret',
|
|
198
198
|
)
|
|
199
199
|
return (
|
|
200
200
|
columns,
|
|
@@ -337,14 +337,14 @@ class ShowApplicationCredential(command.ShowOne):
|
|
|
337
337
|
app_cred['roles'] = msg
|
|
338
338
|
|
|
339
339
|
columns = (
|
|
340
|
-
'
|
|
341
|
-
'
|
|
342
|
-
'
|
|
343
|
-
'
|
|
344
|
-
'
|
|
345
|
-
'
|
|
346
|
-
'
|
|
347
|
-
'
|
|
340
|
+
'id',
|
|
341
|
+
'name',
|
|
342
|
+
'description',
|
|
343
|
+
'project_id',
|
|
344
|
+
'roles',
|
|
345
|
+
'unrestricted',
|
|
346
|
+
'access_rules',
|
|
347
|
+
'expires_at',
|
|
348
348
|
)
|
|
349
349
|
return (
|
|
350
350
|
columns,
|
|
@@ -48,7 +48,7 @@ class IdentityTests(base.TestCase):
|
|
|
48
48
|
'parent_id',
|
|
49
49
|
]
|
|
50
50
|
ROLE_FIELDS = ['id', 'name', 'domain_id', 'description']
|
|
51
|
-
SERVICE_FIELDS = ['
|
|
51
|
+
SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description']
|
|
52
52
|
REGION_FIELDS = ['description', 'enabled', 'parent_region', 'region']
|
|
53
53
|
ENDPOINT_FIELDS = [
|
|
54
54
|
'id',
|
|
@@ -376,7 +376,7 @@ class IdentityTests(base.TestCase):
|
|
|
376
376
|
if add_clean_up:
|
|
377
377
|
service = self.parse_show_as_object(raw_output)
|
|
378
378
|
self.addCleanup(
|
|
379
|
-
self.openstack, 'service delete %s' % service['
|
|
379
|
+
self.openstack, 'service delete %s' % service['id']
|
|
380
380
|
)
|
|
381
381
|
items = self.parse_show(raw_output)
|
|
382
382
|
self.assert_show_fields(items, self.SERVICE_FIELDS)
|
|
@@ -21,13 +21,13 @@ from openstackclient.tests.functional.identity.v3 import common
|
|
|
21
21
|
|
|
22
22
|
class ApplicationCredentialTests(common.IdentityTests):
|
|
23
23
|
APPLICATION_CREDENTIAL_FIELDS = [
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
24
|
+
'id',
|
|
25
|
+
'name',
|
|
26
|
+
'project_id',
|
|
27
|
+
'description',
|
|
28
|
+
'roles',
|
|
29
|
+
'expires_at',
|
|
30
|
+
'unrestricted',
|
|
31
31
|
]
|
|
32
32
|
APPLICATION_CREDENTIAL_LIST_HEADERS = [
|
|
33
33
|
'ID',
|
|
@@ -32,7 +32,7 @@ class LimitTestCase(common.IdentityTests):
|
|
|
32
32
|
|
|
33
33
|
raw_output = self.openstack('service show %s' % service_id)
|
|
34
34
|
items = self.parse_show(raw_output)
|
|
35
|
-
service_name = self._extract_value_from_items('
|
|
35
|
+
service_name = self._extract_value_from_items('name', items)
|
|
36
36
|
|
|
37
37
|
project_name = self._create_dummy_project()
|
|
38
38
|
raw_output = self.openstack('project show %s' % project_name)
|
|
@@ -73,7 +73,7 @@ class LimitTestCase(common.IdentityTests):
|
|
|
73
73
|
|
|
74
74
|
raw_output = self.openstack('service show %s' % service_id)
|
|
75
75
|
items = self.parse_show(raw_output)
|
|
76
|
-
service_name = self._extract_value_from_items('
|
|
76
|
+
service_name = self._extract_value_from_items('name', items)
|
|
77
77
|
|
|
78
78
|
project_name = self._create_dummy_project()
|
|
79
79
|
|
|
@@ -29,7 +29,7 @@ class RegisteredLimitTestCase(common.IdentityTests):
|
|
|
29
29
|
'service show' ' %(service_name)s' % {'service_name': service_name}
|
|
30
30
|
)
|
|
31
31
|
service_items = self.parse_show(raw_output)
|
|
32
|
-
service_id = self._extract_value_from_items('
|
|
32
|
+
service_id = self._extract_value_from_items('id', service_items)
|
|
33
33
|
|
|
34
34
|
raw_output = self.openstack(
|
|
35
35
|
'registered limit create'
|
|
@@ -61,9 +61,9 @@ class ServiceTests(common.IdentityTests):
|
|
|
61
61
|
raw_output = self.openstack('service show %s' % new_service_name)
|
|
62
62
|
# assert service details
|
|
63
63
|
service = self.parse_show_as_object(raw_output)
|
|
64
|
-
self.assertEqual(new_service_type, service['
|
|
65
|
-
self.assertEqual(new_service_name, service['
|
|
66
|
-
self.assertEqual(new_service_description, service['
|
|
64
|
+
self.assertEqual(new_service_type, service['type'])
|
|
65
|
+
self.assertEqual(new_service_name, service['name'])
|
|
66
|
+
self.assertEqual(new_service_description, service['description'])
|
|
67
67
|
|
|
68
68
|
def test_service_show(self):
|
|
69
69
|
service_name = self._create_dummy_service()
|
|
@@ -227,44 +227,6 @@ class TestAggregateDelete(TestAggregate):
|
|
|
227
227
|
|
|
228
228
|
|
|
229
229
|
class TestAggregateList(TestAggregate):
|
|
230
|
-
list_columns = (
|
|
231
|
-
"ID",
|
|
232
|
-
"Name",
|
|
233
|
-
"Availability Zone",
|
|
234
|
-
)
|
|
235
|
-
|
|
236
|
-
list_columns_long = (
|
|
237
|
-
"ID",
|
|
238
|
-
"Name",
|
|
239
|
-
"Availability Zone",
|
|
240
|
-
"Properties",
|
|
241
|
-
"Hosts",
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
list_data = (
|
|
245
|
-
(
|
|
246
|
-
TestAggregate.fake_ag.id,
|
|
247
|
-
TestAggregate.fake_ag.name,
|
|
248
|
-
TestAggregate.fake_ag.availability_zone,
|
|
249
|
-
),
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
list_data_long = (
|
|
253
|
-
(
|
|
254
|
-
TestAggregate.fake_ag.id,
|
|
255
|
-
TestAggregate.fake_ag.name,
|
|
256
|
-
TestAggregate.fake_ag.availability_zone,
|
|
257
|
-
format_columns.DictColumn(
|
|
258
|
-
{
|
|
259
|
-
key: value
|
|
260
|
-
for key, value in TestAggregate.fake_ag.metadata.items()
|
|
261
|
-
if key != 'availability_zone'
|
|
262
|
-
}
|
|
263
|
-
),
|
|
264
|
-
format_columns.ListColumn(TestAggregate.fake_ag.hosts),
|
|
265
|
-
),
|
|
266
|
-
)
|
|
267
|
-
|
|
268
230
|
def setUp(self):
|
|
269
231
|
super().setUp()
|
|
270
232
|
|
|
@@ -272,13 +234,54 @@ class TestAggregateList(TestAggregate):
|
|
|
272
234
|
self.cmd = aggregate.ListAggregate(self.app, None)
|
|
273
235
|
|
|
274
236
|
def test_aggregate_list(self):
|
|
237
|
+
self.set_compute_api_version('2.41')
|
|
238
|
+
|
|
239
|
+
parsed_args = self.check_parser(self.cmd, [], [])
|
|
240
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
241
|
+
|
|
242
|
+
expected_columns = (
|
|
243
|
+
"ID",
|
|
244
|
+
"UUID",
|
|
245
|
+
"Name",
|
|
246
|
+
"Availability Zone",
|
|
247
|
+
)
|
|
248
|
+
expected_data = (
|
|
249
|
+
(
|
|
250
|
+
self.fake_ag.id,
|
|
251
|
+
self.fake_ag.uuid,
|
|
252
|
+
self.fake_ag.name,
|
|
253
|
+
self.fake_ag.availability_zone,
|
|
254
|
+
),
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
self.assertEqual(expected_columns, columns)
|
|
258
|
+
self.assertCountEqual(expected_data, tuple(data))
|
|
259
|
+
|
|
260
|
+
def test_aggregate_list_pre_v241(self):
|
|
261
|
+
self.set_compute_api_version('2.40')
|
|
262
|
+
|
|
275
263
|
parsed_args = self.check_parser(self.cmd, [], [])
|
|
276
264
|
columns, data = self.cmd.take_action(parsed_args)
|
|
277
265
|
|
|
278
|
-
|
|
279
|
-
|
|
266
|
+
expected_columns = (
|
|
267
|
+
"ID",
|
|
268
|
+
"Name",
|
|
269
|
+
"Availability Zone",
|
|
270
|
+
)
|
|
271
|
+
expected_data = (
|
|
272
|
+
(
|
|
273
|
+
self.fake_ag.id,
|
|
274
|
+
self.fake_ag.name,
|
|
275
|
+
self.fake_ag.availability_zone,
|
|
276
|
+
),
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
self.assertEqual(expected_columns, columns)
|
|
280
|
+
self.assertCountEqual(expected_data, tuple(data))
|
|
280
281
|
|
|
281
282
|
def test_aggregate_list_with_long(self):
|
|
283
|
+
self.set_compute_api_version('2.41')
|
|
284
|
+
|
|
282
285
|
arglist = [
|
|
283
286
|
'--long',
|
|
284
287
|
]
|
|
@@ -288,8 +291,33 @@ class TestAggregateList(TestAggregate):
|
|
|
288
291
|
parsed_args = self.check_parser(self.cmd, arglist, vertifylist)
|
|
289
292
|
columns, data = self.cmd.take_action(parsed_args)
|
|
290
293
|
|
|
291
|
-
|
|
292
|
-
|
|
294
|
+
expected_columns = (
|
|
295
|
+
"ID",
|
|
296
|
+
"UUID",
|
|
297
|
+
"Name",
|
|
298
|
+
"Availability Zone",
|
|
299
|
+
"Properties",
|
|
300
|
+
"Hosts",
|
|
301
|
+
)
|
|
302
|
+
expected_data = (
|
|
303
|
+
(
|
|
304
|
+
self.fake_ag.id,
|
|
305
|
+
self.fake_ag.uuid,
|
|
306
|
+
self.fake_ag.name,
|
|
307
|
+
self.fake_ag.availability_zone,
|
|
308
|
+
format_columns.DictColumn(
|
|
309
|
+
{
|
|
310
|
+
key: value
|
|
311
|
+
for key, value in self.fake_ag.metadata.items()
|
|
312
|
+
if key != 'availability_zone'
|
|
313
|
+
}
|
|
314
|
+
),
|
|
315
|
+
format_columns.ListColumn(self.fake_ag.hosts),
|
|
316
|
+
),
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
self.assertEqual(expected_columns, columns)
|
|
320
|
+
self.assertCountEqual(expected_data, tuple(data))
|
|
293
321
|
|
|
294
322
|
|
|
295
323
|
class TestAggregateRemoveHost(TestAggregate):
|
|
@@ -296,13 +296,11 @@ class TestHypervisorShow(compute_fakes.TestComputev2):
|
|
|
296
296
|
}
|
|
297
297
|
)
|
|
298
298
|
|
|
299
|
-
# Return value of compute_client.find_hypervisor
|
|
300
299
|
self.compute_sdk_client.find_hypervisor.return_value = self.hypervisor
|
|
300
|
+
self.compute_sdk_client.get_hypervisor.return_value = self.hypervisor
|
|
301
301
|
|
|
302
|
-
# Return value of compute_client.aggregates()
|
|
303
302
|
self.compute_sdk_client.aggregates.return_value = []
|
|
304
303
|
|
|
305
|
-
# Return value of compute_client.get_hypervisor_uptime()
|
|
306
304
|
uptime_info = {
|
|
307
305
|
'status': self.hypervisor.status,
|
|
308
306
|
'state': self.hypervisor.state,
|
|
@@ -429,6 +427,13 @@ class TestHypervisorShow(compute_fakes.TestComputev2):
|
|
|
429
427
|
self.assertEqual(self.columns_v288, columns)
|
|
430
428
|
self.assertCountEqual(self.data_v288, data)
|
|
431
429
|
|
|
430
|
+
self.compute_sdk_client.find_hypervisor.assert_called_once_with(
|
|
431
|
+
self.hypervisor.name, ignore_missing=False, details=False
|
|
432
|
+
)
|
|
433
|
+
self.compute_sdk_client.get_hypervisor.assert_called_once_with(
|
|
434
|
+
self.hypervisor.id
|
|
435
|
+
)
|
|
436
|
+
|
|
432
437
|
def test_hypervisor_show_pre_v288(self):
|
|
433
438
|
self.set_compute_api_version('2.87')
|
|
434
439
|
|
|
@@ -448,6 +453,13 @@ class TestHypervisorShow(compute_fakes.TestComputev2):
|
|
|
448
453
|
self.assertEqual(self.columns, columns)
|
|
449
454
|
self.assertCountEqual(self.data, data)
|
|
450
455
|
|
|
456
|
+
self.compute_sdk_client.find_hypervisor.assert_called_once_with(
|
|
457
|
+
self.hypervisor.name, ignore_missing=False, details=False
|
|
458
|
+
)
|
|
459
|
+
self.compute_sdk_client.get_hypervisor.assert_called_once_with(
|
|
460
|
+
self.hypervisor.id
|
|
461
|
+
)
|
|
462
|
+
|
|
451
463
|
def test_hypervisor_show_pre_v228(self):
|
|
452
464
|
self.set_compute_api_version('2.27')
|
|
453
465
|
|
|
@@ -472,6 +484,13 @@ class TestHypervisorShow(compute_fakes.TestComputev2):
|
|
|
472
484
|
self.assertEqual(self.columns, columns)
|
|
473
485
|
self.assertCountEqual(self.data, data)
|
|
474
486
|
|
|
487
|
+
self.compute_sdk_client.find_hypervisor.assert_called_once_with(
|
|
488
|
+
self.hypervisor.name, ignore_missing=False, details=False
|
|
489
|
+
)
|
|
490
|
+
self.compute_sdk_client.get_hypervisor.assert_called_once_with(
|
|
491
|
+
self.hypervisor.id
|
|
492
|
+
)
|
|
493
|
+
|
|
475
494
|
def test_hypervisor_show_uptime_not_implemented(self):
|
|
476
495
|
self.set_compute_api_version('2.87')
|
|
477
496
|
|
|
@@ -543,3 +562,10 @@ class TestHypervisorShow(compute_fakes.TestComputev2):
|
|
|
543
562
|
|
|
544
563
|
self.assertEqual(expected_columns, columns)
|
|
545
564
|
self.assertCountEqual(expected_data, data)
|
|
565
|
+
|
|
566
|
+
self.compute_sdk_client.find_hypervisor.assert_called_once_with(
|
|
567
|
+
self.hypervisor.name, ignore_missing=False, details=False
|
|
568
|
+
)
|
|
569
|
+
self.compute_sdk_client.get_hypervisor.assert_called_once_with(
|
|
570
|
+
self.hypervisor.id
|
|
571
|
+
)
|
|
@@ -6146,7 +6146,7 @@ class TestServerRebuild(TestServer):
|
|
|
6146
6146
|
)
|
|
6147
6147
|
self.image_client.get_image.assert_called_with(self.image.id)
|
|
6148
6148
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6149
|
-
self.server, image
|
|
6149
|
+
self.server, image
|
|
6150
6150
|
)
|
|
6151
6151
|
|
|
6152
6152
|
def test_rebuild_with_current_image(self):
|
|
@@ -6167,7 +6167,7 @@ class TestServerRebuild(TestServer):
|
|
|
6167
6167
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6168
6168
|
)
|
|
6169
6169
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6170
|
-
self.server, self.image
|
|
6170
|
+
self.server, self.image
|
|
6171
6171
|
)
|
|
6172
6172
|
|
|
6173
6173
|
def test_rebuild_with_volume_backed_server_no_image(self):
|
|
@@ -6211,7 +6211,7 @@ class TestServerRebuild(TestServer):
|
|
|
6211
6211
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6212
6212
|
)
|
|
6213
6213
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6214
|
-
self.server, self.image,
|
|
6214
|
+
self.server, self.image, name=name
|
|
6215
6215
|
)
|
|
6216
6216
|
|
|
6217
6217
|
def test_rebuild_with_preserve_ephemeral(self):
|
|
@@ -6235,10 +6235,7 @@ class TestServerRebuild(TestServer):
|
|
|
6235
6235
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6236
6236
|
)
|
|
6237
6237
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6238
|
-
self.server,
|
|
6239
|
-
self.image,
|
|
6240
|
-
admin_password=None,
|
|
6241
|
-
preserve_ephemeral=True,
|
|
6238
|
+
self.server, self.image, preserve_ephemeral=True
|
|
6242
6239
|
)
|
|
6243
6240
|
|
|
6244
6241
|
def test_rebuild_with_no_preserve_ephemeral(self):
|
|
@@ -6263,10 +6260,7 @@ class TestServerRebuild(TestServer):
|
|
|
6263
6260
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6264
6261
|
)
|
|
6265
6262
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6266
|
-
self.server,
|
|
6267
|
-
self.image,
|
|
6268
|
-
admin_password=None,
|
|
6269
|
-
preserve_ephemeral=False,
|
|
6263
|
+
self.server, self.image, preserve_ephemeral=False
|
|
6270
6264
|
)
|
|
6271
6265
|
|
|
6272
6266
|
def test_rebuild_with_password(self):
|
|
@@ -6308,10 +6302,7 @@ class TestServerRebuild(TestServer):
|
|
|
6308
6302
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6309
6303
|
)
|
|
6310
6304
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6311
|
-
self.server,
|
|
6312
|
-
self.image,
|
|
6313
|
-
admin_password=None,
|
|
6314
|
-
description=description,
|
|
6305
|
+
self.server, self.image, description=description
|
|
6315
6306
|
)
|
|
6316
6307
|
|
|
6317
6308
|
def test_rebuild_with_description_pre_v219(self):
|
|
@@ -6348,9 +6339,7 @@ class TestServerRebuild(TestServer):
|
|
|
6348
6339
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6349
6340
|
)
|
|
6350
6341
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6351
|
-
self.server,
|
|
6352
|
-
self.image,
|
|
6353
|
-
admin_password=None,
|
|
6342
|
+
self.server, self.image
|
|
6354
6343
|
)
|
|
6355
6344
|
|
|
6356
6345
|
mock_wait_for_status.assert_called_once_with(
|
|
@@ -6382,9 +6371,7 @@ class TestServerRebuild(TestServer):
|
|
|
6382
6371
|
self.image_client.find_image.assert_not_called()
|
|
6383
6372
|
self.image_client.get_image.assert_called_once_with(self.image.id)
|
|
6384
6373
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6385
|
-
self.server,
|
|
6386
|
-
self.image,
|
|
6387
|
-
admin_password=None,
|
|
6374
|
+
self.server, self.image
|
|
6388
6375
|
)
|
|
6389
6376
|
|
|
6390
6377
|
mock_wait_for_status.assert_called_once_with(
|
|
@@ -6417,9 +6404,7 @@ class TestServerRebuild(TestServer):
|
|
|
6417
6404
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6418
6405
|
)
|
|
6419
6406
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6420
|
-
self.server,
|
|
6421
|
-
self.image,
|
|
6422
|
-
admin_password=None,
|
|
6407
|
+
self.server, self.image
|
|
6423
6408
|
)
|
|
6424
6409
|
|
|
6425
6410
|
mock_wait_for_status.assert_called_once_with(
|
|
@@ -6452,9 +6437,7 @@ class TestServerRebuild(TestServer):
|
|
|
6452
6437
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6453
6438
|
)
|
|
6454
6439
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6455
|
-
self.server,
|
|
6456
|
-
self.image,
|
|
6457
|
-
admin_password=None,
|
|
6440
|
+
self.server, self.image
|
|
6458
6441
|
)
|
|
6459
6442
|
|
|
6460
6443
|
mock_wait_for_status.assert_called_once_with(
|
|
@@ -6510,10 +6493,7 @@ class TestServerRebuild(TestServer):
|
|
|
6510
6493
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6511
6494
|
)
|
|
6512
6495
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6513
|
-
self.server,
|
|
6514
|
-
self.image,
|
|
6515
|
-
admin_password=None,
|
|
6516
|
-
metadata=expected_properties,
|
|
6496
|
+
self.server, self.image, metadata=expected_properties
|
|
6517
6497
|
)
|
|
6518
6498
|
|
|
6519
6499
|
def test_rebuild_with_keypair_name(self):
|
|
@@ -6541,10 +6521,7 @@ class TestServerRebuild(TestServer):
|
|
|
6541
6521
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6542
6522
|
)
|
|
6543
6523
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6544
|
-
self.server,
|
|
6545
|
-
self.image,
|
|
6546
|
-
admin_password=None,
|
|
6547
|
-
key_name=self.server.key_name,
|
|
6524
|
+
self.server, self.image, key_name=self.server.key_name
|
|
6548
6525
|
)
|
|
6549
6526
|
|
|
6550
6527
|
def test_rebuild_with_keypair_name_pre_v254(self):
|
|
@@ -6589,10 +6566,7 @@ class TestServerRebuild(TestServer):
|
|
|
6589
6566
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6590
6567
|
)
|
|
6591
6568
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6592
|
-
self.server,
|
|
6593
|
-
self.image,
|
|
6594
|
-
admin_password=None,
|
|
6595
|
-
key_name=None,
|
|
6569
|
+
self.server, self.image, key_name=None
|
|
6596
6570
|
)
|
|
6597
6571
|
|
|
6598
6572
|
def test_rebuild_with_keypair_name_and_unset(self):
|
|
@@ -6649,7 +6623,6 @@ class TestServerRebuild(TestServer):
|
|
|
6649
6623
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6650
6624
|
self.server,
|
|
6651
6625
|
self.image,
|
|
6652
|
-
admin_password=None,
|
|
6653
6626
|
user_data=base64.b64encode(user_data).decode('utf-8'),
|
|
6654
6627
|
)
|
|
6655
6628
|
|
|
@@ -6695,10 +6668,7 @@ class TestServerRebuild(TestServer):
|
|
|
6695
6668
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6696
6669
|
)
|
|
6697
6670
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6698
|
-
self.server,
|
|
6699
|
-
self.image,
|
|
6700
|
-
admin_password=None,
|
|
6701
|
-
user_data=None,
|
|
6671
|
+
self.server, self.image, user_data=None
|
|
6702
6672
|
)
|
|
6703
6673
|
|
|
6704
6674
|
def test_rebuild_with_no_user_data_pre_v254(self):
|
|
@@ -6759,10 +6729,7 @@ class TestServerRebuild(TestServer):
|
|
|
6759
6729
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6760
6730
|
)
|
|
6761
6731
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6762
|
-
self.server,
|
|
6763
|
-
self.image,
|
|
6764
|
-
admin_password=None,
|
|
6765
|
-
trusted_image_certificates=['foo', 'bar'],
|
|
6732
|
+
self.server, self.image, trusted_image_certificates=['foo', 'bar']
|
|
6766
6733
|
)
|
|
6767
6734
|
|
|
6768
6735
|
def test_rebuild_with_trusted_image_cert_pre_v263(self):
|
|
@@ -6808,10 +6775,7 @@ class TestServerRebuild(TestServer):
|
|
|
6808
6775
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6809
6776
|
)
|
|
6810
6777
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6811
|
-
self.server,
|
|
6812
|
-
self.image,
|
|
6813
|
-
admin_password=None,
|
|
6814
|
-
trusted_image_certificates=None,
|
|
6778
|
+
self.server, self.image, trusted_image_certificates=None
|
|
6815
6779
|
)
|
|
6816
6780
|
|
|
6817
6781
|
def test_rebuild_with_no_trusted_image_cert_pre_v263(self):
|
|
@@ -6855,10 +6819,7 @@ class TestServerRebuild(TestServer):
|
|
|
6855
6819
|
[mock.call(self.image.id), mock.call(self.image.id)]
|
|
6856
6820
|
)
|
|
6857
6821
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6858
|
-
self.server,
|
|
6859
|
-
self.image,
|
|
6860
|
-
admin_password=None,
|
|
6861
|
-
hostname='new-hostname',
|
|
6822
|
+
self.server, self.image, hostname='new-hostname'
|
|
6862
6823
|
)
|
|
6863
6824
|
|
|
6864
6825
|
def test_rebuild_with_hostname_pre_v290(self):
|
|
@@ -6920,7 +6881,7 @@ class TestServerRebuildVolumeBacked(TestServer):
|
|
|
6920
6881
|
)
|
|
6921
6882
|
self.image_client.get_image.assert_not_called()
|
|
6922
6883
|
self.compute_sdk_client.rebuild_server.assert_called_once_with(
|
|
6923
|
-
self.server, self.new_image
|
|
6884
|
+
self.server, self.new_image
|
|
6924
6885
|
)
|
|
6925
6886
|
|
|
6926
6887
|
def test_rebuild_with_no_reimage_boot_volume(self):
|
|
@@ -154,7 +154,7 @@ class FakeClientManager:
|
|
|
154
154
|
def is_compute_endpoint_enabled(self):
|
|
155
155
|
return self.compute_endpoint_enabled
|
|
156
156
|
|
|
157
|
-
def is_volume_endpoint_enabled(self, client):
|
|
157
|
+
def is_volume_endpoint_enabled(self, client=None):
|
|
158
158
|
return self.volume_endpoint_enabled
|
|
159
159
|
|
|
160
160
|
|
|
@@ -31,15 +31,15 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
|
|
|
31
31
|
|
|
32
32
|
class TestApplicationCredentialCreate(identity_fakes.TestIdentityv3):
|
|
33
33
|
columns = (
|
|
34
|
-
'
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'
|
|
34
|
+
'id',
|
|
35
|
+
'name',
|
|
36
|
+
'description',
|
|
37
|
+
'project_id',
|
|
38
|
+
'roles',
|
|
39
|
+
'unrestricted',
|
|
40
|
+
'access_rules',
|
|
41
|
+
'expires_at',
|
|
42
|
+
'secret',
|
|
43
43
|
)
|
|
44
44
|
|
|
45
45
|
def setUp(self):
|
|
@@ -413,14 +413,14 @@ class TestApplicationCredentialShow(identity_fakes.TestIdentityv3):
|
|
|
413
413
|
)
|
|
414
414
|
|
|
415
415
|
collist = (
|
|
416
|
-
'
|
|
417
|
-
'
|
|
418
|
-
'
|
|
419
|
-
'
|
|
420
|
-
'
|
|
421
|
-
'
|
|
422
|
-
'
|
|
423
|
-
'
|
|
416
|
+
'id',
|
|
417
|
+
'name',
|
|
418
|
+
'description',
|
|
419
|
+
'project_id',
|
|
420
|
+
'roles',
|
|
421
|
+
'unrestricted',
|
|
422
|
+
'access_rules',
|
|
423
|
+
'expires_at',
|
|
424
424
|
)
|
|
425
425
|
self.assertEqual(collist, columns)
|
|
426
426
|
datalist = (
|
|
@@ -24,11 +24,11 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
|
|
|
24
24
|
|
|
25
25
|
class TestServiceCreate(identity_fakes.TestIdentityv3):
|
|
26
26
|
columns = (
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'
|
|
27
|
+
'id',
|
|
28
|
+
'name',
|
|
29
|
+
'type',
|
|
30
|
+
'enabled',
|
|
31
|
+
'description',
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
def setUp(self):
|
|
@@ -455,7 +455,7 @@ class TestServiceShow(identity_fakes.TestIdentityv3):
|
|
|
455
455
|
self.service.name, ignore_missing=False
|
|
456
456
|
)
|
|
457
457
|
|
|
458
|
-
collist = ('
|
|
458
|
+
collist = ('id', 'name', 'type', 'enabled', 'description')
|
|
459
459
|
self.assertEqual(collist, columns)
|
|
460
460
|
datalist = (
|
|
461
461
|
self.service.id,
|
|
@@ -235,6 +235,7 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
235
235
|
'Status',
|
|
236
236
|
'Size',
|
|
237
237
|
'Incremental',
|
|
238
|
+
'Created At',
|
|
238
239
|
)
|
|
239
240
|
columns_long = columns + (
|
|
240
241
|
'Availability Zone',
|
|
@@ -252,6 +253,7 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
252
253
|
b.status,
|
|
253
254
|
b.size,
|
|
254
255
|
b.is_incremental,
|
|
256
|
+
b.created_at,
|
|
255
257
|
)
|
|
256
258
|
)
|
|
257
259
|
data_long = []
|
|
@@ -264,6 +266,7 @@ class TestBackupList(volume_fakes.TestVolume):
|
|
|
264
266
|
b.status,
|
|
265
267
|
b.size,
|
|
266
268
|
b.is_incremental,
|
|
269
|
+
b.created_at,
|
|
267
270
|
b.availability_zone,
|
|
268
271
|
volume_backup.VolumeIdColumn(b.volume_id),
|
|
269
272
|
b.container,
|
|
@@ -247,6 +247,7 @@ class ListVolumeBackup(command.Lister):
|
|
|
247
247
|
'status',
|
|
248
248
|
'size',
|
|
249
249
|
'is_incremental',
|
|
250
|
+
'created_at',
|
|
250
251
|
)
|
|
251
252
|
column_headers = (
|
|
252
253
|
'ID',
|
|
@@ -255,6 +256,7 @@ class ListVolumeBackup(command.Lister):
|
|
|
255
256
|
'Status',
|
|
256
257
|
'Size',
|
|
257
258
|
'Incremental',
|
|
259
|
+
'Created At',
|
|
258
260
|
)
|
|
259
261
|
if parsed_args.long:
|
|
260
262
|
columns += ('availability_zone', 'volume_id', 'container')
|
|
@@ -211,6 +211,7 @@ Jirayut Nimsaeng <wingth@gmail.com>
|
|
|
211
211
|
Jiri Podivin <jpodivin@redhat.com>
|
|
212
212
|
Joe Gordon <joe.gordon0@gmail.com>
|
|
213
213
|
Joe Wigglesworth <wiggles@ca.ibm.com>
|
|
214
|
+
Joel Capitao <jcapitao@redhat.com>
|
|
214
215
|
Johannes Kulik <johannes.kulik@sap.com>
|
|
215
216
|
John Dennis <jdennis@redhat.com>
|
|
216
217
|
John Keenleyside <keenley@ca.ibm.com>
|
|
@@ -399,6 +400,7 @@ Thomas Goirand <zigo@debian.org>
|
|
|
399
400
|
Thrivikram Mudunuri <mthrivikram+opendev@gmail.com>
|
|
400
401
|
Tim Bishop <tim@bishnet.net>
|
|
401
402
|
Tim Burke <tim.burke@gmail.com>
|
|
403
|
+
Tobias Urdin <tobias.urdin@binero.com>
|
|
402
404
|
Tom Cocozzello <tjcocozz@us.ibm.com>
|
|
403
405
|
Tom Jose Kalapura <tomjosekal@gmail.com>
|
|
404
406
|
Tom Stappaerts <tom.stappaerts@nuagenetworks.net>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: python-openstackclient
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.1.0
|
|
4
4
|
Summary: OpenStack Command-line Client
|
|
5
5
|
Home-page: https://docs.openstack.org/python-openstackclient/latest/
|
|
6
6
|
Author: OpenStack
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
22
|
Requires-Python: >=3.8
|
|
22
23
|
Requires-Dist: cliff (>=3.5.0)
|
|
23
24
|
Requires-Dist: cryptography (>=2.7)
|
|
@@ -28,7 +29,7 @@ Requires-Dist: oslo.i18n (>=3.15.3)
|
|
|
28
29
|
Requires-Dist: pbr (!=2.1.0,>=2.0.0)
|
|
29
30
|
Requires-Dist: python-cinderclient (>=3.3.0)
|
|
30
31
|
Requires-Dist: python-keystoneclient (>=3.22.0)
|
|
31
|
-
Requires-Dist: requests (>=2.
|
|
32
|
+
Requires-Dist: requests (>=2.27.0)
|
|
32
33
|
Requires-Dist: stevedore (>=2.0.1)
|
|
33
34
|
|
|
34
35
|
========================
|
|
@@ -9,28 +9,28 @@ 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=
|
|
12
|
+
openstackclient/common/clientmanager.py,sha256=dGkJZwEuDmEFIuLyCesCRfEEUHPX5KqxOYvdwtyq1xk,7124
|
|
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=
|
|
15
|
+
openstackclient/common/limits.py,sha256=pCNLq4A1vKxsN27f1G0Qot4gNi-L0z4p7UdGkfx712w,5662
|
|
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=
|
|
20
|
+
openstackclient/common/quota.py,sha256=w17mvV7YE9V2kBZ-oX47cbh3iKP77g1cu7STD5NpswM,28361
|
|
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
|
|
24
24
|
openstackclient/compute/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
25
|
openstackclient/compute/v2/agent.py,sha256=L7JgK6mQvnQC76NMcE6mvFjSZ7vuc3tv0u2EUZtTHqs,7567
|
|
26
|
-
openstackclient/compute/v2/aggregate.py,sha256=
|
|
26
|
+
openstackclient/compute/v2/aggregate.py,sha256=Pn3eSbmIITBUBTezCTbJw0vf7fTKdK92ld110cFyKV8,14125
|
|
27
27
|
openstackclient/compute/v2/console.py,sha256=JqKGCemI-Pafyec_Xt2MlGtSFG14hjqYyraHGd58OLo,4517
|
|
28
28
|
openstackclient/compute/v2/flavor.py,sha256=K2uYFLde8aegXEPZZyykYt7hnkd_hy652RPqrBD5iaw,20334
|
|
29
29
|
openstackclient/compute/v2/host.py,sha256=1Ow4eJu9HPz-SC0u_eXJskUXaGoyW7X1O2yZIf43lkQ,4993
|
|
30
|
-
openstackclient/compute/v2/hypervisor.py,sha256=
|
|
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=
|
|
33
|
+
openstackclient/compute/v2/server.py,sha256=EkT8zn_4T-k0xakTci3fdsir-03LTBR8CCB25ukhlv8,187194
|
|
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
|
|
@@ -54,7 +54,7 @@ openstackclient/identity/v2_0/token.py,sha256=2iHBAfzYv4oaKGEyFF2qx_w6NTTHD6H2a5
|
|
|
54
54
|
openstackclient/identity/v2_0/user.py,sha256=TwStNcUM05ErA5eIJTbiN4MMrSnwgKTWB6KvTz2BOT0,13405
|
|
55
55
|
openstackclient/identity/v3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
56
|
openstackclient/identity/v3/access_rule.py,sha256=-rMfstku8tVdgdFvrJngO44A9mCpcwWggBIQqn-pbbk,3950
|
|
57
|
-
openstackclient/identity/v3/application_credential.py,sha256=
|
|
57
|
+
openstackclient/identity/v3/application_credential.py,sha256=vCa4hAt7AhVtyZV1Ed_F3BuMtRK5JIxEzyRwXk-hJXA,11232
|
|
58
58
|
openstackclient/identity/v3/catalog.py,sha256=49jDO5w8AqGgQxRppYmfi8R6P0Es7tnIraQzzFmYFAc,3300
|
|
59
59
|
openstackclient/identity/v3/consumer.py,sha256=Fk1-wyUoTA638zHKf5KwTP4Os-RYctmBYkyen7fasIk,4845
|
|
60
60
|
openstackclient/identity/v3/credential.py,sha256=oLDES-pRGs2ViHB-gLTPDiUOYFasXECzW3quko9hOgI,7535
|
|
@@ -74,7 +74,7 @@ openstackclient/identity/v3/region.py,sha256=jcImUh-kZromTAtXd8aF7kfKBqBwfknP2I5
|
|
|
74
74
|
openstackclient/identity/v3/registered_limit.py,sha256=mbV4Ci7kNPMbveHg6QQztYISiXcm3VwBv3xR2D-aKvw,11389
|
|
75
75
|
openstackclient/identity/v3/role.py,sha256=dmuW5j4T9zmNBHuGkIIcolx5aoDmyFGshGSfOZ2swEY,14205
|
|
76
76
|
openstackclient/identity/v3/role_assignment.py,sha256=7caVScsft9Z3kwl3DvWLyXiAD9f9fX_1V6JUTGWe_fs,7366
|
|
77
|
-
openstackclient/identity/v3/service.py,sha256=
|
|
77
|
+
openstackclient/identity/v3/service.py,sha256=Ix_FjH2KezZuyiTmkHYzVDVQTzZFEoTtftJ-2HPQvxE,7406
|
|
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
|
|
@@ -139,6 +139,7 @@ openstackclient/object/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
139
139
|
openstackclient/object/v1/account.py,sha256=iYlobVY7d2NtHoonV4K0viZL-IugidICJY5Cs4BDjgo,2480
|
|
140
140
|
openstackclient/object/v1/container.py,sha256=kZEejtOydgr0TXP6HkAPwxedGhSTALQ1114fpfZK63A,8379
|
|
141
141
|
openstackclient/object/v1/object.py,sha256=mHHrmKyVWAJj4KqzWGxWL8uD9BKS6jKFpeiPxoqpAQw,9892
|
|
142
|
+
openstackclient/releasenotes/notes/volume-backup-created-at-list-b49ec893ae1f6b0d.yaml,sha256=CCWSMDHSjODcYQ_9boYiged6cUsk0sr6KJ9XgRmTAO8,80
|
|
142
143
|
openstackclient/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
144
|
openstackclient/tests/functional/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
144
145
|
openstackclient/tests/functional/base.py,sha256=tLl4vsAXfsXcE5s3n9vOyRvjeh3MpIvyOUAA6mhNg3E,6825
|
|
@@ -173,20 +174,20 @@ openstackclient/tests/functional/identity/v2/test_service.py,sha256=Qh-j-e4Vbz1s
|
|
|
173
174
|
openstackclient/tests/functional/identity/v2/test_token.py,sha256=GvFmahWvmiAjfdk8Dvx7NgOtrVxSLZCpTNoA_02J9ns,955
|
|
174
175
|
openstackclient/tests/functional/identity/v2/test_user.py,sha256=mmYHqW0M2sLxl1jG9zk0AgqmgQSkpuDQp6XYfAGyzKs,2437
|
|
175
176
|
openstackclient/tests/functional/identity/v3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
176
|
-
openstackclient/tests/functional/identity/v3/common.py,sha256=
|
|
177
|
-
openstackclient/tests/functional/identity/v3/test_application_credential.py,sha256=
|
|
177
|
+
openstackclient/tests/functional/identity/v3/common.py,sha256=WqJ-M1nUyq-oN0pUOSSEGrPEjPkrlp5JQae64QyO18M,17441
|
|
178
|
+
openstackclient/tests/functional/identity/v3/test_application_credential.py,sha256=5XQmyuLkz8nAidnIey4zQnHrKqORApQ_lG9gX8z9Rw4,6271
|
|
178
179
|
openstackclient/tests/functional/identity/v3/test_catalog.py,sha256=_asG1pSb1XWMeaVgEz56T6zVS4ijpEfqarmbrmfVFRo,2136
|
|
179
180
|
openstackclient/tests/functional/identity/v3/test_domain.py,sha256=RB2C3v2F1-d97Azc6AAt-mviHgDyYd4q78RIVHkL-eU,3011
|
|
180
181
|
openstackclient/tests/functional/identity/v3/test_endpoint.py,sha256=Y3YM2ok44ePSSj-PrV7Cwt8j3vGFge8_nR9qICynz1M,4551
|
|
181
182
|
openstackclient/tests/functional/identity/v3/test_group.py,sha256=TQth53OA4e-OdJJTs78vJPwmjmb1Lv9Po_Q2Ng89ltA,6983
|
|
182
183
|
openstackclient/tests/functional/identity/v3/test_idp.py,sha256=ozVjwZMwH72G0XUecdebp4rh8JBbNuPrinlcvojBrzE,2752
|
|
183
|
-
openstackclient/tests/functional/identity/v3/test_limit.py,sha256=
|
|
184
|
+
openstackclient/tests/functional/identity/v3/test_limit.py,sha256=G_NERL53KiqrTxNzHGg7Vg9y6rqSuXVaE32-1Pa3SLg,7725
|
|
184
185
|
openstackclient/tests/functional/identity/v3/test_project.py,sha256=OAMPn5wIvBnrbA-9mWhc-_pknLLa4DwVZ26gI4-co4s,4939
|
|
185
186
|
openstackclient/tests/functional/identity/v3/test_region.py,sha256=oLiOiwmjlOVXXcTTzzaavFX__xr4bD4Kk6arS_YSiIw,3054
|
|
186
|
-
openstackclient/tests/functional/identity/v3/test_registered_limit.py,sha256=
|
|
187
|
+
openstackclient/tests/functional/identity/v3/test_registered_limit.py,sha256=gz2IV8DEDIwYLo4U0aUrAAELm24wvfQF8oGqpa6bsx0,7324
|
|
187
188
|
openstackclient/tests/functional/identity/v3/test_role.py,sha256=uKrrnOz5e29trlCmKFxzp0itcBjj2RzhBk_YSA15M4M,6810
|
|
188
189
|
openstackclient/tests/functional/identity/v3/test_role_assignment.py,sha256=tuy09HSCbN2mLWJXK6IK6iDJB3jJRF4tQ5lgJ4rOSKw,7467
|
|
189
|
-
openstackclient/tests/functional/identity/v3/test_service.py,sha256=
|
|
190
|
+
openstackclient/tests/functional/identity/v3/test_service.py,sha256=s1x_ec7aa09Qmit9CCJzudvb7tIicexEQPXhffnbsSQ,3006
|
|
190
191
|
openstackclient/tests/functional/identity/v3/test_service_provider.py,sha256=jEicf7KYCDLrVHjsKObG0-bhhmfQARePeaP4ecWdARY,2727
|
|
191
192
|
openstackclient/tests/functional/identity/v3/test_token.py,sha256=QAj3Cfrs3axBZJMb99I2NPXT_5dKrawgaf1L_uweeic,864
|
|
192
193
|
openstackclient/tests/functional/identity/v3/test_user.py,sha256=FfnYauR6KOvOR9mWOKV1QqZLRj1sfK20ZYCuDLQOrRw,4273
|
|
@@ -260,7 +261,7 @@ openstackclient/tests/functional/volume/v3/test_volume.py,sha256=yke-BoQxxqe0ns8
|
|
|
260
261
|
openstackclient/tests/functional/volume/v3/test_volume_snapshot.py,sha256=qEfqZ6xk8py--i_WHD1FGbQ8K_YWTJOxsbcy3LvRgFE,7694
|
|
261
262
|
openstackclient/tests/functional/volume/v3/test_volume_type.py,sha256=F_lg7aKRozEzJVfAOg6PEKbXCLI8W0XqjLltaxq-KgY,9134
|
|
262
263
|
openstackclient/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
263
|
-
openstackclient/tests/unit/fakes.py,sha256=
|
|
264
|
+
openstackclient/tests/unit/fakes.py,sha256=hidhxfAcISrytCtb3o7ymwJC5J1jedxXLpl9jvGMDbY,7175
|
|
264
265
|
openstackclient/tests/unit/test_shell.py,sha256=uEbLuSUyOkMLD7NySaEe56AomueSjoVQJVk3OgbhQP8,12992
|
|
265
266
|
openstackclient/tests/unit/utils.py,sha256=A-lzFGlK42RBT1G9x1jg21xtkxpyEb9W6JSscmvIhts,3150
|
|
266
267
|
openstackclient/tests/unit/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -286,14 +287,14 @@ openstackclient/tests/unit/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
|
|
|
286
287
|
openstackclient/tests/unit/compute/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
287
288
|
openstackclient/tests/unit/compute/v2/fakes.py,sha256=vKNIBhrofQaXE526ntcJGQEsDf--9Duo0OLFASlPQ-k,39549
|
|
288
289
|
openstackclient/tests/unit/compute/v2/test_agent.py,sha256=1kBJY0RCYnraI8sFqP7BFUqnp_aC9j0Gk4o_Bi3Rlkw,11103
|
|
289
|
-
openstackclient/tests/unit/compute/v2/test_aggregate.py,sha256=
|
|
290
|
+
openstackclient/tests/unit/compute/v2/test_aggregate.py,sha256=FbjISS9ZDj8Cmfwtc8tNYWipwmAGukasJYAnf7tS3vo,22260
|
|
290
291
|
openstackclient/tests/unit/compute/v2/test_console.py,sha256=LBg25s289JIeCBo3TjOMm_40OfGniLrJ7KOBpjAWRHY,7559
|
|
291
292
|
openstackclient/tests/unit/compute/v2/test_flavor.py,sha256=Z3K71hKNLeVFe2O54w3z7Af2vr1LJBzaSYgnd0zGczE,38468
|
|
292
293
|
openstackclient/tests/unit/compute/v2/test_host.py,sha256=AAcIxoGpVdy1qOkV3lPFyDhfgjpEGFHf4FgyxNNkC80,6829
|
|
293
|
-
openstackclient/tests/unit/compute/v2/test_hypervisor.py,sha256=
|
|
294
|
+
openstackclient/tests/unit/compute/v2/test_hypervisor.py,sha256=t_Xv7uh4dzv6G-gOG3Eoy7l516cHOwy1xeiBgIyaUKc,17390
|
|
294
295
|
openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py,sha256=1z8Jhx_CBoN-cu4im3MQc-YPAZlRQfu--3c9UAUmMG4,3020
|
|
295
296
|
openstackclient/tests/unit/compute/v2/test_keypair.py,sha256=ASoemn6bN_tEKZlHRbhUpjPNydPaqMA22jn6fyAcwGs,25067
|
|
296
|
-
openstackclient/tests/unit/compute/v2/test_server.py,sha256=
|
|
297
|
+
openstackclient/tests/unit/compute/v2/test_server.py,sha256=dKjLdYre-cEiQ5MQ38pTQC3XuJCmtpu6u-fIhINujHQ,310875
|
|
297
298
|
openstackclient/tests/unit/compute/v2/test_server_backup.py,sha256=MW2UQQ32cE403Bmihp7s_MYVhVV4NrkwfDdaZ-y5Wu4,7503
|
|
298
299
|
openstackclient/tests/unit/compute/v2/test_server_event.py,sha256=aZhLD_RgcNDUdCgwVJmpolQlabVWxlrp5edSZBanR_Q,12504
|
|
299
300
|
openstackclient/tests/unit/compute/v2/test_server_group.py,sha256=Ul0SQ_cIq4mW7TIsm6mDRtCOlboNyy6lClP1Oy3NPAE,14934
|
|
@@ -316,7 +317,7 @@ openstackclient/tests/unit/identity/v2_0/test_user.py,sha256=o1cRNZkZrzDmM-F7Wdf
|
|
|
316
317
|
openstackclient/tests/unit/identity/v3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
317
318
|
openstackclient/tests/unit/identity/v3/fakes.py,sha256=uf9RtQ1uC6tnyikzLb3F-MWe7ET7iGOk5YsTpICs4X8,35414
|
|
318
319
|
openstackclient/tests/unit/identity/v3/test_access_rule.py,sha256=OTC64IjUMEPQjrucHGoubDkzsX-DnkVsBRqsLTL-1B4,5514
|
|
319
|
-
openstackclient/tests/unit/identity/v3/test_application_credential.py,sha256=
|
|
320
|
+
openstackclient/tests/unit/identity/v3/test_application_credential.py,sha256=o-1WAPU5PQ7xtNGj01zEpt2icB8sGXqCqXR0bG8IXaM,14851
|
|
320
321
|
openstackclient/tests/unit/identity/v3/test_catalog.py,sha256=W47EwtllLFrFUe6An3rIRPplf5-Svw9bPkLtf_yjwtc,4916
|
|
321
322
|
openstackclient/tests/unit/identity/v3/test_consumer.py,sha256=QcoK9U_Ce1XQMBRqhY2OJouPQXji0huykhehwM6kHlI,6693
|
|
322
323
|
openstackclient/tests/unit/identity/v3/test_credential.py,sha256=AE3j1Rgz1KRl_qmOj8dJKYRFkk5Sa3y18PQCDX_aHN4,11555
|
|
@@ -335,7 +336,7 @@ openstackclient/tests/unit/identity/v3/test_region.py,sha256=SN7wLeta1wgFjul3_NG
|
|
|
335
336
|
openstackclient/tests/unit/identity/v3/test_registered_limit.py,sha256=8-Og3hgz2q8i7W1TSFmnRp9MqYzVY1H4SjnOrLVPWKo,17554
|
|
336
337
|
openstackclient/tests/unit/identity/v3/test_role.py,sha256=pYwuSFEg99MHk1mTKQ0l9XzdER0m2T9YjZHMDxfTvFk,51986
|
|
337
338
|
openstackclient/tests/unit/identity/v3/test_role_assignment.py,sha256=mHki0zb-hAB3mbVTa0nr3cmVsHEcoop282IwwbIEtgQ,27161
|
|
338
|
-
openstackclient/tests/unit/identity/v3/test_service.py,sha256=
|
|
339
|
+
openstackclient/tests/unit/identity/v3/test_service.py,sha256=tyi-I26tyoO-WdFHe8zogh-8LsrzSfFJaI2E8ntVGHY,15124
|
|
339
340
|
openstackclient/tests/unit/identity/v3/test_service_provider.py,sha256=JkO4dBQLGGdJS9etWJzj0wswGmdAAtrCOmfC1hEYzSs,13189
|
|
340
341
|
openstackclient/tests/unit/identity/v3/test_token.py,sha256=k9Ij_BbGTx9KG6Wf7NiO_th-N7cxGWnIWQMWIlDsGXg,4556
|
|
341
342
|
openstackclient/tests/unit/identity/v3/test_trust.py,sha256=ox7NuX5Suxrg7wu_06xsUXsnsASex54-RE-Jj0vtF40,13081
|
|
@@ -429,7 +430,7 @@ openstackclient/tests/unit/volume/v2/test_qos_specs.py,sha256=sjo12UPafhLgnsIlCq
|
|
|
429
430
|
openstackclient/tests/unit/volume/v2/test_service.py,sha256=NZ_UnVxWAu8vBLyFVx9RMQ8tV4OTPKyWDDfo8UWCu7s,9338
|
|
430
431
|
openstackclient/tests/unit/volume/v2/test_volume.py,sha256=KB9bXggDrPjQLXztYiCTIbGFGQFq7IIoSezkfTv_XnE,55787
|
|
431
432
|
openstackclient/tests/unit/volume/v2/test_volume_backend.py,sha256=gzcYBpBDauA2KYP77Axcli_ceJF43Dx214f33XTdzEU,4891
|
|
432
|
-
openstackclient/tests/unit/volume/v2/test_volume_backup.py,sha256=
|
|
433
|
+
openstackclient/tests/unit/volume/v2/test_volume_backup.py,sha256=K81Y2VvFsB4zecXI642IMrG4Uqb5apqC_RYHsCTEru8,17490
|
|
433
434
|
openstackclient/tests/unit/volume/v2/test_volume_host.py,sha256=aML52GOoFwMD_9thRCZe_R0hF3GnJZCn1x9v9WqaHwY,3568
|
|
434
435
|
openstackclient/tests/unit/volume/v2/test_volume_snapshot.py,sha256=1thLj9snU-bYqnJlBXvsDs6uoc9Gzn79guZDEnxC6zA,23911
|
|
435
436
|
openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py,sha256=xC3LS-LT4ypi_vWbb1CexCi_cgd5LP9OBfv-KqURhk4,11682
|
|
@@ -470,7 +471,7 @@ openstackclient/volume/v2/qos_specs.py,sha256=MZOjzJiTKZRjYc_dySguC5_dEkZdbrgVPS
|
|
|
470
471
|
openstackclient/volume/v2/service.py,sha256=r8sbZJVxvAI-q7cBJyOpQ6a9QtdQxNQ5J5LITT0XSKY,4206
|
|
471
472
|
openstackclient/volume/v2/volume.py,sha256=oNjgCA-xG8vnT7kMBLYgCuQpEgfqNQO8tQz1IWkG8fM,33558
|
|
472
473
|
openstackclient/volume/v2/volume_backend.py,sha256=6WPQPtW6cxoFCgVURVZ7USBQQvFBl78-gIV0JL0lDpo,3516
|
|
473
|
-
openstackclient/volume/v2/volume_backup.py,sha256=
|
|
474
|
+
openstackclient/volume/v2/volume_backup.py,sha256=z5a2iD5cu6xZ3W1SlH0eeX7rz8aM2svFr-R1AfsSoPc,14324
|
|
474
475
|
openstackclient/volume/v2/volume_host.py,sha256=TkHnW8O2311H7xG2zuzeuC256cmZgEoMNmZTOG4bOl4,2525
|
|
475
476
|
openstackclient/volume/v2/volume_snapshot.py,sha256=sWEyYUtukCK5zbVaB7pry0K0BhxEhOlI37-VhbOkc6E,16869
|
|
476
477
|
openstackclient/volume/v2/volume_transfer_request.py,sha256=q9IAnGNTWAZAxNkbXPS0XkLkqmHQS9zrMgOCYAB8zzI,6345
|
|
@@ -492,11 +493,11 @@ openstackclient/volume/v3/volume_message.py,sha256=HBBxPEcYoNqGjEbzGIEnIJ1XTcQ2K
|
|
|
492
493
|
openstackclient/volume/v3/volume_snapshot.py,sha256=pZ4q_qCwqh4jaGhX28G59wsWDmEc3uXdbpeD176osZg,3186
|
|
493
494
|
openstackclient/volume/v3/volume_transfer_request.py,sha256=PthOJV2m-pTV1njFzwTpaekXZkET1c6alIJrpuN7R6Q,7530
|
|
494
495
|
openstackclient/volume/v3/volume_type.py,sha256=DF2MVoW2mIk0ABDLZD8D2sb8JlR7-rRjA4qCnBHRe6o,34039
|
|
495
|
-
python_openstackclient-7.
|
|
496
|
-
python_openstackclient-7.
|
|
497
|
-
python_openstackclient-7.
|
|
498
|
-
python_openstackclient-7.
|
|
499
|
-
python_openstackclient-7.
|
|
500
|
-
python_openstackclient-7.
|
|
501
|
-
python_openstackclient-7.
|
|
502
|
-
python_openstackclient-7.
|
|
496
|
+
python_openstackclient-7.1.0.dist-info/AUTHORS,sha256=Vgw1ms3_hpd_hOim1rujxA7kD3bb6nNXPGXNW4113VQ,21350
|
|
497
|
+
python_openstackclient-7.1.0.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
|
|
498
|
+
python_openstackclient-7.1.0.dist-info/METADATA,sha256=OpCUK5wbD-7XoqfA1TM5IJaZ7v3f4IuXocJ3bZlj4-A,6581
|
|
499
|
+
python_openstackclient-7.1.0.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
|
|
500
|
+
python_openstackclient-7.1.0.dist-info/entry_points.txt,sha256=9kVhKTeyLPfkXDMI_ALqXvz0zSJEqibJLHHsOdmtT3c,53261
|
|
501
|
+
python_openstackclient-7.1.0.dist-info/pbr.json,sha256=OgCiC4UZUINTCkDTaCc8ySqOiFiUy8M2O02FPBLJd4s,47
|
|
502
|
+
python_openstackclient-7.1.0.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
|
|
503
|
+
python_openstackclient-7.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "73e9dd19", "is_release": true}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"git_version": "a59262e4", "is_release": true}
|
|
File without changes
|
|
File without changes
|
{python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{python_openstackclient-7.0.0.dist-info → python_openstackclient-7.1.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|