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
|
@@ -297,7 +297,8 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
297
297
|
self.project_mock.get.return_value = self.project
|
|
298
298
|
|
|
299
299
|
self.columns = ("ID", "Name", "Description", "Status", "Size")
|
|
300
|
-
self.columns_long =
|
|
300
|
+
self.columns_long = (
|
|
301
|
+
*self.columns,
|
|
301
302
|
"Created At",
|
|
302
303
|
"Volume",
|
|
303
304
|
"Properties",
|
|
@@ -342,6 +343,7 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
342
343
|
self.volume_sdk_client.snapshots.assert_called_once_with(
|
|
343
344
|
limit=None,
|
|
344
345
|
marker=None,
|
|
346
|
+
max_items=None,
|
|
345
347
|
all_projects=False,
|
|
346
348
|
name=None,
|
|
347
349
|
status=None,
|
|
@@ -375,6 +377,7 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
375
377
|
self.volume_sdk_client.snapshots.assert_called_once_with(
|
|
376
378
|
limit=2,
|
|
377
379
|
marker=self.snapshots[0].id,
|
|
380
|
+
max_items=None,
|
|
378
381
|
all_projects=True,
|
|
379
382
|
project_id=self.project.id,
|
|
380
383
|
name=None,
|
|
@@ -396,6 +399,7 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
396
399
|
self.volume_sdk_client.snapshots.assert_called_once_with(
|
|
397
400
|
limit=None,
|
|
398
401
|
marker=None,
|
|
402
|
+
max_items=None,
|
|
399
403
|
all_projects=True,
|
|
400
404
|
name=None,
|
|
401
405
|
status=None,
|
|
@@ -422,6 +426,7 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
422
426
|
self.volume_sdk_client.snapshots.assert_called_once_with(
|
|
423
427
|
limit=None,
|
|
424
428
|
marker=None,
|
|
429
|
+
max_items=None,
|
|
425
430
|
all_projects=False,
|
|
426
431
|
name=self.snapshots[0].name,
|
|
427
432
|
status=None,
|
|
@@ -448,6 +453,7 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
448
453
|
self.volume_sdk_client.snapshots.assert_called_once_with(
|
|
449
454
|
limit=None,
|
|
450
455
|
marker=None,
|
|
456
|
+
max_items=None,
|
|
451
457
|
all_projects=False,
|
|
452
458
|
name=None,
|
|
453
459
|
status='available',
|
|
@@ -474,6 +480,7 @@ class TestVolumeSnapshotList(volume_fakes.TestVolume):
|
|
|
474
480
|
self.volume_sdk_client.snapshots.assert_called_once_with(
|
|
475
481
|
limit=None,
|
|
476
482
|
marker=None,
|
|
483
|
+
max_items=None,
|
|
477
484
|
all_projects=False,
|
|
478
485
|
name=None,
|
|
479
486
|
status=None,
|
|
@@ -332,7 +332,7 @@ class TestTypeList(TestType):
|
|
|
332
332
|
"Name",
|
|
333
333
|
"Is Public",
|
|
334
334
|
]
|
|
335
|
-
columns_long = columns
|
|
335
|
+
columns_long = [*columns, "Description"]
|
|
336
336
|
data_with_default_type = [(volume_types[0].id, volume_types[0].name, True)]
|
|
337
337
|
data = []
|
|
338
338
|
for t in volume_types:
|
|
@@ -436,9 +436,7 @@ class TestTypeList(TestType):
|
|
|
436
436
|
'key_size': None,
|
|
437
437
|
'control_location': 'front-end',
|
|
438
438
|
}
|
|
439
|
-
encryption_columns = self.columns
|
|
440
|
-
"Encryption",
|
|
441
|
-
]
|
|
439
|
+
encryption_columns = [*self.columns, "Encryption"]
|
|
442
440
|
encryption_data = []
|
|
443
441
|
encryption_data.append(
|
|
444
442
|
(
|
|
@@ -40,12 +40,10 @@ class FakeVolumeClient:
|
|
|
40
40
|
self.management_url = kwargs['endpoint']
|
|
41
41
|
self.api_version = api_versions.APIVersion('3.0')
|
|
42
42
|
|
|
43
|
-
self.attachments = mock.Mock()
|
|
44
|
-
self.attachments.resource_class = fakes.FakeResource(None, {})
|
|
45
|
-
self.availability_zones = mock.Mock()
|
|
46
|
-
self.availability_zones.resource_class = fakes.FakeResource(None, {})
|
|
47
43
|
self.backups = mock.Mock()
|
|
48
44
|
self.backups.resource_class = fakes.FakeResource(None, {})
|
|
45
|
+
self.cgsnapshots = mock.Mock()
|
|
46
|
+
self.cgsnapshots.resource_class = fakes.FakeResource(None, {})
|
|
49
47
|
self.consistencygroups = mock.Mock()
|
|
50
48
|
self.consistencygroups.resource_class = fakes.FakeResource(None, {})
|
|
51
49
|
self.clusters = mock.Mock()
|
|
@@ -58,10 +56,10 @@ class FakeVolumeClient:
|
|
|
58
56
|
self.group_types.resource_class = fakes.FakeResource(None, {})
|
|
59
57
|
self.messages = mock.Mock()
|
|
60
58
|
self.messages.resource_class = fakes.FakeResource(None, {})
|
|
61
|
-
self.
|
|
62
|
-
self.
|
|
63
|
-
self.
|
|
64
|
-
self.
|
|
59
|
+
self.qos_specs = mock.Mock()
|
|
60
|
+
self.qos_specs.resource_class = fakes.FakeResource(None, {})
|
|
61
|
+
self.services = mock.Mock()
|
|
62
|
+
self.services.resource_class = fakes.FakeResource(None, {})
|
|
65
63
|
self.transfers = mock.Mock()
|
|
66
64
|
self.transfers.resource_class = fakes.FakeResource(None, {})
|
|
67
65
|
self.volume_encryption_types = mock.Mock()
|
|
@@ -76,8 +74,6 @@ class FakeVolumeClient:
|
|
|
76
74
|
self.volume_types.resource_class = fakes.FakeResource(None, {})
|
|
77
75
|
self.volumes = mock.Mock()
|
|
78
76
|
self.volumes.resource_class = fakes.FakeResource(None, {})
|
|
79
|
-
self.services = mock.Mock()
|
|
80
|
-
self.services.resource_class = fakes.FakeResource(None, {})
|
|
81
77
|
self.workers = mock.Mock()
|
|
82
78
|
self.workers.resource_class = fakes.FakeResource(None, {})
|
|
83
79
|
|
|
@@ -96,6 +92,7 @@ class FakeClientMixin:
|
|
|
96
92
|
self.app.client_manager.sdk_connection.volume = mock.Mock(
|
|
97
93
|
spec=_proxy.Proxy,
|
|
98
94
|
)
|
|
95
|
+
self.app.client_manager.sdk_connection.volume.api_version = '3'
|
|
99
96
|
self.volume_sdk_client = self.app.client_manager.sdk_connection.volume
|
|
100
97
|
self.set_volume_api_version() # default to the lowest
|
|
101
98
|
|
|
@@ -139,6 +136,8 @@ class TestVolume(
|
|
|
139
136
|
|
|
140
137
|
|
|
141
138
|
# TODO(stephenfin): Check if the responses are actually the same
|
|
139
|
+
create_one_capability = volume_v2_fakes.create_one_capability
|
|
140
|
+
create_one_pool = volume_v2_fakes.create_one_pool
|
|
142
141
|
create_one_snapshot = volume_v2_fakes.create_one_snapshot
|
|
143
142
|
create_one_service = volume_v2_fakes.create_one_service
|
|
144
143
|
|
|
@@ -231,6 +230,99 @@ def create_consistency_groups(attrs=None, count=2):
|
|
|
231
230
|
return consistency_groups
|
|
232
231
|
|
|
233
232
|
|
|
233
|
+
def get_consistency_groups(consistency_groups=None, count=2):
|
|
234
|
+
"""Note:
|
|
235
|
+
|
|
236
|
+
Get an iterable MagicMock object with a list of faked
|
|
237
|
+
consistency_groups.
|
|
238
|
+
|
|
239
|
+
If consistency_groups list is provided, then initialize
|
|
240
|
+
the Mock object with the list. Otherwise create one.
|
|
241
|
+
|
|
242
|
+
:param List consistency_groups:
|
|
243
|
+
A list of FakeResource objects faking consistency_groups
|
|
244
|
+
:param Integer count:
|
|
245
|
+
The number of consistency_groups to be faked
|
|
246
|
+
:return
|
|
247
|
+
An iterable Mock object with side_effect set to a list of faked
|
|
248
|
+
consistency_groups
|
|
249
|
+
"""
|
|
250
|
+
if consistency_groups is None:
|
|
251
|
+
consistency_groups = create_consistency_groups(count)
|
|
252
|
+
|
|
253
|
+
return mock.Mock(side_effect=consistency_groups)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def create_one_consistency_group_snapshot(attrs=None):
|
|
257
|
+
"""Create a fake consistency group snapshot.
|
|
258
|
+
|
|
259
|
+
:param dict attrs:
|
|
260
|
+
A dictionary with all attributes
|
|
261
|
+
:return:
|
|
262
|
+
A FakeResource object with id, name, description, etc.
|
|
263
|
+
"""
|
|
264
|
+
attrs = attrs or {}
|
|
265
|
+
|
|
266
|
+
# Set default attributes.
|
|
267
|
+
consistency_group_snapshot_info = {
|
|
268
|
+
"id": 'id-' + uuid.uuid4().hex,
|
|
269
|
+
"name": 'backup-name-' + uuid.uuid4().hex,
|
|
270
|
+
"description": 'description-' + uuid.uuid4().hex,
|
|
271
|
+
"status": "error",
|
|
272
|
+
"consistencygroup_id": 'consistency-group-id' + uuid.uuid4().hex,
|
|
273
|
+
"created_at": 'time-' + uuid.uuid4().hex,
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
# Overwrite default attributes.
|
|
277
|
+
consistency_group_snapshot_info.update(attrs)
|
|
278
|
+
|
|
279
|
+
consistency_group_snapshot = fakes.FakeResource(
|
|
280
|
+
info=copy.deepcopy(consistency_group_snapshot_info), loaded=True
|
|
281
|
+
)
|
|
282
|
+
return consistency_group_snapshot
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def create_consistency_group_snapshots(attrs=None, count=2):
|
|
286
|
+
"""Create multiple fake consistency group snapshots.
|
|
287
|
+
|
|
288
|
+
:param dict attrs:
|
|
289
|
+
A dictionary with all attributes
|
|
290
|
+
:param int count:
|
|
291
|
+
The number of consistency group snapshots to fake
|
|
292
|
+
:return:
|
|
293
|
+
A list of FakeResource objects faking the
|
|
294
|
+
consistency group snapshots
|
|
295
|
+
"""
|
|
296
|
+
consistency_group_snapshots = []
|
|
297
|
+
for i in range(0, count):
|
|
298
|
+
consistency_group_snapshot = create_one_consistency_group_snapshot(
|
|
299
|
+
attrs,
|
|
300
|
+
)
|
|
301
|
+
consistency_group_snapshots.append(consistency_group_snapshot)
|
|
302
|
+
|
|
303
|
+
return consistency_group_snapshots
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def get_consistency_group_snapshots(snapshots=None, count=2):
|
|
307
|
+
"""Get an iterable MagicMock object with a list of faked cgsnapshots.
|
|
308
|
+
|
|
309
|
+
If consistenct group snapshots list is provided, then initialize
|
|
310
|
+
the Mock object with the list. Otherwise create one.
|
|
311
|
+
|
|
312
|
+
:param List snapshots:
|
|
313
|
+
A list of FakeResource objects faking consistency group snapshots
|
|
314
|
+
:param Integer count:
|
|
315
|
+
The number of consistency group snapshots to be faked
|
|
316
|
+
:return
|
|
317
|
+
An iterable Mock object with side_effect set to a list of faked
|
|
318
|
+
consistency groups
|
|
319
|
+
"""
|
|
320
|
+
if snapshots is None:
|
|
321
|
+
snapshots = create_consistency_group_snapshots(count)
|
|
322
|
+
|
|
323
|
+
return mock.Mock(side_effect=snapshots)
|
|
324
|
+
|
|
325
|
+
|
|
234
326
|
def create_one_extension(attrs=None):
|
|
235
327
|
"""Create a fake extension.
|
|
236
328
|
|
|
@@ -303,42 +395,33 @@ def create_one_backup(attrs=None):
|
|
|
303
395
|
return backup
|
|
304
396
|
|
|
305
397
|
|
|
306
|
-
def
|
|
307
|
-
"""
|
|
398
|
+
def create_backup_record():
|
|
399
|
+
"""Gets a fake backup record for a given backup.
|
|
308
400
|
|
|
309
|
-
:
|
|
310
|
-
A dictionary with all attributes
|
|
311
|
-
:param int count:
|
|
312
|
-
The number of backups to fake
|
|
313
|
-
:return: A list of fake
|
|
314
|
-
openstack.block_storage.v3.backup.Backup objects
|
|
401
|
+
:return: An "exported" backup record.
|
|
315
402
|
"""
|
|
316
|
-
backups = []
|
|
317
|
-
for i in range(0, count):
|
|
318
|
-
backup = create_one_backup(attrs)
|
|
319
|
-
backups.append(backup)
|
|
320
403
|
|
|
321
|
-
return
|
|
404
|
+
return {
|
|
405
|
+
'backup_service': 'cinder.backup.drivers.swift.SwiftBackupDriver',
|
|
406
|
+
'backup_url': 'eyJzdGF0dXMiOiAiYXZh',
|
|
407
|
+
}
|
|
322
408
|
|
|
323
409
|
|
|
324
|
-
def
|
|
325
|
-
"""
|
|
410
|
+
def import_backup_record():
|
|
411
|
+
"""Creates a fake backup record import response from a backup.
|
|
326
412
|
|
|
327
|
-
|
|
328
|
-
list. Otherwise create one.
|
|
329
|
-
|
|
330
|
-
:param List backups:
|
|
331
|
-
A list of FakeResource objects faking backups
|
|
332
|
-
:param Integer count:
|
|
333
|
-
The number of backups to be faked
|
|
334
|
-
:return
|
|
335
|
-
An iterable Mock object with side_effect set to a list of faked
|
|
336
|
-
backups
|
|
413
|
+
:return: The fake backup object that was encoded.
|
|
337
414
|
"""
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
415
|
+
return {
|
|
416
|
+
'backup': {
|
|
417
|
+
'id': 'backup.id',
|
|
418
|
+
'name': 'backup.name',
|
|
419
|
+
'links': [
|
|
420
|
+
{'href': 'link1', 'rel': 'self'},
|
|
421
|
+
{'href': 'link2', 'rel': 'bookmark'},
|
|
422
|
+
],
|
|
423
|
+
},
|
|
424
|
+
}
|
|
342
425
|
|
|
343
426
|
|
|
344
427
|
def create_one_cluster(attrs=None):
|
|
@@ -712,23 +795,6 @@ def create_one_sdk_volume(attrs=None):
|
|
|
712
795
|
return _volume.Volume(**volume_info)
|
|
713
796
|
|
|
714
797
|
|
|
715
|
-
def create_sdk_volumes(attrs=None, count=2):
|
|
716
|
-
"""Create multiple fake volumes.
|
|
717
|
-
|
|
718
|
-
:param dict attrs:
|
|
719
|
-
A dictionary with all attributes of volume
|
|
720
|
-
:param Integer count:
|
|
721
|
-
The number of volumes to be faked
|
|
722
|
-
:return:
|
|
723
|
-
A list of FakeResource objects
|
|
724
|
-
"""
|
|
725
|
-
volumes = []
|
|
726
|
-
for n in range(0, count):
|
|
727
|
-
volumes.append(create_one_sdk_volume(attrs))
|
|
728
|
-
|
|
729
|
-
return volumes
|
|
730
|
-
|
|
731
|
-
|
|
732
798
|
def create_one_volume_group(attrs=None):
|
|
733
799
|
"""Create a fake group.
|
|
734
800
|
|
|
@@ -810,20 +876,6 @@ def create_one_volume_group_snapshot(attrs=None, methods=None):
|
|
|
810
876
|
return group_snapshot
|
|
811
877
|
|
|
812
878
|
|
|
813
|
-
def create_volume_group_snapshots(attrs=None, count=2):
|
|
814
|
-
"""Create multiple fake group snapshots.
|
|
815
|
-
|
|
816
|
-
:param attrs: A dictionary with all attributes of group snapshot
|
|
817
|
-
:param count: The number of group snapshots to be faked
|
|
818
|
-
:return: A list of FakeResource objects
|
|
819
|
-
"""
|
|
820
|
-
group_snapshots = []
|
|
821
|
-
for n in range(0, count):
|
|
822
|
-
group_snapshots.append(create_one_volume_group_snapshot(attrs))
|
|
823
|
-
|
|
824
|
-
return group_snapshots
|
|
825
|
-
|
|
826
|
-
|
|
827
879
|
def create_one_volume_group_type(attrs=None, methods=None):
|
|
828
880
|
"""Create a fake group type.
|
|
829
881
|
|
|
@@ -993,22 +1045,93 @@ def create_volume_attachments(attrs=None, count=2):
|
|
|
993
1045
|
return attachments
|
|
994
1046
|
|
|
995
1047
|
|
|
996
|
-
def
|
|
997
|
-
"""
|
|
1048
|
+
def create_one_qos(attrs=None):
|
|
1049
|
+
"""Create a fake Qos specification.
|
|
998
1050
|
|
|
999
|
-
|
|
1000
|
-
|
|
1051
|
+
:param dict attrs:
|
|
1052
|
+
A dictionary with all attributes
|
|
1053
|
+
:return:
|
|
1054
|
+
A FakeResource object with id, name, consumer, etc.
|
|
1055
|
+
"""
|
|
1056
|
+
attrs = attrs or {}
|
|
1001
1057
|
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1058
|
+
# Set default attributes.
|
|
1059
|
+
qos_info = {
|
|
1060
|
+
"id": 'qos-id-' + uuid.uuid4().hex,
|
|
1061
|
+
"name": 'qos-name-' + uuid.uuid4().hex,
|
|
1062
|
+
"consumer": 'front-end',
|
|
1063
|
+
"specs": {"foo": "bar", "iops": "9001"},
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
# Overwrite default attributes.
|
|
1067
|
+
qos_info.update(attrs)
|
|
1068
|
+
|
|
1069
|
+
qos = fakes.FakeResource(info=copy.deepcopy(qos_info), loaded=True)
|
|
1070
|
+
return qos
|
|
1071
|
+
|
|
1072
|
+
|
|
1073
|
+
def create_one_qos_association(attrs=None):
|
|
1074
|
+
"""Create a fake Qos specification association.
|
|
1075
|
+
|
|
1076
|
+
:param dict attrs:
|
|
1077
|
+
A dictionary with all attributes
|
|
1078
|
+
:return:
|
|
1079
|
+
A FakeResource object with id, name, association_type, etc.
|
|
1007
1080
|
"""
|
|
1008
|
-
|
|
1009
|
-
attachments = create_volume_attachments(count)
|
|
1081
|
+
attrs = attrs or {}
|
|
1010
1082
|
|
|
1011
|
-
|
|
1083
|
+
# Set default attributes.
|
|
1084
|
+
qos_association_info = {
|
|
1085
|
+
"id": 'type-id-' + uuid.uuid4().hex,
|
|
1086
|
+
"name": 'type-name-' + uuid.uuid4().hex,
|
|
1087
|
+
"association_type": 'volume_type',
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
# Overwrite default attributes.
|
|
1091
|
+
qos_association_info.update(attrs)
|
|
1092
|
+
|
|
1093
|
+
qos_association = fakes.FakeResource(
|
|
1094
|
+
info=copy.deepcopy(qos_association_info), loaded=True
|
|
1095
|
+
)
|
|
1096
|
+
return qos_association
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
def create_qoses(attrs=None, count=2):
|
|
1100
|
+
"""Create multiple fake Qos specifications.
|
|
1101
|
+
|
|
1102
|
+
:param dict attrs:
|
|
1103
|
+
A dictionary with all attributes
|
|
1104
|
+
:param int count:
|
|
1105
|
+
The number of Qos specifications to fake
|
|
1106
|
+
:return:
|
|
1107
|
+
A list of FakeResource objects faking the Qos specifications
|
|
1108
|
+
"""
|
|
1109
|
+
qoses = []
|
|
1110
|
+
for i in range(0, count):
|
|
1111
|
+
qos = create_one_qos(attrs)
|
|
1112
|
+
qoses.append(qos)
|
|
1113
|
+
|
|
1114
|
+
return qoses
|
|
1115
|
+
|
|
1116
|
+
|
|
1117
|
+
def get_qoses(qoses=None, count=2):
|
|
1118
|
+
"""Get an iterable MagicMock object with a list of faked qoses.
|
|
1119
|
+
|
|
1120
|
+
If qoses list is provided, then initialize the Mock object with the
|
|
1121
|
+
list. Otherwise create one.
|
|
1122
|
+
|
|
1123
|
+
:param List qoses:
|
|
1124
|
+
A list of FakeResource objects faking qoses
|
|
1125
|
+
:param Integer count:
|
|
1126
|
+
The number of qoses to be faked
|
|
1127
|
+
:return
|
|
1128
|
+
An iterable Mock object with side_effect set to a list of faked
|
|
1129
|
+
qoses
|
|
1130
|
+
"""
|
|
1131
|
+
if qoses is None:
|
|
1132
|
+
qoses = create_qoses(count)
|
|
1133
|
+
|
|
1134
|
+
return mock.Mock(side_effect=qoses)
|
|
1012
1135
|
|
|
1013
1136
|
|
|
1014
1137
|
def create_one_volume_type(attrs=None, methods=None):
|
|
@@ -1080,24 +1203,6 @@ def get_volume_types(volume_types=None, count=2):
|
|
|
1080
1203
|
return mock.Mock(side_effect=volume_types)
|
|
1081
1204
|
|
|
1082
1205
|
|
|
1083
|
-
def create_service_log_level_entry(attrs=None):
|
|
1084
|
-
service_log_level_info = {
|
|
1085
|
-
'host': 'host_test',
|
|
1086
|
-
'binary': 'cinder-api',
|
|
1087
|
-
'prefix': 'cinder.api.common',
|
|
1088
|
-
'level': 'DEBUG',
|
|
1089
|
-
}
|
|
1090
|
-
# Overwrite default attributes if there are some attributes set
|
|
1091
|
-
attrs = attrs or {}
|
|
1092
|
-
|
|
1093
|
-
service_log_level_info.update(attrs)
|
|
1094
|
-
|
|
1095
|
-
service_log_level = fakes.FakeResource(
|
|
1096
|
-
None, service_log_level_info, loaded=True
|
|
1097
|
-
)
|
|
1098
|
-
return service_log_level
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
1206
|
def create_cleanup_records():
|
|
1102
1207
|
"""Create fake service cleanup records.
|
|
1103
1208
|
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
3
|
+
# not use this file except in compliance with the License. You may obtain
|
|
4
|
+
# a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
10
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
11
|
+
# License for the specific language governing permissions and limitations
|
|
12
|
+
# under the License.
|
|
13
|
+
|
|
14
|
+
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
15
|
+
from openstackclient.volume.v3 import backup_record
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TestBackupRecord(volume_fakes.TestVolume):
|
|
19
|
+
def setUp(self):
|
|
20
|
+
super().setUp()
|
|
21
|
+
|
|
22
|
+
self.backups_mock = self.volume_client.backups
|
|
23
|
+
self.backups_mock.reset_mock()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class TestBackupRecordExport(TestBackupRecord):
|
|
27
|
+
new_backup = volume_fakes.create_one_backup(
|
|
28
|
+
attrs={'volume_id': 'a54708a2-0388-4476-a909-09579f885c25'},
|
|
29
|
+
)
|
|
30
|
+
new_record = volume_fakes.create_backup_record()
|
|
31
|
+
|
|
32
|
+
def setUp(self):
|
|
33
|
+
super().setUp()
|
|
34
|
+
|
|
35
|
+
self.backups_mock.export_record.return_value = self.new_record
|
|
36
|
+
self.backups_mock.get.return_value = self.new_backup
|
|
37
|
+
|
|
38
|
+
# Get the command object to mock
|
|
39
|
+
self.cmd = backup_record.ExportBackupRecord(self.app, None)
|
|
40
|
+
|
|
41
|
+
def test_backup_export_table(self):
|
|
42
|
+
arglist = [
|
|
43
|
+
self.new_backup.name,
|
|
44
|
+
]
|
|
45
|
+
verifylist = [
|
|
46
|
+
("backup", self.new_backup.name),
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
50
|
+
parsed_args.formatter = 'table'
|
|
51
|
+
columns, __ = self.cmd.take_action(parsed_args)
|
|
52
|
+
|
|
53
|
+
self.backups_mock.export_record.assert_called_with(
|
|
54
|
+
self.new_backup.id,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
expected_columns = ('Backup Service', 'Metadata')
|
|
58
|
+
self.assertEqual(columns, expected_columns)
|
|
59
|
+
|
|
60
|
+
def test_backup_export_json(self):
|
|
61
|
+
arglist = [
|
|
62
|
+
self.new_backup.name,
|
|
63
|
+
]
|
|
64
|
+
verifylist = [
|
|
65
|
+
("backup", self.new_backup.name),
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
69
|
+
parsed_args.formatter = 'json'
|
|
70
|
+
columns, __ = self.cmd.take_action(parsed_args)
|
|
71
|
+
|
|
72
|
+
self.backups_mock.export_record.assert_called_with(
|
|
73
|
+
self.new_backup.id,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
expected_columns = ('backup_service', 'backup_url')
|
|
77
|
+
self.assertEqual(columns, expected_columns)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class TestBackupRecordImport(TestBackupRecord):
|
|
81
|
+
new_backup = volume_fakes.create_one_backup(
|
|
82
|
+
attrs={'volume_id': 'a54708a2-0388-4476-a909-09579f885c25'},
|
|
83
|
+
)
|
|
84
|
+
new_import = volume_fakes.import_backup_record()
|
|
85
|
+
|
|
86
|
+
def setUp(self):
|
|
87
|
+
super().setUp()
|
|
88
|
+
|
|
89
|
+
self.backups_mock.import_record.return_value = self.new_import
|
|
90
|
+
|
|
91
|
+
# Get the command object to mock
|
|
92
|
+
self.cmd = backup_record.ImportBackupRecord(self.app, None)
|
|
93
|
+
|
|
94
|
+
def test_backup_import(self):
|
|
95
|
+
arglist = [
|
|
96
|
+
"cinder.backup.drivers.swift.SwiftBackupDriver",
|
|
97
|
+
"fake_backup_record_data",
|
|
98
|
+
]
|
|
99
|
+
verifylist = [
|
|
100
|
+
(
|
|
101
|
+
"backup_service",
|
|
102
|
+
"cinder.backup.drivers.swift.SwiftBackupDriver",
|
|
103
|
+
),
|
|
104
|
+
("backup_metadata", "fake_backup_record_data"),
|
|
105
|
+
]
|
|
106
|
+
|
|
107
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
108
|
+
columns, __ = self.cmd.take_action(parsed_args)
|
|
109
|
+
|
|
110
|
+
self.backups_mock.import_record.assert_called_with(
|
|
111
|
+
"cinder.backup.drivers.swift.SwiftBackupDriver",
|
|
112
|
+
"fake_backup_record_data",
|
|
113
|
+
)
|
|
114
|
+
self.assertEqual(columns, ('backup',))
|