python-openstackclient 8.3.0__py3-none-any.whl → 10.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +58 -42
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +14 -6
- openstackclient/common/pagination.py +8 -2
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +13 -7
- openstackclient/common/quota.py +126 -114
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +39 -21
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +14 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +29 -14
- openstackclient/compute/v2/server.py +251 -171
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +21 -12
- openstackclient/compute/v2/server_group.py +21 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +24 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +10 -4
- openstackclient/compute/v2/service.py +14 -7
- openstackclient/compute/v2/usage.py +26 -21
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +103 -41
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +26 -12
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +26 -12
- openstackclient/identity/v3/application_credential.py +59 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +36 -16
- openstackclient/identity/v3/domain.py +37 -18
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +42 -20
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +71 -50
- openstackclient/identity/v3/group.py +55 -32
- openstackclient/identity/v3/identity_provider.py +92 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +115 -92
- openstackclient/identity/v3/mapping.py +26 -13
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +211 -122
- openstackclient/identity/v3/region.py +36 -16
- openstackclient/identity/v3/registered_limit.py +116 -109
- openstackclient/identity/v3/role.py +61 -31
- openstackclient/identity/v3/role_assignment.py +23 -6
- openstackclient/identity/v3/service.py +36 -16
- openstackclient/identity/v3/service_provider.py +37 -15
- openstackclient/identity/v3/tag.py +23 -17
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +32 -14
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +49 -26
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +14 -9
- openstackclient/image/v2/image.py +76 -49
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +109 -13
- openstackclient/image/v2/metadef_objects.py +28 -15
- openstackclient/image/v2/metadef_properties.py +24 -13
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +15 -6
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +36 -22
- openstackclient/network/v2/address_group.py +27 -16
- openstackclient/network/v2/address_scope.py +24 -13
- openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +214 -0
- openstackclient/network/v2/bgpvpn/port_association.py +490 -0
- openstackclient/network/v2/bgpvpn/router_association.py +288 -0
- openstackclient/network/v2/default_security_group_rule.py +19 -10
- openstackclient/network/v2/floating_ip.py +110 -159
- openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +466 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +574 -0
- openstackclient/network/v2/ip_availability.py +13 -5
- openstackclient/network/v2/l3_conntrack_helper.py +22 -13
- openstackclient/network/v2/local_ip.py +24 -13
- openstackclient/network/v2/local_ip_association.py +14 -7
- openstackclient/network/v2/ndp_proxy.py +20 -11
- openstackclient/network/v2/network.py +129 -196
- openstackclient/network/v2/network_agent.py +46 -25
- openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
- openstackclient/network/v2/network_flavor.py +27 -16
- openstackclient/network/v2/network_flavor_profile.py +23 -12
- openstackclient/network/v2/network_meter.py +21 -10
- openstackclient/network/v2/network_meter_rule.py +21 -11
- openstackclient/network/v2/network_qos_policy.py +25 -15
- openstackclient/network/v2/network_qos_rule.py +32 -17
- openstackclient/network/v2/network_qos_rule_type.py +13 -5
- openstackclient/network/v2/network_rbac.py +23 -12
- openstackclient/network/v2/network_segment.py +20 -11
- openstackclient/network/v2/network_segment_range.py +56 -29
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +38 -22
- openstackclient/network/v2/port.py +54 -29
- openstackclient/network/v2/router.py +75 -52
- openstackclient/network/v2/security_group.py +87 -157
- openstackclient/network/v2/security_group_rule.py +100 -280
- openstackclient/network/v2/subnet.py +49 -28
- openstackclient/network/v2/subnet_pool.py +30 -17
- openstackclient/network/v2/taas/tap_flow.py +22 -11
- openstackclient/network/v2/taas/tap_mirror.py +22 -11
- openstackclient/network/v2/taas/tap_service.py +23 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +25 -15
- openstackclient/object/v1/object.py +25 -15
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +25 -19
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +56 -138
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_module.py +12 -7
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +62 -23
- openstackclient/tests/unit/compute/v2/fakes.py +25 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
- openstackclient/tests/unit/compute/v2/test_server.py +17 -104
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/identity/v3/fakes.py +3 -0
- openstackclient/tests/unit/identity/v3/test_group.py +4 -14
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
- openstackclient/tests/unit/identity/v3/test_project.py +831 -512
- openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +355 -220
- openstackclient/tests/unit/identity/v3/test_user.py +4 -4
- openstackclient/tests/unit/image/v2/test_image.py +16 -16
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
- openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_router.py +8 -9
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
- openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +1 -0
- openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +1 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +94 -15
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +37 -25
- openstackclient/volume/v2/consistency_group_snapshot.py +27 -12
- openstackclient/volume/v2/qos_specs.py +30 -19
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +69 -34
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -22
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +52 -26
- openstackclient/volume/v2/volume_transfer_request.py +33 -15
- openstackclient/volume/v2/volume_type.py +46 -27
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +103 -46
- openstackclient/volume/v3/volume_attachment.py +43 -21
- openstackclient/volume/v3/volume_backup.py +55 -26
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +32 -13
- openstackclient/volume/v3/volume_group_type.py +26 -13
- openstackclient/volume/v3/volume_message.py +15 -7
- openstackclient/volume/v3/volume_snapshot.py +71 -34
- openstackclient/volume/v3/volume_transfer_request.py +33 -15
- openstackclient/volume/v3/volume_type.py +45 -27
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +279 -267
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +9 -0
- python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-8.3.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
"""Subnet action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
16
17
|
import copy
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
17
19
|
import logging
|
|
18
|
-
|
|
20
|
+
from typing import Any
|
|
19
21
|
|
|
20
22
|
from cliff import columns as cliff_columns
|
|
21
23
|
from osc_lib.cli import format_columns
|
|
@@ -32,7 +34,9 @@ from openstackclient.network import common
|
|
|
32
34
|
LOG = logging.getLogger(__name__)
|
|
33
35
|
|
|
34
36
|
|
|
35
|
-
def _update_arguments(
|
|
37
|
+
def _update_arguments(
|
|
38
|
+
obj_list: list[Any], parsed_args_list: list[Any], option: str
|
|
39
|
+
) -> None:
|
|
36
40
|
for item in parsed_args_list:
|
|
37
41
|
try:
|
|
38
42
|
obj_list.remove(item)
|
|
@@ -44,8 +48,8 @@ def _update_arguments(obj_list, parsed_args_list, option):
|
|
|
44
48
|
raise exceptions.CommandError(msg)
|
|
45
49
|
|
|
46
50
|
|
|
47
|
-
class AllocationPoolsColumn(cliff_columns.FormattableColumn[
|
|
48
|
-
def human_readable(self):
|
|
51
|
+
class AllocationPoolsColumn(cliff_columns.FormattableColumn[Any]):
|
|
52
|
+
def human_readable(self) -> str:
|
|
49
53
|
pool_formatted = [
|
|
50
54
|
'{}-{}'.format(pool.get('start', ''), pool.get('end', ''))
|
|
51
55
|
for pool in self._value
|
|
@@ -53,18 +57,19 @@ class AllocationPoolsColumn(cliff_columns.FormattableColumn[ty.Any]):
|
|
|
53
57
|
return ','.join(pool_formatted)
|
|
54
58
|
|
|
55
59
|
|
|
56
|
-
class HostRoutesColumn(cliff_columns.FormattableColumn[
|
|
57
|
-
def human_readable(self):
|
|
60
|
+
class HostRoutesColumn(cliff_columns.FormattableColumn[Any]):
|
|
61
|
+
def human_readable(self) -> str:
|
|
58
62
|
# Map the host route keys to match --host-route option.
|
|
59
|
-
return
|
|
60
|
-
convert_entries_to_gateway(self._value)
|
|
63
|
+
return (
|
|
64
|
+
utils.format_list_of_dicts(convert_entries_to_gateway(self._value))
|
|
65
|
+
or ""
|
|
61
66
|
)
|
|
62
67
|
|
|
63
68
|
|
|
64
|
-
class UnsortedListColumn(cliff_columns.FormattableColumn[list[
|
|
69
|
+
class UnsortedListColumn(cliff_columns.FormattableColumn[list[Any]]):
|
|
65
70
|
# format_columns.ListColumn sorts the output, but for things like
|
|
66
71
|
# DNS server addresses the order matters
|
|
67
|
-
def human_readable(self):
|
|
72
|
+
def human_readable(self) -> str:
|
|
68
73
|
return ', '.join(self._value)
|
|
69
74
|
|
|
70
75
|
|
|
@@ -77,7 +82,9 @@ _formatters = {
|
|
|
77
82
|
}
|
|
78
83
|
|
|
79
84
|
|
|
80
|
-
def _get_common_parse_arguments(
|
|
85
|
+
def _get_common_parse_arguments(
|
|
86
|
+
parser: argparse.ArgumentParser, is_create: bool = True
|
|
87
|
+
) -> None:
|
|
81
88
|
parser.add_argument(
|
|
82
89
|
'--allocation-pool',
|
|
83
90
|
metavar='start=<ip-address>,end=<ip-address>',
|
|
@@ -159,7 +166,7 @@ def _get_common_parse_arguments(parser, is_create=True):
|
|
|
159
166
|
)
|
|
160
167
|
|
|
161
168
|
|
|
162
|
-
def _get_columns(item):
|
|
169
|
+
def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
163
170
|
column_map = {
|
|
164
171
|
'is_dhcp_enabled': 'enable_dhcp',
|
|
165
172
|
'subnet_pool_id': 'subnetpool_id',
|
|
@@ -176,7 +183,9 @@ def _get_columns(item):
|
|
|
176
183
|
)
|
|
177
184
|
|
|
178
185
|
|
|
179
|
-
def convert_entries_to_nexthop(
|
|
186
|
+
def convert_entries_to_nexthop(
|
|
187
|
+
entries: list[dict[str, Any]],
|
|
188
|
+
) -> list[dict[str, Any]]:
|
|
180
189
|
# Change 'gateway' entry to 'nexthop'
|
|
181
190
|
changed_entries = copy.deepcopy(entries)
|
|
182
191
|
for entry in changed_entries:
|
|
@@ -187,7 +196,9 @@ def convert_entries_to_nexthop(entries):
|
|
|
187
196
|
return changed_entries
|
|
188
197
|
|
|
189
198
|
|
|
190
|
-
def convert_entries_to_gateway(
|
|
199
|
+
def convert_entries_to_gateway(
|
|
200
|
+
entries: list[dict[str, Any]],
|
|
201
|
+
) -> list[dict[str, Any]]:
|
|
191
202
|
# Change 'nexthop' entry to 'gateway'
|
|
192
203
|
changed_entries = copy.deepcopy(entries)
|
|
193
204
|
for entry in changed_entries:
|
|
@@ -198,7 +209,11 @@ def convert_entries_to_gateway(entries):
|
|
|
198
209
|
return changed_entries
|
|
199
210
|
|
|
200
211
|
|
|
201
|
-
def _get_attrs(
|
|
212
|
+
def _get_attrs(
|
|
213
|
+
client_manager: Any,
|
|
214
|
+
parsed_args: argparse.Namespace,
|
|
215
|
+
is_create: bool = True,
|
|
216
|
+
) -> dict[str, Any]:
|
|
202
217
|
attrs = {}
|
|
203
218
|
client = client_manager.network
|
|
204
219
|
if 'name' in parsed_args and parsed_args.name is not None:
|
|
@@ -292,7 +307,7 @@ def _get_attrs(client_manager, parsed_args, is_create=True):
|
|
|
292
307
|
class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
293
308
|
_description = _("Create a subnet")
|
|
294
309
|
|
|
295
|
-
def get_parser(self, prog_name):
|
|
310
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
296
311
|
parser = super().get_parser(prog_name)
|
|
297
312
|
parser.add_argument(
|
|
298
313
|
'name', metavar='<name>', help=_("New subnet name")
|
|
@@ -419,7 +434,9 @@ class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
419
434
|
_tag.add_tag_option_to_parser_for_create(parser, _('subnet'))
|
|
420
435
|
return parser
|
|
421
436
|
|
|
422
|
-
def take_action(
|
|
437
|
+
def take_action(
|
|
438
|
+
self, parsed_args: argparse.Namespace
|
|
439
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
423
440
|
client = self.app.client_manager.network
|
|
424
441
|
attrs = _get_attrs(self.app.client_manager, parsed_args)
|
|
425
442
|
attrs.update(
|
|
@@ -436,7 +453,7 @@ class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
436
453
|
class DeleteSubnet(command.Command):
|
|
437
454
|
_description = _("Delete subnet(s)")
|
|
438
455
|
|
|
439
|
-
def get_parser(self, prog_name):
|
|
456
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
440
457
|
parser = super().get_parser(prog_name)
|
|
441
458
|
parser.add_argument(
|
|
442
459
|
'subnet',
|
|
@@ -446,7 +463,7 @@ class DeleteSubnet(command.Command):
|
|
|
446
463
|
)
|
|
447
464
|
return parser
|
|
448
465
|
|
|
449
|
-
def take_action(self, parsed_args):
|
|
466
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
450
467
|
client = self.app.client_manager.network
|
|
451
468
|
result = 0
|
|
452
469
|
|
|
@@ -478,7 +495,7 @@ class DeleteSubnet(command.Command):
|
|
|
478
495
|
class ListSubnet(command.Lister):
|
|
479
496
|
_description = _("List subnets")
|
|
480
497
|
|
|
481
|
-
def get_parser(self, prog_name):
|
|
498
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
482
499
|
parser = super().get_parser(prog_name)
|
|
483
500
|
parser.add_argument(
|
|
484
501
|
'--long',
|
|
@@ -566,7 +583,9 @@ class ListSubnet(command.Lister):
|
|
|
566
583
|
_tag.add_tag_filtering_option_to_parser(parser, _('subnets'))
|
|
567
584
|
return parser
|
|
568
585
|
|
|
569
|
-
def take_action(
|
|
586
|
+
def take_action(
|
|
587
|
+
self, parsed_args: argparse.Namespace
|
|
588
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
570
589
|
identity_client = self.app.client_manager.identity
|
|
571
590
|
network_client = self.app.client_manager.network
|
|
572
591
|
filters = {}
|
|
@@ -650,7 +669,7 @@ class ListSubnet(command.Lister):
|
|
|
650
669
|
class SetSubnet(common.NeutronCommandWithExtraArgs):
|
|
651
670
|
_description = _("Set subnet properties")
|
|
652
671
|
|
|
653
|
-
def get_parser(self, prog_name):
|
|
672
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
654
673
|
parser = super().get_parser(prog_name)
|
|
655
674
|
parser.add_argument(
|
|
656
675
|
'subnet',
|
|
@@ -707,7 +726,7 @@ class SetSubnet(common.NeutronCommandWithExtraArgs):
|
|
|
707
726
|
_get_common_parse_arguments(parser, is_create=False)
|
|
708
727
|
return parser
|
|
709
728
|
|
|
710
|
-
def take_action(self, parsed_args):
|
|
729
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
711
730
|
client = self.app.client_manager.network
|
|
712
731
|
obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
|
|
713
732
|
attrs = _get_attrs(
|
|
@@ -743,7 +762,7 @@ class SetSubnet(common.NeutronCommandWithExtraArgs):
|
|
|
743
762
|
class ShowSubnet(command.ShowOne):
|
|
744
763
|
_description = _("Display subnet details")
|
|
745
764
|
|
|
746
|
-
def get_parser(self, prog_name):
|
|
765
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
747
766
|
parser = super().get_parser(prog_name)
|
|
748
767
|
parser.add_argument(
|
|
749
768
|
'subnet',
|
|
@@ -752,7 +771,9 @@ class ShowSubnet(command.ShowOne):
|
|
|
752
771
|
)
|
|
753
772
|
return parser
|
|
754
773
|
|
|
755
|
-
def take_action(
|
|
774
|
+
def take_action(
|
|
775
|
+
self, parsed_args: argparse.Namespace
|
|
776
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
756
777
|
obj = self.app.client_manager.network.find_subnet(
|
|
757
778
|
parsed_args.subnet, ignore_missing=False
|
|
758
779
|
)
|
|
@@ -764,7 +785,7 @@ class ShowSubnet(command.ShowOne):
|
|
|
764
785
|
class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
|
|
765
786
|
_description = _("Unset subnet properties")
|
|
766
787
|
|
|
767
|
-
def get_parser(self, prog_name):
|
|
788
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
768
789
|
parser = super().get_parser(prog_name)
|
|
769
790
|
parser.add_argument(
|
|
770
791
|
'--allocation-pool',
|
|
@@ -827,11 +848,11 @@ class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
|
|
|
827
848
|
)
|
|
828
849
|
return parser
|
|
829
850
|
|
|
830
|
-
def take_action(self, parsed_args):
|
|
851
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
831
852
|
client = self.app.client_manager.network
|
|
832
853
|
obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
|
|
833
854
|
|
|
834
|
-
attrs: dict[str,
|
|
855
|
+
attrs: dict[str, Any] = {}
|
|
835
856
|
if parsed_args.gateway:
|
|
836
857
|
attrs['gateway_ip'] = None
|
|
837
858
|
if parsed_args.dns_nameservers:
|
|
@@ -13,7 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
"""Subnet pool action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
16
18
|
import logging
|
|
19
|
+
from typing import Any
|
|
17
20
|
|
|
18
21
|
from osc_lib.cli import format_columns
|
|
19
22
|
from osc_lib.cli import parseractions
|
|
@@ -30,7 +33,7 @@ from openstackclient.network import common
|
|
|
30
33
|
LOG = logging.getLogger(__name__)
|
|
31
34
|
|
|
32
35
|
|
|
33
|
-
def _get_columns(item):
|
|
36
|
+
def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
34
37
|
column_map = {
|
|
35
38
|
'default_prefix_length': 'default_prefixlen',
|
|
36
39
|
'is_shared': 'shared',
|
|
@@ -49,7 +52,9 @@ _formatters = {
|
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
|
|
52
|
-
def _get_attrs(
|
|
55
|
+
def _get_attrs(
|
|
56
|
+
client_manager: Any, parsed_args: argparse.Namespace
|
|
57
|
+
) -> dict[str, Any]:
|
|
53
58
|
attrs = {}
|
|
54
59
|
network_client = client_manager.network
|
|
55
60
|
|
|
@@ -100,7 +105,9 @@ def _get_attrs(client_manager, parsed_args):
|
|
|
100
105
|
return attrs
|
|
101
106
|
|
|
102
107
|
|
|
103
|
-
def _add_prefix_options(
|
|
108
|
+
def _add_prefix_options(
|
|
109
|
+
parser: argparse.ArgumentParser, for_create: bool = False
|
|
110
|
+
) -> None:
|
|
104
111
|
parser.add_argument(
|
|
105
112
|
'--pool-prefix',
|
|
106
113
|
metavar='<pool-prefix>',
|
|
@@ -135,7 +142,7 @@ def _add_prefix_options(parser, for_create=False):
|
|
|
135
142
|
)
|
|
136
143
|
|
|
137
144
|
|
|
138
|
-
def _add_default_options(parser):
|
|
145
|
+
def _add_default_options(parser: argparse.ArgumentParser) -> None:
|
|
139
146
|
default_group = parser.add_mutually_exclusive_group()
|
|
140
147
|
default_group.add_argument(
|
|
141
148
|
'--default',
|
|
@@ -154,7 +161,7 @@ def _add_default_options(parser):
|
|
|
154
161
|
class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
155
162
|
_description = _("Create subnet pool")
|
|
156
163
|
|
|
157
|
-
def get_parser(self, prog_name):
|
|
164
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
158
165
|
parser = super().get_parser(prog_name)
|
|
159
166
|
parser.add_argument(
|
|
160
167
|
'name', metavar='<name>', help=_("Name of the new subnet pool")
|
|
@@ -205,7 +212,9 @@ class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
205
212
|
_tag.add_tag_option_to_parser_for_create(parser, _('subnet pool'))
|
|
206
213
|
return parser
|
|
207
214
|
|
|
208
|
-
def take_action(
|
|
215
|
+
def take_action(
|
|
216
|
+
self, parsed_args: argparse.Namespace
|
|
217
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
209
218
|
client = self.app.client_manager.network
|
|
210
219
|
attrs = _get_attrs(self.app.client_manager, parsed_args)
|
|
211
220
|
# NeutronServer expects prefixes to be a List
|
|
@@ -225,7 +234,7 @@ class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
225
234
|
class DeleteSubnetPool(command.Command):
|
|
226
235
|
_description = _("Delete subnet pool(s)")
|
|
227
236
|
|
|
228
|
-
def get_parser(self, prog_name):
|
|
237
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
229
238
|
parser = super().get_parser(prog_name)
|
|
230
239
|
parser.add_argument(
|
|
231
240
|
'subnet_pool',
|
|
@@ -235,7 +244,7 @@ class DeleteSubnetPool(command.Command):
|
|
|
235
244
|
)
|
|
236
245
|
return parser
|
|
237
246
|
|
|
238
|
-
def take_action(self, parsed_args):
|
|
247
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
239
248
|
client = self.app.client_manager.network
|
|
240
249
|
result = 0
|
|
241
250
|
|
|
@@ -266,7 +275,7 @@ class DeleteSubnetPool(command.Command):
|
|
|
266
275
|
class ListSubnetPool(command.Lister):
|
|
267
276
|
_description = _("List subnet pools")
|
|
268
277
|
|
|
269
|
-
def get_parser(self, prog_name):
|
|
278
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
270
279
|
parser = super().get_parser(prog_name)
|
|
271
280
|
parser.add_argument(
|
|
272
281
|
'--long',
|
|
@@ -327,10 +336,12 @@ class ListSubnetPool(command.Lister):
|
|
|
327
336
|
_tag.add_tag_filtering_option_to_parser(parser, _('subnet pools'))
|
|
328
337
|
return parser
|
|
329
338
|
|
|
330
|
-
def take_action(
|
|
339
|
+
def take_action(
|
|
340
|
+
self, parsed_args: argparse.Namespace
|
|
341
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
331
342
|
identity_client = self.app.client_manager.identity
|
|
332
343
|
network_client = self.app.client_manager.network
|
|
333
|
-
filters = {}
|
|
344
|
+
filters: dict[str, Any] = {}
|
|
334
345
|
if parsed_args.share:
|
|
335
346
|
filters['shared'] = True
|
|
336
347
|
filters['is_shared'] = True
|
|
@@ -394,7 +405,7 @@ class ListSubnetPool(command.Lister):
|
|
|
394
405
|
class SetSubnetPool(common.NeutronCommandWithExtraArgs):
|
|
395
406
|
_description = _("Set subnet pool properties")
|
|
396
407
|
|
|
397
|
-
def get_parser(self, prog_name):
|
|
408
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
398
409
|
parser = super().get_parser(prog_name)
|
|
399
410
|
parser.add_argument(
|
|
400
411
|
'subnet_pool',
|
|
@@ -440,7 +451,7 @@ class SetSubnetPool(common.NeutronCommandWithExtraArgs):
|
|
|
440
451
|
|
|
441
452
|
return parser
|
|
442
453
|
|
|
443
|
-
def take_action(self, parsed_args):
|
|
454
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
444
455
|
client = self.app.client_manager.network
|
|
445
456
|
obj = client.find_subnet_pool(
|
|
446
457
|
parsed_args.subnet_pool, ignore_missing=False
|
|
@@ -465,7 +476,7 @@ class SetSubnetPool(common.NeutronCommandWithExtraArgs):
|
|
|
465
476
|
class ShowSubnetPool(command.ShowOne):
|
|
466
477
|
_description = _("Display subnet pool details")
|
|
467
478
|
|
|
468
|
-
def get_parser(self, prog_name):
|
|
479
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
469
480
|
parser = super().get_parser(prog_name)
|
|
470
481
|
parser.add_argument(
|
|
471
482
|
'subnet_pool',
|
|
@@ -474,7 +485,9 @@ class ShowSubnetPool(command.ShowOne):
|
|
|
474
485
|
)
|
|
475
486
|
return parser
|
|
476
487
|
|
|
477
|
-
def take_action(
|
|
488
|
+
def take_action(
|
|
489
|
+
self, parsed_args: argparse.Namespace
|
|
490
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
478
491
|
client = self.app.client_manager.network
|
|
479
492
|
obj = client.find_subnet_pool(
|
|
480
493
|
parsed_args.subnet_pool, ignore_missing=False
|
|
@@ -487,7 +500,7 @@ class ShowSubnetPool(command.ShowOne):
|
|
|
487
500
|
class UnsetSubnetPool(command.Command):
|
|
488
501
|
_description = _("Unset subnet pool properties")
|
|
489
502
|
|
|
490
|
-
def get_parser(self, prog_name):
|
|
503
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
491
504
|
parser = super().get_parser(prog_name)
|
|
492
505
|
parser.add_argument(
|
|
493
506
|
'subnet_pool',
|
|
@@ -497,7 +510,7 @@ class UnsetSubnetPool(command.Command):
|
|
|
497
510
|
_tag.add_tag_option_to_parser_for_unset(parser, _('subnet pool'))
|
|
498
511
|
return parser
|
|
499
512
|
|
|
500
|
-
def take_action(self, parsed_args):
|
|
513
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
501
514
|
client = self.app.client_manager.network
|
|
502
515
|
obj = client.find_subnet_pool(
|
|
503
516
|
parsed_args.subnet_pool, ignore_missing=False
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
# License for the specific language governing permissions and limitations
|
|
13
13
|
# under the License.
|
|
14
14
|
|
|
15
|
+
import argparse
|
|
15
16
|
import logging
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
18
|
+
from typing import Any
|
|
16
19
|
|
|
17
20
|
from osc_lib.cli import format_columns
|
|
18
21
|
from osc_lib.cli import identity as identity_utils
|
|
@@ -45,7 +48,7 @@ _formatters = {
|
|
|
45
48
|
}
|
|
46
49
|
|
|
47
50
|
|
|
48
|
-
def _add_updatable_args(parser):
|
|
51
|
+
def _add_updatable_args(parser: argparse.ArgumentParser) -> None:
|
|
49
52
|
parser.add_argument('--name', help=_('Name of the tap flow.'))
|
|
50
53
|
parser.add_argument(
|
|
51
54
|
'--description', help=_('Description of the tap flow.')
|
|
@@ -55,7 +58,7 @@ def _add_updatable_args(parser):
|
|
|
55
58
|
class CreateTapFlow(command.ShowOne):
|
|
56
59
|
_description = _("Create a new tap flow.")
|
|
57
60
|
|
|
58
|
-
def get_parser(self, prog_name):
|
|
61
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
59
62
|
parser = super().get_parser(prog_name)
|
|
60
63
|
identity_utils.add_project_owner_option_to_parser(parser)
|
|
61
64
|
_add_updatable_args(parser)
|
|
@@ -92,7 +95,9 @@ class CreateTapFlow(command.ShowOne):
|
|
|
92
95
|
)
|
|
93
96
|
return parser
|
|
94
97
|
|
|
95
|
-
def take_action(
|
|
98
|
+
def take_action(
|
|
99
|
+
self, parsed_args: argparse.Namespace
|
|
100
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
96
101
|
client = self.app.client_manager.network
|
|
97
102
|
attrs = {}
|
|
98
103
|
if parsed_args.name is not None:
|
|
@@ -128,13 +133,15 @@ class CreateTapFlow(command.ShowOne):
|
|
|
128
133
|
class ListTapFlow(command.Lister):
|
|
129
134
|
_description = _("List tap flows.")
|
|
130
135
|
|
|
131
|
-
def get_parser(self, prog_name):
|
|
136
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
132
137
|
parser = super().get_parser(prog_name)
|
|
133
138
|
identity_utils.add_project_owner_option_to_parser(parser)
|
|
134
139
|
|
|
135
140
|
return parser
|
|
136
141
|
|
|
137
|
-
def take_action(
|
|
142
|
+
def take_action(
|
|
143
|
+
self, parsed_args: argparse.Namespace
|
|
144
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
138
145
|
client = self.app.client_manager.network
|
|
139
146
|
params = {}
|
|
140
147
|
if parsed_args.project is not None:
|
|
@@ -161,7 +168,7 @@ class ListTapFlow(command.Lister):
|
|
|
161
168
|
class ShowTapFlow(command.ShowOne):
|
|
162
169
|
_description = _("Show tap flow details.")
|
|
163
170
|
|
|
164
|
-
def get_parser(self, prog_name):
|
|
171
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
165
172
|
parser = super().get_parser(prog_name)
|
|
166
173
|
parser.add_argument(
|
|
167
174
|
TAP_FLOW,
|
|
@@ -170,7 +177,9 @@ class ShowTapFlow(command.ShowOne):
|
|
|
170
177
|
)
|
|
171
178
|
return parser
|
|
172
179
|
|
|
173
|
-
def take_action(
|
|
180
|
+
def take_action(
|
|
181
|
+
self, parsed_args: argparse.Namespace
|
|
182
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
174
183
|
client = self.app.client_manager.network
|
|
175
184
|
id = client.find_tap_flow(
|
|
176
185
|
parsed_args.tap_flow, ignore_missing=False
|
|
@@ -184,7 +193,7 @@ class ShowTapFlow(command.ShowOne):
|
|
|
184
193
|
class DeleteTapFlow(command.Command):
|
|
185
194
|
_description = _("Delete a tap flow.")
|
|
186
195
|
|
|
187
|
-
def get_parser(self, prog_name):
|
|
196
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
188
197
|
parser = super().get_parser(prog_name)
|
|
189
198
|
parser.add_argument(
|
|
190
199
|
TAP_FLOW,
|
|
@@ -194,7 +203,7 @@ class DeleteTapFlow(command.Command):
|
|
|
194
203
|
)
|
|
195
204
|
return parser
|
|
196
205
|
|
|
197
|
-
def take_action(self, parsed_args):
|
|
206
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
198
207
|
client = self.app.client_manager.network
|
|
199
208
|
fails = 0
|
|
200
209
|
for id_or_name in parsed_args.tap_flow:
|
|
@@ -219,7 +228,7 @@ class DeleteTapFlow(command.Command):
|
|
|
219
228
|
class UpdateTapFlow(command.ShowOne):
|
|
220
229
|
_description = _("Update a tap flow.")
|
|
221
230
|
|
|
222
|
-
def get_parser(self, prog_name):
|
|
231
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
223
232
|
parser = super().get_parser(prog_name)
|
|
224
233
|
parser.add_argument(
|
|
225
234
|
TAP_FLOW,
|
|
@@ -229,7 +238,9 @@ class UpdateTapFlow(command.ShowOne):
|
|
|
229
238
|
_add_updatable_args(parser)
|
|
230
239
|
return parser
|
|
231
240
|
|
|
232
|
-
def take_action(
|
|
241
|
+
def take_action(
|
|
242
|
+
self, parsed_args: argparse.Namespace
|
|
243
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
233
244
|
client = self.app.client_manager.network
|
|
234
245
|
original_t_f = client.find_tap_flow(
|
|
235
246
|
parsed_args.tap_flow, ignore_missing=False
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
# License for the specific language governing permissions and limitations
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
|
+
import argparse
|
|
13
14
|
import logging
|
|
15
|
+
from collections.abc import Iterable, Sequence
|
|
16
|
+
from typing import Any
|
|
14
17
|
|
|
15
18
|
from osc_lib.cli import identity as identity_utils
|
|
16
19
|
from osc_lib import exceptions
|
|
@@ -39,7 +42,7 @@ _attr_map = [
|
|
|
39
42
|
]
|
|
40
43
|
|
|
41
44
|
|
|
42
|
-
def _get_columns(item):
|
|
45
|
+
def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
43
46
|
column_map: dict[str, str] = {}
|
|
44
47
|
hidden_columns = ['location', 'tenant_id']
|
|
45
48
|
return osc_utils.get_osc_show_columns_for_sdk_resource(
|
|
@@ -50,7 +53,7 @@ def _get_columns(item):
|
|
|
50
53
|
class CreateTapMirror(command.ShowOne):
|
|
51
54
|
_description = _("Create a new tap mirror.")
|
|
52
55
|
|
|
53
|
-
def get_parser(self, prog_name):
|
|
56
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
54
57
|
parser = super().get_parser(prog_name)
|
|
55
58
|
identity_utils.add_project_owner_option_to_parser(parser)
|
|
56
59
|
tap_service._add_updatable_args(parser)
|
|
@@ -88,7 +91,9 @@ class CreateTapMirror(command.ShowOne):
|
|
|
88
91
|
)
|
|
89
92
|
return parser
|
|
90
93
|
|
|
91
|
-
def take_action(
|
|
94
|
+
def take_action(
|
|
95
|
+
self, parsed_args: argparse.Namespace
|
|
96
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
92
97
|
client = self.app.client_manager.network
|
|
93
98
|
attrs = {}
|
|
94
99
|
if parsed_args.name is not None:
|
|
@@ -121,13 +126,15 @@ class CreateTapMirror(command.ShowOne):
|
|
|
121
126
|
class ListTapMirror(command.Lister):
|
|
122
127
|
_description = _("List tap mirrors.")
|
|
123
128
|
|
|
124
|
-
def get_parser(self, prog_name):
|
|
129
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
125
130
|
parser = super().get_parser(prog_name)
|
|
126
131
|
identity_utils.add_project_owner_option_to_parser(parser)
|
|
127
132
|
|
|
128
133
|
return parser
|
|
129
134
|
|
|
130
|
-
def take_action(
|
|
135
|
+
def take_action(
|
|
136
|
+
self, parsed_args: argparse.Namespace
|
|
137
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
131
138
|
client = self.app.client_manager.network
|
|
132
139
|
params = {}
|
|
133
140
|
if parsed_args.project is not None:
|
|
@@ -149,7 +156,7 @@ class ListTapMirror(command.Lister):
|
|
|
149
156
|
class ShowTapMirror(command.ShowOne):
|
|
150
157
|
_description = _("Show tap mirror details.")
|
|
151
158
|
|
|
152
|
-
def get_parser(self, prog_name):
|
|
159
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
153
160
|
parser = super().get_parser(prog_name)
|
|
154
161
|
parser.add_argument(
|
|
155
162
|
TAP_MIRROR,
|
|
@@ -158,7 +165,9 @@ class ShowTapMirror(command.ShowOne):
|
|
|
158
165
|
)
|
|
159
166
|
return parser
|
|
160
167
|
|
|
161
|
-
def take_action(
|
|
168
|
+
def take_action(
|
|
169
|
+
self, parsed_args: argparse.Namespace
|
|
170
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
162
171
|
client = self.app.client_manager.network
|
|
163
172
|
id = client.find_tap_mirror(
|
|
164
173
|
parsed_args.tap_mirror, ignore_missing=False
|
|
@@ -172,7 +181,7 @@ class ShowTapMirror(command.ShowOne):
|
|
|
172
181
|
class DeleteTapMirror(command.Command):
|
|
173
182
|
_description = _("Delete a tap mirror.")
|
|
174
183
|
|
|
175
|
-
def get_parser(self, prog_name):
|
|
184
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
176
185
|
parser = super().get_parser(prog_name)
|
|
177
186
|
parser.add_argument(
|
|
178
187
|
TAP_MIRROR,
|
|
@@ -182,7 +191,7 @@ class DeleteTapMirror(command.Command):
|
|
|
182
191
|
)
|
|
183
192
|
return parser
|
|
184
193
|
|
|
185
|
-
def take_action(self, parsed_args):
|
|
194
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
186
195
|
client = self.app.client_manager.network
|
|
187
196
|
fails = 0
|
|
188
197
|
for id_or_name in parsed_args.tap_mirror:
|
|
@@ -211,7 +220,7 @@ class DeleteTapMirror(command.Command):
|
|
|
211
220
|
class UpdateTapMirror(command.ShowOne):
|
|
212
221
|
_description = _("Update a tap mirror.")
|
|
213
222
|
|
|
214
|
-
def get_parser(self, prog_name):
|
|
223
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
215
224
|
parser = super().get_parser(prog_name)
|
|
216
225
|
parser.add_argument(
|
|
217
226
|
TAP_MIRROR,
|
|
@@ -221,7 +230,9 @@ class UpdateTapMirror(command.ShowOne):
|
|
|
221
230
|
tap_service._add_updatable_args(parser)
|
|
222
231
|
return parser
|
|
223
232
|
|
|
224
|
-
def take_action(
|
|
233
|
+
def take_action(
|
|
234
|
+
self, parsed_args: argparse.Namespace
|
|
235
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
225
236
|
client = self.app.client_manager.network
|
|
226
237
|
original_t_s = client.find_tap_mirror(
|
|
227
238
|
parsed_args.tap_mirror, ignore_missing=False
|