python-openstackclient 9.0.0__py3-none-any.whl → 10.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/__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 +59 -43
- 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 +36 -34
- openstackclient/common/pagination.py +50 -6
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +11 -6
- openstackclient/common/quota.py +105 -103
- 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 +42 -22
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +16 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +35 -16
- openstackclient/compute/v2/server.py +268 -179
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +28 -12
- openstackclient/compute/v2/server_group.py +23 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +27 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +13 -5
- openstackclient/compute/v2/service.py +17 -8
- openstackclient/compute/v2/usage.py +28 -23
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +82 -47
- 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 +23 -11
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +32 -12
- openstackclient/identity/v3/application_credential.py +66 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +39 -17
- openstackclient/identity/v3/domain.py +40 -19
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +98 -64
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +44 -20
- openstackclient/identity/v3/group.py +64 -40
- openstackclient/identity/v3/identity_provider.py +95 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +42 -17
- openstackclient/identity/v3/mapping.py +58 -28
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +59 -26
- openstackclient/identity/v3/region.py +39 -17
- openstackclient/identity/v3/registered_limit.py +41 -16
- openstackclient/identity/v3/role.py +62 -31
- openstackclient/identity/v3/role_assignment.py +25 -7
- openstackclient/identity/v3/service.py +39 -17
- openstackclient/identity/v3/service_provider.py +40 -16
- openstackclient/identity/v3/tag.py +23 -6
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +39 -18
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +86 -36
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +16 -11
- openstackclient/image/v2/image.py +88 -56
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +117 -20
- openstackclient/image/v2/metadef_objects.py +32 -19
- openstackclient/image/v2/metadef_properties.py +30 -16
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +25 -27
- 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 +27 -54
- openstackclient/network/v2/address_group.py +39 -16
- openstackclient/network/v2/address_scope.py +36 -20
- openstackclient/network/v2/bgpvpn/bgpvpn.py +477 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +226 -0
- openstackclient/network/v2/bgpvpn/port_association.py +504 -0
- openstackclient/network/v2/bgpvpn/router_association.py +301 -0
- openstackclient/network/v2/default_security_group_rule.py +31 -14
- openstackclient/network/v2/floating_ip.py +121 -162
- openstackclient/network/v2/floating_ip_port_forwarding.py +41 -19
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +499 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +610 -0
- openstackclient/network/v2/ip_availability.py +25 -8
- openstackclient/network/v2/l3_conntrack_helper.py +35 -13
- openstackclient/network/v2/local_ip.py +27 -13
- openstackclient/network/v2/local_ip_association.py +17 -7
- openstackclient/network/v2/ndp_proxy.py +23 -11
- openstackclient/network/v2/network.py +213 -213
- openstackclient/network/v2/network_agent.py +77 -34
- openstackclient/network/v2/network_auto_allocated_topology.py +27 -15
- openstackclient/network/v2/network_flavor.py +45 -21
- openstackclient/network/v2/network_flavor_profile.py +42 -17
- openstackclient/network/v2/network_meter.py +39 -15
- openstackclient/network/v2/network_meter_rule.py +40 -12
- openstackclient/network/v2/network_qos_policy.py +39 -21
- openstackclient/network/v2/network_qos_rule.py +48 -18
- openstackclient/network/v2/network_qos_rule_type.py +28 -9
- openstackclient/network/v2/network_rbac.py +34 -16
- openstackclient/network/v2/network_segment.py +32 -11
- openstackclient/network/v2/network_segment_range.py +70 -31
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +41 -22
- openstackclient/network/v2/port.py +141 -40
- openstackclient/network/v2/router.py +101 -67
- openstackclient/network/v2/security_group.py +97 -198
- openstackclient/network/v2/security_group_rule.py +115 -282
- openstackclient/network/v2/subnet.py +63 -34
- openstackclient/network/v2/subnet_pool.py +42 -24
- openstackclient/network/v2/taas/tap_flow.py +35 -14
- openstackclient/network/v2/taas/tap_mirror.py +28 -14
- openstackclient/network/v2/taas/tap_service.py +26 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +28 -16
- openstackclient/object/v1/object.py +28 -16
- 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 +59 -19
- openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
- 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_mapping.py +81 -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/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_group.py +163 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
- 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_limits.py +1 -1
- openstackclient/tests/unit/common/test_module.py +82 -44
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +15 -26
- openstackclient/tests/unit/compute/v2/fakes.py +26 -57
- openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
- openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
- openstackclient/tests/unit/compute/v2/test_console.py +2 -2
- openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
- openstackclient/tests/unit/compute/v2/test_flavor.py +29 -3
- openstackclient/tests/unit/compute/v2/test_host.py +3 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
- openstackclient/tests/unit/compute/v2/test_keypair.py +7 -7
- openstackclient/tests/unit/compute/v2/test_server.py +26 -111
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
- openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
- openstackclient/tests/unit/compute/v2/test_service.py +3 -3
- openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
- openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
- openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
- openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
- openstackclient/tests/unit/identity/v3/fakes.py +8 -38
- openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
- openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
- openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
- openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
- openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
- openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +12 -22
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
- openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
- openstackclient/tests/unit/identity/v3/test_project.py +28 -5
- openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
- openstackclient/tests/unit/identity/v3/test_region.py +5 -5
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_role.py +8 -8
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v3/test_service.py +5 -5
- openstackclient/tests/unit/identity/v3/test_token.py +2 -2
- openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
- openstackclient/tests/unit/identity/v3/test_user.py +77 -10
- openstackclient/tests/unit/image/v2/test_image.py +11 -11
- 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/fakes.py +5 -77
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +923 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +1005 -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 +26 -2
- openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +27 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +37 -13
- openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
- openstackclient/tests/unit/network/v2/test_network.py +74 -12
- openstackclient/tests/unit/network/v2/test_network_agent.py +58 -5
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +26 -2
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_rbac.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +31 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_port.py +166 -0
- openstackclient/tests/unit/network/v2/test_router.py +36 -16
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +11 -8
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +28 -37
- openstackclient/tests/unit/network/v2/test_subnet.py +30 -5
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +26 -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 +21 -140
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +8 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +205 -100
- openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
- openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
- openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +61 -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 +29 -17
- openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
- openstackclient/volume/v2/qos_specs.py +28 -17
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +60 -30
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -23
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +49 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- openstackclient/volume/v3/backup_record.py +94 -0
- 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/consistency_group.py +400 -0
- openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
- openstackclient/volume/v3/qos_specs.py +389 -0
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +92 -40
- openstackclient/volume/v3/volume_attachment.py +47 -21
- openstackclient/volume/v3/volume_backend.py +130 -0
- openstackclient/volume/v3/volume_backup.py +55 -27
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +34 -17
- openstackclient/volume/v3/volume_group_type.py +27 -14
- openstackclient/volume/v3/volume_host.py +74 -0
- openstackclient/volume/v3/volume_message.py +18 -8
- openstackclient/volume/v3/volume_snapshot.py +70 -32
- openstackclient/volume/v3/volume_transfer_request.py +31 -13
- openstackclient/volume/v3/volume_type.py +42 -24
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +7 -8
- python_openstackclient-10.1.0.dist-info/RECORD +524 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +77 -25
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +9 -0
- python_openstackclient-10.1.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-9.0.0.dist-info/RECORD +0 -499
- python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
|
@@ -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(
|
|
@@ -79,11 +82,15 @@ class ListMessages(command.Lister):
|
|
|
79
82
|
help=_('Filter results by project (name or ID) (admin only)'),
|
|
80
83
|
)
|
|
81
84
|
identity_common.add_project_domain_option_to_parser(parser)
|
|
82
|
-
pagination.add_marker_pagination_option_to_parser(
|
|
85
|
+
pagination.add_marker_pagination_option_to_parser(
|
|
86
|
+
parser, include_max_items=False
|
|
87
|
+
)
|
|
83
88
|
|
|
84
89
|
return parser
|
|
85
90
|
|
|
86
|
-
def take_action(
|
|
91
|
+
def take_action(
|
|
92
|
+
self, parsed_args: argparse.Namespace
|
|
93
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
87
94
|
volume_client = self.app.client_manager.volume
|
|
88
95
|
identity_client = self.app.client_manager.identity
|
|
89
96
|
|
|
@@ -132,7 +139,7 @@ class ListMessages(command.Lister):
|
|
|
132
139
|
class ShowMessage(command.ShowOne):
|
|
133
140
|
_description = _('Show a volume failure message')
|
|
134
141
|
|
|
135
|
-
def get_parser(self, prog_name):
|
|
142
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
136
143
|
parser = super().get_parser(prog_name)
|
|
137
144
|
parser.add_argument(
|
|
138
145
|
'message_id',
|
|
@@ -142,7 +149,9 @@ class ShowMessage(command.ShowOne):
|
|
|
142
149
|
|
|
143
150
|
return parser
|
|
144
151
|
|
|
145
|
-
def take_action(
|
|
152
|
+
def take_action(
|
|
153
|
+
self, parsed_args: argparse.Namespace
|
|
154
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
146
155
|
volume_client = self.app.client_manager.volume
|
|
147
156
|
|
|
148
157
|
if volume_client.api_version < api_versions.APIVersion('3.3'):
|
|
@@ -154,4 +163,5 @@ class ShowMessage(command.ShowOne):
|
|
|
154
163
|
|
|
155
164
|
message = volume_client.messages.get(parsed_args.message_id)
|
|
156
165
|
|
|
157
|
-
|
|
166
|
+
col_headers, col_data = zip(*sorted(message._info.items()))
|
|
167
|
+
return col_headers, col_data
|
|
@@ -14,12 +14,15 @@
|
|
|
14
14
|
|
|
15
15
|
"""Volume v3 snapshot action implementations"""
|
|
16
16
|
|
|
17
|
+
import argparse
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
17
19
|
import functools
|
|
18
20
|
import logging
|
|
19
|
-
|
|
21
|
+
from typing import Any
|
|
20
22
|
|
|
21
23
|
from cliff import columns as cliff_columns
|
|
22
24
|
from openstack.block_storage.v3 import snapshot as _snapshot
|
|
25
|
+
from openstack import utils as sdk_utils
|
|
23
26
|
from osc_lib.cli import format_columns
|
|
24
27
|
from osc_lib.cli import parseractions
|
|
25
28
|
from osc_lib import exceptions
|
|
@@ -44,11 +47,13 @@ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
|
|
|
44
47
|
``functools.partial(VolumeIdColumn, volume_cache)``.
|
|
45
48
|
"""
|
|
46
49
|
|
|
47
|
-
def __init__(
|
|
50
|
+
def __init__(
|
|
51
|
+
self, value: str, volume_cache: dict[str, Any] | None = None
|
|
52
|
+
) -> None:
|
|
48
53
|
super().__init__(value)
|
|
49
54
|
self._volume_cache = volume_cache or {}
|
|
50
55
|
|
|
51
|
-
def human_readable(self):
|
|
56
|
+
def human_readable(self) -> str:
|
|
52
57
|
"""Return a volume name if available
|
|
53
58
|
|
|
54
59
|
:rtype: either the volume ID or name
|
|
@@ -60,7 +65,7 @@ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
|
|
|
60
65
|
return volume
|
|
61
66
|
|
|
62
67
|
|
|
63
|
-
def _format_snapshot(snapshot: _snapshot.Snapshot) -> dict[str,
|
|
68
|
+
def _format_snapshot(snapshot: _snapshot.Snapshot) -> dict[str, object]:
|
|
64
69
|
# Some columns returned by openstacksdk should not be shown because they're
|
|
65
70
|
# either irrelevant or duplicates
|
|
66
71
|
ignored_columns = {
|
|
@@ -99,7 +104,7 @@ def _format_snapshot(snapshot: _snapshot.Snapshot) -> dict[str, ty.Any]:
|
|
|
99
104
|
class CreateVolumeSnapshot(command.ShowOne):
|
|
100
105
|
_description = _("Create new volume snapshot")
|
|
101
106
|
|
|
102
|
-
def get_parser(self, prog_name):
|
|
107
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
103
108
|
parser = super().get_parser(prog_name)
|
|
104
109
|
parser.add_argument(
|
|
105
110
|
"snapshot_name",
|
|
@@ -123,7 +128,9 @@ class CreateVolumeSnapshot(command.ShowOne):
|
|
|
123
128
|
action="store_true",
|
|
124
129
|
default=False,
|
|
125
130
|
help=_(
|
|
126
|
-
"
|
|
131
|
+
"Allow snapshot of in-use (attached) volume. "
|
|
132
|
+
"Only needed for microversions prior to 3.66; "
|
|
133
|
+
"ignored for 3.66+"
|
|
127
134
|
),
|
|
128
135
|
)
|
|
129
136
|
parser.add_argument(
|
|
@@ -149,8 +156,12 @@ class CreateVolumeSnapshot(command.ShowOne):
|
|
|
149
156
|
)
|
|
150
157
|
return parser
|
|
151
158
|
|
|
152
|
-
def take_action(
|
|
153
|
-
|
|
159
|
+
def take_action(
|
|
160
|
+
self, parsed_args: argparse.Namespace
|
|
161
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
162
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
163
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
164
|
+
)
|
|
154
165
|
|
|
155
166
|
volume = parsed_args.volume
|
|
156
167
|
if not parsed_args.volume:
|
|
@@ -176,22 +187,33 @@ class CreateVolumeSnapshot(command.ShowOne):
|
|
|
176
187
|
)
|
|
177
188
|
else:
|
|
178
189
|
# Create a new snapshot from scratch
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
190
|
+
# only for microversion < 3.66, pass force parameter
|
|
191
|
+
# for backward compatibility
|
|
192
|
+
if not sdk_utils.supports_microversion(volume_client, '3.66'):
|
|
193
|
+
snapshot = volume_client.create_snapshot(
|
|
194
|
+
volume_id=volume_id,
|
|
195
|
+
force=parsed_args.force,
|
|
196
|
+
name=parsed_args.snapshot_name,
|
|
197
|
+
description=parsed_args.description,
|
|
198
|
+
metadata=parsed_args.properties,
|
|
199
|
+
)
|
|
200
|
+
else:
|
|
201
|
+
snapshot = volume_client.create_snapshot(
|
|
202
|
+
volume_id=volume_id,
|
|
203
|
+
name=parsed_args.snapshot_name,
|
|
204
|
+
description=parsed_args.description,
|
|
205
|
+
metadata=parsed_args.properties,
|
|
206
|
+
)
|
|
186
207
|
|
|
187
208
|
data = _format_snapshot(snapshot)
|
|
188
|
-
|
|
209
|
+
col_headers, col_data = zip(*sorted(data.items()))
|
|
210
|
+
return col_headers, col_data
|
|
189
211
|
|
|
190
212
|
|
|
191
213
|
class DeleteVolumeSnapshot(command.Command):
|
|
192
214
|
_description = _("Delete volume snapshot(s)")
|
|
193
215
|
|
|
194
|
-
def get_parser(self, prog_name):
|
|
216
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
195
217
|
parser = super().get_parser(prog_name)
|
|
196
218
|
parser.add_argument(
|
|
197
219
|
"snapshots",
|
|
@@ -217,8 +239,10 @@ class DeleteVolumeSnapshot(command.Command):
|
|
|
217
239
|
)
|
|
218
240
|
return parser
|
|
219
241
|
|
|
220
|
-
def take_action(self, parsed_args):
|
|
221
|
-
volume_client =
|
|
242
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
243
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
244
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
245
|
+
)
|
|
222
246
|
result = 0
|
|
223
247
|
|
|
224
248
|
if parsed_args.remote:
|
|
@@ -262,7 +286,7 @@ class DeleteVolumeSnapshot(command.Command):
|
|
|
262
286
|
class ListVolumeSnapshot(command.Lister):
|
|
263
287
|
_description = _("List volume snapshots")
|
|
264
288
|
|
|
265
|
-
def get_parser(self, prog_name):
|
|
289
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
266
290
|
parser = super().get_parser(prog_name)
|
|
267
291
|
parser.add_argument(
|
|
268
292
|
'--all-projects',
|
|
@@ -313,8 +337,12 @@ class ListVolumeSnapshot(command.Lister):
|
|
|
313
337
|
pagination.add_marker_pagination_option_to_parser(parser)
|
|
314
338
|
return parser
|
|
315
339
|
|
|
316
|
-
def take_action(
|
|
317
|
-
|
|
340
|
+
def take_action(
|
|
341
|
+
self, parsed_args: argparse.Namespace
|
|
342
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
343
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
344
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
345
|
+
)
|
|
318
346
|
identity_client = self.app.client_manager.identity
|
|
319
347
|
|
|
320
348
|
columns: tuple[str, ...] = (
|
|
@@ -377,6 +405,7 @@ class ListVolumeSnapshot(command.Lister):
|
|
|
377
405
|
data = volume_client.snapshots(
|
|
378
406
|
marker=parsed_args.marker,
|
|
379
407
|
limit=parsed_args.limit,
|
|
408
|
+
max_items=parsed_args.max_items,
|
|
380
409
|
all_projects=all_projects,
|
|
381
410
|
project_id=project_id,
|
|
382
411
|
name=parsed_args.name,
|
|
@@ -402,7 +431,7 @@ class ListVolumeSnapshot(command.Lister):
|
|
|
402
431
|
class SetVolumeSnapshot(command.Command):
|
|
403
432
|
_description = _("Set volume snapshot properties")
|
|
404
433
|
|
|
405
|
-
def get_parser(self, prog_name):
|
|
434
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
406
435
|
parser = super().get_parser(prog_name)
|
|
407
436
|
parser.add_argument(
|
|
408
437
|
'snapshot',
|
|
@@ -458,8 +487,10 @@ class SetVolumeSnapshot(command.Command):
|
|
|
458
487
|
)
|
|
459
488
|
return parser
|
|
460
489
|
|
|
461
|
-
def take_action(self, parsed_args):
|
|
462
|
-
volume_client =
|
|
490
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
491
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
492
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
493
|
+
)
|
|
463
494
|
|
|
464
495
|
snapshot = volume_client.find_snapshot(
|
|
465
496
|
parsed_args.snapshot, ignore_missing=False
|
|
@@ -517,7 +548,7 @@ class SetVolumeSnapshot(command.Command):
|
|
|
517
548
|
class ShowVolumeSnapshot(command.ShowOne):
|
|
518
549
|
_description = _("Display volume snapshot details")
|
|
519
550
|
|
|
520
|
-
def get_parser(self, prog_name):
|
|
551
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
521
552
|
parser = super().get_parser(prog_name)
|
|
522
553
|
parser.add_argument(
|
|
523
554
|
"snapshot",
|
|
@@ -526,21 +557,26 @@ class ShowVolumeSnapshot(command.ShowOne):
|
|
|
526
557
|
)
|
|
527
558
|
return parser
|
|
528
559
|
|
|
529
|
-
def take_action(
|
|
530
|
-
|
|
560
|
+
def take_action(
|
|
561
|
+
self, parsed_args: argparse.Namespace
|
|
562
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
563
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
564
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
565
|
+
)
|
|
531
566
|
|
|
532
567
|
snapshot = volume_client.find_snapshot(
|
|
533
568
|
parsed_args.snapshot, ignore_missing=False
|
|
534
569
|
)
|
|
535
570
|
|
|
536
571
|
data = _format_snapshot(snapshot)
|
|
537
|
-
|
|
572
|
+
col_headers, col_data = zip(*sorted(data.items()))
|
|
573
|
+
return col_headers, col_data
|
|
538
574
|
|
|
539
575
|
|
|
540
576
|
class UnsetVolumeSnapshot(command.Command):
|
|
541
577
|
_description = _("Unset volume snapshot properties")
|
|
542
578
|
|
|
543
|
-
def get_parser(self, prog_name):
|
|
579
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
544
580
|
parser = super().get_parser(prog_name)
|
|
545
581
|
parser.add_argument(
|
|
546
582
|
'snapshot',
|
|
@@ -560,8 +596,10 @@ class UnsetVolumeSnapshot(command.Command):
|
|
|
560
596
|
)
|
|
561
597
|
return parser
|
|
562
598
|
|
|
563
|
-
def take_action(self, parsed_args):
|
|
564
|
-
volume_client =
|
|
599
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
600
|
+
volume_client = sdk_utils.ensure_service_version(
|
|
601
|
+
self.app.client_manager.sdk_connection.volume, '3'
|
|
602
|
+
)
|
|
565
603
|
|
|
566
604
|
snapshot = volume_client.find_snapshot(
|
|
567
605
|
parsed_args.snapshot, ignore_missing=False
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
"""Volume v3 transfer action implementations"""
|
|
16
16
|
|
|
17
|
+
import argparse
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
17
19
|
import logging
|
|
20
|
+
from typing import Any
|
|
18
21
|
|
|
19
22
|
from cinderclient import api_versions
|
|
20
23
|
from osc_lib import exceptions
|
|
@@ -30,7 +33,7 @@ LOG = logging.getLogger(__name__)
|
|
|
30
33
|
class AcceptTransferRequest(command.ShowOne):
|
|
31
34
|
_description = _("Accept volume transfer request.")
|
|
32
35
|
|
|
33
|
-
def get_parser(self, prog_name):
|
|
36
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
34
37
|
parser = super().get_parser(prog_name)
|
|
35
38
|
parser.add_argument(
|
|
36
39
|
'transfer_request',
|
|
@@ -45,7 +48,9 @@ class AcceptTransferRequest(command.ShowOne):
|
|
|
45
48
|
)
|
|
46
49
|
return parser
|
|
47
50
|
|
|
48
|
-
def take_action(
|
|
51
|
+
def take_action(
|
|
52
|
+
self, parsed_args: argparse.Namespace
|
|
53
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
49
54
|
volume_client = self.app.client_manager.volume
|
|
50
55
|
|
|
51
56
|
try:
|
|
@@ -63,13 +68,14 @@ class AcceptTransferRequest(command.ShowOne):
|
|
|
63
68
|
)
|
|
64
69
|
transfer_accept._info.pop("links", None)
|
|
65
70
|
|
|
66
|
-
|
|
71
|
+
col_headers, col_data = zip(*sorted(transfer_accept._info.items()))
|
|
72
|
+
return col_headers, col_data
|
|
67
73
|
|
|
68
74
|
|
|
69
75
|
class CreateTransferRequest(command.ShowOne):
|
|
70
76
|
_description = _("Create volume transfer request.")
|
|
71
77
|
|
|
72
|
-
def get_parser(self, prog_name):
|
|
78
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
73
79
|
parser = super().get_parser(prog_name)
|
|
74
80
|
parser.add_argument(
|
|
75
81
|
'--name',
|
|
@@ -102,7 +108,9 @@ class CreateTransferRequest(command.ShowOne):
|
|
|
102
108
|
)
|
|
103
109
|
return parser
|
|
104
110
|
|
|
105
|
-
def take_action(
|
|
111
|
+
def take_action(
|
|
112
|
+
self, parsed_args: argparse.Namespace
|
|
113
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
106
114
|
volume_client = self.app.client_manager.volume
|
|
107
115
|
|
|
108
116
|
kwargs = {}
|
|
@@ -130,13 +138,16 @@ class CreateTransferRequest(command.ShowOne):
|
|
|
130
138
|
)
|
|
131
139
|
volume_transfer_request._info.pop("links", None)
|
|
132
140
|
|
|
133
|
-
|
|
141
|
+
col_headers, col_data = zip(
|
|
142
|
+
*sorted(volume_transfer_request._info.items())
|
|
143
|
+
)
|
|
144
|
+
return col_headers, col_data
|
|
134
145
|
|
|
135
146
|
|
|
136
147
|
class DeleteTransferRequest(command.Command):
|
|
137
148
|
_description = _("Delete volume transfer request(s).")
|
|
138
149
|
|
|
139
|
-
def get_parser(self, prog_name):
|
|
150
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
140
151
|
parser = super().get_parser(prog_name)
|
|
141
152
|
parser.add_argument(
|
|
142
153
|
'transfer_request',
|
|
@@ -146,7 +157,7 @@ class DeleteTransferRequest(command.Command):
|
|
|
146
157
|
)
|
|
147
158
|
return parser
|
|
148
159
|
|
|
149
|
-
def take_action(self, parsed_args):
|
|
160
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
150
161
|
volume_client = self.app.client_manager.volume
|
|
151
162
|
result = 0
|
|
152
163
|
|
|
@@ -179,7 +190,7 @@ class DeleteTransferRequest(command.Command):
|
|
|
179
190
|
class ListTransferRequest(command.Lister):
|
|
180
191
|
_description = _("Lists all volume transfer requests.")
|
|
181
192
|
|
|
182
|
-
def get_parser(self, prog_name):
|
|
193
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
183
194
|
parser = super().get_parser(prog_name)
|
|
184
195
|
parser.add_argument(
|
|
185
196
|
'--all-projects',
|
|
@@ -190,7 +201,9 @@ class ListTransferRequest(command.Lister):
|
|
|
190
201
|
)
|
|
191
202
|
return parser
|
|
192
203
|
|
|
193
|
-
def take_action(
|
|
204
|
+
def take_action(
|
|
205
|
+
self, parsed_args: argparse.Namespace
|
|
206
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
194
207
|
columns = ['ID', 'Name', 'Volume ID']
|
|
195
208
|
column_headers = ['ID', 'Name', 'Volume']
|
|
196
209
|
|
|
@@ -213,7 +226,7 @@ class ListTransferRequest(command.Lister):
|
|
|
213
226
|
class ShowTransferRequest(command.ShowOne):
|
|
214
227
|
_description = _("Show volume transfer request details.")
|
|
215
228
|
|
|
216
|
-
def get_parser(self, prog_name):
|
|
229
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
217
230
|
parser = super().get_parser(prog_name)
|
|
218
231
|
parser.add_argument(
|
|
219
232
|
'transfer_request',
|
|
@@ -222,7 +235,9 @@ class ShowTransferRequest(command.ShowOne):
|
|
|
222
235
|
)
|
|
223
236
|
return parser
|
|
224
237
|
|
|
225
|
-
def take_action(
|
|
238
|
+
def take_action(
|
|
239
|
+
self, parsed_args: argparse.Namespace
|
|
240
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
226
241
|
volume_client = self.app.client_manager.volume
|
|
227
242
|
volume_transfer_request = utils.find_resource(
|
|
228
243
|
volume_client.transfers,
|
|
@@ -230,4 +245,7 @@ class ShowTransferRequest(command.ShowOne):
|
|
|
230
245
|
)
|
|
231
246
|
volume_transfer_request._info.pop("links", None)
|
|
232
247
|
|
|
233
|
-
|
|
248
|
+
col_headers, col_data = zip(
|
|
249
|
+
*sorted(volume_transfer_request._info.items())
|
|
250
|
+
)
|
|
251
|
+
return col_headers, col_data
|
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
"""Volume v3 Type action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, MutableMapping, Sequence
|
|
16
18
|
import functools
|
|
17
19
|
import logging
|
|
18
|
-
|
|
20
|
+
from typing import Any
|
|
19
21
|
|
|
20
22
|
from cinderclient import api_versions
|
|
21
23
|
from cliff import columns as cliff_columns
|
|
@@ -32,7 +34,7 @@ from openstackclient.identity import common as identity_common
|
|
|
32
34
|
LOG = logging.getLogger(__name__)
|
|
33
35
|
|
|
34
36
|
|
|
35
|
-
class EncryptionInfoColumn(cliff_columns.FormattableColumn[
|
|
37
|
+
class EncryptionInfoColumn(cliff_columns.FormattableColumn[Any]):
|
|
36
38
|
"""Formattable column for encryption info column.
|
|
37
39
|
|
|
38
40
|
Unlike the parent FormattableColumn class, the initializer of the
|
|
@@ -43,26 +45,30 @@ class EncryptionInfoColumn(cliff_columns.FormattableColumn[ty.Any]):
|
|
|
43
45
|
``functools.partial(EncryptionInfoColumn encryption_data)``.
|
|
44
46
|
"""
|
|
45
47
|
|
|
46
|
-
def __init__(
|
|
48
|
+
def __init__(
|
|
49
|
+
self, value: Any, encryption_data: dict[str, Any] | None = None
|
|
50
|
+
) -> None:
|
|
47
51
|
super().__init__(value)
|
|
48
52
|
self._encryption_data = encryption_data or {}
|
|
49
53
|
|
|
50
|
-
def _get_encryption_info(self):
|
|
54
|
+
def _get_encryption_info(self) -> Any:
|
|
51
55
|
type_id = self._value
|
|
52
56
|
return self._encryption_data.get(type_id)
|
|
53
57
|
|
|
54
|
-
def human_readable(self):
|
|
58
|
+
def human_readable(self) -> str:
|
|
55
59
|
encryption_info = self._get_encryption_info()
|
|
56
60
|
if encryption_info:
|
|
57
61
|
return utils.format_dict(encryption_info)
|
|
58
62
|
else:
|
|
59
63
|
return '-'
|
|
60
64
|
|
|
61
|
-
def machine_readable(self):
|
|
65
|
+
def machine_readable(self) -> Any:
|
|
62
66
|
return self._get_encryption_info()
|
|
63
67
|
|
|
64
68
|
|
|
65
|
-
def _create_encryption_type(
|
|
69
|
+
def _create_encryption_type(
|
|
70
|
+
volume_client: Any, volume_type: Any, parsed_args: argparse.Namespace
|
|
71
|
+
) -> Any:
|
|
66
72
|
if not parsed_args.encryption_provider:
|
|
67
73
|
msg = _(
|
|
68
74
|
"'--encryption-provider' should be specified while "
|
|
@@ -85,7 +91,9 @@ def _create_encryption_type(volume_client, volume_type, parsed_args):
|
|
|
85
91
|
return encryption
|
|
86
92
|
|
|
87
93
|
|
|
88
|
-
def _set_encryption_type(
|
|
94
|
+
def _set_encryption_type(
|
|
95
|
+
volume_client: Any, volume_type: Any, parsed_args: argparse.Namespace
|
|
96
|
+
) -> None:
|
|
89
97
|
# update the existing encryption type
|
|
90
98
|
body = {}
|
|
91
99
|
for attr in ['provider', 'cipher', 'key_size', 'control_location']:
|
|
@@ -109,7 +117,7 @@ def _set_encryption_type(volume_client, volume_type, parsed_args):
|
|
|
109
117
|
class CreateVolumeType(command.ShowOne):
|
|
110
118
|
_description = _("Create new volume type")
|
|
111
119
|
|
|
112
|
-
def get_parser(self, prog_name):
|
|
120
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
113
121
|
parser = super().get_parser(prog_name)
|
|
114
122
|
parser.add_argument(
|
|
115
123
|
"name",
|
|
@@ -243,7 +251,9 @@ class CreateVolumeType(command.ShowOne):
|
|
|
243
251
|
)
|
|
244
252
|
return parser
|
|
245
253
|
|
|
246
|
-
def take_action(
|
|
254
|
+
def take_action(
|
|
255
|
+
self, parsed_args: argparse.Namespace
|
|
256
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
247
257
|
identity_client = self.app.client_manager.identity
|
|
248
258
|
volume_client = self.app.client_manager.volume
|
|
249
259
|
|
|
@@ -325,13 +335,14 @@ class CreateVolumeType(command.ShowOne):
|
|
|
325
335
|
|
|
326
336
|
volume_type._info.pop("os-volume-type-access:is_public", None)
|
|
327
337
|
|
|
328
|
-
|
|
338
|
+
col_headers, col_data = zip(*sorted(volume_type._info.items()))
|
|
339
|
+
return col_headers, col_data
|
|
329
340
|
|
|
330
341
|
|
|
331
342
|
class DeleteVolumeType(command.Command):
|
|
332
343
|
_description = _("Delete volume type(s)")
|
|
333
344
|
|
|
334
|
-
def get_parser(self, prog_name):
|
|
345
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
335
346
|
parser = super().get_parser(prog_name)
|
|
336
347
|
parser.add_argument(
|
|
337
348
|
"volume_types",
|
|
@@ -341,7 +352,7 @@ class DeleteVolumeType(command.Command):
|
|
|
341
352
|
)
|
|
342
353
|
return parser
|
|
343
354
|
|
|
344
|
-
def take_action(self, parsed_args):
|
|
355
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
345
356
|
volume_client = self.app.client_manager.volume
|
|
346
357
|
result = 0
|
|
347
358
|
|
|
@@ -373,7 +384,7 @@ class DeleteVolumeType(command.Command):
|
|
|
373
384
|
class ListVolumeType(command.Lister):
|
|
374
385
|
_description = _("List volume types")
|
|
375
386
|
|
|
376
|
-
def get_parser(self, prog_name):
|
|
387
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
377
388
|
parser = super().get_parser(prog_name)
|
|
378
389
|
parser.add_argument(
|
|
379
390
|
'--long',
|
|
@@ -467,7 +478,9 @@ class ListVolumeType(command.Lister):
|
|
|
467
478
|
)
|
|
468
479
|
return parser
|
|
469
480
|
|
|
470
|
-
def take_action(
|
|
481
|
+
def take_action(
|
|
482
|
+
self, parsed_args: argparse.Namespace
|
|
483
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
471
484
|
volume_client = self.app.client_manager.volume
|
|
472
485
|
|
|
473
486
|
if parsed_args.long:
|
|
@@ -522,7 +535,9 @@ class ListVolumeType(command.Lister):
|
|
|
522
535
|
is_public=parsed_args.is_public,
|
|
523
536
|
)
|
|
524
537
|
|
|
525
|
-
formatters = {
|
|
538
|
+
formatters: MutableMapping[str, Any] = {
|
|
539
|
+
'Extra Specs': format_columns.DictColumn
|
|
540
|
+
}
|
|
526
541
|
|
|
527
542
|
if parsed_args.encryption_type:
|
|
528
543
|
encryption = {}
|
|
@@ -549,7 +564,7 @@ class ListVolumeType(command.Lister):
|
|
|
549
564
|
_EncryptionInfoColumn = functools.partial(
|
|
550
565
|
EncryptionInfoColumn, encryption_data=encryption
|
|
551
566
|
)
|
|
552
|
-
formatters['id'] = _EncryptionInfoColumn
|
|
567
|
+
formatters['id'] = _EncryptionInfoColumn
|
|
553
568
|
|
|
554
569
|
return (
|
|
555
570
|
column_headers,
|
|
@@ -567,7 +582,7 @@ class ListVolumeType(command.Lister):
|
|
|
567
582
|
class SetVolumeType(command.Command):
|
|
568
583
|
_description = _("Set volume type properties")
|
|
569
584
|
|
|
570
|
-
def get_parser(self, prog_name):
|
|
585
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
571
586
|
parser = super().get_parser(prog_name)
|
|
572
587
|
parser.add_argument(
|
|
573
588
|
'volume_type',
|
|
@@ -706,7 +721,7 @@ class SetVolumeType(command.Command):
|
|
|
706
721
|
)
|
|
707
722
|
return parser
|
|
708
723
|
|
|
709
|
-
def take_action(self, parsed_args):
|
|
724
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
710
725
|
volume_client = self.app.client_manager.volume
|
|
711
726
|
identity_client = self.app.client_manager.identity
|
|
712
727
|
|
|
@@ -802,7 +817,7 @@ class SetVolumeType(command.Command):
|
|
|
802
817
|
class ShowVolumeType(command.ShowOne):
|
|
803
818
|
_description = _("Display volume type details")
|
|
804
819
|
|
|
805
|
-
def get_parser(self, prog_name):
|
|
820
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
806
821
|
parser = super().get_parser(prog_name)
|
|
807
822
|
parser.add_argument(
|
|
808
823
|
"volume_type",
|
|
@@ -819,7 +834,9 @@ class ShowVolumeType(command.ShowOne):
|
|
|
819
834
|
)
|
|
820
835
|
return parser
|
|
821
836
|
|
|
822
|
-
def take_action(
|
|
837
|
+
def take_action(
|
|
838
|
+
self, parsed_args: argparse.Namespace
|
|
839
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
823
840
|
volume_client = self.app.client_manager.volume
|
|
824
841
|
volume_type = utils.find_resource(
|
|
825
842
|
volume_client.volume_types, parsed_args.volume_type
|
|
@@ -867,13 +884,14 @@ class ShowVolumeType(command.ShowOne):
|
|
|
867
884
|
e,
|
|
868
885
|
)
|
|
869
886
|
volume_type._info.pop("os-volume-type-access:is_public", None)
|
|
870
|
-
|
|
887
|
+
col_headers, col_data = zip(*sorted(volume_type._info.items()))
|
|
888
|
+
return col_headers, col_data
|
|
871
889
|
|
|
872
890
|
|
|
873
891
|
class UnsetVolumeType(command.Command):
|
|
874
892
|
_description = _("Unset volume type properties")
|
|
875
893
|
|
|
876
|
-
def get_parser(self, prog_name):
|
|
894
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
877
895
|
parser = super().get_parser(prog_name)
|
|
878
896
|
parser.add_argument(
|
|
879
897
|
'volume_type',
|
|
@@ -908,7 +926,7 @@ class UnsetVolumeType(command.Command):
|
|
|
908
926
|
)
|
|
909
927
|
return parser
|
|
910
928
|
|
|
911
|
-
def take_action(self, parsed_args):
|
|
929
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
912
930
|
volume_client = self.app.client_manager.volume
|
|
913
931
|
identity_client = self.app.client_manager.identity
|
|
914
932
|
|