python-openstackclient 9.0.0__py3-none-any.whl → 10.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +59 -43
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +36 -34
- openstackclient/common/pagination.py +50 -6
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +11 -6
- openstackclient/common/quota.py +105 -103
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +42 -22
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +16 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +35 -16
- openstackclient/compute/v2/server.py +268 -179
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +28 -12
- openstackclient/compute/v2/server_group.py +23 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +27 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +13 -5
- openstackclient/compute/v2/service.py +17 -8
- openstackclient/compute/v2/usage.py +28 -23
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +82 -47
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +23 -11
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +32 -12
- openstackclient/identity/v3/application_credential.py +66 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +39 -17
- openstackclient/identity/v3/domain.py +40 -19
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +98 -64
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +44 -20
- openstackclient/identity/v3/group.py +64 -40
- openstackclient/identity/v3/identity_provider.py +95 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +42 -17
- openstackclient/identity/v3/mapping.py +58 -28
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +59 -26
- openstackclient/identity/v3/region.py +39 -17
- openstackclient/identity/v3/registered_limit.py +41 -16
- openstackclient/identity/v3/role.py +62 -31
- openstackclient/identity/v3/role_assignment.py +25 -7
- openstackclient/identity/v3/service.py +39 -17
- openstackclient/identity/v3/service_provider.py +40 -16
- openstackclient/identity/v3/tag.py +23 -6
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +39 -18
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +86 -36
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +16 -11
- openstackclient/image/v2/image.py +88 -56
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +117 -20
- openstackclient/image/v2/metadef_objects.py +32 -19
- openstackclient/image/v2/metadef_properties.py +30 -16
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +25 -27
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +27 -54
- openstackclient/network/v2/address_group.py +39 -16
- openstackclient/network/v2/address_scope.py +36 -20
- openstackclient/network/v2/bgpvpn/bgpvpn.py +477 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +226 -0
- openstackclient/network/v2/bgpvpn/port_association.py +504 -0
- openstackclient/network/v2/bgpvpn/router_association.py +301 -0
- openstackclient/network/v2/default_security_group_rule.py +31 -14
- openstackclient/network/v2/floating_ip.py +121 -162
- openstackclient/network/v2/floating_ip_port_forwarding.py +41 -19
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +499 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +610 -0
- openstackclient/network/v2/ip_availability.py +25 -8
- openstackclient/network/v2/l3_conntrack_helper.py +35 -13
- openstackclient/network/v2/local_ip.py +27 -13
- openstackclient/network/v2/local_ip_association.py +17 -7
- openstackclient/network/v2/ndp_proxy.py +23 -11
- openstackclient/network/v2/network.py +213 -213
- openstackclient/network/v2/network_agent.py +77 -34
- openstackclient/network/v2/network_auto_allocated_topology.py +27 -15
- openstackclient/network/v2/network_flavor.py +45 -21
- openstackclient/network/v2/network_flavor_profile.py +42 -17
- openstackclient/network/v2/network_meter.py +39 -15
- openstackclient/network/v2/network_meter_rule.py +40 -12
- openstackclient/network/v2/network_qos_policy.py +39 -21
- openstackclient/network/v2/network_qos_rule.py +48 -18
- openstackclient/network/v2/network_qos_rule_type.py +28 -9
- openstackclient/network/v2/network_rbac.py +34 -16
- openstackclient/network/v2/network_segment.py +32 -11
- openstackclient/network/v2/network_segment_range.py +70 -31
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +41 -22
- openstackclient/network/v2/port.py +141 -40
- openstackclient/network/v2/router.py +101 -67
- openstackclient/network/v2/security_group.py +97 -198
- openstackclient/network/v2/security_group_rule.py +115 -282
- openstackclient/network/v2/subnet.py +63 -34
- openstackclient/network/v2/subnet_pool.py +42 -24
- openstackclient/network/v2/taas/tap_flow.py +35 -14
- openstackclient/network/v2/taas/tap_mirror.py +28 -14
- openstackclient/network/v2/taas/tap_service.py +26 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +28 -16
- openstackclient/object/v1/object.py +28 -16
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +59 -19
- openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_limits.py +1 -1
- openstackclient/tests/unit/common/test_module.py +82 -44
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +15 -26
- openstackclient/tests/unit/compute/v2/fakes.py +26 -57
- openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
- openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
- openstackclient/tests/unit/compute/v2/test_console.py +2 -2
- openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
- openstackclient/tests/unit/compute/v2/test_flavor.py +29 -3
- openstackclient/tests/unit/compute/v2/test_host.py +3 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
- openstackclient/tests/unit/compute/v2/test_keypair.py +7 -7
- openstackclient/tests/unit/compute/v2/test_server.py +26 -111
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
- openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
- openstackclient/tests/unit/compute/v2/test_service.py +3 -3
- openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
- openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
- openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
- openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
- openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
- openstackclient/tests/unit/identity/v3/fakes.py +8 -38
- openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
- openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
- openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
- openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
- openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
- openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +12 -22
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
- openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
- openstackclient/tests/unit/identity/v3/test_project.py +28 -5
- openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
- openstackclient/tests/unit/identity/v3/test_region.py +5 -5
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
- openstackclient/tests/unit/identity/v3/test_role.py +8 -8
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
- openstackclient/tests/unit/identity/v3/test_service.py +5 -5
- openstackclient/tests/unit/identity/v3/test_token.py +2 -2
- openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
- openstackclient/tests/unit/identity/v3/test_user.py +77 -10
- openstackclient/tests/unit/image/v2/test_image.py +11 -11
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fakes.py +5 -77
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +923 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +1005 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +26 -2
- openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +27 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +37 -13
- openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
- openstackclient/tests/unit/network/v2/test_network.py +74 -12
- openstackclient/tests/unit/network/v2/test_network_agent.py +58 -5
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +26 -2
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
- openstackclient/tests/unit/network/v2/test_network_rbac.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +25 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +31 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_port.py +166 -0
- openstackclient/tests/unit/network/v2/test_router.py +36 -16
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +11 -8
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +28 -37
- openstackclient/tests/unit/network/v2/test_subnet.py +30 -5
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +26 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +21 -140
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +8 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +205 -100
- openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
- openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
- openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +6 -14
- openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
- openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +61 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +29 -17
- openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
- openstackclient/volume/v2/qos_specs.py +28 -17
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +60 -30
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -23
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +49 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- openstackclient/volume/v3/backup_record.py +94 -0
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/consistency_group.py +400 -0
- openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
- openstackclient/volume/v3/qos_specs.py +389 -0
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +92 -40
- openstackclient/volume/v3/volume_attachment.py +47 -21
- openstackclient/volume/v3/volume_backend.py +130 -0
- openstackclient/volume/v3/volume_backup.py +55 -27
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +34 -17
- openstackclient/volume/v3/volume_group_type.py +27 -14
- openstackclient/volume/v3/volume_host.py +74 -0
- openstackclient/volume/v3/volume_message.py +18 -8
- openstackclient/volume/v3/volume_snapshot.py +70 -32
- openstackclient/volume/v3/volume_transfer_request.py +31 -13
- openstackclient/volume/v3/volume_type.py +42 -24
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +7 -8
- python_openstackclient-10.1.0.dist-info/RECORD +524 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +77 -25
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +9 -0
- python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-9.0.0.dist-info/RECORD +0 -499
- python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
|
@@ -15,19 +15,25 @@
|
|
|
15
15
|
|
|
16
16
|
"""Common identity code"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Callable
|
|
20
|
+
from typing import Any, cast
|
|
21
|
+
|
|
18
22
|
from keystoneclient import exceptions as identity_exc
|
|
19
23
|
from keystoneclient.v3 import domains
|
|
20
24
|
from keystoneclient.v3 import groups
|
|
21
25
|
from keystoneclient.v3 import projects
|
|
22
26
|
from keystoneclient.v3 import users
|
|
23
27
|
from openstack import exceptions as sdk_exceptions
|
|
28
|
+
from openstack.identity import v3 as identity
|
|
29
|
+
from openstack.identity.v3 import service as _service
|
|
24
30
|
from osc_lib import exceptions
|
|
25
31
|
from osc_lib import utils
|
|
26
32
|
|
|
27
33
|
from openstackclient.i18n import _
|
|
28
34
|
|
|
29
35
|
|
|
30
|
-
def find_service_in_list(service_list, service_id):
|
|
36
|
+
def find_service_in_list(service_list: list[Any], service_id: str) -> Any:
|
|
31
37
|
"""Find a service by id in service list."""
|
|
32
38
|
|
|
33
39
|
for service in service_list:
|
|
@@ -38,7 +44,7 @@ def find_service_in_list(service_list, service_id):
|
|
|
38
44
|
)
|
|
39
45
|
|
|
40
46
|
|
|
41
|
-
def find_service(identity_client, name_type_or_id):
|
|
47
|
+
def find_service(identity_client: Any, name_type_or_id: str) -> Any:
|
|
42
48
|
"""Find a service by id, name or type."""
|
|
43
49
|
|
|
44
50
|
try:
|
|
@@ -74,7 +80,9 @@ def find_service(identity_client, name_type_or_id):
|
|
|
74
80
|
raise exceptions.CommandError(msg % name_type_or_id)
|
|
75
81
|
|
|
76
82
|
|
|
77
|
-
def find_service_sdk(
|
|
83
|
+
def find_service_sdk(
|
|
84
|
+
identity_client: identity.Proxy, name_type_or_id: str
|
|
85
|
+
) -> _service.Service:
|
|
78
86
|
"""Find a service by id, name or type."""
|
|
79
87
|
|
|
80
88
|
try:
|
|
@@ -107,7 +115,7 @@ def find_service_sdk(identity_client, name_type_or_id):
|
|
|
107
115
|
return service
|
|
108
116
|
|
|
109
117
|
|
|
110
|
-
def get_resource(manager, name_type_or_id):
|
|
118
|
+
def get_resource(manager: Any, name_type_or_id: str) -> Any:
|
|
111
119
|
# NOTE (vishakha): Due to bug #1799153 and for any another related case
|
|
112
120
|
# where GET resource API does not support the filter by name,
|
|
113
121
|
# osc_lib.utils.find_resource() method cannot be used because that method
|
|
@@ -126,7 +134,7 @@ def get_resource(manager, name_type_or_id):
|
|
|
126
134
|
raise exceptions.CommandError(msg % name_type_or_id)
|
|
127
135
|
|
|
128
136
|
|
|
129
|
-
def get_resource_by_id(manager, resource_id):
|
|
137
|
+
def get_resource_by_id(manager: Any, resource_id: str) -> Any:
|
|
130
138
|
"""Get resource by ID
|
|
131
139
|
|
|
132
140
|
Raises CommandError if the resource is not found
|
|
@@ -138,7 +146,12 @@ def get_resource_by_id(manager, resource_id):
|
|
|
138
146
|
raise exceptions.CommandError(msg.format(resource_id))
|
|
139
147
|
|
|
140
148
|
|
|
141
|
-
def _get_token_resource(
|
|
149
|
+
def _get_token_resource(
|
|
150
|
+
client: Any,
|
|
151
|
+
resource: str,
|
|
152
|
+
parsed_name: str,
|
|
153
|
+
parsed_domain: str | None = None,
|
|
154
|
+
) -> str:
|
|
142
155
|
"""Peek into the user's auth token to get resource IDs
|
|
143
156
|
|
|
144
157
|
Look into a user's token to try and find the ID of a domain, project or
|
|
@@ -174,25 +187,28 @@ def _get_token_resource(client, resource, parsed_name, parsed_domain=None):
|
|
|
174
187
|
if isinstance(obj, list):
|
|
175
188
|
for item in obj:
|
|
176
189
|
if item['name'] == parsed_name:
|
|
177
|
-
return item['id']
|
|
190
|
+
return cast(str, item['id'])
|
|
178
191
|
if item['id'] == parsed_name:
|
|
179
192
|
return parsed_name
|
|
180
193
|
return parsed_name
|
|
181
194
|
return obj['id'] if obj['name'] == parsed_name else parsed_name
|
|
182
195
|
# diaper defense in case parsing the token fails
|
|
183
|
-
except Exception:
|
|
196
|
+
except Exception:
|
|
184
197
|
return parsed_name
|
|
185
198
|
|
|
186
199
|
|
|
187
|
-
def find_domain(identity_client, name_or_id):
|
|
200
|
+
def find_domain(identity_client: Any, name_or_id: str) -> domains.Domain:
|
|
188
201
|
return _find_identity_resource(
|
|
189
202
|
identity_client.domains, name_or_id, domains.Domain
|
|
190
203
|
)
|
|
191
204
|
|
|
192
205
|
|
|
193
206
|
def find_domain_id_sdk(
|
|
194
|
-
identity_client
|
|
195
|
-
|
|
207
|
+
identity_client: Any,
|
|
208
|
+
name_or_id: str,
|
|
209
|
+
*,
|
|
210
|
+
validate_actor_existence: bool = True,
|
|
211
|
+
) -> str:
|
|
196
212
|
return _find_sdk_id(
|
|
197
213
|
identity_client.find_domain,
|
|
198
214
|
name_or_id=name_or_id,
|
|
@@ -200,7 +216,11 @@ def find_domain_id_sdk(
|
|
|
200
216
|
)
|
|
201
217
|
|
|
202
218
|
|
|
203
|
-
def find_group(
|
|
219
|
+
def find_group(
|
|
220
|
+
identity_client: Any,
|
|
221
|
+
name_or_id: str,
|
|
222
|
+
domain_name_or_id: str | None = None,
|
|
223
|
+
) -> groups.Group:
|
|
204
224
|
if domain_name_or_id is None:
|
|
205
225
|
return _find_identity_resource(
|
|
206
226
|
identity_client.groups, name_or_id, groups.Group
|
|
@@ -216,12 +236,12 @@ def find_group(identity_client, name_or_id, domain_name_or_id=None):
|
|
|
216
236
|
|
|
217
237
|
|
|
218
238
|
def find_group_id_sdk(
|
|
219
|
-
identity_client,
|
|
220
|
-
name_or_id,
|
|
221
|
-
domain_name_or_id=None,
|
|
239
|
+
identity_client: Any,
|
|
240
|
+
name_or_id: str,
|
|
241
|
+
domain_name_or_id: str | None = None,
|
|
222
242
|
*,
|
|
223
|
-
validate_actor_existence=True,
|
|
224
|
-
):
|
|
243
|
+
validate_actor_existence: bool = True,
|
|
244
|
+
) -> str:
|
|
225
245
|
if domain_name_or_id is None:
|
|
226
246
|
return _find_sdk_id(
|
|
227
247
|
identity_client.find_group,
|
|
@@ -242,7 +262,11 @@ def find_group_id_sdk(
|
|
|
242
262
|
)
|
|
243
263
|
|
|
244
264
|
|
|
245
|
-
def find_project(
|
|
265
|
+
def find_project(
|
|
266
|
+
identity_client: Any,
|
|
267
|
+
name_or_id: str,
|
|
268
|
+
domain_name_or_id: str | None = None,
|
|
269
|
+
) -> projects.Project:
|
|
246
270
|
if domain_name_or_id is None:
|
|
247
271
|
return _find_identity_resource(
|
|
248
272
|
identity_client.projects, name_or_id, projects.Project
|
|
@@ -257,13 +281,13 @@ def find_project(identity_client, name_or_id, domain_name_or_id=None):
|
|
|
257
281
|
|
|
258
282
|
|
|
259
283
|
def find_project_id_sdk(
|
|
260
|
-
identity_client,
|
|
261
|
-
name_or_id,
|
|
262
|
-
domain_name_or_id=None,
|
|
284
|
+
identity_client: Any,
|
|
285
|
+
name_or_id: str,
|
|
286
|
+
domain_name_or_id: str | None = None,
|
|
263
287
|
*,
|
|
264
|
-
validate_actor_existence=True,
|
|
265
|
-
validate_domain_actor_existence=None,
|
|
266
|
-
):
|
|
288
|
+
validate_actor_existence: bool = True,
|
|
289
|
+
validate_domain_actor_existence: bool | None = None,
|
|
290
|
+
) -> str:
|
|
267
291
|
if domain_name_or_id is None:
|
|
268
292
|
return _find_sdk_id(
|
|
269
293
|
identity_client.find_project,
|
|
@@ -287,7 +311,11 @@ def find_project_id_sdk(
|
|
|
287
311
|
)
|
|
288
312
|
|
|
289
313
|
|
|
290
|
-
def find_user(
|
|
314
|
+
def find_user(
|
|
315
|
+
identity_client: Any,
|
|
316
|
+
name_or_id: str,
|
|
317
|
+
domain_name_or_id: str | None = None,
|
|
318
|
+
) -> users.User:
|
|
291
319
|
if domain_name_or_id is None:
|
|
292
320
|
return _find_identity_resource(
|
|
293
321
|
identity_client.users, name_or_id, users.User
|
|
@@ -299,12 +327,12 @@ def find_user(identity_client, name_or_id, domain_name_or_id=None):
|
|
|
299
327
|
|
|
300
328
|
|
|
301
329
|
def find_user_id_sdk(
|
|
302
|
-
identity_client,
|
|
303
|
-
name_or_id,
|
|
304
|
-
domain_name_or_id=None,
|
|
330
|
+
identity_client: Any,
|
|
331
|
+
name_or_id: str,
|
|
332
|
+
domain_name_or_id: str | None = None,
|
|
305
333
|
*,
|
|
306
|
-
validate_actor_existence=True,
|
|
307
|
-
):
|
|
334
|
+
validate_actor_existence: bool = True,
|
|
335
|
+
) -> str:
|
|
308
336
|
if domain_name_or_id is None:
|
|
309
337
|
return _find_sdk_id(
|
|
310
338
|
identity_client.find_user,
|
|
@@ -325,8 +353,11 @@ def find_user_id_sdk(
|
|
|
325
353
|
|
|
326
354
|
|
|
327
355
|
def _find_identity_resource(
|
|
328
|
-
identity_client_manager
|
|
329
|
-
|
|
356
|
+
identity_client_manager: Any,
|
|
357
|
+
name_or_id: str,
|
|
358
|
+
resource_type: Any,
|
|
359
|
+
**kwargs: Any,
|
|
360
|
+
) -> Any:
|
|
330
361
|
"""Find a specific identity resource.
|
|
331
362
|
|
|
332
363
|
Using keystoneclient's manager, attempt to find a specific resource by its
|
|
@@ -365,8 +396,12 @@ def _find_identity_resource(
|
|
|
365
396
|
|
|
366
397
|
|
|
367
398
|
def _find_sdk_id(
|
|
368
|
-
find_command
|
|
369
|
-
|
|
399
|
+
find_command: Callable[..., Any],
|
|
400
|
+
name_or_id: str,
|
|
401
|
+
*,
|
|
402
|
+
validate_actor_existence: bool = True,
|
|
403
|
+
**kwargs: Any,
|
|
404
|
+
) -> str:
|
|
370
405
|
try:
|
|
371
406
|
resource = find_command(
|
|
372
407
|
name_or_id=name_or_id, ignore_missing=False, **kwargs
|
|
@@ -377,10 +412,10 @@ def _find_sdk_id(
|
|
|
377
412
|
if not validate_actor_existence:
|
|
378
413
|
return name_or_id
|
|
379
414
|
raise exceptions.CommandError from exc
|
|
380
|
-
return resource.id
|
|
415
|
+
return cast(str, resource.id)
|
|
381
416
|
|
|
382
417
|
|
|
383
|
-
def add_user_domain_option_to_parser(parser):
|
|
418
|
+
def add_user_domain_option_to_parser(parser: argparse.ArgumentParser) -> None:
|
|
384
419
|
parser.add_argument(
|
|
385
420
|
'--user-domain',
|
|
386
421
|
metavar='<user-domain>',
|
|
@@ -392,7 +427,7 @@ def add_user_domain_option_to_parser(parser):
|
|
|
392
427
|
)
|
|
393
428
|
|
|
394
429
|
|
|
395
|
-
def add_group_domain_option_to_parser(parser):
|
|
430
|
+
def add_group_domain_option_to_parser(parser: argparse.ArgumentParser) -> None:
|
|
396
431
|
parser.add_argument(
|
|
397
432
|
'--group-domain',
|
|
398
433
|
metavar='<group-domain>',
|
|
@@ -404,21 +439,21 @@ def add_group_domain_option_to_parser(parser):
|
|
|
404
439
|
)
|
|
405
440
|
|
|
406
441
|
|
|
407
|
-
def add_project_domain_option_to_parser(
|
|
442
|
+
def add_project_domain_option_to_parser(
|
|
443
|
+
parser: argparse.ArgumentParser,
|
|
444
|
+
) -> None:
|
|
408
445
|
parser.add_argument(
|
|
409
446
|
'--project-domain',
|
|
410
447
|
metavar='<project-domain>',
|
|
411
|
-
help=
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
'names exist.'
|
|
416
|
-
)
|
|
448
|
+
help=_(
|
|
449
|
+
'Domain the project belongs to (name or ID). This '
|
|
450
|
+
'can be used in case collisions between project '
|
|
451
|
+
'names exist.'
|
|
417
452
|
),
|
|
418
453
|
)
|
|
419
454
|
|
|
420
455
|
|
|
421
|
-
def add_role_domain_option_to_parser(parser):
|
|
456
|
+
def add_role_domain_option_to_parser(parser: argparse.ArgumentParser) -> None:
|
|
422
457
|
parser.add_argument(
|
|
423
458
|
'--role-domain',
|
|
424
459
|
metavar='<role-domain>',
|
|
@@ -430,7 +465,7 @@ def add_role_domain_option_to_parser(parser):
|
|
|
430
465
|
)
|
|
431
466
|
|
|
432
467
|
|
|
433
|
-
def add_inherited_option_to_parser(parser):
|
|
468
|
+
def add_inherited_option_to_parser(parser: argparse.ArgumentParser) -> None:
|
|
434
469
|
parser.add_argument(
|
|
435
470
|
'--inherited',
|
|
436
471
|
action='store_true',
|
|
@@ -441,7 +476,7 @@ def add_inherited_option_to_parser(parser):
|
|
|
441
476
|
)
|
|
442
477
|
|
|
443
478
|
|
|
444
|
-
def add_resource_option_to_parser(parser):
|
|
479
|
+
def add_resource_option_to_parser(parser: argparse.ArgumentParser) -> None:
|
|
445
480
|
immutable_group = parser.add_mutually_exclusive_group()
|
|
446
481
|
immutable_group.add_argument(
|
|
447
482
|
'--immutable',
|
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
"""Identity v2 Service Catalog action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
16
18
|
import logging
|
|
17
|
-
|
|
19
|
+
from typing import Any
|
|
18
20
|
|
|
19
21
|
from cliff import columns as cliff_columns
|
|
20
22
|
from osc_lib import exceptions
|
|
@@ -27,8 +29,8 @@ from openstackclient.i18n import _
|
|
|
27
29
|
LOG = logging.getLogger(__name__)
|
|
28
30
|
|
|
29
31
|
|
|
30
|
-
class EndpointsColumn(cliff_columns.FormattableColumn[
|
|
31
|
-
def human_readable(self):
|
|
32
|
+
class EndpointsColumn(cliff_columns.FormattableColumn[Any]):
|
|
33
|
+
def human_readable(self) -> str:
|
|
32
34
|
if not self._value:
|
|
33
35
|
return ""
|
|
34
36
|
ret = ''
|
|
@@ -47,7 +49,9 @@ class EndpointsColumn(cliff_columns.FormattableColumn[ty.Any]):
|
|
|
47
49
|
class ListCatalog(command.Lister):
|
|
48
50
|
_description = _("List services in the service catalog")
|
|
49
51
|
|
|
50
|
-
def take_action(
|
|
52
|
+
def take_action(
|
|
53
|
+
self, parsed_args: argparse.Namespace
|
|
54
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
51
55
|
# Trigger auth if it has not happened yet
|
|
52
56
|
auth_ref = self.app.client_manager.auth_ref
|
|
53
57
|
if not auth_ref:
|
|
@@ -75,7 +79,7 @@ class ListCatalog(command.Lister):
|
|
|
75
79
|
class ShowCatalog(command.ShowOne):
|
|
76
80
|
_description = _("Display service catalog details")
|
|
77
81
|
|
|
78
|
-
def get_parser(self, prog_name):
|
|
82
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
79
83
|
parser = super().get_parser(prog_name)
|
|
80
84
|
parser.add_argument(
|
|
81
85
|
'service',
|
|
@@ -84,7 +88,9 @@ class ShowCatalog(command.ShowOne):
|
|
|
84
88
|
)
|
|
85
89
|
return parser
|
|
86
90
|
|
|
87
|
-
def take_action(
|
|
91
|
+
def take_action(
|
|
92
|
+
self, parsed_args: argparse.Namespace
|
|
93
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
88
94
|
# Trigger auth if it has not happened yet
|
|
89
95
|
auth_ref = self.app.client_manager.auth_ref
|
|
90
96
|
if not auth_ref:
|
|
@@ -108,4 +114,5 @@ class ShowCatalog(command.ShowOne):
|
|
|
108
114
|
LOG.error(_('service %s not found\n'), parsed_args.service)
|
|
109
115
|
return ((), ())
|
|
110
116
|
|
|
111
|
-
|
|
117
|
+
col_headers, col_data = zip(*sorted(data.items()))
|
|
118
|
+
return col_headers, col_data
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
"""Identity v2 EC2 Credentials action implementations"""
|
|
18
18
|
|
|
19
|
+
import argparse
|
|
20
|
+
from collections.abc import Iterable, Sequence
|
|
19
21
|
import logging
|
|
22
|
+
from typing import Any
|
|
20
23
|
|
|
21
24
|
from osc_lib import exceptions
|
|
22
25
|
from osc_lib import utils
|
|
@@ -31,7 +34,7 @@ LOG = logging.getLogger(__name__)
|
|
|
31
34
|
class CreateEC2Creds(command.ShowOne):
|
|
32
35
|
_description = _("Create EC2 credentials")
|
|
33
36
|
|
|
34
|
-
def get_parser(self, prog_name):
|
|
37
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
35
38
|
parser = super().get_parser(prog_name)
|
|
36
39
|
parser.add_argument(
|
|
37
40
|
'--project',
|
|
@@ -51,7 +54,9 @@ class CreateEC2Creds(command.ShowOne):
|
|
|
51
54
|
)
|
|
52
55
|
return parser
|
|
53
56
|
|
|
54
|
-
def take_action(
|
|
57
|
+
def take_action(
|
|
58
|
+
self, parsed_args: argparse.Namespace
|
|
59
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
55
60
|
identity_client = self.app.client_manager.identity
|
|
56
61
|
|
|
57
62
|
if parsed_args.project:
|
|
@@ -79,13 +84,14 @@ class CreateEC2Creds(command.ShowOne):
|
|
|
79
84
|
if 'tenant_id' in info:
|
|
80
85
|
info.update({'project_id': info.pop('tenant_id')})
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
88
|
+
return col_headers, col_data
|
|
83
89
|
|
|
84
90
|
|
|
85
91
|
class DeleteEC2Creds(command.Command):
|
|
86
92
|
_description = _("Delete EC2 credentials")
|
|
87
93
|
|
|
88
|
-
def get_parser(self, prog_name):
|
|
94
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
89
95
|
parser = super().get_parser(prog_name)
|
|
90
96
|
parser.add_argument(
|
|
91
97
|
'access_keys',
|
|
@@ -100,7 +106,7 @@ class DeleteEC2Creds(command.Command):
|
|
|
100
106
|
)
|
|
101
107
|
return parser
|
|
102
108
|
|
|
103
|
-
def take_action(self, parsed_args):
|
|
109
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
104
110
|
identity_client = self.app.client_manager.identity
|
|
105
111
|
|
|
106
112
|
if parsed_args.user:
|
|
@@ -138,7 +144,7 @@ class DeleteEC2Creds(command.Command):
|
|
|
138
144
|
class ListEC2Creds(command.Lister):
|
|
139
145
|
_description = _("List EC2 credentials")
|
|
140
146
|
|
|
141
|
-
def get_parser(self, prog_name):
|
|
147
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
142
148
|
parser = super().get_parser(prog_name)
|
|
143
149
|
parser.add_argument(
|
|
144
150
|
'--user',
|
|
@@ -147,7 +153,9 @@ class ListEC2Creds(command.Lister):
|
|
|
147
153
|
)
|
|
148
154
|
return parser
|
|
149
155
|
|
|
150
|
-
def take_action(
|
|
156
|
+
def take_action(
|
|
157
|
+
self, parsed_args: argparse.Namespace
|
|
158
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
151
159
|
identity_client = self.app.client_manager.identity
|
|
152
160
|
|
|
153
161
|
if parsed_args.user:
|
|
@@ -179,7 +187,7 @@ class ListEC2Creds(command.Lister):
|
|
|
179
187
|
class ShowEC2Creds(command.ShowOne):
|
|
180
188
|
_description = _("Display EC2 credentials details")
|
|
181
189
|
|
|
182
|
-
def get_parser(self, prog_name):
|
|
190
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
183
191
|
parser = super().get_parser(prog_name)
|
|
184
192
|
parser.add_argument(
|
|
185
193
|
'access_key',
|
|
@@ -193,7 +201,9 @@ class ShowEC2Creds(command.ShowOne):
|
|
|
193
201
|
)
|
|
194
202
|
return parser
|
|
195
203
|
|
|
196
|
-
def take_action(
|
|
204
|
+
def take_action(
|
|
205
|
+
self, parsed_args: argparse.Namespace
|
|
206
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
197
207
|
identity_client = self.app.client_manager.identity
|
|
198
208
|
|
|
199
209
|
if parsed_args.user:
|
|
@@ -213,4 +223,5 @@ class ShowEC2Creds(command.ShowOne):
|
|
|
213
223
|
if 'tenant_id' in info:
|
|
214
224
|
info.update({'project_id': info.pop('tenant_id')})
|
|
215
225
|
|
|
216
|
-
|
|
226
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
227
|
+
return col_headers, col_data
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Endpoint action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
20
23
|
from osc_lib import exceptions
|
|
21
24
|
from osc_lib import utils
|
|
@@ -31,7 +34,7 @@ LOG = logging.getLogger(__name__)
|
|
|
31
34
|
class CreateEndpoint(command.ShowOne):
|
|
32
35
|
_description = _("Create new endpoint")
|
|
33
36
|
|
|
34
|
-
def get_parser(self, prog_name):
|
|
37
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
35
38
|
parser = super().get_parser(prog_name)
|
|
36
39
|
parser.add_argument(
|
|
37
40
|
'service',
|
|
@@ -61,7 +64,9 @@ class CreateEndpoint(command.ShowOne):
|
|
|
61
64
|
)
|
|
62
65
|
return parser
|
|
63
66
|
|
|
64
|
-
def take_action(
|
|
67
|
+
def take_action(
|
|
68
|
+
self, parsed_args: argparse.Namespace
|
|
69
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
65
70
|
identity_client = self.app.client_manager.identity
|
|
66
71
|
service = common.find_service(identity_client, parsed_args.service)
|
|
67
72
|
endpoint = identity_client.endpoints.create(
|
|
@@ -76,13 +81,14 @@ class CreateEndpoint(command.ShowOne):
|
|
|
76
81
|
info.update(endpoint._info)
|
|
77
82
|
info['service_name'] = service.name
|
|
78
83
|
info['service_type'] = service.type
|
|
79
|
-
|
|
84
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
85
|
+
return col_headers, col_data
|
|
80
86
|
|
|
81
87
|
|
|
82
88
|
class DeleteEndpoint(command.Command):
|
|
83
89
|
_description = _("Delete endpoint(s)")
|
|
84
90
|
|
|
85
|
-
def get_parser(self, prog_name):
|
|
91
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
86
92
|
parser = super().get_parser(prog_name)
|
|
87
93
|
parser.add_argument(
|
|
88
94
|
'endpoints',
|
|
@@ -92,7 +98,7 @@ class DeleteEndpoint(command.Command):
|
|
|
92
98
|
)
|
|
93
99
|
return parser
|
|
94
100
|
|
|
95
|
-
def take_action(self, parsed_args):
|
|
101
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
96
102
|
identity_client = self.app.client_manager.identity
|
|
97
103
|
|
|
98
104
|
result = 0
|
|
@@ -121,7 +127,7 @@ class DeleteEndpoint(command.Command):
|
|
|
121
127
|
class ListEndpoint(command.Lister):
|
|
122
128
|
_description = _("List endpoints")
|
|
123
129
|
|
|
124
|
-
def get_parser(self, prog_name):
|
|
130
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
125
131
|
parser = super().get_parser(prog_name)
|
|
126
132
|
parser.add_argument(
|
|
127
133
|
'--long',
|
|
@@ -131,7 +137,9 @@ class ListEndpoint(command.Lister):
|
|
|
131
137
|
)
|
|
132
138
|
return parser
|
|
133
139
|
|
|
134
|
-
def take_action(
|
|
140
|
+
def take_action(
|
|
141
|
+
self, parsed_args: argparse.Namespace
|
|
142
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
135
143
|
identity_client = self.app.client_manager.identity
|
|
136
144
|
|
|
137
145
|
columns: tuple[str, ...] = (
|
|
@@ -168,7 +176,7 @@ class ListEndpoint(command.Lister):
|
|
|
168
176
|
class ShowEndpoint(command.ShowOne):
|
|
169
177
|
_description = _("Display endpoint details")
|
|
170
178
|
|
|
171
|
-
def get_parser(self, prog_name):
|
|
179
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
172
180
|
parser = super().get_parser(prog_name)
|
|
173
181
|
parser.add_argument(
|
|
174
182
|
'endpoint_or_service',
|
|
@@ -180,7 +188,9 @@ class ShowEndpoint(command.ShowOne):
|
|
|
180
188
|
)
|
|
181
189
|
return parser
|
|
182
190
|
|
|
183
|
-
def take_action(
|
|
191
|
+
def take_action(
|
|
192
|
+
self, parsed_args: argparse.Namespace
|
|
193
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
184
194
|
identity_client = self.app.client_manager.identity
|
|
185
195
|
data = identity_client.endpoints.list()
|
|
186
196
|
match = None
|
|
@@ -196,9 +206,11 @@ class ShowEndpoint(command.ShowOne):
|
|
|
196
206
|
if ep.service_id == service.id:
|
|
197
207
|
match = ep
|
|
198
208
|
if match is None:
|
|
199
|
-
return
|
|
209
|
+
return ((), ())
|
|
210
|
+
|
|
200
211
|
info = {}
|
|
201
212
|
info.update(match._info)
|
|
202
213
|
info['service_name'] = service.name
|
|
203
214
|
info['service_type'] = service.type
|
|
204
|
-
|
|
215
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
216
|
+
return col_headers, col_data
|