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
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Copyright (c) 2018 Orange SA.
|
|
2
|
+
# All Rights Reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
|
6
|
+
# a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
import operator
|
|
18
|
+
from unittest import mock
|
|
19
|
+
|
|
20
|
+
from osc_lib import utils as osc_utils
|
|
21
|
+
from osc_lib.utils import columns as column_util
|
|
22
|
+
|
|
23
|
+
from openstackclient.network.v2.bgpvpn import router_association
|
|
24
|
+
from openstackclient.tests.unit.network.v2.bgpvpn import fakes
|
|
25
|
+
from openstackclient.tests.unit import utils
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
columns_short = tuple(
|
|
29
|
+
col
|
|
30
|
+
for col, _, listing_mode in router_association._attr_map
|
|
31
|
+
if listing_mode in (column_util.LIST_BOTH, column_util.LIST_SHORT_ONLY)
|
|
32
|
+
)
|
|
33
|
+
columns_long = tuple(
|
|
34
|
+
col
|
|
35
|
+
for col, _, listing_mode in router_association._attr_map
|
|
36
|
+
if listing_mode in (column_util.LIST_BOTH, column_util.LIST_LONG_ONLY)
|
|
37
|
+
)
|
|
38
|
+
headers_short = tuple(
|
|
39
|
+
head
|
|
40
|
+
for _, head, listing_mode in router_association._attr_map
|
|
41
|
+
if listing_mode in (column_util.LIST_BOTH, column_util.LIST_SHORT_ONLY)
|
|
42
|
+
)
|
|
43
|
+
headers_long = tuple(
|
|
44
|
+
head
|
|
45
|
+
for _, head, listing_mode in router_association._attr_map
|
|
46
|
+
if listing_mode in (column_util.LIST_BOTH, column_util.LIST_LONG_ONLY)
|
|
47
|
+
)
|
|
48
|
+
sorted_attr_map = sorted(
|
|
49
|
+
router_association._attr_map, key=operator.itemgetter(1)
|
|
50
|
+
)
|
|
51
|
+
sorted_columns = tuple(col for col, _, _ in sorted_attr_map)
|
|
52
|
+
sorted_headers = tuple(head for _, head, _ in sorted_attr_map)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _get_data(attrs, columns=sorted_columns):
|
|
56
|
+
return osc_utils.get_dict_properties(
|
|
57
|
+
attrs, columns, formatters=router_association._formatters
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class TestCreateRouterAssoc(fakes.TestNeutronClientBgpvpn):
|
|
62
|
+
def setUp(self):
|
|
63
|
+
super().setUp()
|
|
64
|
+
self.cmd = router_association.CreateBgpvpnRouterAssoc(self.app, None)
|
|
65
|
+
self.fake_bgpvpn = fakes.create_one_bgpvpn()
|
|
66
|
+
self.fake_router = fakes.create_one_resource()
|
|
67
|
+
self.network_client.find_bgpvpn.side_effect = (
|
|
68
|
+
lambda name_or_id, **kwargs: {'id': name_or_id}
|
|
69
|
+
)
|
|
70
|
+
self.network_client.find_router.side_effect = (
|
|
71
|
+
lambda name_or_id, **kwargs: {'id': name_or_id}
|
|
72
|
+
)
|
|
73
|
+
self.fake_project = mock.Mock(id='fake_project_id')
|
|
74
|
+
self.identity_sdk_client.find_project = mock.Mock(
|
|
75
|
+
return_value=self.fake_project
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
def _build_args(self, param=None):
|
|
79
|
+
arglist_base = [
|
|
80
|
+
self.fake_bgpvpn['id'],
|
|
81
|
+
self.fake_router['id'],
|
|
82
|
+
'--project',
|
|
83
|
+
self.fake_bgpvpn['project_id'],
|
|
84
|
+
]
|
|
85
|
+
if param is not None:
|
|
86
|
+
if isinstance(param, list):
|
|
87
|
+
arglist_base.extend(param)
|
|
88
|
+
else:
|
|
89
|
+
arglist_base.append(param)
|
|
90
|
+
return arglist_base
|
|
91
|
+
|
|
92
|
+
def _build_verify_list(self, param=None):
|
|
93
|
+
verifylist = [
|
|
94
|
+
('bgpvpn', self.fake_bgpvpn['id']),
|
|
95
|
+
('resource', self.fake_router['id']),
|
|
96
|
+
('project', self.fake_bgpvpn['project_id']),
|
|
97
|
+
]
|
|
98
|
+
if param is not None:
|
|
99
|
+
verifylist.append(param)
|
|
100
|
+
return verifylist
|
|
101
|
+
|
|
102
|
+
def _exec_create_router_association(
|
|
103
|
+
self,
|
|
104
|
+
fake_assoc,
|
|
105
|
+
arglist,
|
|
106
|
+
verifylist,
|
|
107
|
+
):
|
|
108
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
109
|
+
|
|
110
|
+
cols, data = self.cmd.take_action(parsed_args)
|
|
111
|
+
|
|
112
|
+
fake_assoc_call = {
|
|
113
|
+
'router_id': self.fake_router['id'],
|
|
114
|
+
'project_id': 'fake_project_id',
|
|
115
|
+
}
|
|
116
|
+
if verifylist:
|
|
117
|
+
for key, value in verifylist:
|
|
118
|
+
if (
|
|
119
|
+
key
|
|
120
|
+
not in (
|
|
121
|
+
'bgpvpn',
|
|
122
|
+
'resource',
|
|
123
|
+
'project',
|
|
124
|
+
)
|
|
125
|
+
and value not in fake_assoc_call.values()
|
|
126
|
+
):
|
|
127
|
+
fake_assoc_call[key] = value
|
|
128
|
+
self.network_client.create_bgpvpn_router_association.assert_called_once_with(
|
|
129
|
+
self.fake_bgpvpn['id'], **fake_assoc_call
|
|
130
|
+
)
|
|
131
|
+
return cols, data
|
|
132
|
+
|
|
133
|
+
def test_create_router_association(self):
|
|
134
|
+
fake_assoc = fakes.create_one_router_association()
|
|
135
|
+
|
|
136
|
+
self.network_client.create_bgpvpn_router_association.return_value = (
|
|
137
|
+
fake_assoc
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
arglist = self._build_args()
|
|
141
|
+
# advertise_extra_routes will be False since none
|
|
142
|
+
# of the mutually exclusive args present
|
|
143
|
+
verifylist = self._build_verify_list(('advertise_extra_routes', False))
|
|
144
|
+
|
|
145
|
+
self._exec_create_router_association(fake_assoc, arglist, verifylist)
|
|
146
|
+
|
|
147
|
+
def test_create_router_association_advertise(self):
|
|
148
|
+
fake_assoc = fakes.create_one_router_association(
|
|
149
|
+
{'advertise_extra_routes': True}
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
self.network_client.create_bgpvpn_router_association.return_value = (
|
|
153
|
+
fake_assoc
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
arglist = self._build_args('--advertise_extra_routes')
|
|
157
|
+
verifylist = self._build_verify_list(('advertise_extra_routes', True))
|
|
158
|
+
|
|
159
|
+
cols, data = self._exec_create_router_association(
|
|
160
|
+
fake_assoc, arglist, verifylist
|
|
161
|
+
)
|
|
162
|
+
self.assertEqual(sorted(sorted_columns), sorted(cols))
|
|
163
|
+
self.assertEqual(_get_data(fake_assoc, cols), data)
|
|
164
|
+
|
|
165
|
+
def test_create_router_association_no_advertise(self):
|
|
166
|
+
fake_assoc = fakes.create_one_router_association(
|
|
167
|
+
{'advertise_extra_routes': False}
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
self.network_client.create_bgpvpn_router_association.return_value = (
|
|
171
|
+
fake_assoc
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
arglist = self._build_args('--no-advertise_extra_routes')
|
|
175
|
+
verifylist = self._build_verify_list(('advertise_extra_routes', False))
|
|
176
|
+
|
|
177
|
+
cols, data = self._exec_create_router_association(
|
|
178
|
+
fake_assoc, arglist, verifylist
|
|
179
|
+
)
|
|
180
|
+
self.assertEqual(sorted(sorted_columns), sorted(cols))
|
|
181
|
+
self.assertEqual(_get_data(fake_assoc, cols), data)
|
|
182
|
+
|
|
183
|
+
def test_create_router_association_advertise_fault(self):
|
|
184
|
+
arglist = self._build_args(
|
|
185
|
+
['--advertise_extra_routes', '--no-advertise_extra_routes']
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
try:
|
|
189
|
+
self._exec_create_router_association(None, arglist, None)
|
|
190
|
+
except utils.ParserException as e:
|
|
191
|
+
self.assertIn('Argument parse failed', format(e))
|
|
192
|
+
|
|
193
|
+
def test_router_association_unknown_arg(self):
|
|
194
|
+
arglist = self._build_args('--unknown arg')
|
|
195
|
+
|
|
196
|
+
try:
|
|
197
|
+
self._exec_create_router_association(None, arglist, None)
|
|
198
|
+
except utils.ParserException as e:
|
|
199
|
+
self.assertIn('Argument parse failed', format(e))
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class TestSetRouterAssoc(fakes.TestNeutronClientBgpvpn):
|
|
203
|
+
def setUp(self):
|
|
204
|
+
super().setUp()
|
|
205
|
+
self.cmd = router_association.SetBgpvpnRouterAssoc(self.app, None)
|
|
206
|
+
self.fake_bgpvpn = fakes.create_one_bgpvpn()
|
|
207
|
+
self.fake_router = fakes.create_one_resource()
|
|
208
|
+
self.network_client.find_bgpvpn.side_effect = (
|
|
209
|
+
lambda name_or_id, **kwargs: {'id': name_or_id}
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
def _build_args(self, fake_assoc, param=None):
|
|
213
|
+
arglist_base = [fake_assoc['id'], self.fake_bgpvpn['id']]
|
|
214
|
+
if param is not None:
|
|
215
|
+
if isinstance(param, list):
|
|
216
|
+
arglist_base.extend(param)
|
|
217
|
+
else:
|
|
218
|
+
arglist_base.append(param)
|
|
219
|
+
return arglist_base
|
|
220
|
+
|
|
221
|
+
def test_set_router_association_no_advertise(self):
|
|
222
|
+
fake_assoc = fakes.create_one_router_association(
|
|
223
|
+
{'advertise_extra_routes': True}
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
arglist = self._build_args(fake_assoc, '--no-advertise_extra_routes')
|
|
227
|
+
verifylist = [
|
|
228
|
+
('resource_association_id', fake_assoc['id']),
|
|
229
|
+
('bgpvpn', self.fake_bgpvpn['id']),
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
233
|
+
result = self.cmd.take_action(parsed_args)
|
|
234
|
+
|
|
235
|
+
self.network_client.update_bgpvpn_router_association.assert_called_once_with(
|
|
236
|
+
self.fake_bgpvpn['id'],
|
|
237
|
+
fake_assoc['id'],
|
|
238
|
+
**{'advertise_extra_routes': False},
|
|
239
|
+
)
|
|
240
|
+
self.assertIsNone(result)
|
|
241
|
+
|
|
242
|
+
def test_set_router_association_advertise(self):
|
|
243
|
+
fake_assoc = fakes.create_one_router_association(
|
|
244
|
+
{'advertise_extra_routes': False}
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
arglist = self._build_args(fake_assoc, '--advertise_extra_routes')
|
|
248
|
+
verifylist = [
|
|
249
|
+
('resource_association_id', fake_assoc['id']),
|
|
250
|
+
('bgpvpn', self.fake_bgpvpn['id']),
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
254
|
+
result = self.cmd.take_action(parsed_args)
|
|
255
|
+
|
|
256
|
+
self.network_client.update_bgpvpn_router_association.assert_called_once_with(
|
|
257
|
+
self.fake_bgpvpn['id'],
|
|
258
|
+
fake_assoc['id'],
|
|
259
|
+
**{'advertise_extra_routes': True},
|
|
260
|
+
)
|
|
261
|
+
self.assertIsNone(result)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class TestShowRouterAssoc(fakes.TestNeutronClientBgpvpn):
|
|
265
|
+
def setUp(self):
|
|
266
|
+
super().setUp()
|
|
267
|
+
self.cmd = router_association.ShowBgpvpnRouterAssoc(self.app, None)
|
|
268
|
+
self.network_client.find_bgpvpn.side_effect = (
|
|
269
|
+
lambda name_or_id, **kwargs: {'id': name_or_id}
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
def test_show_router_association(self):
|
|
273
|
+
fake_bgpvpn = fakes.create_one_bgpvpn()
|
|
274
|
+
fake_assoc = fakes.create_one_router_association(
|
|
275
|
+
{'advertise_extra_routes': True}
|
|
276
|
+
)
|
|
277
|
+
self.network_client.get_bgpvpn_router_association.return_value = (
|
|
278
|
+
fake_assoc
|
|
279
|
+
)
|
|
280
|
+
arglist = [
|
|
281
|
+
fake_assoc['id'],
|
|
282
|
+
fake_bgpvpn['id'],
|
|
283
|
+
]
|
|
284
|
+
verifylist = [
|
|
285
|
+
('resource_association_id', fake_assoc['id']),
|
|
286
|
+
('bgpvpn', fake_bgpvpn['id']),
|
|
287
|
+
]
|
|
288
|
+
|
|
289
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
290
|
+
|
|
291
|
+
cols, data = self.cmd.take_action(parsed_args)
|
|
292
|
+
|
|
293
|
+
self.network_client.get_bgpvpn_router_association.assert_called_once_with(
|
|
294
|
+
fake_bgpvpn['id'], fake_assoc['id']
|
|
295
|
+
)
|
|
296
|
+
self.assertEqual(sorted(sorted_columns), sorted(cols))
|
|
297
|
+
self.assertEqual(data, _get_data(fake_assoc, cols))
|
|
@@ -58,6 +58,8 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
|
|
|
58
58
|
from openstackclient.tests.unit import utils
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
PVLAN_TYPE_COMMUNITY = 'community'
|
|
62
|
+
PVLAN_COMMUNITY_NAME = 'community_1'
|
|
61
63
|
RULE_TYPE_BANDWIDTH_LIMIT = 'bandwidth-limit'
|
|
62
64
|
RULE_TYPE_DSCP_MARKING = 'dscp-marking'
|
|
63
65
|
RULE_TYPE_MINIMUM_BANDWIDTH = 'minimum-bandwidth'
|
|
@@ -951,6 +953,7 @@ def create_one_network(attrs=None):
|
|
|
951
953
|
'provider:network_type': 'vlan',
|
|
952
954
|
'provider:physical_network': 'physnet1',
|
|
953
955
|
'provider:segmentation_id': "400",
|
|
956
|
+
'pvlan': "False",
|
|
954
957
|
'router:external': True,
|
|
955
958
|
'availability_zones': [],
|
|
956
959
|
'availability_zone_hints': [],
|
|
@@ -1211,6 +1214,8 @@ def create_one_port(attrs=None):
|
|
|
1211
1214
|
'security_group_ids': [],
|
|
1212
1215
|
'status': 'ACTIVE',
|
|
1213
1216
|
'project_id': 'project-id-' + uuid.uuid4().hex,
|
|
1217
|
+
'pvlan_type': PVLAN_TYPE_COMMUNITY,
|
|
1218
|
+
'pvlan_community': PVLAN_COMMUNITY_NAME,
|
|
1214
1219
|
'qos_network_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
|
|
1215
1220
|
'qos_policy_id': 'qos-policy-id-' + uuid.uuid4().hex,
|
|
1216
1221
|
'tags': [],
|
|
@@ -1309,25 +1314,6 @@ def create_network_agents(attrs=None, count=2):
|
|
|
1309
1314
|
return agents
|
|
1310
1315
|
|
|
1311
1316
|
|
|
1312
|
-
def get_network_agents(agents=None, count=2):
|
|
1313
|
-
"""Get an iterable Mock object with a list of faked network agents.
|
|
1314
|
-
|
|
1315
|
-
If network agents list is provided, then initialize the Mock object
|
|
1316
|
-
with the list. Otherwise create one.
|
|
1317
|
-
|
|
1318
|
-
:param List agents:
|
|
1319
|
-
A list of Agent objects faking network agents
|
|
1320
|
-
:param int count:
|
|
1321
|
-
The number of network agents to fake
|
|
1322
|
-
:return:
|
|
1323
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
1324
|
-
network agents
|
|
1325
|
-
"""
|
|
1326
|
-
if agents is None:
|
|
1327
|
-
agents = create_network_agents(count)
|
|
1328
|
-
return mock.Mock(side_effect=agents)
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
1317
|
def create_one_network_rbac(attrs=None):
|
|
1332
1318
|
"""Create a fake network rbac
|
|
1333
1319
|
|
|
@@ -1962,26 +1948,6 @@ def create_local_ip_associations(attrs=None, count=2):
|
|
|
1962
1948
|
return local_ip_associations
|
|
1963
1949
|
|
|
1964
1950
|
|
|
1965
|
-
def get_local_ip_associations(local_ip_associations=None, count=2):
|
|
1966
|
-
"""Get a list of faked local ip associations
|
|
1967
|
-
|
|
1968
|
-
If local ip association list is provided, then initialize
|
|
1969
|
-
the Mock object with the list. Otherwise create one.
|
|
1970
|
-
|
|
1971
|
-
:param List local_ip_associations:
|
|
1972
|
-
A list of FakeResource objects faking local ip associations
|
|
1973
|
-
:param int count:
|
|
1974
|
-
The number of local ip associations to fake
|
|
1975
|
-
:return:
|
|
1976
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
1977
|
-
local ip associations
|
|
1978
|
-
"""
|
|
1979
|
-
if local_ip_associations is None:
|
|
1980
|
-
local_ip_associations = create_local_ip_associations(count)
|
|
1981
|
-
|
|
1982
|
-
return mock.Mock(side_effect=local_ip_associations)
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
1951
|
def create_one_ndp_proxy(attrs=None):
|
|
1986
1952
|
"""Create a fake NDP proxy.
|
|
1987
1953
|
|
|
@@ -2027,25 +1993,6 @@ def create_ndp_proxies(attrs=None, count=2):
|
|
|
2027
1993
|
return ndp_proxies
|
|
2028
1994
|
|
|
2029
1995
|
|
|
2030
|
-
def get_ndp_proxies(ndp_proxies=None, count=2):
|
|
2031
|
-
"""Get a list of faked NDP proxies.
|
|
2032
|
-
|
|
2033
|
-
If ndp_proxy list is provided, then initialize the Mock object
|
|
2034
|
-
with the list. Otherwise create one.
|
|
2035
|
-
|
|
2036
|
-
:param List ndp_proxies:
|
|
2037
|
-
A list of FakeResource objects faking ndp proxy
|
|
2038
|
-
:param int count:
|
|
2039
|
-
The number of ndp proxy to fake
|
|
2040
|
-
:return:
|
|
2041
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
2042
|
-
ndp proxy
|
|
2043
|
-
"""
|
|
2044
|
-
if ndp_proxies is None:
|
|
2045
|
-
ndp_proxies = create_ndp_proxies(count)
|
|
2046
|
-
return mock.Mock(side_effect=ndp_proxies)
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
1996
|
def create_one_trunk(attrs=None):
|
|
2050
1997
|
"""Create a fake trunk.
|
|
2051
1998
|
|
|
@@ -2096,22 +2043,3 @@ def create_trunks(attrs=None, count=2):
|
|
|
2096
2043
|
trunks.append(create_one_trunk(attrs))
|
|
2097
2044
|
|
|
2098
2045
|
return trunks
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
def get_trunks(trunks=None, count=2):
|
|
2102
|
-
"""Get an iterable Mock object with a list of faked trunks.
|
|
2103
|
-
|
|
2104
|
-
If trunk list is provided, then initialize the Mock object
|
|
2105
|
-
with the list. Otherwise create one.
|
|
2106
|
-
|
|
2107
|
-
:param List trunks:
|
|
2108
|
-
A list of FakeResource objects faking trunks
|
|
2109
|
-
:param int count:
|
|
2110
|
-
The number of trunks to fake
|
|
2111
|
-
:return:
|
|
2112
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
2113
|
-
trunks
|
|
2114
|
-
"""
|
|
2115
|
-
if trunks is None:
|
|
2116
|
-
trunks = create_trunks(count)
|
|
2117
|
-
return mock.Mock(side_effect=trunks)
|
|
File without changes
|