python-openstackclient 9.0.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 +97 -99
- 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 +249 -169
- 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 +78 -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 +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 +38 -16
- 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 +38 -16
- openstackclient/identity/v3/mapping.py +26 -13
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +43 -23
- openstackclient/identity/v3/region.py +36 -16
- openstackclient/identity/v3/registered_limit.py +40 -16
- 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 -6
- 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 +74 -48
- 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_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_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_module.py +12 -7
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +6 -26
- 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 +11 -96
- 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_user.py +4 -4
- 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/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_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 +60 -3
- 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 +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 +57 -29
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +46 -20
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +50 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- 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 +89 -39
- openstackclient/volume/v3/volume_attachment.py +43 -21
- openstackclient/volume/v3/volume_backup.py +53 -24
- 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 +69 -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.0.0.dist-info}/METADATA +6 -6
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +271 -260
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +4 -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-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.0.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -16,8 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
"""Compute v2 Aggregate action implementations"""
|
|
18
18
|
|
|
19
|
+
import argparse
|
|
20
|
+
from collections.abc import Iterable, Sequence
|
|
19
21
|
import logging
|
|
20
|
-
|
|
22
|
+
from typing import Any
|
|
21
23
|
|
|
22
24
|
from cliff import columns
|
|
23
25
|
from openstack import utils as sdk_utils
|
|
@@ -33,7 +35,7 @@ from openstackclient.i18n import _
|
|
|
33
35
|
LOG = logging.getLogger(__name__)
|
|
34
36
|
|
|
35
37
|
|
|
36
|
-
_aggregate_formatters: dict[str, type[columns.FormattableColumn[
|
|
38
|
+
_aggregate_formatters: dict[str, type[columns.FormattableColumn[Any]]] = {
|
|
37
39
|
'Hosts': format_columns.ListColumn,
|
|
38
40
|
'Metadata': format_columns.DictColumn,
|
|
39
41
|
'hosts': format_columns.ListColumn,
|
|
@@ -41,7 +43,9 @@ _aggregate_formatters: dict[str, type[columns.FormattableColumn[ty.Any]]] = {
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
|
|
44
|
-
def _get_aggregate_columns(
|
|
46
|
+
def _get_aggregate_columns(
|
|
47
|
+
item: Any,
|
|
48
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
45
49
|
# To maintain backwards compatibility we need to rename sdk props to
|
|
46
50
|
# whatever OSC was using before
|
|
47
51
|
column_map = {
|
|
@@ -56,7 +60,7 @@ def _get_aggregate_columns(item):
|
|
|
56
60
|
class AddAggregateHost(command.ShowOne):
|
|
57
61
|
_description = _("Add host to aggregate")
|
|
58
62
|
|
|
59
|
-
def get_parser(self, prog_name):
|
|
63
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
60
64
|
parser = super().get_parser(prog_name)
|
|
61
65
|
parser.add_argument(
|
|
62
66
|
'aggregate',
|
|
@@ -68,7 +72,9 @@ class AddAggregateHost(command.ShowOne):
|
|
|
68
72
|
)
|
|
69
73
|
return parser
|
|
70
74
|
|
|
71
|
-
def take_action(
|
|
75
|
+
def take_action(
|
|
76
|
+
self, parsed_args: argparse.Namespace
|
|
77
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
72
78
|
compute_client = self.app.client_manager.compute
|
|
73
79
|
|
|
74
80
|
aggregate = compute_client.find_aggregate(
|
|
@@ -89,7 +95,7 @@ class AddAggregateHost(command.ShowOne):
|
|
|
89
95
|
class CreateAggregate(command.ShowOne):
|
|
90
96
|
_description = _("Create a new aggregate")
|
|
91
97
|
|
|
92
|
-
def get_parser(self, prog_name):
|
|
98
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
93
99
|
parser = super().get_parser(prog_name)
|
|
94
100
|
parser.add_argument(
|
|
95
101
|
"name", metavar="<name>", help=_("New aggregate name")
|
|
@@ -111,7 +117,9 @@ class CreateAggregate(command.ShowOne):
|
|
|
111
117
|
)
|
|
112
118
|
return parser
|
|
113
119
|
|
|
114
|
-
def take_action(
|
|
120
|
+
def take_action(
|
|
121
|
+
self, parsed_args: argparse.Namespace
|
|
122
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
115
123
|
compute_client = self.app.client_manager.compute
|
|
116
124
|
|
|
117
125
|
attrs = {'name': parsed_args.name}
|
|
@@ -137,7 +145,7 @@ class CreateAggregate(command.ShowOne):
|
|
|
137
145
|
class DeleteAggregate(command.Command):
|
|
138
146
|
_description = _("Delete existing aggregate(s)")
|
|
139
147
|
|
|
140
|
-
def get_parser(self, prog_name):
|
|
148
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
141
149
|
parser = super().get_parser(prog_name)
|
|
142
150
|
parser.add_argument(
|
|
143
151
|
'aggregate',
|
|
@@ -147,7 +155,7 @@ class DeleteAggregate(command.Command):
|
|
|
147
155
|
)
|
|
148
156
|
return parser
|
|
149
157
|
|
|
150
|
-
def take_action(self, parsed_args):
|
|
158
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
151
159
|
compute_client = self.app.client_manager.compute
|
|
152
160
|
result = 0
|
|
153
161
|
for a in parsed_args.aggregate:
|
|
@@ -180,7 +188,7 @@ class DeleteAggregate(command.Command):
|
|
|
180
188
|
class ListAggregate(command.Lister):
|
|
181
189
|
_description = _("List all aggregates")
|
|
182
190
|
|
|
183
|
-
def get_parser(self, prog_name):
|
|
191
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
184
192
|
parser = super().get_parser(prog_name)
|
|
185
193
|
parser.add_argument(
|
|
186
194
|
'--long',
|
|
@@ -190,7 +198,9 @@ class ListAggregate(command.Lister):
|
|
|
190
198
|
)
|
|
191
199
|
return parser
|
|
192
200
|
|
|
193
|
-
def take_action(
|
|
201
|
+
def take_action(
|
|
202
|
+
self, parsed_args: argparse.Namespace
|
|
203
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
194
204
|
compute_client = self.app.client_manager.compute
|
|
195
205
|
|
|
196
206
|
aggregates = list(compute_client.aggregates())
|
|
@@ -240,7 +250,7 @@ class ListAggregate(command.Lister):
|
|
|
240
250
|
class RemoveAggregateHost(command.ShowOne):
|
|
241
251
|
_description = _("Remove host from aggregate")
|
|
242
252
|
|
|
243
|
-
def get_parser(self, prog_name):
|
|
253
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
244
254
|
parser = super().get_parser(prog_name)
|
|
245
255
|
parser.add_argument(
|
|
246
256
|
'aggregate',
|
|
@@ -252,7 +262,9 @@ class RemoveAggregateHost(command.ShowOne):
|
|
|
252
262
|
)
|
|
253
263
|
return parser
|
|
254
264
|
|
|
255
|
-
def take_action(
|
|
265
|
+
def take_action(
|
|
266
|
+
self, parsed_args: argparse.Namespace
|
|
267
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
256
268
|
compute_client = self.app.client_manager.compute
|
|
257
269
|
|
|
258
270
|
aggregate = compute_client.find_aggregate(
|
|
@@ -273,7 +285,7 @@ class RemoveAggregateHost(command.ShowOne):
|
|
|
273
285
|
class SetAggregate(command.Command):
|
|
274
286
|
_description = _("Set aggregate properties")
|
|
275
287
|
|
|
276
|
-
def get_parser(self, prog_name):
|
|
288
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
277
289
|
parser = super().get_parser(prog_name)
|
|
278
290
|
parser.add_argument(
|
|
279
291
|
'aggregate',
|
|
@@ -309,7 +321,7 @@ class SetAggregate(command.Command):
|
|
|
309
321
|
)
|
|
310
322
|
return parser
|
|
311
323
|
|
|
312
|
-
def take_action(self, parsed_args):
|
|
324
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
313
325
|
compute_client = self.app.client_manager.compute
|
|
314
326
|
aggregate = compute_client.find_aggregate(
|
|
315
327
|
parsed_args.aggregate, ignore_missing=False
|
|
@@ -323,7 +335,7 @@ class SetAggregate(command.Command):
|
|
|
323
335
|
if kwargs:
|
|
324
336
|
compute_client.update_aggregate(aggregate.id, **kwargs)
|
|
325
337
|
|
|
326
|
-
properties: dict[str,
|
|
338
|
+
properties: dict[str, Any] = {}
|
|
327
339
|
if parsed_args.no_property:
|
|
328
340
|
# NOTE(RuiChen): "availability_zone" can not be unset from
|
|
329
341
|
# properties. It is already excluded from show and create output.
|
|
@@ -345,7 +357,7 @@ class SetAggregate(command.Command):
|
|
|
345
357
|
class ShowAggregate(command.ShowOne):
|
|
346
358
|
_description = _("Display aggregate details")
|
|
347
359
|
|
|
348
|
-
def get_parser(self, prog_name):
|
|
360
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
349
361
|
parser = super().get_parser(prog_name)
|
|
350
362
|
parser.add_argument(
|
|
351
363
|
'aggregate',
|
|
@@ -354,7 +366,9 @@ class ShowAggregate(command.ShowOne):
|
|
|
354
366
|
)
|
|
355
367
|
return parser
|
|
356
368
|
|
|
357
|
-
def take_action(
|
|
369
|
+
def take_action(
|
|
370
|
+
self, parsed_args: argparse.Namespace
|
|
371
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
358
372
|
compute_client = self.app.client_manager.compute
|
|
359
373
|
aggregate = compute_client.find_aggregate(
|
|
360
374
|
parsed_args.aggregate, ignore_missing=False
|
|
@@ -374,7 +388,7 @@ class ShowAggregate(command.ShowOne):
|
|
|
374
388
|
class UnsetAggregate(command.Command):
|
|
375
389
|
_description = _("Unset aggregate properties")
|
|
376
390
|
|
|
377
|
-
def get_parser(self, prog_name):
|
|
391
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
378
392
|
parser = super().get_parser(prog_name)
|
|
379
393
|
parser.add_argument(
|
|
380
394
|
"aggregate",
|
|
@@ -394,7 +408,7 @@ class UnsetAggregate(command.Command):
|
|
|
394
408
|
)
|
|
395
409
|
return parser
|
|
396
410
|
|
|
397
|
-
def take_action(self, parsed_args):
|
|
411
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
398
412
|
compute_client = self.app.client_manager.compute
|
|
399
413
|
aggregate = compute_client.find_aggregate(
|
|
400
414
|
parsed_args.aggregate, ignore_missing=False
|
|
@@ -411,7 +425,7 @@ class CacheImageForAggregate(command.Command):
|
|
|
411
425
|
# NOTE(gtema): According to stephenfin and dansmith there is no and will
|
|
412
426
|
# not be anything to return.
|
|
413
427
|
|
|
414
|
-
def get_parser(self, prog_name):
|
|
428
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
415
429
|
parser = super().get_parser(prog_name)
|
|
416
430
|
parser.add_argument(
|
|
417
431
|
'aggregate',
|
|
@@ -429,7 +443,7 @@ class CacheImageForAggregate(command.Command):
|
|
|
429
443
|
)
|
|
430
444
|
return parser
|
|
431
445
|
|
|
432
|
-
def take_action(self, parsed_args):
|
|
446
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
433
447
|
compute_client = self.app.client_manager.compute
|
|
434
448
|
|
|
435
449
|
if not sdk_utils.supports_microversion(compute_client, '2.81'):
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Compute v2 Console action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
18
22
|
from osc_lib.cli import parseractions
|
|
19
23
|
from osc_lib import utils
|
|
20
24
|
|
|
@@ -22,7 +26,7 @@ from openstackclient import command
|
|
|
22
26
|
from openstackclient.i18n import _
|
|
23
27
|
|
|
24
28
|
|
|
25
|
-
def _get_console_columns(item):
|
|
29
|
+
def _get_console_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
26
30
|
# To maintain backwards compatibility we need to rename sdk props to
|
|
27
31
|
# whatever OSC was using before
|
|
28
32
|
hidden_columns = ['id', 'links', 'location', 'name']
|
|
@@ -34,7 +38,7 @@ def _get_console_columns(item):
|
|
|
34
38
|
class ShowConsoleLog(command.Command):
|
|
35
39
|
_description = _("Show server's console output")
|
|
36
40
|
|
|
37
|
-
def get_parser(self, prog_name):
|
|
41
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
38
42
|
parser = super().get_parser(prog_name)
|
|
39
43
|
parser.add_argument(
|
|
40
44
|
'server',
|
|
@@ -54,7 +58,7 @@ class ShowConsoleLog(command.Command):
|
|
|
54
58
|
)
|
|
55
59
|
return parser
|
|
56
60
|
|
|
57
|
-
def take_action(self, parsed_args):
|
|
61
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
58
62
|
compute_client = self.app.client_manager.compute
|
|
59
63
|
|
|
60
64
|
server = compute_client.find_server(
|
|
@@ -78,7 +82,7 @@ class ShowConsoleLog(command.Command):
|
|
|
78
82
|
class ShowConsoleURL(command.ShowOne):
|
|
79
83
|
_description = _("Show server's remote console URL")
|
|
80
84
|
|
|
81
|
-
def get_parser(self, prog_name):
|
|
85
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
82
86
|
parser = super().get_parser(prog_name)
|
|
83
87
|
parser.add_argument(
|
|
84
88
|
'server',
|
|
@@ -138,17 +142,19 @@ class ShowConsoleURL(command.ShowOne):
|
|
|
138
142
|
)
|
|
139
143
|
return parser
|
|
140
144
|
|
|
141
|
-
def take_action(
|
|
145
|
+
def take_action(
|
|
146
|
+
self, parsed_args: argparse.Namespace
|
|
147
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
142
148
|
compute_client = self.app.client_manager.compute
|
|
143
149
|
server = compute_client.find_server(
|
|
144
150
|
parsed_args.server, ignore_missing=False
|
|
145
151
|
)
|
|
146
152
|
|
|
147
|
-
|
|
153
|
+
console = compute_client.create_console(
|
|
148
154
|
server.id, console_type=parsed_args.url_type
|
|
149
155
|
)
|
|
150
156
|
|
|
151
|
-
display_columns, columns = _get_console_columns(
|
|
152
|
-
data = utils.get_dict_properties(
|
|
157
|
+
display_columns, columns = _get_console_columns(console)
|
|
158
|
+
data = utils.get_dict_properties(console, columns)
|
|
153
159
|
|
|
154
160
|
return (display_columns, data)
|
|
@@ -13,13 +13,19 @@
|
|
|
13
13
|
|
|
14
14
|
"""Compute v2 Console auth token implementations."""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
16
20
|
from osc_lib import utils
|
|
17
21
|
|
|
18
22
|
from openstackclient import command
|
|
19
23
|
from openstackclient.i18n import _
|
|
20
24
|
|
|
21
25
|
|
|
22
|
-
def _get_console_connection_columns(
|
|
26
|
+
def _get_console_connection_columns(
|
|
27
|
+
item: Any,
|
|
28
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
23
29
|
column_map: dict[str, str] = {}
|
|
24
30
|
hidden_columns = ['id', 'location', 'name']
|
|
25
31
|
return utils.get_osc_show_columns_for_sdk_resource(
|
|
@@ -30,7 +36,7 @@ def _get_console_connection_columns(item):
|
|
|
30
36
|
class ShowConsoleConnectionInformation(command.ShowOne):
|
|
31
37
|
_description = _("Show server's remote console connection information")
|
|
32
38
|
|
|
33
|
-
def get_parser(self, prog_name):
|
|
39
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
34
40
|
parser = super().get_parser(prog_name)
|
|
35
41
|
parser.add_argument(
|
|
36
42
|
'token',
|
|
@@ -39,7 +45,9 @@ class ShowConsoleConnectionInformation(command.ShowOne):
|
|
|
39
45
|
)
|
|
40
46
|
return parser
|
|
41
47
|
|
|
42
|
-
def take_action(
|
|
48
|
+
def take_action(
|
|
49
|
+
self, parsed_args: argparse.Namespace
|
|
50
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
43
51
|
compute_client = self.app.client_manager.compute
|
|
44
52
|
data = compute_client.validate_console_auth_token(parsed_args.token)
|
|
45
53
|
display_columns, columns = _get_console_connection_columns(data)
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Flavor action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
20
23
|
from openstack import exceptions as sdk_exceptions
|
|
21
24
|
from openstack import utils as sdk_utils
|
|
@@ -39,7 +42,7 @@ _formatters = {
|
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
|
|
42
|
-
def _get_flavor_columns(item):
|
|
45
|
+
def _get_flavor_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
43
46
|
# To maintain backwards compatibility we need to rename sdk props to
|
|
44
47
|
# whatever OSC was using before
|
|
45
48
|
column_map = {
|
|
@@ -57,7 +60,7 @@ def _get_flavor_columns(item):
|
|
|
57
60
|
class CreateFlavor(command.ShowOne):
|
|
58
61
|
_description = _("Create new flavor")
|
|
59
62
|
|
|
60
|
-
def get_parser(self, prog_name):
|
|
63
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
61
64
|
parser = super().get_parser(prog_name)
|
|
62
65
|
parser.add_argument(
|
|
63
66
|
"name", metavar="<flavor-name>", help=_("New flavor name")
|
|
@@ -102,8 +105,7 @@ class CreateFlavor(command.ShowOne):
|
|
|
102
105
|
"--rxtx-factor",
|
|
103
106
|
type=float,
|
|
104
107
|
metavar="<factor>",
|
|
105
|
-
|
|
106
|
-
help=_("RX/TX factor (default 1.0)"),
|
|
108
|
+
help=_("RX/TX factor"),
|
|
107
109
|
)
|
|
108
110
|
public_group = parser.add_mutually_exclusive_group()
|
|
109
111
|
public_group.add_argument(
|
|
@@ -148,7 +150,9 @@ class CreateFlavor(command.ShowOne):
|
|
|
148
150
|
identity_common.add_project_domain_option_to_parser(parser)
|
|
149
151
|
return parser
|
|
150
152
|
|
|
151
|
-
def take_action(
|
|
153
|
+
def take_action(
|
|
154
|
+
self, parsed_args: argparse.Namespace
|
|
155
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
152
156
|
compute_client = self.app.client_manager.compute
|
|
153
157
|
identity_client = self.app.client_manager.identity
|
|
154
158
|
|
|
@@ -177,10 +181,19 @@ class CreateFlavor(command.ShowOne):
|
|
|
177
181
|
'id': flavor_id,
|
|
178
182
|
'ephemeral': parsed_args.ephemeral,
|
|
179
183
|
'swap': parsed_args.swap,
|
|
180
|
-
'rxtx_factor': parsed_args.rxtx_factor,
|
|
181
184
|
'is_public': parsed_args.public,
|
|
182
185
|
}
|
|
183
186
|
|
|
187
|
+
if parsed_args.rxtx_factor:
|
|
188
|
+
if sdk_utils.supports_microversion(compute_client, '2.102'):
|
|
189
|
+
msg = _(
|
|
190
|
+
'The --rxtx-factor parameter is only supported until '
|
|
191
|
+
'API microversion 2.101'
|
|
192
|
+
)
|
|
193
|
+
raise exceptions.CommandError(msg)
|
|
194
|
+
|
|
195
|
+
args['rxtx_factor'] = parsed_args.rxtx_factor
|
|
196
|
+
|
|
184
197
|
if parsed_args.description:
|
|
185
198
|
if not sdk_utils.supports_microversion(compute_client, '2.55'):
|
|
186
199
|
msg = _(
|
|
@@ -206,6 +219,7 @@ class CreateFlavor(command.ShowOne):
|
|
|
206
219
|
"Failed to add project %(project)s access to flavor: %(e)s"
|
|
207
220
|
)
|
|
208
221
|
LOG.error(msg, {'project': parsed_args.project, 'e': e})
|
|
222
|
+
|
|
209
223
|
if parsed_args.properties:
|
|
210
224
|
try:
|
|
211
225
|
flavor = compute_client.create_flavor_extra_specs(
|
|
@@ -225,7 +239,7 @@ class CreateFlavor(command.ShowOne):
|
|
|
225
239
|
class DeleteFlavor(command.Command):
|
|
226
240
|
_description = _("Delete flavor(s)")
|
|
227
241
|
|
|
228
|
-
def get_parser(self, prog_name):
|
|
242
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
229
243
|
parser = super().get_parser(prog_name)
|
|
230
244
|
parser.add_argument(
|
|
231
245
|
"flavor",
|
|
@@ -235,7 +249,7 @@ class DeleteFlavor(command.Command):
|
|
|
235
249
|
)
|
|
236
250
|
return parser
|
|
237
251
|
|
|
238
|
-
def take_action(self, parsed_args):
|
|
252
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
239
253
|
compute_client = self.app.client_manager.compute
|
|
240
254
|
result = 0
|
|
241
255
|
for f in parsed_args.flavor:
|
|
@@ -264,7 +278,7 @@ class DeleteFlavor(command.Command):
|
|
|
264
278
|
class ListFlavor(command.Lister):
|
|
265
279
|
_description = _("List flavors")
|
|
266
280
|
|
|
267
|
-
def get_parser(self, prog_name):
|
|
281
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
268
282
|
parser = super().get_parser(prog_name)
|
|
269
283
|
public_group = parser.add_mutually_exclusive_group()
|
|
270
284
|
public_group.add_argument(
|
|
@@ -308,7 +322,9 @@ class ListFlavor(command.Lister):
|
|
|
308
322
|
pagination.add_marker_pagination_option_to_parser(parser)
|
|
309
323
|
return parser
|
|
310
324
|
|
|
311
|
-
def take_action(
|
|
325
|
+
def take_action(
|
|
326
|
+
self, parsed_args: argparse.Namespace
|
|
327
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
312
328
|
compute_client = self.app.client_manager.compute
|
|
313
329
|
# is_public is ternary - None means give all flavors,
|
|
314
330
|
# True is public only and False is private only
|
|
@@ -386,7 +402,7 @@ class ListFlavor(command.Lister):
|
|
|
386
402
|
class SetFlavor(command.Command):
|
|
387
403
|
_description = _("Set flavor properties")
|
|
388
404
|
|
|
389
|
-
def get_parser(self, prog_name):
|
|
405
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
390
406
|
parser = super().get_parser(prog_name)
|
|
391
407
|
parser.add_argument(
|
|
392
408
|
"flavor",
|
|
@@ -430,7 +446,7 @@ class SetFlavor(command.Command):
|
|
|
430
446
|
|
|
431
447
|
return parser
|
|
432
448
|
|
|
433
|
-
def take_action(self, parsed_args):
|
|
449
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
434
450
|
compute_client = self.app.client_manager.compute
|
|
435
451
|
identity_client = self.app.client_manager.identity
|
|
436
452
|
|
|
@@ -500,7 +516,7 @@ class SetFlavor(command.Command):
|
|
|
500
516
|
class ShowFlavor(command.ShowOne):
|
|
501
517
|
_description = _("Display flavor details")
|
|
502
518
|
|
|
503
|
-
def get_parser(self, prog_name):
|
|
519
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
504
520
|
parser = super().get_parser(prog_name)
|
|
505
521
|
parser.add_argument(
|
|
506
522
|
"flavor",
|
|
@@ -509,7 +525,9 @@ class ShowFlavor(command.ShowOne):
|
|
|
509
525
|
)
|
|
510
526
|
return parser
|
|
511
527
|
|
|
512
|
-
def take_action(
|
|
528
|
+
def take_action(
|
|
529
|
+
self, parsed_args: argparse.Namespace
|
|
530
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
513
531
|
compute_client = self.app.client_manager.compute
|
|
514
532
|
flavor = compute_client.find_flavor(
|
|
515
533
|
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
|
|
@@ -535,21 +553,21 @@ class ShowFlavor(command.ShowOne):
|
|
|
535
553
|
|
|
536
554
|
# Since we need to inject "access_project_id" into resource - convert
|
|
537
555
|
# it to dict and treat it respectively
|
|
538
|
-
|
|
539
|
-
|
|
556
|
+
flavor_dict = flavor.to_dict()
|
|
557
|
+
flavor_dict['access_project_ids'] = access_projects
|
|
540
558
|
|
|
541
|
-
display_columns, columns = _get_flavor_columns(
|
|
559
|
+
display_columns, columns = _get_flavor_columns(flavor_dict)
|
|
542
560
|
data = utils.get_dict_properties(
|
|
543
|
-
|
|
561
|
+
flavor_dict, columns, formatters=_formatters
|
|
544
562
|
)
|
|
545
563
|
|
|
546
|
-
return
|
|
564
|
+
return display_columns, data
|
|
547
565
|
|
|
548
566
|
|
|
549
567
|
class UnsetFlavor(command.Command):
|
|
550
568
|
_description = _("Unset flavor properties")
|
|
551
569
|
|
|
552
|
-
def get_parser(self, prog_name):
|
|
570
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
553
571
|
parser = super().get_parser(prog_name)
|
|
554
572
|
parser.add_argument(
|
|
555
573
|
"flavor",
|
|
@@ -577,7 +595,7 @@ class UnsetFlavor(command.Command):
|
|
|
577
595
|
|
|
578
596
|
return parser
|
|
579
597
|
|
|
580
|
-
def take_action(self, parsed_args):
|
|
598
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
581
599
|
compute_client = self.app.client_manager.compute
|
|
582
600
|
identity_client = self.app.client_manager.identity
|
|
583
601
|
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Host action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
18
22
|
from openstack import exceptions as sdk_exceptions
|
|
19
23
|
from osc_lib import utils
|
|
20
24
|
|
|
@@ -25,7 +29,7 @@ from openstackclient.i18n import _
|
|
|
25
29
|
class ListHost(command.Lister):
|
|
26
30
|
_description = _("DEPRECATED: List hosts")
|
|
27
31
|
|
|
28
|
-
def get_parser(self, prog_name):
|
|
32
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
29
33
|
parser = super().get_parser(prog_name)
|
|
30
34
|
parser.add_argument(
|
|
31
35
|
"--zone",
|
|
@@ -34,7 +38,9 @@ class ListHost(command.Lister):
|
|
|
34
38
|
)
|
|
35
39
|
return parser
|
|
36
40
|
|
|
37
|
-
def take_action(
|
|
41
|
+
def take_action(
|
|
42
|
+
self, parsed_args: argparse.Namespace
|
|
43
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
38
44
|
compute_client = self.app.client_manager.compute
|
|
39
45
|
|
|
40
46
|
self.log.warning(
|
|
@@ -57,7 +63,7 @@ class ListHost(command.Lister):
|
|
|
57
63
|
class SetHost(command.Command):
|
|
58
64
|
_description = _("DEPRECATED: Set host properties")
|
|
59
65
|
|
|
60
|
-
def get_parser(self, prog_name):
|
|
66
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
61
67
|
parser = super().get_parser(prog_name)
|
|
62
68
|
parser.add_argument(
|
|
63
69
|
"host", metavar="<host>", help=_("Host to modify (name only)")
|
|
@@ -82,7 +88,7 @@ class SetHost(command.Command):
|
|
|
82
88
|
)
|
|
83
89
|
return parser
|
|
84
90
|
|
|
85
|
-
def take_action(self, parsed_args):
|
|
91
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
86
92
|
compute_client = self.app.client_manager.compute
|
|
87
93
|
|
|
88
94
|
self.log.warning(
|
|
@@ -115,12 +121,14 @@ class SetHost(command.Command):
|
|
|
115
121
|
class ShowHost(command.Lister):
|
|
116
122
|
_description = _("DEPRECATED: Display host details")
|
|
117
123
|
|
|
118
|
-
def get_parser(self, prog_name):
|
|
124
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
119
125
|
parser = super().get_parser(prog_name)
|
|
120
126
|
parser.add_argument("host", metavar="<host>", help=_("Name of host"))
|
|
121
127
|
return parser
|
|
122
128
|
|
|
123
|
-
def take_action(
|
|
129
|
+
def take_action(
|
|
130
|
+
self, parsed_args: argparse.Namespace
|
|
131
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
124
132
|
compute_client = self.app.client_manager.compute
|
|
125
133
|
|
|
126
134
|
self.log.warning(
|
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
"""Hypervisor action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import json
|
|
19
21
|
import re
|
|
22
|
+
from typing import Any
|
|
20
23
|
|
|
21
24
|
from openstack import exceptions as sdk_exceptions
|
|
22
25
|
from openstack import utils as sdk_utils
|
|
@@ -29,7 +32,9 @@ from openstackclient.common import pagination
|
|
|
29
32
|
from openstackclient.i18n import _
|
|
30
33
|
|
|
31
34
|
|
|
32
|
-
def _get_hypervisor_columns(
|
|
35
|
+
def _get_hypervisor_columns(
|
|
36
|
+
item: Any, client: Any
|
|
37
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
33
38
|
column_map = {'name': 'hypervisor_hostname'}
|
|
34
39
|
hidden_columns = ['location', 'servers']
|
|
35
40
|
|
|
@@ -70,7 +75,7 @@ def _get_hypervisor_columns(item, client):
|
|
|
70
75
|
class ListHypervisor(command.Lister):
|
|
71
76
|
_description = _("List hypervisors")
|
|
72
77
|
|
|
73
|
-
def get_parser(self, prog_name):
|
|
78
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
74
79
|
parser = super().get_parser(prog_name)
|
|
75
80
|
parser.add_argument(
|
|
76
81
|
'--matching',
|
|
@@ -89,7 +94,9 @@ class ListHypervisor(command.Lister):
|
|
|
89
94
|
)
|
|
90
95
|
return parser
|
|
91
96
|
|
|
92
|
-
def take_action(
|
|
97
|
+
def take_action(
|
|
98
|
+
self, parsed_args: argparse.Namespace
|
|
99
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
93
100
|
compute_client = self.app.client_manager.compute
|
|
94
101
|
|
|
95
102
|
list_opts = {}
|
|
@@ -160,7 +167,7 @@ class ListHypervisor(command.Lister):
|
|
|
160
167
|
class ShowHypervisor(command.ShowOne):
|
|
161
168
|
_description = _("Display hypervisor details")
|
|
162
169
|
|
|
163
|
-
def get_parser(self, prog_name):
|
|
170
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
164
171
|
parser = super().get_parser(prog_name)
|
|
165
172
|
parser.add_argument(
|
|
166
173
|
"hypervisor",
|
|
@@ -169,7 +176,9 @@ class ShowHypervisor(command.ShowOne):
|
|
|
169
176
|
)
|
|
170
177
|
return parser
|
|
171
178
|
|
|
172
|
-
def take_action(
|
|
179
|
+
def take_action(
|
|
180
|
+
self, parsed_args: argparse.Namespace
|
|
181
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
173
182
|
compute_client = self.app.client_manager.compute
|
|
174
183
|
|
|
175
184
|
hypervisor_id = compute_client.find_hypervisor(
|
|
@@ -13,13 +13,19 @@
|
|
|
13
13
|
|
|
14
14
|
"""Hypervisor Stats action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
16
20
|
from osc_lib import utils
|
|
17
21
|
|
|
18
22
|
from openstackclient import command
|
|
19
23
|
from openstackclient.i18n import _
|
|
20
24
|
|
|
21
25
|
|
|
22
|
-
def _get_hypervisor_stat_columns(
|
|
26
|
+
def _get_hypervisor_stat_columns(
|
|
27
|
+
item: Any,
|
|
28
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
23
29
|
column_map = {
|
|
24
30
|
# NOTE(gtema): If we decide to use SDK names - empty this
|
|
25
31
|
'disk_available': 'disk_available_least',
|
|
@@ -39,7 +45,9 @@ def _get_hypervisor_stat_columns(item):
|
|
|
39
45
|
class ShowHypervisorStats(command.ShowOne):
|
|
40
46
|
_description = _("Display hypervisor stats details")
|
|
41
47
|
|
|
42
|
-
def take_action(
|
|
48
|
+
def take_action(
|
|
49
|
+
self, parsed_args: argparse.Namespace
|
|
50
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
43
51
|
# The command is deprecated since it is being dropped in Nova.
|
|
44
52
|
self.log.warning(_("This command is deprecated."))
|
|
45
53
|
compute_client = self.app.client_manager.compute
|