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
|
@@ -13,11 +13,14 @@
|
|
|
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
|
|
23
|
+
from openstack.network.v2 import subnet as _subnet
|
|
21
24
|
from osc_lib.cli import format_columns
|
|
22
25
|
from osc_lib.cli import parseractions
|
|
23
26
|
from osc_lib import exceptions
|
|
@@ -25,6 +28,7 @@ from osc_lib import utils
|
|
|
25
28
|
from osc_lib.utils import tags as _tag
|
|
26
29
|
|
|
27
30
|
from openstackclient import command
|
|
31
|
+
from openstackclient.common import pagination
|
|
28
32
|
from openstackclient.i18n import _
|
|
29
33
|
from openstackclient.identity import common as identity_common
|
|
30
34
|
from openstackclient.network import common
|
|
@@ -32,7 +36,9 @@ from openstackclient.network import common
|
|
|
32
36
|
LOG = logging.getLogger(__name__)
|
|
33
37
|
|
|
34
38
|
|
|
35
|
-
def _update_arguments(
|
|
39
|
+
def _update_arguments(
|
|
40
|
+
obj_list: list[Any], parsed_args_list: list[Any], option: str
|
|
41
|
+
) -> None:
|
|
36
42
|
for item in parsed_args_list:
|
|
37
43
|
try:
|
|
38
44
|
obj_list.remove(item)
|
|
@@ -44,8 +50,8 @@ def _update_arguments(obj_list, parsed_args_list, option):
|
|
|
44
50
|
raise exceptions.CommandError(msg)
|
|
45
51
|
|
|
46
52
|
|
|
47
|
-
class AllocationPoolsColumn(cliff_columns.FormattableColumn[
|
|
48
|
-
def human_readable(self):
|
|
53
|
+
class AllocationPoolsColumn(cliff_columns.FormattableColumn[Any]):
|
|
54
|
+
def human_readable(self) -> str:
|
|
49
55
|
pool_formatted = [
|
|
50
56
|
'{}-{}'.format(pool.get('start', ''), pool.get('end', ''))
|
|
51
57
|
for pool in self._value
|
|
@@ -53,18 +59,19 @@ class AllocationPoolsColumn(cliff_columns.FormattableColumn[ty.Any]):
|
|
|
53
59
|
return ','.join(pool_formatted)
|
|
54
60
|
|
|
55
61
|
|
|
56
|
-
class HostRoutesColumn(cliff_columns.FormattableColumn[
|
|
57
|
-
def human_readable(self):
|
|
62
|
+
class HostRoutesColumn(cliff_columns.FormattableColumn[Any]):
|
|
63
|
+
def human_readable(self) -> str:
|
|
58
64
|
# Map the host route keys to match --host-route option.
|
|
59
|
-
return
|
|
60
|
-
convert_entries_to_gateway(self._value)
|
|
65
|
+
return (
|
|
66
|
+
utils.format_list_of_dicts(convert_entries_to_gateway(self._value))
|
|
67
|
+
or ""
|
|
61
68
|
)
|
|
62
69
|
|
|
63
70
|
|
|
64
|
-
class UnsortedListColumn(cliff_columns.FormattableColumn[list[
|
|
71
|
+
class UnsortedListColumn(cliff_columns.FormattableColumn[list[Any]]):
|
|
65
72
|
# format_columns.ListColumn sorts the output, but for things like
|
|
66
73
|
# DNS server addresses the order matters
|
|
67
|
-
def human_readable(self):
|
|
74
|
+
def human_readable(self) -> str:
|
|
68
75
|
return ', '.join(self._value)
|
|
69
76
|
|
|
70
77
|
|
|
@@ -77,7 +84,9 @@ _formatters = {
|
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
|
|
80
|
-
def _get_common_parse_arguments(
|
|
87
|
+
def _get_common_parse_arguments(
|
|
88
|
+
parser: argparse.ArgumentParser, is_create: bool = True
|
|
89
|
+
) -> None:
|
|
81
90
|
parser.add_argument(
|
|
82
91
|
'--allocation-pool',
|
|
83
92
|
metavar='start=<ip-address>,end=<ip-address>',
|
|
@@ -159,7 +168,9 @@ def _get_common_parse_arguments(parser, is_create=True):
|
|
|
159
168
|
)
|
|
160
169
|
|
|
161
170
|
|
|
162
|
-
def _get_columns(
|
|
171
|
+
def _get_columns(
|
|
172
|
+
item: _subnet.Subnet,
|
|
173
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
163
174
|
column_map = {
|
|
164
175
|
'is_dhcp_enabled': 'enable_dhcp',
|
|
165
176
|
'subnet_pool_id': 'subnetpool_id',
|
|
@@ -176,7 +187,9 @@ def _get_columns(item):
|
|
|
176
187
|
)
|
|
177
188
|
|
|
178
189
|
|
|
179
|
-
def convert_entries_to_nexthop(
|
|
190
|
+
def convert_entries_to_nexthop(
|
|
191
|
+
entries: list[dict[str, Any]],
|
|
192
|
+
) -> list[dict[str, Any]]:
|
|
180
193
|
# Change 'gateway' entry to 'nexthop'
|
|
181
194
|
changed_entries = copy.deepcopy(entries)
|
|
182
195
|
for entry in changed_entries:
|
|
@@ -187,7 +200,9 @@ def convert_entries_to_nexthop(entries):
|
|
|
187
200
|
return changed_entries
|
|
188
201
|
|
|
189
202
|
|
|
190
|
-
def convert_entries_to_gateway(
|
|
203
|
+
def convert_entries_to_gateway(
|
|
204
|
+
entries: list[dict[str, Any]],
|
|
205
|
+
) -> list[dict[str, Any]]:
|
|
191
206
|
# Change 'nexthop' entry to 'gateway'
|
|
192
207
|
changed_entries = copy.deepcopy(entries)
|
|
193
208
|
for entry in changed_entries:
|
|
@@ -198,7 +213,11 @@ def convert_entries_to_gateway(entries):
|
|
|
198
213
|
return changed_entries
|
|
199
214
|
|
|
200
215
|
|
|
201
|
-
def _get_attrs(
|
|
216
|
+
def _get_attrs(
|
|
217
|
+
client_manager: Any,
|
|
218
|
+
parsed_args: argparse.Namespace,
|
|
219
|
+
is_create: bool = True,
|
|
220
|
+
) -> dict[str, Any]:
|
|
202
221
|
attrs = {}
|
|
203
222
|
client = client_manager.network
|
|
204
223
|
if 'name' in parsed_args and parsed_args.name is not None:
|
|
@@ -287,12 +306,10 @@ def _get_attrs(client_manager, parsed_args, is_create=True):
|
|
|
287
306
|
return attrs
|
|
288
307
|
|
|
289
308
|
|
|
290
|
-
# TODO(abhiraut): Use the SDK resource mapped attribute names once the
|
|
291
|
-
# OSC minimum requirements include SDK 1.0.
|
|
292
309
|
class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
293
310
|
_description = _("Create a subnet")
|
|
294
311
|
|
|
295
|
-
def get_parser(self, prog_name):
|
|
312
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
296
313
|
parser = super().get_parser(prog_name)
|
|
297
314
|
parser.add_argument(
|
|
298
315
|
'name', metavar='<name>', help=_("New subnet name")
|
|
@@ -419,7 +436,9 @@ class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
419
436
|
_tag.add_tag_option_to_parser_for_create(parser, _('subnet'))
|
|
420
437
|
return parser
|
|
421
438
|
|
|
422
|
-
def take_action(
|
|
439
|
+
def take_action(
|
|
440
|
+
self, parsed_args: argparse.Namespace
|
|
441
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
423
442
|
client = self.app.client_manager.network
|
|
424
443
|
attrs = _get_attrs(self.app.client_manager, parsed_args)
|
|
425
444
|
attrs.update(
|
|
@@ -436,7 +455,7 @@ class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
436
455
|
class DeleteSubnet(command.Command):
|
|
437
456
|
_description = _("Delete subnet(s)")
|
|
438
457
|
|
|
439
|
-
def get_parser(self, prog_name):
|
|
458
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
440
459
|
parser = super().get_parser(prog_name)
|
|
441
460
|
parser.add_argument(
|
|
442
461
|
'subnet',
|
|
@@ -446,7 +465,7 @@ class DeleteSubnet(command.Command):
|
|
|
446
465
|
)
|
|
447
466
|
return parser
|
|
448
467
|
|
|
449
|
-
def take_action(self, parsed_args):
|
|
468
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
450
469
|
client = self.app.client_manager.network
|
|
451
470
|
result = 0
|
|
452
471
|
|
|
@@ -473,12 +492,10 @@ class DeleteSubnet(command.Command):
|
|
|
473
492
|
raise exceptions.CommandError(msg)
|
|
474
493
|
|
|
475
494
|
|
|
476
|
-
# TODO(abhiraut): Use only the SDK resource mapped attribute names once the
|
|
477
|
-
# OSC minimum requirements include SDK 1.0.
|
|
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',
|
|
@@ -564,12 +581,17 @@ class ListSubnet(command.Lister):
|
|
|
564
581
|
),
|
|
565
582
|
)
|
|
566
583
|
_tag.add_tag_filtering_option_to_parser(parser, _('subnets'))
|
|
584
|
+
pagination.add_marker_pagination_option_to_parser(parser)
|
|
567
585
|
return parser
|
|
568
586
|
|
|
569
|
-
def take_action(
|
|
587
|
+
def take_action(
|
|
588
|
+
self, parsed_args: argparse.Namespace
|
|
589
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
570
590
|
identity_client = self.app.client_manager.identity
|
|
571
591
|
network_client = self.app.client_manager.network
|
|
592
|
+
|
|
572
593
|
filters = {}
|
|
594
|
+
|
|
573
595
|
if parsed_args.ip_version:
|
|
574
596
|
filters['ip_version'] = parsed_args.ip_version
|
|
575
597
|
if parsed_args.dhcp:
|
|
@@ -603,7 +625,14 @@ class ListSubnet(command.Lister):
|
|
|
603
625
|
parsed_args.subnet_pool, ignore_missing=False
|
|
604
626
|
).id
|
|
605
627
|
filters['subnetpool_id'] = subnetpool_id
|
|
628
|
+
if parsed_args.marker is not None:
|
|
629
|
+
filters['marker'] = parsed_args.marker
|
|
630
|
+
if parsed_args.limit is not None:
|
|
631
|
+
filters['limit'] = parsed_args.limit
|
|
632
|
+
if parsed_args.max_items is not None:
|
|
633
|
+
filters['max_items'] = parsed_args.max_items
|
|
606
634
|
_tag.get_tag_filtering_args(parsed_args, filters)
|
|
635
|
+
|
|
607
636
|
data = network_client.subnets(**filters)
|
|
608
637
|
|
|
609
638
|
headers: tuple[str, ...] = ('ID', 'Name', 'Network', 'Subnet')
|
|
@@ -645,12 +674,10 @@ class ListSubnet(command.Lister):
|
|
|
645
674
|
)
|
|
646
675
|
|
|
647
676
|
|
|
648
|
-
# TODO(abhiraut): Use the SDK resource mapped attribute names once the
|
|
649
|
-
# OSC minimum requirements include SDK 1.0.
|
|
650
677
|
class SetSubnet(common.NeutronCommandWithExtraArgs):
|
|
651
678
|
_description = _("Set subnet properties")
|
|
652
679
|
|
|
653
|
-
def get_parser(self, prog_name):
|
|
680
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
654
681
|
parser = super().get_parser(prog_name)
|
|
655
682
|
parser.add_argument(
|
|
656
683
|
'subnet',
|
|
@@ -707,7 +734,7 @@ class SetSubnet(common.NeutronCommandWithExtraArgs):
|
|
|
707
734
|
_get_common_parse_arguments(parser, is_create=False)
|
|
708
735
|
return parser
|
|
709
736
|
|
|
710
|
-
def take_action(self, parsed_args):
|
|
737
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
711
738
|
client = self.app.client_manager.network
|
|
712
739
|
obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
|
|
713
740
|
attrs = _get_attrs(
|
|
@@ -743,7 +770,7 @@ class SetSubnet(common.NeutronCommandWithExtraArgs):
|
|
|
743
770
|
class ShowSubnet(command.ShowOne):
|
|
744
771
|
_description = _("Display subnet details")
|
|
745
772
|
|
|
746
|
-
def get_parser(self, prog_name):
|
|
773
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
747
774
|
parser = super().get_parser(prog_name)
|
|
748
775
|
parser.add_argument(
|
|
749
776
|
'subnet',
|
|
@@ -752,7 +779,9 @@ class ShowSubnet(command.ShowOne):
|
|
|
752
779
|
)
|
|
753
780
|
return parser
|
|
754
781
|
|
|
755
|
-
def take_action(
|
|
782
|
+
def take_action(
|
|
783
|
+
self, parsed_args: argparse.Namespace
|
|
784
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
756
785
|
obj = self.app.client_manager.network.find_subnet(
|
|
757
786
|
parsed_args.subnet, ignore_missing=False
|
|
758
787
|
)
|
|
@@ -764,7 +793,7 @@ class ShowSubnet(command.ShowOne):
|
|
|
764
793
|
class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
|
|
765
794
|
_description = _("Unset subnet properties")
|
|
766
795
|
|
|
767
|
-
def get_parser(self, prog_name):
|
|
796
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
768
797
|
parser = super().get_parser(prog_name)
|
|
769
798
|
parser.add_argument(
|
|
770
799
|
'--allocation-pool',
|
|
@@ -827,11 +856,11 @@ class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
|
|
|
827
856
|
)
|
|
828
857
|
return parser
|
|
829
858
|
|
|
830
|
-
def take_action(self, parsed_args):
|
|
859
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
831
860
|
client = self.app.client_manager.network
|
|
832
861
|
obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
|
|
833
862
|
|
|
834
|
-
attrs: dict[str,
|
|
863
|
+
attrs: dict[str, Any] = {}
|
|
835
864
|
if parsed_args.gateway:
|
|
836
865
|
attrs['gateway_ip'] = None
|
|
837
866
|
if parsed_args.dns_nameservers:
|
|
@@ -13,8 +13,12 @@
|
|
|
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
|
|
|
21
|
+
from openstack.network.v2 import subnet_pool as _subnet_pool
|
|
18
22
|
from osc_lib.cli import format_columns
|
|
19
23
|
from osc_lib.cli import parseractions
|
|
20
24
|
from osc_lib import exceptions
|
|
@@ -22,15 +26,17 @@ from osc_lib import utils
|
|
|
22
26
|
from osc_lib.utils import tags as _tag
|
|
23
27
|
|
|
24
28
|
from openstackclient import command
|
|
29
|
+
from openstackclient.common import pagination
|
|
25
30
|
from openstackclient.i18n import _
|
|
26
31
|
from openstackclient.identity import common as identity_common
|
|
27
32
|
from openstackclient.network import common
|
|
28
33
|
|
|
29
|
-
|
|
30
34
|
LOG = logging.getLogger(__name__)
|
|
31
35
|
|
|
32
36
|
|
|
33
|
-
def _get_columns(
|
|
37
|
+
def _get_columns(
|
|
38
|
+
item: _subnet_pool.SubnetPool,
|
|
39
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
34
40
|
column_map = {
|
|
35
41
|
'default_prefix_length': 'default_prefixlen',
|
|
36
42
|
'is_shared': 'shared',
|
|
@@ -49,7 +55,9 @@ _formatters = {
|
|
|
49
55
|
}
|
|
50
56
|
|
|
51
57
|
|
|
52
|
-
def _get_attrs(
|
|
58
|
+
def _get_attrs(
|
|
59
|
+
client_manager: Any, parsed_args: argparse.Namespace
|
|
60
|
+
) -> dict[str, Any]:
|
|
53
61
|
attrs = {}
|
|
54
62
|
network_client = client_manager.network
|
|
55
63
|
|
|
@@ -100,7 +108,9 @@ def _get_attrs(client_manager, parsed_args):
|
|
|
100
108
|
return attrs
|
|
101
109
|
|
|
102
110
|
|
|
103
|
-
def _add_prefix_options(
|
|
111
|
+
def _add_prefix_options(
|
|
112
|
+
parser: argparse.ArgumentParser, for_create: bool = False
|
|
113
|
+
) -> None:
|
|
104
114
|
parser.add_argument(
|
|
105
115
|
'--pool-prefix',
|
|
106
116
|
metavar='<pool-prefix>',
|
|
@@ -135,7 +145,7 @@ def _add_prefix_options(parser, for_create=False):
|
|
|
135
145
|
)
|
|
136
146
|
|
|
137
147
|
|
|
138
|
-
def _add_default_options(parser):
|
|
148
|
+
def _add_default_options(parser: argparse.ArgumentParser) -> None:
|
|
139
149
|
default_group = parser.add_mutually_exclusive_group()
|
|
140
150
|
default_group.add_argument(
|
|
141
151
|
'--default',
|
|
@@ -149,12 +159,10 @@ def _add_default_options(parser):
|
|
|
149
159
|
)
|
|
150
160
|
|
|
151
161
|
|
|
152
|
-
# TODO(rtheis): Use the SDK resource mapped attribute names once the
|
|
153
|
-
# OSC minimum requirements include SDK 1.0.
|
|
154
162
|
class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
155
163
|
_description = _("Create subnet pool")
|
|
156
164
|
|
|
157
|
-
def get_parser(self, prog_name):
|
|
165
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
158
166
|
parser = super().get_parser(prog_name)
|
|
159
167
|
parser.add_argument(
|
|
160
168
|
'name', metavar='<name>', help=_("Name of the new subnet pool")
|
|
@@ -205,7 +213,9 @@ class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
205
213
|
_tag.add_tag_option_to_parser_for_create(parser, _('subnet pool'))
|
|
206
214
|
return parser
|
|
207
215
|
|
|
208
|
-
def take_action(
|
|
216
|
+
def take_action(
|
|
217
|
+
self, parsed_args: argparse.Namespace
|
|
218
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
209
219
|
client = self.app.client_manager.network
|
|
210
220
|
attrs = _get_attrs(self.app.client_manager, parsed_args)
|
|
211
221
|
# NeutronServer expects prefixes to be a List
|
|
@@ -225,7 +235,7 @@ class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
|
|
|
225
235
|
class DeleteSubnetPool(command.Command):
|
|
226
236
|
_description = _("Delete subnet pool(s)")
|
|
227
237
|
|
|
228
|
-
def get_parser(self, prog_name):
|
|
238
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
229
239
|
parser = super().get_parser(prog_name)
|
|
230
240
|
parser.add_argument(
|
|
231
241
|
'subnet_pool',
|
|
@@ -235,7 +245,7 @@ class DeleteSubnetPool(command.Command):
|
|
|
235
245
|
)
|
|
236
246
|
return parser
|
|
237
247
|
|
|
238
|
-
def take_action(self, parsed_args):
|
|
248
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
239
249
|
client = self.app.client_manager.network
|
|
240
250
|
result = 0
|
|
241
251
|
|
|
@@ -261,12 +271,10 @@ class DeleteSubnetPool(command.Command):
|
|
|
261
271
|
raise exceptions.CommandError(msg)
|
|
262
272
|
|
|
263
273
|
|
|
264
|
-
# TODO(rtheis): Use only the SDK resource mapped attribute names once the
|
|
265
|
-
# OSC minimum requirements include SDK 1.0.
|
|
266
274
|
class ListSubnetPool(command.Lister):
|
|
267
275
|
_description = _("List subnet pools")
|
|
268
276
|
|
|
269
|
-
def get_parser(self, prog_name):
|
|
277
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
270
278
|
parser = super().get_parser(prog_name)
|
|
271
279
|
parser.add_argument(
|
|
272
280
|
'--long',
|
|
@@ -325,12 +333,15 @@ class ListSubnetPool(command.Lister):
|
|
|
325
333
|
),
|
|
326
334
|
)
|
|
327
335
|
_tag.add_tag_filtering_option_to_parser(parser, _('subnet pools'))
|
|
336
|
+
pagination.add_marker_pagination_option_to_parser(parser)
|
|
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
|
|
@@ -355,7 +366,14 @@ class ListSubnetPool(command.Lister):
|
|
|
355
366
|
parsed_args.address_scope, ignore_missing=False
|
|
356
367
|
)
|
|
357
368
|
filters['address_scope_id'] = address_scope.id
|
|
369
|
+
if parsed_args.marker is not None:
|
|
370
|
+
filters['marker'] = parsed_args.marker
|
|
371
|
+
if parsed_args.limit is not None:
|
|
372
|
+
filters['limit'] = parsed_args.limit
|
|
373
|
+
if parsed_args.max_items is not None:
|
|
374
|
+
filters['max_items'] = parsed_args.max_items
|
|
358
375
|
_tag.get_tag_filtering_args(parsed_args, filters)
|
|
376
|
+
|
|
359
377
|
data = network_client.subnet_pools(**filters)
|
|
360
378
|
|
|
361
379
|
headers: tuple[str, ...] = ('ID', 'Name', 'Prefixes')
|
|
@@ -389,12 +407,10 @@ class ListSubnetPool(command.Lister):
|
|
|
389
407
|
)
|
|
390
408
|
|
|
391
409
|
|
|
392
|
-
# TODO(rtheis): Use the SDK resource mapped attribute names once the
|
|
393
|
-
# OSC minimum requirements include SDK 1.0.
|
|
394
410
|
class SetSubnetPool(common.NeutronCommandWithExtraArgs):
|
|
395
411
|
_description = _("Set subnet pool properties")
|
|
396
412
|
|
|
397
|
-
def get_parser(self, prog_name):
|
|
413
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
398
414
|
parser = super().get_parser(prog_name)
|
|
399
415
|
parser.add_argument(
|
|
400
416
|
'subnet_pool',
|
|
@@ -440,7 +456,7 @@ class SetSubnetPool(common.NeutronCommandWithExtraArgs):
|
|
|
440
456
|
|
|
441
457
|
return parser
|
|
442
458
|
|
|
443
|
-
def take_action(self, parsed_args):
|
|
459
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
444
460
|
client = self.app.client_manager.network
|
|
445
461
|
obj = client.find_subnet_pool(
|
|
446
462
|
parsed_args.subnet_pool, ignore_missing=False
|
|
@@ -465,7 +481,7 @@ class SetSubnetPool(common.NeutronCommandWithExtraArgs):
|
|
|
465
481
|
class ShowSubnetPool(command.ShowOne):
|
|
466
482
|
_description = _("Display subnet pool details")
|
|
467
483
|
|
|
468
|
-
def get_parser(self, prog_name):
|
|
484
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
469
485
|
parser = super().get_parser(prog_name)
|
|
470
486
|
parser.add_argument(
|
|
471
487
|
'subnet_pool',
|
|
@@ -474,7 +490,9 @@ class ShowSubnetPool(command.ShowOne):
|
|
|
474
490
|
)
|
|
475
491
|
return parser
|
|
476
492
|
|
|
477
|
-
def take_action(
|
|
493
|
+
def take_action(
|
|
494
|
+
self, parsed_args: argparse.Namespace
|
|
495
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
478
496
|
client = self.app.client_manager.network
|
|
479
497
|
obj = client.find_subnet_pool(
|
|
480
498
|
parsed_args.subnet_pool, ignore_missing=False
|
|
@@ -487,7 +505,7 @@ class ShowSubnetPool(command.ShowOne):
|
|
|
487
505
|
class UnsetSubnetPool(command.Command):
|
|
488
506
|
_description = _("Unset subnet pool properties")
|
|
489
507
|
|
|
490
|
-
def get_parser(self, prog_name):
|
|
508
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
491
509
|
parser = super().get_parser(prog_name)
|
|
492
510
|
parser.add_argument(
|
|
493
511
|
'subnet_pool',
|
|
@@ -497,7 +515,7 @@ class UnsetSubnetPool(command.Command):
|
|
|
497
515
|
_tag.add_tag_option_to_parser_for_unset(parser, _('subnet pool'))
|
|
498
516
|
return parser
|
|
499
517
|
|
|
500
|
-
def take_action(self, parsed_args):
|
|
518
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
501
519
|
client = self.app.client_manager.network
|
|
502
520
|
obj = client.find_subnet_pool(
|
|
503
521
|
parsed_args.subnet_pool, ignore_missing=False
|
|
@@ -12,8 +12,12 @@
|
|
|
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
|
|
|
20
|
+
from openstack.network.v2 import tap_flow as _tap_flow
|
|
17
21
|
from osc_lib.cli import format_columns
|
|
18
22
|
from osc_lib.cli import identity as identity_utils
|
|
19
23
|
from osc_lib import exceptions
|
|
@@ -23,7 +27,6 @@ from osc_lib.utils import columns as column_util
|
|
|
23
27
|
from openstackclient import command
|
|
24
28
|
from openstackclient.i18n import _
|
|
25
29
|
from openstackclient.identity import common
|
|
26
|
-
from openstackclient.network.v2.taas import tap_service
|
|
27
30
|
|
|
28
31
|
LOG = logging.getLogger(__name__)
|
|
29
32
|
|
|
@@ -45,17 +48,27 @@ _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.')
|
|
52
55
|
)
|
|
53
56
|
|
|
54
57
|
|
|
58
|
+
def _get_columns(
|
|
59
|
+
item: _tap_flow.TapFlow,
|
|
60
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
61
|
+
column_map: dict[str, str] = {}
|
|
62
|
+
hidden_columns = ['location', 'tenant_id']
|
|
63
|
+
return osc_utils.get_osc_show_columns_for_sdk_resource(
|
|
64
|
+
item, column_map, hidden_columns
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
55
68
|
class CreateTapFlow(command.ShowOne):
|
|
56
69
|
_description = _("Create a new tap flow.")
|
|
57
70
|
|
|
58
|
-
def get_parser(self, prog_name):
|
|
71
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
59
72
|
parser = super().get_parser(prog_name)
|
|
60
73
|
identity_utils.add_project_owner_option_to_parser(parser)
|
|
61
74
|
_add_updatable_args(parser)
|
|
@@ -92,7 +105,9 @@ class CreateTapFlow(command.ShowOne):
|
|
|
92
105
|
)
|
|
93
106
|
return parser
|
|
94
107
|
|
|
95
|
-
def take_action(
|
|
108
|
+
def take_action(
|
|
109
|
+
self, parsed_args: argparse.Namespace
|
|
110
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
96
111
|
client = self.app.client_manager.network
|
|
97
112
|
attrs = {}
|
|
98
113
|
if parsed_args.name is not None:
|
|
@@ -120,7 +135,7 @@ class CreateTapFlow(command.ShowOne):
|
|
|
120
135
|
parsed_args.project_domain,
|
|
121
136
|
).id
|
|
122
137
|
obj = client.create_tap_flow(**attrs)
|
|
123
|
-
display_columns, columns =
|
|
138
|
+
display_columns, columns = _get_columns(obj)
|
|
124
139
|
data = osc_utils.get_dict_properties(obj, columns)
|
|
125
140
|
return display_columns, data
|
|
126
141
|
|
|
@@ -128,13 +143,15 @@ class CreateTapFlow(command.ShowOne):
|
|
|
128
143
|
class ListTapFlow(command.Lister):
|
|
129
144
|
_description = _("List tap flows.")
|
|
130
145
|
|
|
131
|
-
def get_parser(self, prog_name):
|
|
146
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
132
147
|
parser = super().get_parser(prog_name)
|
|
133
148
|
identity_utils.add_project_owner_option_to_parser(parser)
|
|
134
149
|
|
|
135
150
|
return parser
|
|
136
151
|
|
|
137
|
-
def take_action(
|
|
152
|
+
def take_action(
|
|
153
|
+
self, parsed_args: argparse.Namespace
|
|
154
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
138
155
|
client = self.app.client_manager.network
|
|
139
156
|
params = {}
|
|
140
157
|
if parsed_args.project is not None:
|
|
@@ -161,7 +178,7 @@ class ListTapFlow(command.Lister):
|
|
|
161
178
|
class ShowTapFlow(command.ShowOne):
|
|
162
179
|
_description = _("Show tap flow details.")
|
|
163
180
|
|
|
164
|
-
def get_parser(self, prog_name):
|
|
181
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
165
182
|
parser = super().get_parser(prog_name)
|
|
166
183
|
parser.add_argument(
|
|
167
184
|
TAP_FLOW,
|
|
@@ -170,13 +187,15 @@ class ShowTapFlow(command.ShowOne):
|
|
|
170
187
|
)
|
|
171
188
|
return parser
|
|
172
189
|
|
|
173
|
-
def take_action(
|
|
190
|
+
def take_action(
|
|
191
|
+
self, parsed_args: argparse.Namespace
|
|
192
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
174
193
|
client = self.app.client_manager.network
|
|
175
194
|
id = client.find_tap_flow(
|
|
176
195
|
parsed_args.tap_flow, ignore_missing=False
|
|
177
196
|
).id
|
|
178
197
|
obj = client.get_tap_flow(id)
|
|
179
|
-
display_columns, columns =
|
|
198
|
+
display_columns, columns = _get_columns(obj)
|
|
180
199
|
data = osc_utils.get_dict_properties(obj, columns)
|
|
181
200
|
return display_columns, data
|
|
182
201
|
|
|
@@ -184,7 +203,7 @@ class ShowTapFlow(command.ShowOne):
|
|
|
184
203
|
class DeleteTapFlow(command.Command):
|
|
185
204
|
_description = _("Delete a tap flow.")
|
|
186
205
|
|
|
187
|
-
def get_parser(self, prog_name):
|
|
206
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
188
207
|
parser = super().get_parser(prog_name)
|
|
189
208
|
parser.add_argument(
|
|
190
209
|
TAP_FLOW,
|
|
@@ -194,7 +213,7 @@ class DeleteTapFlow(command.Command):
|
|
|
194
213
|
)
|
|
195
214
|
return parser
|
|
196
215
|
|
|
197
|
-
def take_action(self, parsed_args):
|
|
216
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
198
217
|
client = self.app.client_manager.network
|
|
199
218
|
fails = 0
|
|
200
219
|
for id_or_name in parsed_args.tap_flow:
|
|
@@ -219,7 +238,7 @@ class DeleteTapFlow(command.Command):
|
|
|
219
238
|
class UpdateTapFlow(command.ShowOne):
|
|
220
239
|
_description = _("Update a tap flow.")
|
|
221
240
|
|
|
222
|
-
def get_parser(self, prog_name):
|
|
241
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
223
242
|
parser = super().get_parser(prog_name)
|
|
224
243
|
parser.add_argument(
|
|
225
244
|
TAP_FLOW,
|
|
@@ -229,7 +248,9 @@ class UpdateTapFlow(command.ShowOne):
|
|
|
229
248
|
_add_updatable_args(parser)
|
|
230
249
|
return parser
|
|
231
250
|
|
|
232
|
-
def take_action(
|
|
251
|
+
def take_action(
|
|
252
|
+
self, parsed_args: argparse.Namespace
|
|
253
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
233
254
|
client = self.app.client_manager.network
|
|
234
255
|
original_t_f = client.find_tap_flow(
|
|
235
256
|
parsed_args.tap_flow, ignore_missing=False
|