python-openstackclient 8.3.0__py3-none-any.whl → 10.0.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/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +58 -42
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +14 -6
- openstackclient/common/pagination.py +8 -2
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +13 -7
- openstackclient/common/quota.py +126 -114
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +39 -21
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +14 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +29 -14
- openstackclient/compute/v2/server.py +251 -171
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +21 -12
- openstackclient/compute/v2/server_group.py +21 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +24 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +10 -4
- openstackclient/compute/v2/service.py +14 -7
- openstackclient/compute/v2/usage.py +26 -21
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +103 -41
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +26 -12
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +26 -12
- openstackclient/identity/v3/application_credential.py +59 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +36 -16
- openstackclient/identity/v3/domain.py +37 -18
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +42 -20
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +71 -50
- openstackclient/identity/v3/group.py +55 -32
- openstackclient/identity/v3/identity_provider.py +92 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +115 -92
- openstackclient/identity/v3/mapping.py +26 -13
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +211 -122
- openstackclient/identity/v3/region.py +36 -16
- openstackclient/identity/v3/registered_limit.py +116 -109
- openstackclient/identity/v3/role.py +61 -31
- openstackclient/identity/v3/role_assignment.py +23 -6
- openstackclient/identity/v3/service.py +36 -16
- openstackclient/identity/v3/service_provider.py +37 -15
- openstackclient/identity/v3/tag.py +23 -17
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +32 -14
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +49 -26
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +14 -9
- openstackclient/image/v2/image.py +76 -49
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +109 -13
- openstackclient/image/v2/metadef_objects.py +28 -15
- openstackclient/image/v2/metadef_properties.py +24 -13
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +15 -6
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +36 -22
- openstackclient/network/v2/address_group.py +27 -16
- openstackclient/network/v2/address_scope.py +24 -13
- openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +214 -0
- openstackclient/network/v2/bgpvpn/port_association.py +490 -0
- openstackclient/network/v2/bgpvpn/router_association.py +288 -0
- openstackclient/network/v2/default_security_group_rule.py +19 -10
- openstackclient/network/v2/floating_ip.py +110 -159
- openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +466 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +574 -0
- openstackclient/network/v2/ip_availability.py +13 -5
- openstackclient/network/v2/l3_conntrack_helper.py +22 -13
- openstackclient/network/v2/local_ip.py +24 -13
- openstackclient/network/v2/local_ip_association.py +14 -7
- openstackclient/network/v2/ndp_proxy.py +20 -11
- openstackclient/network/v2/network.py +129 -196
- openstackclient/network/v2/network_agent.py +46 -25
- openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
- openstackclient/network/v2/network_flavor.py +27 -16
- openstackclient/network/v2/network_flavor_profile.py +23 -12
- openstackclient/network/v2/network_meter.py +21 -10
- openstackclient/network/v2/network_meter_rule.py +21 -11
- openstackclient/network/v2/network_qos_policy.py +25 -15
- openstackclient/network/v2/network_qos_rule.py +32 -17
- openstackclient/network/v2/network_qos_rule_type.py +13 -5
- openstackclient/network/v2/network_rbac.py +23 -12
- openstackclient/network/v2/network_segment.py +20 -11
- openstackclient/network/v2/network_segment_range.py +56 -29
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +38 -22
- openstackclient/network/v2/port.py +54 -29
- openstackclient/network/v2/router.py +75 -52
- openstackclient/network/v2/security_group.py +87 -157
- openstackclient/network/v2/security_group_rule.py +100 -280
- openstackclient/network/v2/subnet.py +49 -28
- openstackclient/network/v2/subnet_pool.py +30 -17
- openstackclient/network/v2/taas/tap_flow.py +22 -11
- openstackclient/network/v2/taas/tap_mirror.py +22 -11
- openstackclient/network/v2/taas/tap_service.py +23 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +25 -15
- openstackclient/object/v1/object.py +25 -15
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +25 -19
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +56 -138
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_module.py +12 -7
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +62 -23
- openstackclient/tests/unit/compute/v2/fakes.py +25 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
- openstackclient/tests/unit/compute/v2/test_server.py +17 -104
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/identity/v3/fakes.py +3 -0
- openstackclient/tests/unit/identity/v3/test_group.py +4 -14
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
- openstackclient/tests/unit/identity/v3/test_project.py +831 -512
- openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +355 -220
- openstackclient/tests/unit/identity/v3/test_user.py +4 -4
- openstackclient/tests/unit/image/v2/test_image.py +16 -16
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
- openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_router.py +8 -9
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
- openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +1 -0
- openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +1 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +94 -15
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +37 -25
- openstackclient/volume/v2/consistency_group_snapshot.py +27 -12
- openstackclient/volume/v2/qos_specs.py +30 -19
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +69 -34
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -22
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +52 -26
- openstackclient/volume/v2/volume_transfer_request.py +33 -15
- openstackclient/volume/v2/volume_type.py +46 -27
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +103 -46
- openstackclient/volume/v3/volume_attachment.py +43 -21
- openstackclient/volume/v3/volume_backup.py +55 -26
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +32 -13
- openstackclient/volume/v3/volume_group_type.py +26 -13
- openstackclient/volume/v3/volume_message.py +15 -7
- openstackclient/volume/v3/volume_snapshot.py +71 -34
- openstackclient/volume/v3/volume_transfer_request.py +33 -15
- openstackclient/volume/v3/volume_type.py +45 -27
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +279 -267
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +9 -0
- python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-8.3.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -14,9 +14,12 @@
|
|
|
14
14
|
|
|
15
15
|
"""Volume v3 Backup action implementations"""
|
|
16
16
|
|
|
17
|
+
import argparse
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
17
19
|
import copy
|
|
18
20
|
import functools
|
|
19
21
|
import logging
|
|
22
|
+
from typing import Any
|
|
20
23
|
|
|
21
24
|
from cliff import columns as cliff_columns
|
|
22
25
|
from openstack import utils as sdk_utils
|
|
@@ -42,11 +45,13 @@ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
|
|
|
42
45
|
``functools.partial(VolumeIdColumn, volume_cache)``.
|
|
43
46
|
"""
|
|
44
47
|
|
|
45
|
-
def __init__(
|
|
48
|
+
def __init__(
|
|
49
|
+
self, value: str, volume_cache: dict[str, Any] | None = None
|
|
50
|
+
) -> None:
|
|
46
51
|
super().__init__(value)
|
|
47
52
|
self._volume_cache = volume_cache or {}
|
|
48
53
|
|
|
49
|
-
def human_readable(self):
|
|
54
|
+
def human_readable(self) -> str:
|
|
50
55
|
"""Return a volume name if available
|
|
51
56
|
|
|
52
57
|
:rtype: either the volume ID or name
|
|
@@ -61,7 +66,7 @@ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
|
|
|
61
66
|
class CreateVolumeBackup(command.ShowOne):
|
|
62
67
|
_description = _("Create new volume backup")
|
|
63
68
|
|
|
64
|
-
def get_parser(self, prog_name):
|
|
69
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
65
70
|
parser = super().get_parser(prog_name)
|
|
66
71
|
parser.add_argument(
|
|
67
72
|
"volume",
|
|
@@ -125,8 +130,12 @@ class CreateVolumeBackup(command.ShowOne):
|
|
|
125
130
|
)
|
|
126
131
|
return parser
|
|
127
132
|
|
|
128
|
-
def take_action(
|
|
129
|
-
|
|
133
|
+
def take_action(
|
|
134
|
+
self, parsed_args: argparse.Namespace
|
|
135
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
136
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
137
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
138
|
+
)
|
|
130
139
|
|
|
131
140
|
volume_id = volume_client.find_volume(
|
|
132
141
|
parsed_args.volume,
|
|
@@ -182,7 +191,7 @@ class CreateVolumeBackup(command.ShowOne):
|
|
|
182
191
|
class DeleteVolumeBackup(command.Command):
|
|
183
192
|
_description = _("Delete volume backup(s)")
|
|
184
193
|
|
|
185
|
-
def get_parser(self, prog_name):
|
|
194
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
186
195
|
parser = super().get_parser(prog_name)
|
|
187
196
|
parser.add_argument(
|
|
188
197
|
"backups",
|
|
@@ -198,8 +207,10 @@ class DeleteVolumeBackup(command.Command):
|
|
|
198
207
|
)
|
|
199
208
|
return parser
|
|
200
209
|
|
|
201
|
-
def take_action(self, parsed_args):
|
|
202
|
-
volume_client =
|
|
210
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
211
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
212
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
213
|
+
)
|
|
203
214
|
result = 0
|
|
204
215
|
|
|
205
216
|
for backup in parsed_args.backups:
|
|
@@ -218,8 +229,8 @@ class DeleteVolumeBackup(command.Command):
|
|
|
218
229
|
_(
|
|
219
230
|
"Failed to delete backup with "
|
|
220
231
|
"name or ID '%(backup)s': %(e)s"
|
|
221
|
-
)
|
|
222
|
-
|
|
232
|
+
),
|
|
233
|
+
{'backup': backup, 'e': e},
|
|
223
234
|
)
|
|
224
235
|
|
|
225
236
|
if result > 0:
|
|
@@ -234,7 +245,7 @@ class DeleteVolumeBackup(command.Command):
|
|
|
234
245
|
class ListVolumeBackup(command.Lister):
|
|
235
246
|
_description = _("List volume backups")
|
|
236
247
|
|
|
237
|
-
def get_parser(self, prog_name):
|
|
248
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
238
249
|
parser = super().get_parser(prog_name)
|
|
239
250
|
parser.add_argument(
|
|
240
251
|
'--project',
|
|
@@ -299,9 +310,15 @@ class ListVolumeBackup(command.Lister):
|
|
|
299
310
|
# )
|
|
300
311
|
return parser
|
|
301
312
|
|
|
302
|
-
def take_action(
|
|
303
|
-
|
|
304
|
-
|
|
313
|
+
def take_action(
|
|
314
|
+
self, parsed_args: argparse.Namespace
|
|
315
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
316
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
317
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
318
|
+
)
|
|
319
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
320
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
321
|
+
)
|
|
305
322
|
|
|
306
323
|
columns: tuple[str, ...] = (
|
|
307
324
|
'id',
|
|
@@ -396,7 +413,7 @@ class ListVolumeBackup(command.Lister):
|
|
|
396
413
|
class RestoreVolumeBackup(command.ShowOne):
|
|
397
414
|
_description = _("Restore volume backup")
|
|
398
415
|
|
|
399
|
-
def get_parser(self, prog_name):
|
|
416
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
400
417
|
parser = super().get_parser(prog_name)
|
|
401
418
|
parser.add_argument(
|
|
402
419
|
"backup",
|
|
@@ -422,8 +439,12 @@ class RestoreVolumeBackup(command.ShowOne):
|
|
|
422
439
|
)
|
|
423
440
|
return parser
|
|
424
441
|
|
|
425
|
-
def take_action(
|
|
426
|
-
|
|
442
|
+
def take_action(
|
|
443
|
+
self, parsed_args: argparse.Namespace
|
|
444
|
+
) -> tuple[tuple[str, ...], Iterable[Any]]:
|
|
445
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
446
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
447
|
+
)
|
|
427
448
|
|
|
428
449
|
columns: tuple[str, ...] = (
|
|
429
450
|
'id',
|
|
@@ -468,7 +489,7 @@ class RestoreVolumeBackup(command.ShowOne):
|
|
|
468
489
|
class SetVolumeBackup(command.Command):
|
|
469
490
|
_description = _("Set volume backup properties")
|
|
470
491
|
|
|
471
|
-
def get_parser(self, prog_name):
|
|
492
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
472
493
|
parser = super().get_parser(prog_name)
|
|
473
494
|
parser.add_argument(
|
|
474
495
|
"backup",
|
|
@@ -525,8 +546,10 @@ class SetVolumeBackup(command.Command):
|
|
|
525
546
|
)
|
|
526
547
|
return parser
|
|
527
548
|
|
|
528
|
-
def take_action(self, parsed_args):
|
|
529
|
-
volume_client =
|
|
549
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
550
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
551
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
552
|
+
)
|
|
530
553
|
|
|
531
554
|
backup = volume_client.find_backup(
|
|
532
555
|
parsed_args.backup,
|
|
@@ -608,7 +631,7 @@ class UnsetVolumeBackup(command.Command):
|
|
|
608
631
|
This command requires ``--os-volume-api-version`` 3.43 or greater.
|
|
609
632
|
"""
|
|
610
633
|
|
|
611
|
-
def get_parser(self, prog_name):
|
|
634
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
612
635
|
parser = super().get_parser(prog_name)
|
|
613
636
|
parser.add_argument(
|
|
614
637
|
'backup',
|
|
@@ -627,8 +650,10 @@ class UnsetVolumeBackup(command.Command):
|
|
|
627
650
|
)
|
|
628
651
|
return parser
|
|
629
652
|
|
|
630
|
-
def take_action(self, parsed_args):
|
|
631
|
-
volume_client =
|
|
653
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
654
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
655
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
656
|
+
)
|
|
632
657
|
|
|
633
658
|
if not sdk_utils.supports_microversion(volume_client, '3.43'):
|
|
634
659
|
msg = _(
|
|
@@ -660,7 +685,7 @@ class UnsetVolumeBackup(command.Command):
|
|
|
660
685
|
class ShowVolumeBackup(command.ShowOne):
|
|
661
686
|
_description = _("Display volume backup details")
|
|
662
687
|
|
|
663
|
-
def get_parser(self, prog_name):
|
|
688
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
664
689
|
parser = super().get_parser(prog_name)
|
|
665
690
|
parser.add_argument(
|
|
666
691
|
"backup",
|
|
@@ -669,8 +694,12 @@ class ShowVolumeBackup(command.ShowOne):
|
|
|
669
694
|
)
|
|
670
695
|
return parser
|
|
671
696
|
|
|
672
|
-
def take_action(
|
|
673
|
-
|
|
697
|
+
def take_action(
|
|
698
|
+
self, parsed_args: argparse.Namespace
|
|
699
|
+
) -> tuple[tuple[str, ...], Iterable[Any]]:
|
|
700
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
701
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
702
|
+
)
|
|
674
703
|
backup = volume_client.find_backup(
|
|
675
704
|
parsed_args.backup, ignore_missing=False
|
|
676
705
|
)
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
13
|
import argparse
|
|
14
|
+
from collections.abc import Iterable, Sequence
|
|
15
|
+
from typing import Any
|
|
14
16
|
|
|
15
17
|
from cinderclient import api_versions
|
|
16
18
|
from osc_lib import exceptions
|
|
@@ -21,7 +23,7 @@ from openstackclient.common import envvars
|
|
|
21
23
|
from openstackclient.i18n import _
|
|
22
24
|
|
|
23
25
|
|
|
24
|
-
def _format_group(group):
|
|
26
|
+
def _format_group(group: Any) -> tuple[Sequence[str], Iterable[Any]]:
|
|
25
27
|
columns = (
|
|
26
28
|
'id',
|
|
27
29
|
'status',
|
|
@@ -79,7 +81,7 @@ class CreateVolumeGroup(command.ShowOne):
|
|
|
79
81
|
This command requires ``--os-volume-api-version`` 3.13 or greater.
|
|
80
82
|
"""
|
|
81
83
|
|
|
82
|
-
def get_parser(self, prog_name):
|
|
84
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
83
85
|
parser = super().get_parser(prog_name)
|
|
84
86
|
# This is a bit complicated. We accept two patterns: a legacy pattern
|
|
85
87
|
#
|
|
@@ -168,7 +170,9 @@ class CreateVolumeGroup(command.ShowOne):
|
|
|
168
170
|
)
|
|
169
171
|
return parser
|
|
170
172
|
|
|
171
|
-
def take_action(
|
|
173
|
+
def take_action(
|
|
174
|
+
self, parsed_args: argparse.Namespace
|
|
175
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
172
176
|
volume_client = self.app.client_manager.volume
|
|
173
177
|
|
|
174
178
|
if parsed_args.volume_group_type_legacy:
|
|
@@ -276,7 +280,7 @@ class DeleteVolumeGroup(command.Command):
|
|
|
276
280
|
This command requires ``--os-volume-api-version`` 3.13 or greater.
|
|
277
281
|
"""
|
|
278
282
|
|
|
279
|
-
def get_parser(self, prog_name):
|
|
283
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
280
284
|
parser = super().get_parser(prog_name)
|
|
281
285
|
parser.add_argument(
|
|
282
286
|
'group',
|
|
@@ -294,7 +298,7 @@ class DeleteVolumeGroup(command.Command):
|
|
|
294
298
|
)
|
|
295
299
|
return parser
|
|
296
300
|
|
|
297
|
-
def take_action(self, parsed_args):
|
|
301
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
298
302
|
volume_client = self.app.client_manager.volume
|
|
299
303
|
|
|
300
304
|
if volume_client.api_version < api_versions.APIVersion('3.13'):
|
|
@@ -318,7 +322,7 @@ class SetVolumeGroup(command.ShowOne):
|
|
|
318
322
|
This command requires ``--os-volume-api-version`` 3.13 or greater.
|
|
319
323
|
"""
|
|
320
324
|
|
|
321
|
-
def get_parser(self, prog_name):
|
|
325
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
322
326
|
parser = super().get_parser(prog_name)
|
|
323
327
|
parser.add_argument(
|
|
324
328
|
'group',
|
|
@@ -356,7 +360,9 @@ class SetVolumeGroup(command.ShowOne):
|
|
|
356
360
|
)
|
|
357
361
|
return parser
|
|
358
362
|
|
|
359
|
-
def take_action(
|
|
363
|
+
def take_action(
|
|
364
|
+
self, parsed_args: argparse.Namespace
|
|
365
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
360
366
|
volume_client = self.app.client_manager.volume
|
|
361
367
|
|
|
362
368
|
if volume_client.api_version < api_versions.APIVersion('3.13'):
|
|
@@ -405,7 +411,7 @@ class ListVolumeGroup(command.Lister):
|
|
|
405
411
|
This command requires ``--os-volume-api-version`` 3.13 or greater.
|
|
406
412
|
"""
|
|
407
413
|
|
|
408
|
-
def get_parser(self, prog_name):
|
|
414
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
409
415
|
parser = super().get_parser(prog_name)
|
|
410
416
|
parser.add_argument(
|
|
411
417
|
'--all-projects',
|
|
@@ -430,7 +436,9 @@ class ListVolumeGroup(command.Lister):
|
|
|
430
436
|
# )
|
|
431
437
|
return parser
|
|
432
438
|
|
|
433
|
-
def take_action(
|
|
439
|
+
def take_action(
|
|
440
|
+
self, parsed_args: argparse.Namespace
|
|
441
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
434
442
|
volume_client = self.app.client_manager.volume
|
|
435
443
|
|
|
436
444
|
if volume_client.api_version < api_versions.APIVersion('3.13'):
|
|
@@ -469,7 +477,7 @@ class ShowVolumeGroup(command.ShowOne):
|
|
|
469
477
|
This command requires ``--os-volume-api-version`` 3.13 or greater.
|
|
470
478
|
"""
|
|
471
479
|
|
|
472
|
-
def get_parser(self, prog_name):
|
|
480
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
473
481
|
parser = super().get_parser(prog_name)
|
|
474
482
|
parser.add_argument(
|
|
475
483
|
'group',
|
|
@@ -517,7 +525,9 @@ class ShowVolumeGroup(command.ShowOne):
|
|
|
517
525
|
|
|
518
526
|
return parser
|
|
519
527
|
|
|
520
|
-
def take_action(
|
|
528
|
+
def take_action(
|
|
529
|
+
self, parsed_args: argparse.Namespace
|
|
530
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
521
531
|
volume_client = self.app.client_manager.volume
|
|
522
532
|
|
|
523
533
|
if volume_client.api_version < api_versions.APIVersion('3.13'):
|
|
@@ -571,7 +581,7 @@ class FailoverVolumeGroup(command.Command):
|
|
|
571
581
|
This command requires ``--os-volume-api-version`` 3.38 or greater.
|
|
572
582
|
"""
|
|
573
583
|
|
|
574
|
-
def get_parser(self, prog_name):
|
|
584
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
575
585
|
parser = super().get_parser(prog_name)
|
|
576
586
|
parser.add_argument(
|
|
577
587
|
'group',
|
|
@@ -599,7 +609,7 @@ class FailoverVolumeGroup(command.Command):
|
|
|
599
609
|
)
|
|
600
610
|
return parser
|
|
601
611
|
|
|
602
|
-
def take_action(self, parsed_args):
|
|
612
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
603
613
|
volume_client = self.app.client_manager.volume
|
|
604
614
|
|
|
605
615
|
if volume_client.api_version < api_versions.APIVersion('3.38'):
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
# License for the specific language governing permissions and limitations
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
|
+
import argparse
|
|
14
|
+
from collections.abc import Iterable, Sequence
|
|
13
15
|
import logging
|
|
16
|
+
from typing import Any
|
|
14
17
|
|
|
15
18
|
from openstack import utils as sdk_utils
|
|
16
19
|
from osc_lib import exceptions
|
|
@@ -23,7 +26,9 @@ from openstackclient.i18n import _
|
|
|
23
26
|
LOG = logging.getLogger(__name__)
|
|
24
27
|
|
|
25
28
|
|
|
26
|
-
def _format_group_snapshot(
|
|
29
|
+
def _format_group_snapshot(
|
|
30
|
+
snapshot: Any,
|
|
31
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
27
32
|
columns = (
|
|
28
33
|
'id',
|
|
29
34
|
'status',
|
|
@@ -56,7 +61,7 @@ class CreateVolumeGroupSnapshot(command.ShowOne):
|
|
|
56
61
|
This command requires ``--os-volume-api-version`` 3.13 or greater.
|
|
57
62
|
"""
|
|
58
63
|
|
|
59
|
-
def get_parser(self, prog_name):
|
|
64
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
60
65
|
parser = super().get_parser(prog_name)
|
|
61
66
|
parser.add_argument(
|
|
62
67
|
'volume_group',
|
|
@@ -75,8 +80,12 @@ class CreateVolumeGroupSnapshot(command.ShowOne):
|
|
|
75
80
|
)
|
|
76
81
|
return parser
|
|
77
82
|
|
|
78
|
-
def take_action(
|
|
79
|
-
|
|
83
|
+
def take_action(
|
|
84
|
+
self, parsed_args: argparse.Namespace
|
|
85
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
86
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
87
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
88
|
+
)
|
|
80
89
|
|
|
81
90
|
if not sdk_utils.supports_microversion(volume_client, '3.14'):
|
|
82
91
|
msg = _(
|
|
@@ -106,7 +115,7 @@ class DeleteVolumeGroupSnapshot(command.Command):
|
|
|
106
115
|
This command requires ``--os-volume-api-version`` 3.14 or greater.
|
|
107
116
|
"""
|
|
108
117
|
|
|
109
|
-
def get_parser(self, prog_name):
|
|
118
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
110
119
|
parser = super().get_parser(prog_name)
|
|
111
120
|
parser.add_argument(
|
|
112
121
|
'snapshot',
|
|
@@ -115,8 +124,10 @@ class DeleteVolumeGroupSnapshot(command.Command):
|
|
|
115
124
|
)
|
|
116
125
|
return parser
|
|
117
126
|
|
|
118
|
-
def take_action(self, parsed_args):
|
|
119
|
-
volume_client =
|
|
127
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
128
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
129
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
130
|
+
)
|
|
120
131
|
|
|
121
132
|
if not sdk_utils.supports_microversion(volume_client, '3.14'):
|
|
122
133
|
msg = _(
|
|
@@ -140,7 +151,7 @@ class ListVolumeGroupSnapshot(command.Lister):
|
|
|
140
151
|
This command requires ``--os-volume-api-version`` 3.14 or greater.
|
|
141
152
|
"""
|
|
142
153
|
|
|
143
|
-
def get_parser(self, prog_name):
|
|
154
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
144
155
|
parser = super().get_parser(prog_name)
|
|
145
156
|
parser.add_argument(
|
|
146
157
|
'--all-projects',
|
|
@@ -165,8 +176,12 @@ class ListVolumeGroupSnapshot(command.Lister):
|
|
|
165
176
|
# )
|
|
166
177
|
return parser
|
|
167
178
|
|
|
168
|
-
def take_action(
|
|
169
|
-
|
|
179
|
+
def take_action(
|
|
180
|
+
self, parsed_args: argparse.Namespace
|
|
181
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
182
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
183
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
184
|
+
)
|
|
170
185
|
|
|
171
186
|
if not sdk_utils.supports_microversion(volume_client, '3.14'):
|
|
172
187
|
msg = _(
|
|
@@ -202,7 +217,7 @@ class ShowVolumeGroupSnapshot(command.ShowOne):
|
|
|
202
217
|
This command requires ``--os-volume-api-version`` 3.14 or greater.
|
|
203
218
|
"""
|
|
204
219
|
|
|
205
|
-
def get_parser(self, prog_name):
|
|
220
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
206
221
|
parser = super().get_parser(prog_name)
|
|
207
222
|
parser.add_argument(
|
|
208
223
|
'snapshot',
|
|
@@ -211,8 +226,12 @@ class ShowVolumeGroupSnapshot(command.ShowOne):
|
|
|
211
226
|
)
|
|
212
227
|
return parser
|
|
213
228
|
|
|
214
|
-
def take_action(
|
|
215
|
-
|
|
229
|
+
def take_action(
|
|
230
|
+
self, parsed_args: argparse.Namespace
|
|
231
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
232
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
233
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
234
|
+
)
|
|
216
235
|
|
|
217
236
|
if not sdk_utils.supports_microversion(volume_client, '3.14'):
|
|
218
237
|
msg = _(
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
# License for the specific language governing permissions and limitations
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
|
+
import argparse
|
|
14
|
+
from collections.abc import Iterable, Sequence
|
|
13
15
|
import logging
|
|
16
|
+
from typing import Any
|
|
14
17
|
|
|
15
18
|
from cinderclient import api_versions
|
|
16
19
|
from osc_lib.cli import format_columns
|
|
@@ -24,7 +27,7 @@ from openstackclient.i18n import _
|
|
|
24
27
|
LOG = logging.getLogger(__name__)
|
|
25
28
|
|
|
26
29
|
|
|
27
|
-
def _format_group_type(group):
|
|
30
|
+
def _format_group_type(group: Any) -> tuple[Sequence[str], Iterable[Any]]:
|
|
28
31
|
columns = (
|
|
29
32
|
'id',
|
|
30
33
|
'name',
|
|
@@ -60,7 +63,7 @@ class CreateVolumeGroupType(command.ShowOne):
|
|
|
60
63
|
This command requires ``--os-volume-api-version`` 3.11 or greater.
|
|
61
64
|
"""
|
|
62
65
|
|
|
63
|
-
def get_parser(self, prog_name):
|
|
66
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
64
67
|
parser = super().get_parser(prog_name)
|
|
65
68
|
parser.add_argument(
|
|
66
69
|
'name',
|
|
@@ -90,7 +93,9 @@ class CreateVolumeGroupType(command.ShowOne):
|
|
|
90
93
|
)
|
|
91
94
|
return parser
|
|
92
95
|
|
|
93
|
-
def take_action(
|
|
96
|
+
def take_action(
|
|
97
|
+
self, parsed_args: argparse.Namespace
|
|
98
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
94
99
|
volume_client = self.app.client_manager.volume
|
|
95
100
|
|
|
96
101
|
if volume_client.api_version < api_versions.APIVersion('3.11'):
|
|
@@ -113,7 +118,7 @@ class DeleteVolumeGroupType(command.Command):
|
|
|
113
118
|
This command requires ``--os-volume-api-version`` 3.11 or greater.
|
|
114
119
|
"""
|
|
115
120
|
|
|
116
|
-
def get_parser(self, prog_name):
|
|
121
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
117
122
|
parser = super().get_parser(prog_name)
|
|
118
123
|
parser.add_argument(
|
|
119
124
|
'group_type',
|
|
@@ -122,7 +127,7 @@ class DeleteVolumeGroupType(command.Command):
|
|
|
122
127
|
)
|
|
123
128
|
return parser
|
|
124
129
|
|
|
125
|
-
def take_action(self, parsed_args):
|
|
130
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
126
131
|
volume_client = self.app.client_manager.volume
|
|
127
132
|
|
|
128
133
|
if volume_client.api_version < api_versions.APIVersion('3.11'):
|
|
@@ -146,7 +151,7 @@ class SetVolumeGroupType(command.ShowOne):
|
|
|
146
151
|
This command requires ``--os-volume-api-version`` 3.11 or greater.
|
|
147
152
|
"""
|
|
148
153
|
|
|
149
|
-
def get_parser(self, prog_name):
|
|
154
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
150
155
|
parser = super().get_parser(prog_name)
|
|
151
156
|
parser.add_argument(
|
|
152
157
|
'group_type',
|
|
@@ -199,7 +204,9 @@ class SetVolumeGroupType(command.ShowOne):
|
|
|
199
204
|
)
|
|
200
205
|
return parser
|
|
201
206
|
|
|
202
|
-
def take_action(
|
|
207
|
+
def take_action(
|
|
208
|
+
self, parsed_args: argparse.Namespace
|
|
209
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
203
210
|
volume_client = self.app.client_manager.volume
|
|
204
211
|
|
|
205
212
|
if volume_client.api_version < api_versions.APIVersion('3.11'):
|
|
@@ -263,7 +270,7 @@ class UnsetVolumeGroupType(command.ShowOne):
|
|
|
263
270
|
This command requires ``--os-volume-api-version`` 3.11 or greater.
|
|
264
271
|
"""
|
|
265
272
|
|
|
266
|
-
def get_parser(self, prog_name):
|
|
273
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
267
274
|
parser = super().get_parser(prog_name)
|
|
268
275
|
parser.add_argument(
|
|
269
276
|
'group_type',
|
|
@@ -282,7 +289,9 @@ class UnsetVolumeGroupType(command.ShowOne):
|
|
|
282
289
|
)
|
|
283
290
|
return parser
|
|
284
291
|
|
|
285
|
-
def take_action(
|
|
292
|
+
def take_action(
|
|
293
|
+
self, parsed_args: argparse.Namespace
|
|
294
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
286
295
|
volume_client = self.app.client_manager.volume
|
|
287
296
|
|
|
288
297
|
if volume_client.api_version < api_versions.APIVersion('3.11'):
|
|
@@ -313,7 +322,7 @@ class ListVolumeGroupType(command.Lister):
|
|
|
313
322
|
This command requires ``--os-volume-api-version`` 3.11 or greater.
|
|
314
323
|
"""
|
|
315
324
|
|
|
316
|
-
def get_parser(self, prog_name):
|
|
325
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
317
326
|
parser = super().get_parser(prog_name)
|
|
318
327
|
parser.add_argument(
|
|
319
328
|
'--default',
|
|
@@ -338,7 +347,9 @@ class ListVolumeGroupType(command.Lister):
|
|
|
338
347
|
# )
|
|
339
348
|
return parser
|
|
340
349
|
|
|
341
|
-
def take_action(
|
|
350
|
+
def take_action(
|
|
351
|
+
self, parsed_args: argparse.Namespace
|
|
352
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
342
353
|
volume_client = self.app.client_manager.volume
|
|
343
354
|
|
|
344
355
|
if volume_client.api_version < api_versions.APIVersion('3.11'):
|
|
@@ -378,7 +389,7 @@ class ShowVolumeGroupType(command.ShowOne):
|
|
|
378
389
|
This command requires ``--os-volume-api-version`` 3.11 or greater.
|
|
379
390
|
"""
|
|
380
391
|
|
|
381
|
-
def get_parser(self, prog_name):
|
|
392
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
382
393
|
parser = super().get_parser(prog_name)
|
|
383
394
|
parser.add_argument(
|
|
384
395
|
'group_type',
|
|
@@ -387,7 +398,9 @@ class ShowVolumeGroupType(command.ShowOne):
|
|
|
387
398
|
)
|
|
388
399
|
return parser
|
|
389
400
|
|
|
390
|
-
def take_action(
|
|
401
|
+
def take_action(
|
|
402
|
+
self, parsed_args: argparse.Namespace
|
|
403
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
391
404
|
volume_client = self.app.client_manager.volume
|
|
392
405
|
|
|
393
406
|
if volume_client.api_version < api_versions.APIVersion('3.11'):
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
"""Volume V3 Messages implementations"""
|
|
16
16
|
|
|
17
|
+
import argparse
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
17
19
|
import logging as LOG
|
|
20
|
+
from typing import Any
|
|
18
21
|
|
|
19
22
|
from cinderclient import api_versions
|
|
20
23
|
from osc_lib import exceptions
|
|
@@ -29,7 +32,7 @@ from openstackclient.identity import common as identity_common
|
|
|
29
32
|
class DeleteMessage(command.Command):
|
|
30
33
|
_description = _('Delete a volume failure message')
|
|
31
34
|
|
|
32
|
-
def get_parser(self, prog_name):
|
|
35
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
33
36
|
parser = super().get_parser(prog_name)
|
|
34
37
|
parser.add_argument(
|
|
35
38
|
'message_ids',
|
|
@@ -40,7 +43,7 @@ class DeleteMessage(command.Command):
|
|
|
40
43
|
|
|
41
44
|
return parser
|
|
42
45
|
|
|
43
|
-
def take_action(self, parsed_args):
|
|
46
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
44
47
|
volume_client = self.app.client_manager.volume
|
|
45
48
|
|
|
46
49
|
if volume_client.api_version < api_versions.APIVersion('3.3'):
|
|
@@ -70,7 +73,7 @@ class DeleteMessage(command.Command):
|
|
|
70
73
|
class ListMessages(command.Lister):
|
|
71
74
|
_description = _('List volume failure messages')
|
|
72
75
|
|
|
73
|
-
def get_parser(self, prog_name):
|
|
76
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
74
77
|
parser = super().get_parser(prog_name)
|
|
75
78
|
|
|
76
79
|
parser.add_argument(
|
|
@@ -83,7 +86,9 @@ class ListMessages(command.Lister):
|
|
|
83
86
|
|
|
84
87
|
return parser
|
|
85
88
|
|
|
86
|
-
def take_action(
|
|
89
|
+
def take_action(
|
|
90
|
+
self, parsed_args: argparse.Namespace
|
|
91
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
87
92
|
volume_client = self.app.client_manager.volume
|
|
88
93
|
identity_client = self.app.client_manager.identity
|
|
89
94
|
|
|
@@ -132,7 +137,7 @@ class ListMessages(command.Lister):
|
|
|
132
137
|
class ShowMessage(command.ShowOne):
|
|
133
138
|
_description = _('Show a volume failure message')
|
|
134
139
|
|
|
135
|
-
def get_parser(self, prog_name):
|
|
140
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
136
141
|
parser = super().get_parser(prog_name)
|
|
137
142
|
parser.add_argument(
|
|
138
143
|
'message_id',
|
|
@@ -142,7 +147,9 @@ class ShowMessage(command.ShowOne):
|
|
|
142
147
|
|
|
143
148
|
return parser
|
|
144
149
|
|
|
145
|
-
def take_action(
|
|
150
|
+
def take_action(
|
|
151
|
+
self, parsed_args: argparse.Namespace
|
|
152
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
146
153
|
volume_client = self.app.client_manager.volume
|
|
147
154
|
|
|
148
155
|
if volume_client.api_version < api_versions.APIVersion('3.3'):
|
|
@@ -154,4 +161,5 @@ class ShowMessage(command.ShowOne):
|
|
|
154
161
|
|
|
155
162
|
message = volume_client.messages.get(parsed_args.message_id)
|
|
156
163
|
|
|
157
|
-
|
|
164
|
+
col_headers, col_data = zip(*sorted(message._info.items()))
|
|
165
|
+
return col_headers, col_data
|