python-openstackclient 6.6.0__py3-none-any.whl → 7.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/api/api.py +7 -8
- openstackclient/api/compute_v2.py +352 -638
- openstackclient/api/image_v1.py +1 -1
- openstackclient/api/object_store_v1.py +3 -4
- openstackclient/common/availability_zone.py +1 -1
- openstackclient/common/clientmanager.py +16 -4
- openstackclient/common/configuration.py +1 -1
- openstackclient/common/extension.py +1 -1
- openstackclient/common/limits.py +66 -32
- openstackclient/common/module.py +3 -3
- openstackclient/common/progressbar.py +2 -2
- openstackclient/common/project_cleanup.py +5 -2
- openstackclient/common/quota.py +281 -410
- openstackclient/common/versions.py +1 -1
- openstackclient/compute/client.py +7 -116
- openstackclient/compute/v2/agent.py +75 -49
- openstackclient/compute/v2/aggregate.py +9 -9
- openstackclient/compute/v2/console.py +2 -2
- openstackclient/compute/v2/flavor.py +6 -6
- openstackclient/compute/v2/host.py +38 -33
- openstackclient/compute/v2/hypervisor.py +4 -3
- openstackclient/compute/v2/keypair.py +7 -8
- openstackclient/compute/v2/server.py +478 -396
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_group.py +4 -4
- openstackclient/compute/v2/server_image.py +1 -1
- openstackclient/compute/v2/server_migration.py +3 -4
- openstackclient/compute/v2/service.py +4 -4
- openstackclient/compute/v2/usage.py +3 -3
- openstackclient/identity/common.py +34 -0
- openstackclient/identity/v2_0/catalog.py +2 -2
- openstackclient/identity/v2_0/ec2creds.py +4 -4
- openstackclient/identity/v2_0/endpoint.py +4 -4
- openstackclient/identity/v2_0/project.py +6 -6
- openstackclient/identity/v2_0/role.py +5 -5
- openstackclient/identity/v2_0/role_assignment.py +1 -1
- openstackclient/identity/v2_0/service.py +4 -4
- openstackclient/identity/v2_0/token.py +2 -2
- openstackclient/identity/v2_0/user.py +7 -7
- openstackclient/identity/v3/access_rule.py +3 -3
- openstackclient/identity/v3/application_credential.py +127 -45
- openstackclient/identity/v3/catalog.py +2 -2
- openstackclient/identity/v3/consumer.py +4 -4
- openstackclient/identity/v3/credential.py +5 -5
- openstackclient/identity/v3/domain.py +5 -5
- openstackclient/identity/v3/ec2creds.py +4 -4
- openstackclient/identity/v3/endpoint.py +7 -7
- openstackclient/identity/v3/endpoint_group.py +8 -10
- openstackclient/identity/v3/federation_protocol.py +5 -5
- openstackclient/identity/v3/group.py +8 -8
- openstackclient/identity/v3/identity_provider.py +5 -5
- openstackclient/identity/v3/implied_role.py +3 -3
- openstackclient/identity/v3/limit.py +5 -5
- openstackclient/identity/v3/mapping.py +5 -5
- openstackclient/identity/v3/policy.py +5 -5
- openstackclient/identity/v3/project.py +5 -5
- openstackclient/identity/v3/region.py +5 -5
- openstackclient/identity/v3/registered_limit.py +5 -5
- openstackclient/identity/v3/role.py +7 -7
- openstackclient/identity/v3/role_assignment.py +92 -140
- openstackclient/identity/v3/service.py +64 -34
- openstackclient/identity/v3/service_provider.py +4 -4
- openstackclient/identity/v3/tag.py +2 -2
- openstackclient/identity/v3/token.py +5 -5
- openstackclient/identity/v3/trust.py +3 -3
- openstackclient/identity/v3/user.py +144 -80
- openstackclient/image/client.py +4 -4
- openstackclient/image/v1/image.py +8 -9
- openstackclient/image/v2/cache.py +12 -10
- openstackclient/image/v2/metadef_objects.py +44 -0
- openstackclient/image/v2/metadef_resource_type_association.py +189 -0
- openstackclient/image/v2/task.py +1 -1
- openstackclient/network/common.py +6 -5
- openstackclient/network/utils.py +2 -2
- openstackclient/network/v2/address_group.py +6 -6
- openstackclient/network/v2/address_scope.py +5 -5
- openstackclient/network/v2/default_security_group_rule.py +1 -1
- openstackclient/network/v2/floating_ip.py +8 -10
- openstackclient/network/v2/floating_ip_pool.py +6 -15
- openstackclient/network/v2/floating_ip_port_forwarding.py +5 -13
- openstackclient/network/v2/ip_availability.py +2 -2
- openstackclient/network/v2/l3_conntrack_helper.py +5 -5
- openstackclient/network/v2/network.py +8 -8
- openstackclient/network/v2/network_agent.py +8 -8
- openstackclient/network/v2/network_auto_allocated_topology.py +2 -2
- openstackclient/network/v2/network_flavor.py +6 -8
- openstackclient/network/v2/network_flavor_profile.py +4 -4
- openstackclient/network/v2/network_meter.py +3 -3
- openstackclient/network/v2/network_meter_rule.py +3 -3
- openstackclient/network/v2/network_qos_policy.py +5 -5
- openstackclient/network/v2/network_qos_rule.py +9 -9
- openstackclient/network/v2/network_qos_rule_type.py +1 -1
- openstackclient/network/v2/network_rbac.py +5 -5
- openstackclient/network/v2/network_segment.py +5 -5
- openstackclient/network/v2/network_segment_range.py +7 -7
- openstackclient/network/v2/network_trunk.py +7 -7
- openstackclient/network/v2/port.py +26 -12
- openstackclient/network/v2/router.py +403 -54
- openstackclient/network/v2/security_group.py +18 -14
- openstackclient/network/v2/security_group_rule.py +18 -15
- openstackclient/network/v2/subnet.py +15 -8
- openstackclient/network/v2/subnet_pool.py +6 -6
- openstackclient/object/v1/account.py +2 -2
- openstackclient/object/v1/container.py +7 -7
- openstackclient/object/v1/object.py +7 -7
- openstackclient/shell.py +4 -6
- openstackclient/tests/functional/base.py +1 -1
- openstackclient/tests/functional/common/test_extension.py +1 -1
- openstackclient/tests/functional/common/test_help.py +2 -2
- openstackclient/tests/functional/common/test_module.py +1 -1
- openstackclient/tests/functional/common/test_quota.py +43 -61
- openstackclient/tests/functional/compute/v2/common.py +2 -2
- openstackclient/tests/functional/compute/v2/test_flavor.py +2 -2
- openstackclient/tests/functional/compute/v2/test_keypair.py +1 -1
- openstackclient/tests/functional/compute/v2/test_server.py +5 -5
- openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
- openstackclient/tests/functional/identity/v2/common.py +3 -3
- openstackclient/tests/functional/identity/v3/common.py +14 -6
- openstackclient/tests/functional/identity/v3/test_application_credential.py +13 -19
- openstackclient/tests/functional/identity/v3/test_domain.py +1 -3
- openstackclient/tests/functional/identity/v3/test_endpoint.py +1 -1
- openstackclient/tests/functional/identity/v3/test_idp.py +1 -1
- openstackclient/tests/functional/identity/v3/test_limit.py +2 -2
- openstackclient/tests/functional/identity/v3/test_region.py +1 -3
- openstackclient/tests/functional/identity/v3/test_registered_limit.py +1 -1
- openstackclient/tests/functional/identity/v3/test_role.py +2 -2
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +210 -0
- openstackclient/tests/functional/identity/v3/test_service.py +4 -6
- openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -3
- openstackclient/tests/functional/image/base.py +1 -1
- openstackclient/tests/functional/image/v2/test_image.py +1 -1
- openstackclient/tests/functional/image/v2/test_info.py +1 -1
- openstackclient/tests/functional/network/v2/common.py +4 -6
- openstackclient/tests/functional/network/v2/test_network.py +5 -3
- openstackclient/tests/functional/network/v2/test_network_agent.py +7 -5
- openstackclient/tests/functional/network/v2/test_network_qos_rule.py +4 -4
- openstackclient/tests/functional/network/v2/test_port.py +11 -7
- openstackclient/tests/functional/network/v2/test_router.py +2 -2
- openstackclient/tests/functional/object/v1/common.py +1 -1
- openstackclient/tests/functional/object/v1/test_container.py +3 -3
- openstackclient/tests/functional/object/v1/test_object.py +9 -13
- openstackclient/tests/functional/volume/base.py +1 -1
- openstackclient/tests/functional/volume/v1/test_service.py +1 -1
- openstackclient/tests/functional/volume/v1/test_snapshot.py +2 -2
- openstackclient/tests/functional/volume/v1/test_transfer_request.py +2 -2
- openstackclient/tests/functional/volume/v1/test_volume_type.py +1 -1
- openstackclient/tests/functional/volume/v2/test_service.py +2 -2
- openstackclient/tests/functional/volume/v2/test_volume_backup.py +2 -2
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +2 -2
- openstackclient/tests/functional/volume/v2/test_volume_type.py +1 -1
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +2 -2
- openstackclient/tests/functional/volume/v3/test_volume_type.py +1 -1
- openstackclient/tests/unit/api/fakes.py +1 -1
- openstackclient/tests/unit/api/test_api.py +2 -2
- openstackclient/tests/unit/api/test_compute_v2.py +522 -707
- openstackclient/tests/unit/api/test_image_v1.py +1 -1
- openstackclient/tests/unit/api/test_image_v2.py +1 -1
- openstackclient/tests/unit/api/test_object_store_v1.py +4 -4
- openstackclient/tests/unit/common/test_limits.py +73 -35
- openstackclient/tests/unit/common/test_logs.py +2 -2
- openstackclient/tests/unit/common/test_module.py +4 -2
- openstackclient/tests/unit/common/test_project_cleanup.py +31 -6
- openstackclient/tests/unit/common/test_quota.py +490 -630
- openstackclient/tests/unit/compute/v2/fakes.py +37 -286
- openstackclient/tests/unit/compute/v2/test_agent.py +189 -147
- openstackclient/tests/unit/compute/v2/test_aggregate.py +18 -16
- openstackclient/tests/unit/compute/v2/test_console.py +4 -5
- openstackclient/tests/unit/compute/v2/test_flavor.py +59 -68
- openstackclient/tests/unit/compute/v2/test_host.py +83 -54
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +28 -31
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +65 -50
- openstackclient/tests/unit/compute/v2/test_server.py +2895 -2459
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_event.py +14 -39
- openstackclient/tests/unit/compute/v2/test_server_group.py +28 -29
- openstackclient/tests/unit/compute/v2/test_server_migration.py +43 -68
- openstackclient/tests/unit/compute/v2/test_server_volume.py +17 -34
- openstackclient/tests/unit/compute/v2/test_service.py +34 -52
- openstackclient/tests/unit/compute/v2/test_usage.py +4 -4
- openstackclient/tests/unit/fakes.py +11 -11
- openstackclient/tests/unit/identity/v2_0/fakes.py +27 -10
- openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -3
- openstackclient/tests/unit/identity/v2_0/test_endpoint.py +7 -7
- openstackclient/tests/unit/identity/v2_0/test_project.py +8 -8
- openstackclient/tests/unit/identity/v2_0/test_role.py +10 -10
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +4 -4
- openstackclient/tests/unit/identity/v2_0/test_service.py +6 -6
- openstackclient/tests/unit/identity/v2_0/test_token.py +4 -4
- openstackclient/tests/unit/identity/v2_0/test_user.py +8 -8
- openstackclient/tests/unit/identity/v3/fakes.py +59 -20
- openstackclient/tests/unit/identity/v3/test_access_rule.py +5 -5
- openstackclient/tests/unit/identity/v3/test_application_credential.py +212 -235
- openstackclient/tests/unit/identity/v3/test_catalog.py +3 -3
- openstackclient/tests/unit/identity/v3/test_consumer.py +7 -8
- openstackclient/tests/unit/identity/v3/test_credential.py +9 -9
- openstackclient/tests/unit/identity/v3/test_domain.py +8 -8
- openstackclient/tests/unit/identity/v3/test_endpoint.py +13 -13
- openstackclient/tests/unit/identity/v3/test_endpoint_group.py +12 -14
- openstackclient/tests/unit/identity/v3/test_group.py +12 -12
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +8 -8
- openstackclient/tests/unit/identity/v3/test_implied_role.py +5 -5
- openstackclient/tests/unit/identity/v3/test_limit.py +7 -7
- openstackclient/tests/unit/identity/v3/test_mappings.py +7 -7
- openstackclient/tests/unit/identity/v3/test_oauth.py +5 -5
- openstackclient/tests/unit/identity/v3/test_project.py +16 -16
- openstackclient/tests/unit/identity/v3/test_protocol.py +7 -7
- openstackclient/tests/unit/identity/v3/test_region.py +7 -7
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +12 -13
- openstackclient/tests/unit/identity/v3/test_role.py +13 -13
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +410 -331
- openstackclient/tests/unit/identity/v3/test_service.py +93 -97
- openstackclient/tests/unit/identity/v3/test_service_provider.py +7 -7
- openstackclient/tests/unit/identity/v3/test_token.py +4 -4
- openstackclient/tests/unit/identity/v3/test_trust.py +9 -9
- openstackclient/tests/unit/identity/v3/test_unscoped_saml.py +4 -4
- openstackclient/tests/unit/identity/v3/test_user.py +299 -327
- openstackclient/tests/unit/image/v1/test_image.py +6 -6
- openstackclient/tests/unit/image/v2/fakes.py +46 -9
- openstackclient/tests/unit/image/v2/test_cache.py +2 -2
- openstackclient/tests/unit/image/v2/test_image.py +3 -3
- openstackclient/tests/unit/image/v2/test_metadef_objects.py +62 -0
- openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +131 -0
- openstackclient/tests/unit/integ/base.py +1 -1
- openstackclient/tests/unit/integ/cli/test_project.py +4 -4
- openstackclient/tests/unit/integ/cli/test_shell.py +7 -7
- openstackclient/tests/unit/network/test_common.py +12 -21
- openstackclient/tests/unit/network/v2/fakes.py +64 -130
- openstackclient/tests/unit/network/v2/test_address_group.py +15 -15
- openstackclient/tests/unit/network/v2/test_address_scope.py +13 -13
- openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +49 -27
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +40 -38
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +15 -15
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +4 -7
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +3 -5
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +11 -11
- openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -6
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +11 -21
- openstackclient/tests/unit/network/v2/test_local_ip.py +7 -7
- openstackclient/tests/unit/network/v2/test_local_ip_association.py +3 -5
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -13
- openstackclient/tests/unit/network/v2/test_network.py +23 -28
- openstackclient/tests/unit/network/v2/test_network_agent.py +17 -21
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +8 -8
- openstackclient/tests/unit/network/v2/test_network_compute.py +66 -65
- openstackclient/tests/unit/network/v2/test_network_flavor.py +17 -19
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +13 -13
- openstackclient/tests/unit/network/v2/test_network_meter.py +11 -11
- openstackclient/tests/unit/network/v2/test_network_meter_rule.py +11 -11
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +11 -21
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +51 -77
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +5 -9
- openstackclient/tests/unit/network/v2/test_network_rbac.py +12 -12
- openstackclient/tests/unit/network/v2/test_network_segment.py +11 -15
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +11 -13
- openstackclient/tests/unit/network/v2/test_network_service_provider.py +3 -5
- openstackclient/tests/unit/network/v2/test_network_trunk.py +11 -11
- openstackclient/tests/unit/network/v2/test_port.py +22 -25
- openstackclient/tests/unit/network/v2/test_router.py +721 -51
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +65 -49
- openstackclient/tests/unit/network/v2/test_security_group_network.py +15 -15
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +57 -45
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +11 -19
- openstackclient/tests/unit/network/v2/test_subnet.py +29 -25
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +15 -15
- openstackclient/tests/unit/object/v1/fakes.py +1 -1
- openstackclient/tests/unit/object/v1/test_container.py +5 -5
- openstackclient/tests/unit/object/v1/test_container_all.py +6 -6
- openstackclient/tests/unit/object/v1/test_object.py +3 -3
- openstackclient/tests/unit/object/v1/test_object_all.py +5 -5
- openstackclient/tests/unit/test_shell.py +5 -5
- openstackclient/tests/unit/utils.py +4 -1
- openstackclient/tests/unit/volume/test_find_resource.py +2 -2
- openstackclient/tests/unit/volume/v1/fakes.py +5 -6
- openstackclient/tests/unit/volume/v1/test_volume.py +5 -4
- openstackclient/tests/unit/volume/v2/fakes.py +39 -259
- openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +5 -5
- openstackclient/tests/unit/volume/v2/test_qos_specs.py +9 -9
- openstackclient/tests/unit/volume/v2/test_volume.py +21 -87
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +7 -368
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +1 -1
- openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +0 -44
- openstackclient/tests/unit/volume/v2/test_volume_type.py +6 -87
- openstackclient/tests/unit/volume/v3/fakes.py +505 -22
- openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +2 -3
- openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +10 -11
- openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +10 -6
- openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +25 -17
- openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +6 -32
- openstackclient/tests/unit/volume/v3/test_service.py +271 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +2177 -33
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +48 -52
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +892 -0
- openstackclient/tests/unit/volume/v3/test_volume_group.py +19 -20
- openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +14 -34
- openstackclient/tests/unit/volume/v3/test_volume_group_type.py +13 -16
- openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -11
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +161 -0
- openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +425 -0
- openstackclient/tests/unit/volume/v3/test_volume_type.py +1109 -0
- openstackclient/volume/v1/qos_specs.py +7 -7
- openstackclient/volume/v1/service.py +2 -2
- openstackclient/volume/v1/volume.py +12 -12
- openstackclient/volume/v1/volume_backup.py +7 -7
- openstackclient/volume/v1/volume_snapshot.py +8 -8
- openstackclient/volume/v1/volume_transfer_request.py +5 -5
- openstackclient/volume/v1/volume_type.py +7 -7
- openstackclient/volume/v2/backup_record.py +2 -2
- openstackclient/volume/v2/consistency_group.py +7 -9
- openstackclient/volume/v2/consistency_group_snapshot.py +4 -12
- openstackclient/volume/v2/qos_specs.py +7 -7
- openstackclient/volume/v2/service.py +2 -2
- openstackclient/volume/v2/volume.py +80 -80
- openstackclient/volume/v2/volume_backend.py +2 -2
- openstackclient/volume/v2/volume_backup.py +7 -217
- openstackclient/volume/v2/volume_host.py +2 -2
- openstackclient/volume/v2/volume_snapshot.py +8 -8
- openstackclient/volume/v2/volume_transfer_request.py +5 -37
- openstackclient/volume/v2/volume_type.py +7 -89
- openstackclient/volume/v3/service.py +56 -0
- openstackclient/volume/v3/volume.py +971 -0
- openstackclient/volume/v3/volume_attachment.py +31 -29
- openstackclient/volume/v3/volume_backup.py +670 -0
- openstackclient/volume/v3/volume_message.py +1 -1
- openstackclient/volume/v3/volume_snapshot.py +97 -0
- openstackclient/volume/v3/volume_transfer_request.py +233 -0
- openstackclient/volume/v3/volume_type.py +967 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/AUTHORS +4 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/METADATA +3 -3
- python_openstackclient-7.0.0.dist-info/RECORD +502 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/entry_points.txt +33 -27
- python_openstackclient-7.0.0.dist-info/pbr.json +1 -0
- python_openstackclient-6.6.0.dist-info/RECORD +0 -489
- python_openstackclient-6.6.0.dist-info/pbr.json +0 -1
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/WHEEL +0 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/top_level.txt +0 -0
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
import copy
|
|
17
17
|
import random
|
|
18
|
+
import re
|
|
18
19
|
from unittest import mock
|
|
19
20
|
import uuid
|
|
20
21
|
|
|
21
|
-
from
|
|
22
|
+
from keystoneauth1 import discover
|
|
22
23
|
from openstack.compute.v2 import _proxy
|
|
23
24
|
from openstack.compute.v2 import aggregate as _aggregate
|
|
24
25
|
from openstack.compute.v2 import availability_zone as _availability_zone
|
|
@@ -26,6 +27,7 @@ from openstack.compute.v2 import extension as _extension
|
|
|
26
27
|
from openstack.compute.v2 import flavor as _flavor
|
|
27
28
|
from openstack.compute.v2 import hypervisor as _hypervisor
|
|
28
29
|
from openstack.compute.v2 import keypair as _keypair
|
|
30
|
+
from openstack.compute.v2 import limits as _limits
|
|
29
31
|
from openstack.compute.v2 import migration as _migration
|
|
30
32
|
from openstack.compute.v2 import server as _server
|
|
31
33
|
from openstack.compute.v2 import server_action as _server_action
|
|
@@ -36,7 +38,6 @@ from openstack.compute.v2 import service as _service
|
|
|
36
38
|
from openstack.compute.v2 import usage as _usage
|
|
37
39
|
from openstack.compute.v2 import volume_attachment as _volume_attachment
|
|
38
40
|
|
|
39
|
-
from openstackclient.api import compute_v2
|
|
40
41
|
from openstackclient.tests.unit import fakes
|
|
41
42
|
from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
|
|
42
43
|
from openstackclient.tests.unit.image.v2 import fakes as image_fakes
|
|
@@ -44,44 +45,8 @@ from openstackclient.tests.unit.network.v2 import fakes as network_fakes
|
|
|
44
45
|
from openstackclient.tests.unit import utils
|
|
45
46
|
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
injected_file_num = 100
|
|
50
|
-
injected_file_size_num = 10240
|
|
51
|
-
injected_path_size_num = 255
|
|
52
|
-
key_pair_num = 100
|
|
53
|
-
core_num = 20
|
|
54
|
-
ram_num = 51200
|
|
55
|
-
instance_num = 10
|
|
56
|
-
property_num = 128
|
|
57
|
-
secgroup_rule_num = 20
|
|
58
|
-
secgroup_num = 10
|
|
59
|
-
servgroup_num = 10
|
|
60
|
-
servgroup_members_num = 10
|
|
61
|
-
project_name = 'project_test'
|
|
62
|
-
QUOTA = {
|
|
63
|
-
'project': project_name,
|
|
64
|
-
'floating-ips': floating_ip_num,
|
|
65
|
-
'fix-ips': fix_ip_num,
|
|
66
|
-
'injected-files': injected_file_num,
|
|
67
|
-
'injected-file-size': injected_file_size_num,
|
|
68
|
-
'injected-path-size': injected_path_size_num,
|
|
69
|
-
'key-pairs': key_pair_num,
|
|
70
|
-
'cores': core_num,
|
|
71
|
-
'ram': ram_num,
|
|
72
|
-
'instances': instance_num,
|
|
73
|
-
'properties': property_num,
|
|
74
|
-
'secgroup_rules': secgroup_rule_num,
|
|
75
|
-
'secgroups': secgroup_num,
|
|
76
|
-
'server-groups': servgroup_num,
|
|
77
|
-
'server-group-members': servgroup_members_num,
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
QUOTA_columns = tuple(sorted(QUOTA))
|
|
81
|
-
QUOTA_data = tuple(QUOTA[x] for x in sorted(QUOTA))
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
class FakeComputev2Client(object):
|
|
48
|
+
|
|
49
|
+
class FakeComputev2Client:
|
|
85
50
|
def __init__(self, **kwargs):
|
|
86
51
|
self.agents = mock.Mock()
|
|
87
52
|
self.agents.resource_class = fakes.FakeResource(None, {})
|
|
@@ -89,9 +54,6 @@ class FakeComputev2Client(object):
|
|
|
89
54
|
self.images = mock.Mock()
|
|
90
55
|
self.images.resource_class = fakes.FakeResource(None, {})
|
|
91
56
|
|
|
92
|
-
self.limits = mock.Mock()
|
|
93
|
-
self.limits.resource_class = fakes.FakeResource(None, {})
|
|
94
|
-
|
|
95
57
|
self.servers = mock.Mock()
|
|
96
58
|
self.servers.resource_class = fakes.FakeResource(None, {})
|
|
97
59
|
|
|
@@ -106,12 +68,6 @@ class FakeComputev2Client(object):
|
|
|
106
68
|
self.flavor_access = mock.Mock()
|
|
107
69
|
self.flavor_access.resource_class = fakes.FakeResource(None, {})
|
|
108
70
|
|
|
109
|
-
self.quotas = mock.Mock()
|
|
110
|
-
self.quotas.resource_class = fakes.FakeResource(None, {})
|
|
111
|
-
|
|
112
|
-
self.quota_classes = mock.Mock()
|
|
113
|
-
self.quota_classes.resource_class = fakes.FakeResource(None, {})
|
|
114
|
-
|
|
115
71
|
self.usage = mock.Mock()
|
|
116
72
|
self.usage.resource_class = fakes.FakeResource(None, {})
|
|
117
73
|
|
|
@@ -127,9 +83,6 @@ class FakeComputev2Client(object):
|
|
|
127
83
|
self.keypairs = mock.Mock()
|
|
128
84
|
self.keypairs.resource_class = fakes.FakeResource(None, {})
|
|
129
85
|
|
|
130
|
-
self.hosts = mock.Mock()
|
|
131
|
-
self.hosts.resource_class = fakes.FakeResource(None, {})
|
|
132
|
-
|
|
133
86
|
self.server_groups = mock.Mock()
|
|
134
87
|
self.server_groups.resource_class = fakes.FakeResource(None, {})
|
|
135
88
|
|
|
@@ -146,24 +99,11 @@ class FakeComputev2Client(object):
|
|
|
146
99
|
|
|
147
100
|
self.management_url = kwargs['endpoint']
|
|
148
101
|
|
|
149
|
-
self.api_version = api_versions.APIVersion('2.1')
|
|
150
|
-
|
|
151
102
|
|
|
152
103
|
class FakeClientMixin:
|
|
153
104
|
def setUp(self):
|
|
154
105
|
super().setUp()
|
|
155
106
|
|
|
156
|
-
self.app.client_manager.compute = FakeComputev2Client(
|
|
157
|
-
endpoint=fakes.AUTH_URL,
|
|
158
|
-
token=fakes.AUTH_TOKEN,
|
|
159
|
-
)
|
|
160
|
-
self.compute_client = self.app.client_manager.compute
|
|
161
|
-
|
|
162
|
-
self.compute_client.api = compute_v2.APIv2(
|
|
163
|
-
session=self.app.client_manager.session,
|
|
164
|
-
endpoint=fakes.AUTH_URL,
|
|
165
|
-
)
|
|
166
|
-
|
|
167
107
|
# TODO(stephenfin): Rename to 'compute_client' once all commands are
|
|
168
108
|
# migrated to SDK
|
|
169
109
|
self.app.client_manager.sdk_connection.compute = mock.Mock(
|
|
@@ -172,22 +112,34 @@ class FakeClientMixin:
|
|
|
172
112
|
self.compute_sdk_client = (
|
|
173
113
|
self.app.client_manager.sdk_connection.compute
|
|
174
114
|
)
|
|
115
|
+
self.set_compute_api_version() # default to the lowest
|
|
116
|
+
|
|
117
|
+
def set_compute_api_version(self, version: str = '2.1'):
|
|
118
|
+
"""Set a fake server version.
|
|
119
|
+
|
|
120
|
+
:param version: The fake microversion to "support". This should be a
|
|
121
|
+
string of format '2.xx'.
|
|
122
|
+
:returns: None
|
|
123
|
+
"""
|
|
124
|
+
assert re.match(r'2.\d+', version)
|
|
125
|
+
|
|
126
|
+
self.compute_sdk_client.default_microversion = version
|
|
127
|
+
self.compute_sdk_client.get_endpoint_data.return_value = (
|
|
128
|
+
discover.EndpointData(
|
|
129
|
+
min_microversion='2.1', # nova has not bumped this yet
|
|
130
|
+
max_microversion=version,
|
|
131
|
+
)
|
|
132
|
+
)
|
|
175
133
|
|
|
176
134
|
|
|
177
135
|
class TestComputev2(
|
|
178
136
|
network_fakes.FakeClientMixin,
|
|
179
137
|
image_fakes.FakeClientMixin,
|
|
180
138
|
volume_fakes.FakeClientMixin,
|
|
139
|
+
identity_fakes.FakeClientMixin,
|
|
181
140
|
FakeClientMixin,
|
|
182
141
|
utils.TestCommand,
|
|
183
|
-
):
|
|
184
|
-
def setUp(self):
|
|
185
|
-
super().setUp()
|
|
186
|
-
|
|
187
|
-
self.app.client_manager.identity = identity_fakes.FakeIdentityv2Client(
|
|
188
|
-
endpoint=fakes.AUTH_URL,
|
|
189
|
-
token=fakes.AUTH_TOKEN,
|
|
190
|
-
)
|
|
142
|
+
): ...
|
|
191
143
|
|
|
192
144
|
|
|
193
145
|
def create_one_aggregate(attrs=None):
|
|
@@ -1018,56 +970,6 @@ def get_networks(networks=None, count=2):
|
|
|
1018
970
|
return mock.Mock(side_effect=networks)
|
|
1019
971
|
|
|
1020
972
|
|
|
1021
|
-
def create_one_host(attrs=None):
|
|
1022
|
-
"""Create a fake host.
|
|
1023
|
-
|
|
1024
|
-
:param dict attrs:
|
|
1025
|
-
A dictionary with all attributes
|
|
1026
|
-
:return:
|
|
1027
|
-
A FakeResource object, with uuid and other attributes
|
|
1028
|
-
"""
|
|
1029
|
-
attrs = attrs or {}
|
|
1030
|
-
|
|
1031
|
-
# Set default attributes.
|
|
1032
|
-
host_info = {
|
|
1033
|
-
"service_id": 1,
|
|
1034
|
-
"host": "host1",
|
|
1035
|
-
"uuid": 'host-id-' + uuid.uuid4().hex,
|
|
1036
|
-
"vcpus": 10,
|
|
1037
|
-
"memory_mb": 100,
|
|
1038
|
-
"local_gb": 100,
|
|
1039
|
-
"vcpus_used": 5,
|
|
1040
|
-
"memory_mb_used": 50,
|
|
1041
|
-
"local_gb_used": 10,
|
|
1042
|
-
"hypervisor_type": "xen",
|
|
1043
|
-
"hypervisor_version": 1,
|
|
1044
|
-
"hypervisor_hostname": "devstack1",
|
|
1045
|
-
"free_ram_mb": 50,
|
|
1046
|
-
"free_disk_gb": 50,
|
|
1047
|
-
"current_workload": 10,
|
|
1048
|
-
"running_vms": 1,
|
|
1049
|
-
"cpu_info": "",
|
|
1050
|
-
"disk_available_least": 1,
|
|
1051
|
-
"host_ip": "10.10.10.10",
|
|
1052
|
-
"supported_instances": "",
|
|
1053
|
-
"metrics": "",
|
|
1054
|
-
"pci_stats": "",
|
|
1055
|
-
"extra_resources": "",
|
|
1056
|
-
"stats": "",
|
|
1057
|
-
"numa_topology": "",
|
|
1058
|
-
"ram_allocation_ratio": 1.0,
|
|
1059
|
-
"cpu_allocation_ratio": 1.0,
|
|
1060
|
-
"zone": 'zone-' + uuid.uuid4().hex,
|
|
1061
|
-
"host_name": 'name-' + uuid.uuid4().hex,
|
|
1062
|
-
"service": 'service-' + uuid.uuid4().hex,
|
|
1063
|
-
"cpu": 4,
|
|
1064
|
-
"disk_gb": 100,
|
|
1065
|
-
'project': 'project-' + uuid.uuid4().hex,
|
|
1066
|
-
}
|
|
1067
|
-
host_info.update(attrs)
|
|
1068
|
-
return host_info
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
973
|
def create_one_usage(attrs=None):
|
|
1072
974
|
"""Create a fake usage.
|
|
1073
975
|
|
|
@@ -1124,103 +1026,12 @@ def create_usages(attrs=None, count=2):
|
|
|
1124
1026
|
return usages
|
|
1125
1027
|
|
|
1126
1028
|
|
|
1127
|
-
def
|
|
1128
|
-
"""Create
|
|
1129
|
-
|
|
1029
|
+
def create_limits(attrs=None):
|
|
1030
|
+
"""Create a fake limits object."""
|
|
1130
1031
|
attrs = attrs or {}
|
|
1131
1032
|
|
|
1132
|
-
|
|
1133
|
-
'
|
|
1134
|
-
'cores': 20,
|
|
1135
|
-
'fixed_ips': 30,
|
|
1136
|
-
'injected_files': 100,
|
|
1137
|
-
'injected_file_content_bytes': 10240,
|
|
1138
|
-
'injected_file_path_bytes': 255,
|
|
1139
|
-
'instances': 50,
|
|
1140
|
-
'key_pairs': 20,
|
|
1141
|
-
'metadata_items': 10,
|
|
1142
|
-
'ram': 51200,
|
|
1143
|
-
'server_groups': 10,
|
|
1144
|
-
'server_group_members': 10,
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
quota_attrs.update(attrs)
|
|
1148
|
-
quota = fakes.FakeResource(info=copy.deepcopy(quota_attrs), loaded=True)
|
|
1149
|
-
|
|
1150
|
-
quota.project_id = quota_attrs['id']
|
|
1151
|
-
|
|
1152
|
-
return quota
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
def create_one_default_comp_quota(attrs=None):
|
|
1156
|
-
"""Create one quota"""
|
|
1157
|
-
|
|
1158
|
-
attrs = attrs or {}
|
|
1159
|
-
|
|
1160
|
-
quota_attrs = {
|
|
1161
|
-
'id': 'project-id-' + uuid.uuid4().hex,
|
|
1162
|
-
'cores': 10,
|
|
1163
|
-
'fixed_ips': 10,
|
|
1164
|
-
'injected_files': 100,
|
|
1165
|
-
'injected_file_content_bytes': 10240,
|
|
1166
|
-
'injected_file_path_bytes': 255,
|
|
1167
|
-
'instances': 20,
|
|
1168
|
-
'key_pairs': 20,
|
|
1169
|
-
'metadata_items': 10,
|
|
1170
|
-
'ram': 51200,
|
|
1171
|
-
'server_groups': 10,
|
|
1172
|
-
'server_group_members': 10,
|
|
1173
|
-
}
|
|
1174
|
-
|
|
1175
|
-
quota_attrs.update(attrs)
|
|
1176
|
-
quota = fakes.FakeResource(info=copy.deepcopy(quota_attrs), loaded=True)
|
|
1177
|
-
|
|
1178
|
-
quota.project_id = quota_attrs['id']
|
|
1179
|
-
|
|
1180
|
-
return quota
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
def create_one_comp_detailed_quota(attrs=None):
|
|
1184
|
-
"""Create one quota"""
|
|
1185
|
-
|
|
1186
|
-
attrs = attrs or {}
|
|
1187
|
-
|
|
1188
|
-
quota_attrs = {
|
|
1189
|
-
'id': 'project-id-' + uuid.uuid4().hex,
|
|
1190
|
-
'cores': {'reserved': 0, 'in_use': 0, 'limit': 20},
|
|
1191
|
-
'fixed_ips': {'reserved': 0, 'in_use': 0, 'limit': 30},
|
|
1192
|
-
'injected_files': {'reserved': 0, 'in_use': 0, 'limit': 100},
|
|
1193
|
-
'injected_file_content_bytes': {
|
|
1194
|
-
'reserved': 0,
|
|
1195
|
-
'in_use': 0,
|
|
1196
|
-
'limit': 10240,
|
|
1197
|
-
},
|
|
1198
|
-
'injected_file_path_bytes': {
|
|
1199
|
-
'reserved': 0,
|
|
1200
|
-
'in_use': 0,
|
|
1201
|
-
'limit': 255,
|
|
1202
|
-
},
|
|
1203
|
-
'instances': {'reserved': 0, 'in_use': 0, 'limit': 50},
|
|
1204
|
-
'key_pairs': {'reserved': 0, 'in_use': 0, 'limit': 20},
|
|
1205
|
-
'metadata_items': {'reserved': 0, 'in_use': 0, 'limit': 10},
|
|
1206
|
-
'ram': {'reserved': 0, 'in_use': 0, 'limit': 51200},
|
|
1207
|
-
'server_groups': {'reserved': 0, 'in_use': 0, 'limit': 10},
|
|
1208
|
-
'server_group_members': {'reserved': 0, 'in_use': 0, 'limit': 10},
|
|
1209
|
-
}
|
|
1210
|
-
|
|
1211
|
-
quota_attrs.update(attrs)
|
|
1212
|
-
quota = fakes.FakeResource(info=copy.deepcopy(quota_attrs), loaded=True)
|
|
1213
|
-
|
|
1214
|
-
quota.project_id = quota_attrs['id']
|
|
1215
|
-
|
|
1216
|
-
return quota
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
class FakeLimits(object):
|
|
1220
|
-
"""Fake limits"""
|
|
1221
|
-
|
|
1222
|
-
def __init__(self, absolute_attrs=None, rate_attrs=None):
|
|
1223
|
-
self.absolute_limits_attrs = {
|
|
1033
|
+
limits_attrs = {
|
|
1034
|
+
'absolute': {
|
|
1224
1035
|
'maxServerMeta': 128,
|
|
1225
1036
|
'maxTotalInstances': 10,
|
|
1226
1037
|
'maxPersonality': 5,
|
|
@@ -1240,11 +1051,8 @@ class FakeLimits(object):
|
|
|
1240
1051
|
'maxTotalFloatingIps': 10,
|
|
1241
1052
|
'totalSecurityGroupsUsed': 0,
|
|
1242
1053
|
'maxTotalCores': 20,
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
|
-
self.absolute_limits_attrs.update(absolute_attrs)
|
|
1246
|
-
|
|
1247
|
-
self.rate_limits_attrs = [
|
|
1054
|
+
},
|
|
1055
|
+
'rate': [
|
|
1248
1056
|
{
|
|
1249
1057
|
"uri": "*",
|
|
1250
1058
|
"limit": [
|
|
@@ -1271,69 +1079,12 @@ class FakeLimits(object):
|
|
|
1271
1079
|
},
|
|
1272
1080
|
],
|
|
1273
1081
|
}
|
|
1274
|
-
]
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
def absolute_limits(self):
|
|
1282
|
-
reference_data = []
|
|
1283
|
-
for name, value in self.absolute_limits_attrs.items():
|
|
1284
|
-
reference_data.append((name, value))
|
|
1285
|
-
return reference_data
|
|
1286
|
-
|
|
1287
|
-
@property
|
|
1288
|
-
def rate(self):
|
|
1289
|
-
for group in self.rate_limits_attrs:
|
|
1290
|
-
uri = group['uri']
|
|
1291
|
-
for rate in group['limit']:
|
|
1292
|
-
yield FakeRateLimit(
|
|
1293
|
-
rate['verb'],
|
|
1294
|
-
uri,
|
|
1295
|
-
rate['value'],
|
|
1296
|
-
rate['remaining'],
|
|
1297
|
-
rate['unit'],
|
|
1298
|
-
rate['next-available'],
|
|
1299
|
-
)
|
|
1300
|
-
|
|
1301
|
-
def rate_limits(self):
|
|
1302
|
-
reference_data = []
|
|
1303
|
-
for group in self.rate_limits_attrs:
|
|
1304
|
-
uri = group['uri']
|
|
1305
|
-
for rate in group['limit']:
|
|
1306
|
-
reference_data.append(
|
|
1307
|
-
(
|
|
1308
|
-
rate['verb'],
|
|
1309
|
-
uri,
|
|
1310
|
-
rate['value'],
|
|
1311
|
-
rate['remaining'],
|
|
1312
|
-
rate['unit'],
|
|
1313
|
-
rate['next-available'],
|
|
1314
|
-
)
|
|
1315
|
-
)
|
|
1316
|
-
return reference_data
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
class FakeAbsoluteLimit(object):
|
|
1320
|
-
"""Data model that represents an absolute limit"""
|
|
1321
|
-
|
|
1322
|
-
def __init__(self, name, value):
|
|
1323
|
-
self.name = name
|
|
1324
|
-
self.value = value
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
class FakeRateLimit(object):
|
|
1328
|
-
"""Data model that represents a flattened view of a single rate limit"""
|
|
1329
|
-
|
|
1330
|
-
def __init__(self, verb, uri, value, remain, unit, next_available):
|
|
1331
|
-
self.verb = verb
|
|
1332
|
-
self.uri = uri
|
|
1333
|
-
self.value = value
|
|
1334
|
-
self.remain = remain
|
|
1335
|
-
self.unit = unit
|
|
1336
|
-
self.next_available = next_available
|
|
1082
|
+
],
|
|
1083
|
+
}
|
|
1084
|
+
limits_attrs.update(attrs)
|
|
1085
|
+
|
|
1086
|
+
limits = _limits.Limits(**limits_attrs)
|
|
1087
|
+
return limits
|
|
1337
1088
|
|
|
1338
1089
|
|
|
1339
1090
|
def create_one_migration(attrs=None):
|