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
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Compute v2 Server action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import importlib
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
20
23
|
from osc_lib import exceptions
|
|
21
24
|
from osc_lib import utils
|
|
@@ -32,7 +35,7 @@ class CreateServerBackup(command.ShowOne):
|
|
|
32
35
|
"2": "openstackclient.image.v2.image",
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
def get_parser(self, prog_name):
|
|
38
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
36
39
|
parser = super().get_parser(prog_name)
|
|
37
40
|
parser.add_argument(
|
|
38
41
|
'server',
|
|
@@ -65,8 +68,10 @@ class CreateServerBackup(command.ShowOne):
|
|
|
65
68
|
)
|
|
66
69
|
return parser
|
|
67
70
|
|
|
68
|
-
def take_action(
|
|
69
|
-
|
|
71
|
+
def take_action(
|
|
72
|
+
self, parsed_args: argparse.Namespace
|
|
73
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
74
|
+
def _show_progress(progress: int | None) -> None:
|
|
70
75
|
if progress:
|
|
71
76
|
self.app.stderr.write(f'\rProgress: {progress}')
|
|
72
77
|
self.app.stderr.flush()
|
|
@@ -124,4 +129,5 @@ class CreateServerBackup(command.ShowOne):
|
|
|
124
129
|
]
|
|
125
130
|
)
|
|
126
131
|
info = image_module._format_image(image)
|
|
127
|
-
|
|
132
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
133
|
+
return col_headers, col_data
|
|
@@ -15,11 +15,15 @@
|
|
|
15
15
|
|
|
16
16
|
"""Compute v2 Server operation event implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
import uuid
|
|
20
23
|
|
|
21
24
|
from cliff import columns
|
|
22
25
|
import iso8601
|
|
26
|
+
from openstack.compute.v2 import server_action as _server_action
|
|
23
27
|
from openstack import exceptions as sdk_exceptions
|
|
24
28
|
from openstack import utils as sdk_utils
|
|
25
29
|
from osc_lib import exceptions
|
|
@@ -34,7 +38,7 @@ LOG = logging.getLogger(__name__)
|
|
|
34
38
|
|
|
35
39
|
# TODO(stephenfin): Move this to osc_lib since it's useful elsewhere (e.g.
|
|
36
40
|
# glance)
|
|
37
|
-
def is_uuid_like(value) -> bool:
|
|
41
|
+
def is_uuid_like(value: str) -> bool:
|
|
38
42
|
"""Returns validation of a value as a UUID.
|
|
39
43
|
|
|
40
44
|
:param val: Value to verify
|
|
@@ -57,14 +61,15 @@ def is_uuid_like(value) -> bool:
|
|
|
57
61
|
return False
|
|
58
62
|
|
|
59
63
|
|
|
60
|
-
class ServerActionEventColumn(columns.FormattableColumn):
|
|
64
|
+
class ServerActionEventColumn(columns.FormattableColumn[Any]):
|
|
61
65
|
"""Custom formatter for server action events.
|
|
62
66
|
|
|
63
67
|
Format the :class:`~openstack.compute.v2.server_action.ServerActionEvent`
|
|
64
68
|
objects as we'd like.
|
|
65
69
|
"""
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
@staticmethod
|
|
72
|
+
def _format_event(event: _server_action.ServerAction) -> dict[str, Any]:
|
|
68
73
|
hidden_columns = ['id', 'name', 'location']
|
|
69
74
|
_, columns = utils.get_osc_show_columns_for_sdk_resource(
|
|
70
75
|
event, {}, hidden_columns
|
|
@@ -72,17 +77,19 @@ class ServerActionEventColumn(columns.FormattableColumn):
|
|
|
72
77
|
data = utils.get_item_properties(event, columns)
|
|
73
78
|
return dict(zip(columns, data))
|
|
74
79
|
|
|
75
|
-
def human_readable(self):
|
|
80
|
+
def human_readable(self) -> str:
|
|
76
81
|
events = [self._format_event(event) for event in self._value]
|
|
77
|
-
return utils.format_list_of_dicts(events)
|
|
82
|
+
return utils.format_list_of_dicts(events) or ""
|
|
78
83
|
|
|
79
|
-
def machine_readable(self):
|
|
84
|
+
def machine_readable(self) -> Any:
|
|
80
85
|
events = [self._format_event(event) for event in self._value]
|
|
81
86
|
return events
|
|
82
87
|
|
|
83
88
|
|
|
84
|
-
def _get_server_event_columns(
|
|
85
|
-
|
|
89
|
+
def _get_server_event_columns(
|
|
90
|
+
item: Any, client: Any
|
|
91
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
92
|
+
hidden_columns = ['name', 'server_id', 'links', 'location']
|
|
86
93
|
|
|
87
94
|
if not sdk_utils.supports_microversion(client, '2.58'):
|
|
88
95
|
# updated_at was introduced in 2.58
|
|
@@ -100,7 +107,7 @@ class ListServerEvent(command.Lister):
|
|
|
100
107
|
deleted server, specified by ID only.
|
|
101
108
|
"""
|
|
102
109
|
|
|
103
|
-
def get_parser(self, prog_name):
|
|
110
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
104
111
|
parser = super().get_parser(prog_name)
|
|
105
112
|
parser.add_argument(
|
|
106
113
|
'server',
|
|
@@ -138,7 +145,9 @@ class ListServerEvent(command.Lister):
|
|
|
138
145
|
pagination.add_marker_pagination_option_to_parser(parser)
|
|
139
146
|
return parser
|
|
140
147
|
|
|
141
|
-
def take_action(
|
|
148
|
+
def take_action(
|
|
149
|
+
self, parsed_args: argparse.Namespace
|
|
150
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
142
151
|
compute_client = self.app.client_manager.compute
|
|
143
152
|
|
|
144
153
|
kwargs = {}
|
|
@@ -164,6 +173,9 @@ class ListServerEvent(command.Lister):
|
|
|
164
173
|
kwargs['limit'] = parsed_args.limit
|
|
165
174
|
kwargs['paginated'] = False
|
|
166
175
|
|
|
176
|
+
if parsed_args.max_items is not None:
|
|
177
|
+
kwargs['max_items'] = parsed_args.max_items
|
|
178
|
+
|
|
167
179
|
if parsed_args.changes_since:
|
|
168
180
|
if not sdk_utils.supports_microversion(compute_client, '2.58'):
|
|
169
181
|
msg = _(
|
|
@@ -251,7 +263,7 @@ class ShowServerEvent(command.ShowOne):
|
|
|
251
263
|
non-admin users.
|
|
252
264
|
"""
|
|
253
265
|
|
|
254
|
-
def get_parser(self, prog_name):
|
|
266
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
255
267
|
parser = super().get_parser(prog_name)
|
|
256
268
|
parser.add_argument(
|
|
257
269
|
'server',
|
|
@@ -265,7 +277,9 @@ class ShowServerEvent(command.ShowOne):
|
|
|
265
277
|
)
|
|
266
278
|
return parser
|
|
267
279
|
|
|
268
|
-
def take_action(
|
|
280
|
+
def take_action(
|
|
281
|
+
self, parsed_args: argparse.Namespace
|
|
282
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
269
283
|
compute_client = self.app.client_manager.compute
|
|
270
284
|
|
|
271
285
|
try:
|
|
@@ -286,6 +300,8 @@ class ShowServerEvent(command.ShowOne):
|
|
|
286
300
|
parsed_args.request_id,
|
|
287
301
|
server_id,
|
|
288
302
|
)
|
|
303
|
+
# this is a bug is SDK
|
|
304
|
+
assert server_action is not None
|
|
289
305
|
|
|
290
306
|
column_headers, columns = _get_server_event_columns(
|
|
291
307
|
server_action,
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Compute v2 Server Group action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
19
|
-
|
|
21
|
+
from typing import Any
|
|
20
22
|
|
|
21
23
|
from cliff import columns
|
|
22
24
|
from openstack import utils as sdk_utils
|
|
@@ -32,14 +34,16 @@ from openstackclient.i18n import _
|
|
|
32
34
|
LOG = logging.getLogger(__name__)
|
|
33
35
|
|
|
34
36
|
|
|
35
|
-
_formatters: dict[str, type[columns.FormattableColumn[
|
|
37
|
+
_formatters: dict[str, type[columns.FormattableColumn[Any]]] = {
|
|
36
38
|
'member_ids': format_columns.ListColumn,
|
|
37
39
|
'policies': format_columns.ListColumn,
|
|
38
40
|
'rules': format_columns.DictColumn,
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
|
|
42
|
-
def _get_server_group_columns(
|
|
44
|
+
def _get_server_group_columns(
|
|
45
|
+
item: Any, client: Any
|
|
46
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
43
47
|
column_map = {'member_ids': 'members'}
|
|
44
48
|
hidden_columns = ['metadata', 'location']
|
|
45
49
|
|
|
@@ -57,7 +61,7 @@ def _get_server_group_columns(item, client):
|
|
|
57
61
|
class CreateServerGroup(command.ShowOne):
|
|
58
62
|
_description = _("Create a new server group.")
|
|
59
63
|
|
|
60
|
-
def get_parser(self, prog_name):
|
|
64
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
61
65
|
parser = super().get_parser(prog_name)
|
|
62
66
|
parser.add_argument(
|
|
63
67
|
'name',
|
|
@@ -94,7 +98,9 @@ class CreateServerGroup(command.ShowOne):
|
|
|
94
98
|
)
|
|
95
99
|
return parser
|
|
96
100
|
|
|
97
|
-
def take_action(
|
|
101
|
+
def take_action(
|
|
102
|
+
self, parsed_args: argparse.Namespace
|
|
103
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
98
104
|
compute_client = self.app.client_manager.compute
|
|
99
105
|
|
|
100
106
|
if parsed_args.policy in ('soft-affinity', 'soft-anti-affinity'):
|
|
@@ -144,7 +150,7 @@ class CreateServerGroup(command.ShowOne):
|
|
|
144
150
|
class DeleteServerGroup(command.Command):
|
|
145
151
|
_description = _("Delete existing server group(s).")
|
|
146
152
|
|
|
147
|
-
def get_parser(self, prog_name):
|
|
153
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
148
154
|
parser = super().get_parser(prog_name)
|
|
149
155
|
parser.add_argument(
|
|
150
156
|
'server_group',
|
|
@@ -154,7 +160,7 @@ class DeleteServerGroup(command.Command):
|
|
|
154
160
|
)
|
|
155
161
|
return parser
|
|
156
162
|
|
|
157
|
-
def take_action(self, parsed_args):
|
|
163
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
158
164
|
compute_client = self.app.client_manager.compute
|
|
159
165
|
result = 0
|
|
160
166
|
for group in parsed_args.server_group:
|
|
@@ -179,7 +185,7 @@ class DeleteServerGroup(command.Command):
|
|
|
179
185
|
class ListServerGroup(command.Lister):
|
|
180
186
|
_description = _("List all server groups.")
|
|
181
187
|
|
|
182
|
-
def get_parser(self, prog_name):
|
|
188
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
183
189
|
parser = super().get_parser(prog_name)
|
|
184
190
|
parser.add_argument(
|
|
185
191
|
'--all-projects',
|
|
@@ -198,7 +204,9 @@ class ListServerGroup(command.Lister):
|
|
|
198
204
|
pagination.add_offset_pagination_option_to_parser(parser)
|
|
199
205
|
return parser
|
|
200
206
|
|
|
201
|
-
def take_action(
|
|
207
|
+
def take_action(
|
|
208
|
+
self, parsed_args: argparse.Namespace
|
|
209
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
202
210
|
compute_client = self.app.client_manager.compute
|
|
203
211
|
|
|
204
212
|
kwargs = {}
|
|
@@ -211,6 +219,8 @@ class ListServerGroup(command.Lister):
|
|
|
211
219
|
|
|
212
220
|
if parsed_args.limit:
|
|
213
221
|
kwargs['limit'] = parsed_args.limit
|
|
222
|
+
if parsed_args.max_items is not None:
|
|
223
|
+
kwargs['max_items'] = parsed_args.max_items
|
|
214
224
|
|
|
215
225
|
data = compute_client.server_groups(**kwargs)
|
|
216
226
|
|
|
@@ -256,7 +266,7 @@ class ListServerGroup(command.Lister):
|
|
|
256
266
|
class ShowServerGroup(command.ShowOne):
|
|
257
267
|
_description = _("Display server group details.")
|
|
258
268
|
|
|
259
|
-
def get_parser(self, prog_name):
|
|
269
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
260
270
|
parser = super().get_parser(prog_name)
|
|
261
271
|
parser.add_argument(
|
|
262
272
|
'server_group',
|
|
@@ -265,7 +275,9 @@ class ShowServerGroup(command.ShowOne):
|
|
|
265
275
|
)
|
|
266
276
|
return parser
|
|
267
277
|
|
|
268
|
-
def take_action(
|
|
278
|
+
def take_action(
|
|
279
|
+
self, parsed_args: argparse.Namespace
|
|
280
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
269
281
|
compute_client = self.app.client_manager.compute
|
|
270
282
|
group = compute_client.find_server_group(
|
|
271
283
|
parsed_args.server_group, ignore_missing=False
|
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
"""Compute v2 Server action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import importlib
|
|
19
21
|
import logging
|
|
22
|
+
from typing import Any
|
|
20
23
|
|
|
21
24
|
from osc_lib.cli import parseractions
|
|
22
25
|
from osc_lib import exceptions
|
|
@@ -37,7 +40,7 @@ class CreateServerImage(command.ShowOne):
|
|
|
37
40
|
"2": "openstackclient.image.v2.image",
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
def get_parser(self, prog_name):
|
|
43
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
41
44
|
parser = super().get_parser(prog_name)
|
|
42
45
|
parser.add_argument(
|
|
43
46
|
'server',
|
|
@@ -66,8 +69,10 @@ class CreateServerImage(command.ShowOne):
|
|
|
66
69
|
)
|
|
67
70
|
return parser
|
|
68
71
|
|
|
69
|
-
def take_action(
|
|
70
|
-
|
|
72
|
+
def take_action(
|
|
73
|
+
self, parsed_args: argparse.Namespace
|
|
74
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
75
|
+
def _show_progress(progress: int | None) -> None:
|
|
71
76
|
if progress:
|
|
72
77
|
self.app.stdout.write(f'\rProgress: {progress}')
|
|
73
78
|
self.app.stdout.flush()
|
|
@@ -85,11 +90,16 @@ class CreateServerImage(command.ShowOne):
|
|
|
85
90
|
else:
|
|
86
91
|
image_name = server.name
|
|
87
92
|
|
|
88
|
-
|
|
93
|
+
image = compute_client.create_server_image(
|
|
89
94
|
server.id,
|
|
90
95
|
image_name,
|
|
91
96
|
parsed_args.properties,
|
|
92
|
-
)
|
|
97
|
+
)
|
|
98
|
+
if not image:
|
|
99
|
+
msg = _('Error creating server image: %s')
|
|
100
|
+
raise exceptions.CommandError(msg, parsed_args.server)
|
|
101
|
+
|
|
102
|
+
image_id = image.id
|
|
93
103
|
|
|
94
104
|
if parsed_args.wait:
|
|
95
105
|
if utils.wait_for_status(
|
|
@@ -99,10 +109,8 @@ class CreateServerImage(command.ShowOne):
|
|
|
99
109
|
):
|
|
100
110
|
self.app.stdout.write('\n')
|
|
101
111
|
else:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
)
|
|
105
|
-
raise exceptions.CommandError
|
|
112
|
+
msg = _('Error creating server image: %s')
|
|
113
|
+
raise exceptions.CommandError(msg, parsed_args.server)
|
|
106
114
|
|
|
107
115
|
image = image_client.find_image(image_id, ignore_missing=False)
|
|
108
116
|
|
|
@@ -119,4 +127,5 @@ class CreateServerImage(command.ShowOne):
|
|
|
119
127
|
)
|
|
120
128
|
info = image_module._format_image(image)
|
|
121
129
|
|
|
122
|
-
|
|
130
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
131
|
+
return col_headers, col_data
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
"""Compute v2 Server Migration action implementations"""
|
|
14
14
|
|
|
15
|
+
import argparse
|
|
16
|
+
from collections.abc import Iterable, Sequence
|
|
17
|
+
from typing import Any
|
|
15
18
|
import uuid
|
|
16
19
|
|
|
17
20
|
from openstack import utils as sdk_utils
|
|
@@ -27,7 +30,7 @@ from openstackclient.identity import common as identity_common
|
|
|
27
30
|
class ListMigration(command.Lister):
|
|
28
31
|
_description = _("""List server migrations""")
|
|
29
32
|
|
|
30
|
-
def get_parser(self, prog_name):
|
|
33
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
31
34
|
parser = super().get_parser(prog_name)
|
|
32
35
|
parser.add_argument(
|
|
33
36
|
'--server',
|
|
@@ -98,7 +101,12 @@ class ListMigration(command.Lister):
|
|
|
98
101
|
identity_common.add_user_domain_option_to_parser(parser)
|
|
99
102
|
return parser
|
|
100
103
|
|
|
101
|
-
def print_migrations(
|
|
104
|
+
def print_migrations(
|
|
105
|
+
self,
|
|
106
|
+
parsed_args: argparse.Namespace,
|
|
107
|
+
compute_client: Any,
|
|
108
|
+
migrations: Any,
|
|
109
|
+
) -> tuple[list[str], Iterable[tuple[Any, ...]]]:
|
|
102
110
|
column_headers = [
|
|
103
111
|
'Source Node',
|
|
104
112
|
'Dest Node',
|
|
@@ -153,7 +161,9 @@ class ListMigration(command.Lister):
|
|
|
153
161
|
(utils.get_item_properties(mig, columns) for mig in migrations),
|
|
154
162
|
)
|
|
155
163
|
|
|
156
|
-
def take_action(
|
|
164
|
+
def take_action(
|
|
165
|
+
self, parsed_args: argparse.Namespace
|
|
166
|
+
) -> tuple[list[str], Iterable[tuple[Any, ...]]]:
|
|
157
167
|
compute_client = self.app.client_manager.compute
|
|
158
168
|
identity_client = self.app.client_manager.identity
|
|
159
169
|
|
|
@@ -197,6 +207,9 @@ class ListMigration(command.Lister):
|
|
|
197
207
|
search_opts['limit'] = parsed_args.limit
|
|
198
208
|
search_opts['paginated'] = False
|
|
199
209
|
|
|
210
|
+
if parsed_args.max_items is not None:
|
|
211
|
+
search_opts['max_items'] = parsed_args.max_items
|
|
212
|
+
|
|
200
213
|
if parsed_args.changes_since:
|
|
201
214
|
if not sdk_utils.supports_microversion(compute_client, "2.59"):
|
|
202
215
|
msg = _(
|
|
@@ -248,7 +261,9 @@ class ListMigration(command.Lister):
|
|
|
248
261
|
return self.print_migrations(parsed_args, compute_client, migrations)
|
|
249
262
|
|
|
250
263
|
|
|
251
|
-
def _get_migration_by_uuid(
|
|
264
|
+
def _get_migration_by_uuid(
|
|
265
|
+
compute_client: Any, server_id: str, migration_uuid: str
|
|
266
|
+
) -> Any:
|
|
252
267
|
for migration in compute_client.server_migrations(server_id):
|
|
253
268
|
if migration.uuid == migration_uuid:
|
|
254
269
|
return migration
|
|
@@ -274,7 +289,7 @@ class ShowMigration(command.ShowOne):
|
|
|
274
289
|
these.
|
|
275
290
|
"""
|
|
276
291
|
|
|
277
|
-
def get_parser(self, prog_name):
|
|
292
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
278
293
|
parser = super().get_parser(prog_name)
|
|
279
294
|
parser.add_argument(
|
|
280
295
|
'server',
|
|
@@ -288,7 +303,9 @@ class ShowMigration(command.ShowOne):
|
|
|
288
303
|
)
|
|
289
304
|
return parser
|
|
290
305
|
|
|
291
|
-
def take_action(
|
|
306
|
+
def take_action(
|
|
307
|
+
self, parsed_args: argparse.Namespace
|
|
308
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
292
309
|
compute_client = self.app.client_manager.compute
|
|
293
310
|
|
|
294
311
|
if not sdk_utils.supports_microversion(compute_client, '2.24'):
|
|
@@ -389,7 +406,7 @@ class AbortMigration(command.Command):
|
|
|
389
406
|
This command requires ``--os-compute-api-version`` 2.24 or greater.
|
|
390
407
|
"""
|
|
391
408
|
|
|
392
|
-
def get_parser(self, prog_name):
|
|
409
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
393
410
|
parser = super().get_parser(prog_name)
|
|
394
411
|
parser.add_argument(
|
|
395
412
|
'server',
|
|
@@ -403,7 +420,7 @@ class AbortMigration(command.Command):
|
|
|
403
420
|
)
|
|
404
421
|
return parser
|
|
405
422
|
|
|
406
|
-
def take_action(self, parsed_args):
|
|
423
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
407
424
|
compute_client = self.app.client_manager.compute
|
|
408
425
|
|
|
409
426
|
if not sdk_utils.supports_microversion(compute_client, '2.24'):
|
|
@@ -456,7 +473,7 @@ class ForceCompleteMigration(command.Command):
|
|
|
456
473
|
This command requires ``--os-compute-api-version`` 2.22 or greater.
|
|
457
474
|
"""
|
|
458
475
|
|
|
459
|
-
def get_parser(self, prog_name):
|
|
476
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
460
477
|
parser = super().get_parser(prog_name)
|
|
461
478
|
parser.add_argument(
|
|
462
479
|
'server',
|
|
@@ -468,7 +485,7 @@ class ForceCompleteMigration(command.Command):
|
|
|
468
485
|
)
|
|
469
486
|
return parser
|
|
470
487
|
|
|
471
|
-
def take_action(self, parsed_args):
|
|
488
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
472
489
|
compute_client = self.app.client_manager.compute
|
|
473
490
|
|
|
474
491
|
if not sdk_utils.supports_microversion(compute_client, '2.22'):
|