python-openstackclient 9.0.0__py3-none-any.whl → 10.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +59 -43
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +36 -34
- openstackclient/common/pagination.py +50 -6
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +11 -6
- openstackclient/common/quota.py +105 -103
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +42 -22
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +16 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +35 -16
- openstackclient/compute/v2/server.py +268 -179
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +28 -12
- openstackclient/compute/v2/server_group.py +23 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +27 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +13 -5
- openstackclient/compute/v2/service.py +17 -8
- openstackclient/compute/v2/usage.py +28 -23
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +82 -47
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +23 -11
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +32 -12
- openstackclient/identity/v3/application_credential.py +66 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +39 -17
- openstackclient/identity/v3/domain.py +40 -19
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +98 -64
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +44 -20
- openstackclient/identity/v3/group.py +64 -40
- openstackclient/identity/v3/identity_provider.py +95 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +42 -17
- openstackclient/identity/v3/mapping.py +58 -28
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +59 -26
- openstackclient/identity/v3/region.py +39 -17
- openstackclient/identity/v3/registered_limit.py +41 -16
- openstackclient/identity/v3/role.py +62 -31
- openstackclient/identity/v3/role_assignment.py +25 -7
- openstackclient/identity/v3/service.py +39 -17
- openstackclient/identity/v3/service_provider.py +40 -16
- openstackclient/identity/v3/tag.py +23 -6
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +39 -18
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +86 -36
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +16 -11
- openstackclient/image/v2/image.py +88 -56
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +117 -20
- openstackclient/image/v2/metadef_objects.py +32 -19
- openstackclient/image/v2/metadef_properties.py +30 -16
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +25 -27
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +27 -54
- openstackclient/network/v2/address_group.py +39 -16
- openstackclient/network/v2/address_scope.py +36 -20
- openstackclient/network/v2/bgpvpn/bgpvpn.py +477 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +226 -0
- openstackclient/network/v2/bgpvpn/port_association.py +504 -0
- openstackclient/network/v2/bgpvpn/router_association.py +301 -0
- openstackclient/network/v2/default_security_group_rule.py +31 -14
- openstackclient/network/v2/floating_ip.py +121 -162
- openstackclient/network/v2/floating_ip_port_forwarding.py +41 -19
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +499 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +610 -0
- openstackclient/network/v2/ip_availability.py +25 -8
- openstackclient/network/v2/l3_conntrack_helper.py +35 -13
- openstackclient/network/v2/local_ip.py +27 -13
- openstackclient/network/v2/local_ip_association.py +17 -7
- openstackclient/network/v2/ndp_proxy.py +23 -11
- openstackclient/network/v2/network.py +213 -213
- openstackclient/network/v2/network_agent.py +77 -34
- openstackclient/network/v2/network_auto_allocated_topology.py +27 -15
- openstackclient/network/v2/network_flavor.py +45 -21
- openstackclient/network/v2/network_flavor_profile.py +42 -17
- openstackclient/network/v2/network_meter.py +39 -15
- openstackclient/network/v2/network_meter_rule.py +40 -12
- openstackclient/network/v2/network_qos_policy.py +39 -21
- openstackclient/network/v2/network_qos_rule.py +48 -18
- openstackclient/network/v2/network_qos_rule_type.py +28 -9
- openstackclient/network/v2/network_rbac.py +34 -16
- openstackclient/network/v2/network_segment.py +32 -11
- openstackclient/network/v2/network_segment_range.py +70 -31
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +41 -22
- openstackclient/network/v2/port.py +141 -40
- openstackclient/network/v2/router.py +101 -67
- openstackclient/network/v2/security_group.py +97 -198
- openstackclient/network/v2/security_group_rule.py +115 -282
- openstackclient/network/v2/subnet.py +63 -34
- openstackclient/network/v2/subnet_pool.py +42 -24
- openstackclient/network/v2/taas/tap_flow.py +35 -14
- openstackclient/network/v2/taas/tap_mirror.py +28 -14
- openstackclient/network/v2/taas/tap_service.py +26 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +28 -16
- openstackclient/object/v1/object.py +28 -16
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +59 -19
- openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_limits.py +1 -1
- openstackclient/tests/unit/common/test_module.py +82 -44
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +15 -26
- openstackclient/tests/unit/compute/v2/fakes.py +26 -57
- openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
- openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
- openstackclient/tests/unit/compute/v2/test_console.py +2 -2
- openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
- openstackclient/tests/unit/compute/v2/test_flavor.py +29 -3
- openstackclient/tests/unit/compute/v2/test_host.py +3 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
- openstackclient/tests/unit/compute/v2/test_keypair.py +7 -7
- openstackclient/tests/unit/compute/v2/test_server.py +26 -111
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
- openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
- openstackclient/tests/unit/compute/v2/test_service.py +3 -3
- openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
- openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
- openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
- openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
- openstackclient/tests/unit/identity/v3/fakes.py +8 -38
- openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
- openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
- openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
- openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
- openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
- openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +12 -22
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
- openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
- openstackclient/tests/unit/identity/v3/test_project.py +28 -5
- openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
- openstackclient/tests/unit/identity/v3/test_region.py +5 -5
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_role.py +8 -8
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v3/test_service.py +5 -5
- openstackclient/tests/unit/identity/v3/test_token.py +2 -2
- openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
- openstackclient/tests/unit/identity/v3/test_user.py +77 -10
- openstackclient/tests/unit/image/v2/test_image.py +11 -11
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fakes.py +5 -77
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +923 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +1005 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +26 -2
- openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +27 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +37 -13
- openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
- openstackclient/tests/unit/network/v2/test_network.py +74 -12
- openstackclient/tests/unit/network/v2/test_network_agent.py +58 -5
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +26 -2
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_rbac.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +31 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_port.py +166 -0
- openstackclient/tests/unit/network/v2/test_router.py +36 -16
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +11 -8
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +28 -37
- openstackclient/tests/unit/network/v2/test_subnet.py +30 -5
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +26 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +21 -140
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +8 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +205 -100
- openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
- openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
- openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +61 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +29 -17
- openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
- openstackclient/volume/v2/qos_specs.py +28 -17
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +60 -30
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -23
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +49 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- openstackclient/volume/v3/backup_record.py +94 -0
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/consistency_group.py +400 -0
- openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
- openstackclient/volume/v3/qos_specs.py +389 -0
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +92 -40
- openstackclient/volume/v3/volume_attachment.py +47 -21
- openstackclient/volume/v3/volume_backend.py +130 -0
- openstackclient/volume/v3/volume_backup.py +55 -27
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +34 -17
- openstackclient/volume/v3/volume_group_type.py +27 -14
- openstackclient/volume/v3/volume_host.py +74 -0
- openstackclient/volume/v3/volume_message.py +18 -8
- openstackclient/volume/v3/volume_snapshot.py +70 -32
- openstackclient/volume/v3/volume_transfer_request.py +31 -13
- openstackclient/volume/v3/volume_type.py +42 -24
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +7 -8
- python_openstackclient-10.1.0.dist-info/RECORD +524 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +77 -25
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +9 -0
- python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-9.0.0.dist-info/RECORD +0 -499
- python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
|
@@ -14,13 +14,15 @@
|
|
|
14
14
|
"""Router action implementations"""
|
|
15
15
|
|
|
16
16
|
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
17
18
|
import collections
|
|
18
19
|
import copy
|
|
19
20
|
import json
|
|
20
21
|
import logging
|
|
21
|
-
|
|
22
|
+
from typing import Any
|
|
22
23
|
|
|
23
24
|
from cliff import columns as cliff_columns
|
|
25
|
+
from openstack.network.v2 import router as _router
|
|
24
26
|
from osc_lib.cli import format_columns
|
|
25
27
|
from osc_lib.cli import parseractions
|
|
26
28
|
from osc_lib import exceptions
|
|
@@ -28,6 +30,7 @@ from osc_lib import utils
|
|
|
28
30
|
from osc_lib.utils import tags as _tag
|
|
29
31
|
|
|
30
32
|
from openstackclient import command
|
|
33
|
+
from openstackclient.common import pagination
|
|
31
34
|
from openstackclient.i18n import _
|
|
32
35
|
from openstackclient.identity import common as identity_common
|
|
33
36
|
from openstackclient.network import common
|
|
@@ -36,25 +39,25 @@ LOG = logging.getLogger(__name__)
|
|
|
36
39
|
|
|
37
40
|
|
|
38
41
|
class AdminStateColumn(cliff_columns.FormattableColumn[bool]):
|
|
39
|
-
def human_readable(self):
|
|
42
|
+
def human_readable(self) -> str:
|
|
40
43
|
return 'UP' if self._value else 'DOWN'
|
|
41
44
|
|
|
42
45
|
|
|
43
|
-
class RouterInfoColumn(cliff_columns.FormattableColumn[
|
|
44
|
-
def human_readable(self):
|
|
46
|
+
class RouterInfoColumn(cliff_columns.FormattableColumn[Any]):
|
|
47
|
+
def human_readable(self) -> str:
|
|
45
48
|
try:
|
|
46
49
|
return json.dumps(self._value)
|
|
47
50
|
except (TypeError, KeyError):
|
|
48
51
|
return ''
|
|
49
52
|
|
|
50
53
|
|
|
51
|
-
class RoutesColumn(cliff_columns.FormattableColumn[
|
|
52
|
-
def human_readable(self):
|
|
54
|
+
class RoutesColumn(cliff_columns.FormattableColumn[Any]):
|
|
55
|
+
def human_readable(self) -> str:
|
|
53
56
|
# Map the route keys to match --route option.
|
|
54
57
|
for route in self._value or []:
|
|
55
58
|
if 'nexthop' in route:
|
|
56
59
|
route['gateway'] = route.pop('nexthop')
|
|
57
|
-
return utils.format_list_of_dicts(self._value)
|
|
60
|
+
return utils.format_list_of_dicts(self._value) or ""
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
_formatters = {
|
|
@@ -68,7 +71,9 @@ _formatters = {
|
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
|
|
71
|
-
def _get_columns(
|
|
74
|
+
def _get_columns(
|
|
75
|
+
item: _router.Router,
|
|
76
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
72
77
|
column_map = {
|
|
73
78
|
'is_ha': 'ha',
|
|
74
79
|
'is_distributed': 'distributed',
|
|
@@ -76,19 +81,21 @@ def _get_columns(item):
|
|
|
76
81
|
}
|
|
77
82
|
if hasattr(item, 'interfaces_info'):
|
|
78
83
|
column_map['interfaces_info'] = 'interfaces_info'
|
|
79
|
-
|
|
84
|
+
hidden_columns = ['location', 'tenant_id']
|
|
80
85
|
if item.is_ha is None:
|
|
81
|
-
|
|
86
|
+
hidden_columns.append('is_ha')
|
|
82
87
|
column_map.pop('is_ha')
|
|
83
88
|
if item.is_distributed is None:
|
|
84
|
-
|
|
89
|
+
hidden_columns.append('is_distributed')
|
|
85
90
|
column_map.pop('is_distributed')
|
|
91
|
+
if not hasattr(item, 'evpn_vni'):
|
|
92
|
+
hidden_columns.append('evpn_vni')
|
|
86
93
|
return utils.get_osc_show_columns_for_sdk_resource(
|
|
87
|
-
item, column_map,
|
|
94
|
+
item, column_map, hidden_columns
|
|
88
95
|
)
|
|
89
96
|
|
|
90
97
|
|
|
91
|
-
def is_multiple_gateways_supported(n_client):
|
|
98
|
+
def is_multiple_gateways_supported(n_client: Any) -> bool:
|
|
92
99
|
return (
|
|
93
100
|
n_client.find_extension(
|
|
94
101
|
"external-gateway-multihoming", ignore_missing=True
|
|
@@ -97,7 +104,9 @@ def is_multiple_gateways_supported(n_client):
|
|
|
97
104
|
)
|
|
98
105
|
|
|
99
106
|
|
|
100
|
-
def _passed_multiple_gateways(
|
|
107
|
+
def _passed_multiple_gateways(
|
|
108
|
+
extension_supported: bool, external_gateways: list[Any]
|
|
109
|
+
) -> bool:
|
|
101
110
|
passed_multiple_gws = len(external_gateways) > 1
|
|
102
111
|
if passed_multiple_gws and not extension_supported:
|
|
103
112
|
msg = _(
|
|
@@ -109,13 +118,15 @@ def _passed_multiple_gateways(extension_supported, external_gateways):
|
|
|
109
118
|
return passed_multiple_gws
|
|
110
119
|
|
|
111
120
|
|
|
112
|
-
def _get_external_gateway_attrs(
|
|
113
|
-
|
|
121
|
+
def _get_external_gateway_attrs(
|
|
122
|
+
client_manager: Any, parsed_args: argparse.Namespace
|
|
123
|
+
) -> dict[str, Any]:
|
|
124
|
+
attrs: dict[str, Any] = {}
|
|
114
125
|
|
|
115
126
|
if parsed_args.external_gateways:
|
|
116
|
-
external_gateways: collections.defaultdict[
|
|
117
|
-
|
|
118
|
-
)
|
|
127
|
+
external_gateways: collections.defaultdict[
|
|
128
|
+
str, list[dict[str, Any]]
|
|
129
|
+
] = collections.defaultdict(list)
|
|
119
130
|
n_client = client_manager.network
|
|
120
131
|
first_network_id = ''
|
|
121
132
|
|
|
@@ -206,8 +217,10 @@ def _get_external_gateway_attrs(client_manager, parsed_args):
|
|
|
206
217
|
return attrs
|
|
207
218
|
|
|
208
219
|
|
|
209
|
-
def _get_attrs(
|
|
210
|
-
|
|
220
|
+
def _get_attrs(
|
|
221
|
+
client_manager: Any, parsed_args: argparse.Namespace
|
|
222
|
+
) -> dict[str, Any]:
|
|
223
|
+
attrs: dict[str, Any] = {}
|
|
211
224
|
n_client = client_manager.network
|
|
212
225
|
|
|
213
226
|
if parsed_args.name is not None:
|
|
@@ -257,7 +270,7 @@ def _get_attrs(client_manager, parsed_args):
|
|
|
257
270
|
return attrs
|
|
258
271
|
|
|
259
272
|
|
|
260
|
-
def _parser_add_bfd_ecmp_arguments(parser):
|
|
273
|
+
def _parser_add_bfd_ecmp_arguments(parser: argparse.ArgumentParser) -> None:
|
|
261
274
|
"""Helper to add BFD and ECMP args for CreateRouter and SetRouter."""
|
|
262
275
|
parser.add_argument(
|
|
263
276
|
'--enable-default-route-bfd',
|
|
@@ -298,7 +311,9 @@ def _parser_add_bfd_ecmp_arguments(parser):
|
|
|
298
311
|
)
|
|
299
312
|
|
|
300
313
|
|
|
301
|
-
def _command_check_bfd_ecmp_supported(
|
|
314
|
+
def _command_check_bfd_ecmp_supported(
|
|
315
|
+
attrs: dict[str, Any], client: Any
|
|
316
|
+
) -> None:
|
|
302
317
|
"""Helper to check for server side support when bfd/ecmp attrs provided.
|
|
303
318
|
|
|
304
319
|
:raises: exceptions.CommandError
|
|
@@ -318,7 +333,7 @@ def _command_check_bfd_ecmp_supported(attrs, client):
|
|
|
318
333
|
class AddPortToRouter(command.Command):
|
|
319
334
|
_description = _("Add a port to a router")
|
|
320
335
|
|
|
321
|
-
def get_parser(self, prog_name):
|
|
336
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
322
337
|
parser = super().get_parser(prog_name)
|
|
323
338
|
parser.add_argument(
|
|
324
339
|
'router',
|
|
@@ -330,19 +345,19 @@ class AddPortToRouter(command.Command):
|
|
|
330
345
|
)
|
|
331
346
|
return parser
|
|
332
347
|
|
|
333
|
-
def take_action(self, parsed_args):
|
|
348
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
334
349
|
client = self.app.client_manager.network
|
|
335
350
|
port = client.find_port(parsed_args.port, ignore_missing=False)
|
|
336
351
|
client.add_interface_to_router(
|
|
337
352
|
client.find_router(parsed_args.router, ignore_missing=False),
|
|
338
|
-
|
|
353
|
+
port=port.id,
|
|
339
354
|
)
|
|
340
355
|
|
|
341
356
|
|
|
342
357
|
class AddSubnetToRouter(command.Command):
|
|
343
358
|
_description = _("Add a subnet to a router")
|
|
344
359
|
|
|
345
|
-
def get_parser(self, prog_name):
|
|
360
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
346
361
|
parser = super().get_parser(prog_name)
|
|
347
362
|
parser.add_argument(
|
|
348
363
|
'router',
|
|
@@ -356,19 +371,19 @@ class AddSubnetToRouter(command.Command):
|
|
|
356
371
|
)
|
|
357
372
|
return parser
|
|
358
373
|
|
|
359
|
-
def take_action(self, parsed_args):
|
|
374
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
360
375
|
client = self.app.client_manager.network
|
|
361
376
|
subnet = client.find_subnet(parsed_args.subnet, ignore_missing=False)
|
|
362
377
|
client.add_interface_to_router(
|
|
363
378
|
client.find_router(parsed_args.router, ignore_missing=False),
|
|
364
|
-
|
|
379
|
+
subnet=subnet.id,
|
|
365
380
|
)
|
|
366
381
|
|
|
367
382
|
|
|
368
383
|
class AddExtraRoutesToRouter(command.ShowOne):
|
|
369
384
|
_description = _("Add extra static routes to a router's routing table.")
|
|
370
385
|
|
|
371
|
-
def get_parser(self, prog_name):
|
|
386
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
372
387
|
parser = super().get_parser(prog_name)
|
|
373
388
|
parser.add_argument(
|
|
374
389
|
'router',
|
|
@@ -398,7 +413,9 @@ class AddExtraRoutesToRouter(command.ShowOne):
|
|
|
398
413
|
)
|
|
399
414
|
return parser
|
|
400
415
|
|
|
401
|
-
def take_action(
|
|
416
|
+
def take_action(
|
|
417
|
+
self, parsed_args: argparse.Namespace
|
|
418
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
402
419
|
if parsed_args.routes is not None:
|
|
403
420
|
for route in parsed_args.routes:
|
|
404
421
|
route['nexthop'] = route.pop('gateway')
|
|
@@ -419,7 +436,7 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
|
|
|
419
436
|
"Remove extra static routes from a router's routing table."
|
|
420
437
|
)
|
|
421
438
|
|
|
422
|
-
def get_parser(self, prog_name):
|
|
439
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
423
440
|
parser = super().get_parser(prog_name)
|
|
424
441
|
parser.add_argument(
|
|
425
442
|
'router',
|
|
@@ -449,7 +466,9 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
|
|
|
449
466
|
)
|
|
450
467
|
return parser
|
|
451
468
|
|
|
452
|
-
def take_action(
|
|
469
|
+
def take_action(
|
|
470
|
+
self, parsed_args: argparse.Namespace
|
|
471
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
453
472
|
if parsed_args.routes is not None:
|
|
454
473
|
for route in parsed_args.routes:
|
|
455
474
|
route['nexthop'] = route.pop('gateway')
|
|
@@ -465,12 +484,10 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
|
|
|
465
484
|
return (display_columns, data)
|
|
466
485
|
|
|
467
486
|
|
|
468
|
-
# TODO(yanxing'an): Use the SDK resource mapped attribute names once the
|
|
469
|
-
# OSC minimum requirements include SDK 1.0.
|
|
470
487
|
class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
471
488
|
_description = _("Create a new router")
|
|
472
489
|
|
|
473
|
-
def get_parser(self, prog_name):
|
|
490
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
474
491
|
parser = super().get_parser(prog_name)
|
|
475
492
|
parser.add_argument(
|
|
476
493
|
'name', metavar='<name>', help=_("New router name")
|
|
@@ -597,7 +614,9 @@ class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
597
614
|
|
|
598
615
|
return parser
|
|
599
616
|
|
|
600
|
-
def take_action(
|
|
617
|
+
def take_action(
|
|
618
|
+
self, parsed_args: argparse.Namespace
|
|
619
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
601
620
|
client = self.app.client_manager.network
|
|
602
621
|
|
|
603
622
|
attrs = _get_attrs(self.app.client_manager, parsed_args)
|
|
@@ -661,7 +680,7 @@ class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
661
680
|
class DeleteRouter(command.Command):
|
|
662
681
|
_description = _("Delete router(s)")
|
|
663
682
|
|
|
664
|
-
def get_parser(self, prog_name):
|
|
683
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
665
684
|
parser = super().get_parser(prog_name)
|
|
666
685
|
parser.add_argument(
|
|
667
686
|
'router',
|
|
@@ -671,7 +690,7 @@ class DeleteRouter(command.Command):
|
|
|
671
690
|
)
|
|
672
691
|
return parser
|
|
673
692
|
|
|
674
|
-
def take_action(self, parsed_args):
|
|
693
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
675
694
|
client = self.app.client_manager.network
|
|
676
695
|
result = 0
|
|
677
696
|
|
|
@@ -698,12 +717,10 @@ class DeleteRouter(command.Command):
|
|
|
698
717
|
raise exceptions.CommandError(msg)
|
|
699
718
|
|
|
700
719
|
|
|
701
|
-
# TODO(yanxing'an): Use the SDK resource mapped attribute names once the
|
|
702
|
-
# OSC minimum requirements include SDK 1.0.
|
|
703
720
|
class ListRouter(command.Lister):
|
|
704
721
|
_description = _("List routers")
|
|
705
722
|
|
|
706
|
-
def get_parser(self, prog_name):
|
|
723
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
707
724
|
parser = super().get_parser(prog_name)
|
|
708
725
|
parser.add_argument(
|
|
709
726
|
'--name',
|
|
@@ -739,10 +756,13 @@ class ListRouter(command.Lister):
|
|
|
739
756
|
),
|
|
740
757
|
)
|
|
741
758
|
_tag.add_tag_filtering_option_to_parser(parser, _('routers'))
|
|
759
|
+
pagination.add_marker_pagination_option_to_parser(parser)
|
|
742
760
|
|
|
743
761
|
return parser
|
|
744
762
|
|
|
745
|
-
def take_action(
|
|
763
|
+
def take_action(
|
|
764
|
+
self, parsed_args: argparse.Namespace
|
|
765
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
746
766
|
identity_client = self.app.client_manager.identity
|
|
747
767
|
client = self.app.client_manager.network
|
|
748
768
|
|
|
@@ -781,16 +801,26 @@ class ListRouter(command.Lister):
|
|
|
781
801
|
).id
|
|
782
802
|
args['project_id'] = project_id
|
|
783
803
|
|
|
804
|
+
if parsed_args.marker is not None:
|
|
805
|
+
args['marker'] = parsed_args.marker
|
|
806
|
+
if parsed_args.limit is not None:
|
|
807
|
+
args['limit'] = parsed_args.limit
|
|
808
|
+
if parsed_args.max_items is not None:
|
|
809
|
+
args['max_items'] = parsed_args.max_items
|
|
810
|
+
|
|
784
811
|
_tag.get_tag_filtering_args(parsed_args, args)
|
|
785
812
|
|
|
786
|
-
if parsed_args.agent is
|
|
813
|
+
if parsed_args.agent is None:
|
|
814
|
+
data = list(client.routers(**args))
|
|
815
|
+
else:
|
|
787
816
|
agent = client.get_agent(parsed_args.agent)
|
|
788
|
-
data = client.agent_hosted_routers(agent)
|
|
789
817
|
# NOTE: Networking API does not support filtering by parameters,
|
|
790
818
|
# so we need filtering in the client side.
|
|
791
|
-
data = [
|
|
792
|
-
|
|
793
|
-
|
|
819
|
+
data = [
|
|
820
|
+
d
|
|
821
|
+
for d in client.agent_hosted_routers(agent)
|
|
822
|
+
if self._filter_match(d, args)
|
|
823
|
+
]
|
|
794
824
|
|
|
795
825
|
# check if "HA" and "Distributed" columns should be displayed also
|
|
796
826
|
data = list(data)
|
|
@@ -834,7 +864,7 @@ class ListRouter(command.Lister):
|
|
|
834
864
|
)
|
|
835
865
|
|
|
836
866
|
@staticmethod
|
|
837
|
-
def _filter_match(data, conditions):
|
|
867
|
+
def _filter_match(data: Any, conditions: dict[str, Any]) -> bool:
|
|
838
868
|
for key, value in conditions.items():
|
|
839
869
|
try:
|
|
840
870
|
if getattr(data, key) != value:
|
|
@@ -851,7 +881,7 @@ class ListRouter(command.Lister):
|
|
|
851
881
|
class RemovePortFromRouter(command.Command):
|
|
852
882
|
_description = _("Remove a port from a router")
|
|
853
883
|
|
|
854
|
-
def get_parser(self, prog_name):
|
|
884
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
855
885
|
parser = super().get_parser(prog_name)
|
|
856
886
|
parser.add_argument(
|
|
857
887
|
'router',
|
|
@@ -865,19 +895,19 @@ class RemovePortFromRouter(command.Command):
|
|
|
865
895
|
)
|
|
866
896
|
return parser
|
|
867
897
|
|
|
868
|
-
def take_action(self, parsed_args):
|
|
898
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
869
899
|
client = self.app.client_manager.network
|
|
870
900
|
port = client.find_port(parsed_args.port, ignore_missing=False)
|
|
871
901
|
client.remove_interface_from_router(
|
|
872
902
|
client.find_router(parsed_args.router, ignore_missing=False),
|
|
873
|
-
|
|
903
|
+
port=port.id,
|
|
874
904
|
)
|
|
875
905
|
|
|
876
906
|
|
|
877
907
|
class RemoveSubnetFromRouter(command.Command):
|
|
878
908
|
_description = _("Remove a subnet from a router")
|
|
879
909
|
|
|
880
|
-
def get_parser(self, prog_name):
|
|
910
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
881
911
|
parser = super().get_parser(prog_name)
|
|
882
912
|
parser.add_argument(
|
|
883
913
|
'router',
|
|
@@ -893,21 +923,19 @@ class RemoveSubnetFromRouter(command.Command):
|
|
|
893
923
|
)
|
|
894
924
|
return parser
|
|
895
925
|
|
|
896
|
-
def take_action(self, parsed_args):
|
|
926
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
897
927
|
client = self.app.client_manager.network
|
|
898
928
|
subnet = client.find_subnet(parsed_args.subnet, ignore_missing=False)
|
|
899
929
|
client.remove_interface_from_router(
|
|
900
930
|
client.find_router(parsed_args.router, ignore_missing=False),
|
|
901
|
-
|
|
931
|
+
subnet=subnet.id,
|
|
902
932
|
)
|
|
903
933
|
|
|
904
934
|
|
|
905
|
-
# TODO(yanxing'an): Use the SDK resource mapped attribute names once the
|
|
906
|
-
# OSC minimum requirements include SDK 1.0.
|
|
907
935
|
class SetRouter(common.NeutronCommandWithExtraArgs):
|
|
908
936
|
_description = _("Set router properties")
|
|
909
937
|
|
|
910
|
-
def get_parser(self, prog_name):
|
|
938
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
911
939
|
parser = super().get_parser(prog_name)
|
|
912
940
|
parser.add_argument(
|
|
913
941
|
'router',
|
|
@@ -1051,7 +1079,7 @@ class SetRouter(common.NeutronCommandWithExtraArgs):
|
|
|
1051
1079
|
_parser_add_bfd_ecmp_arguments(parser)
|
|
1052
1080
|
return parser
|
|
1053
1081
|
|
|
1054
|
-
def take_action(self, parsed_args):
|
|
1082
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
1055
1083
|
client = self.app.client_manager.network
|
|
1056
1084
|
obj = client.find_router(parsed_args.router, ignore_missing=False)
|
|
1057
1085
|
|
|
@@ -1141,7 +1169,7 @@ class SetRouter(common.NeutronCommandWithExtraArgs):
|
|
|
1141
1169
|
class ShowRouter(command.ShowOne):
|
|
1142
1170
|
_description = _("Display router details")
|
|
1143
1171
|
|
|
1144
|
-
def get_parser(self, prog_name):
|
|
1172
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
1145
1173
|
parser = super().get_parser(prog_name)
|
|
1146
1174
|
parser.add_argument(
|
|
1147
1175
|
'router',
|
|
@@ -1150,7 +1178,9 @@ class ShowRouter(command.ShowOne):
|
|
|
1150
1178
|
)
|
|
1151
1179
|
return parser
|
|
1152
1180
|
|
|
1153
|
-
def take_action(
|
|
1181
|
+
def take_action(
|
|
1182
|
+
self, parsed_args: argparse.Namespace
|
|
1183
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
1154
1184
|
client = self.app.client_manager.network
|
|
1155
1185
|
obj = client.find_router(parsed_args.router, ignore_missing=False)
|
|
1156
1186
|
interfaces_info = []
|
|
@@ -1177,7 +1207,7 @@ class ShowRouter(command.ShowOne):
|
|
|
1177
1207
|
class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
|
|
1178
1208
|
_description = _("Unset router properties")
|
|
1179
1209
|
|
|
1180
|
-
def get_parser(self, prog_name):
|
|
1210
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
1181
1211
|
parser = super().get_parser(prog_name)
|
|
1182
1212
|
parser.add_argument(
|
|
1183
1213
|
'--route',
|
|
@@ -1217,7 +1247,7 @@ class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
|
|
|
1217
1247
|
_tag.add_tag_option_to_parser_for_unset(parser, _('router'))
|
|
1218
1248
|
return parser
|
|
1219
1249
|
|
|
1220
|
-
def take_action(self, parsed_args):
|
|
1250
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
1221
1251
|
client = self.app.client_manager.network
|
|
1222
1252
|
obj = client.find_router(parsed_args.router, ignore_missing=False)
|
|
1223
1253
|
tmp_routes = copy.deepcopy(obj.routes)
|
|
@@ -1272,7 +1302,7 @@ class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
|
|
|
1272
1302
|
class AddGatewayToRouter(command.ShowOne):
|
|
1273
1303
|
_description = _("Add router gateway")
|
|
1274
1304
|
|
|
1275
|
-
def get_parser(self, prog_name):
|
|
1305
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
1276
1306
|
parser = super().get_parser(prog_name)
|
|
1277
1307
|
parser.add_argument(
|
|
1278
1308
|
'router',
|
|
@@ -1304,7 +1334,9 @@ class AddGatewayToRouter(command.ShowOne):
|
|
|
1304
1334
|
)
|
|
1305
1335
|
return parser
|
|
1306
1336
|
|
|
1307
|
-
def take_action(
|
|
1337
|
+
def take_action(
|
|
1338
|
+
self, parsed_args: argparse.Namespace
|
|
1339
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
1308
1340
|
client = self.app.client_manager.network
|
|
1309
1341
|
if not is_multiple_gateways_supported(client):
|
|
1310
1342
|
msg = _(
|
|
@@ -1339,7 +1371,7 @@ class AddGatewayToRouter(command.ShowOne):
|
|
|
1339
1371
|
class RemoveGatewayFromRouter(command.ShowOne):
|
|
1340
1372
|
_description = _("Remove router gateway")
|
|
1341
1373
|
|
|
1342
|
-
def get_parser(self, prog_name):
|
|
1374
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
1343
1375
|
parser = super().get_parser(prog_name)
|
|
1344
1376
|
parser.add_argument(
|
|
1345
1377
|
'router',
|
|
@@ -1371,7 +1403,9 @@ class RemoveGatewayFromRouter(command.ShowOne):
|
|
|
1371
1403
|
)
|
|
1372
1404
|
return parser
|
|
1373
1405
|
|
|
1374
|
-
def take_action(
|
|
1406
|
+
def take_action(
|
|
1407
|
+
self, parsed_args: argparse.Namespace
|
|
1408
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
1375
1409
|
client = self.app.client_manager.network
|
|
1376
1410
|
if not is_multiple_gateways_supported(client):
|
|
1377
1411
|
msg = _(
|