Merge ~freyes/ubuntu/+source/cinder:upstream into ~ubuntu-openstack-dev/ubuntu/+source/cinder:upstream

Proposed by Felipe Reyes
Status: Merged
Merged at revision: 06914477d8f4d8f39cd982c771368d6b47efbcce
Proposed branch: ~freyes/ubuntu/+source/cinder:upstream
Merge into: ~ubuntu-openstack-dev/ubuntu/+source/cinder:upstream
Diff against target: 59561 lines (+7442/-18124)
429 files modified
.pylintrc (+0/-1)
.zuul.yaml (+10/-41)
AUTHORS (+1/-11)
ChangeLog (+39/-233)
PKG-INFO (+1/-1)
api-ref/source/v2/ext-backups.inc (+2/-1)
api-ref/source/v2/index.rst (+3/-18)
api-ref/source/v2/samples/encryption-type-create-request.json (+1/-1)
api-ref/source/v2/samples/encryption-type-create-response.json (+1/-1)
api-ref/source/v2/samples/encryption-type-show-response.json (+1/-1)
api-ref/source/v3/ext-backups.inc (+2/-1)
api-ref/source/v3/os-vol-transfer-v3.inc (+5/-5)
api-ref/source/v3/parameters.yaml (+5/-63)
api-ref/source/v3/resource-filters.inc (+0/-2)
api-ref/source/v3/samples/snapshots/snapshot-create-response.json (+1/-1)
api-ref/source/v3/samples/snapshots/snapshot-show-response.json (+1/-1)
api-ref/source/v3/samples/snapshots/snapshot-update-response.json (+1/-1)
api-ref/source/v3/samples/snapshots/snapshots-list-detailed-response.json (+1/-1)
api-ref/source/v3/samples/versions/version-show-response.json (+2/-2)
api-ref/source/v3/samples/versions/versions-response.json (+26/-2)
api-ref/source/v3/samples/volume_type/encryption-type-create-request.json (+1/-1)
api-ref/source/v3/samples/volume_type/encryption-type-create-response.json (+1/-1)
api-ref/source/v3/samples/volume_type/encryption-type-show-response.json (+1/-1)
api-ref/source/v3/samples/volumes/volume-create-response.json (+1/-1)
api-ref/source/v3/samples/volumes/volume-show-response.json (+1/-1)
api-ref/source/v3/samples/volumes/volume-update-response.json (+1/-1)
api-ref/source/v3/samples/volumes/volumes-list-detailed-response.json (+8/-2)
api-ref/source/v3/vol-transfer-v3.inc (+1/-1)
api-ref/source/v3/volumes-v3-snapshots.inc (+13/-29)
api-ref/source/v3/volumes-v3-volumes.inc (+14/-38)
cinder.egg-info/PKG-INFO (+1/-1)
cinder.egg-info/SOURCES.txt (+35/-173)
cinder.egg-info/entry_points.txt (+3/-0)
cinder.egg-info/pbr.json (+1/-1)
cinder.egg-info/requires.txt (+7/-7)
cinder/api/__init__.py (+9/-10)
cinder/api/api_utils.py (+0/-91)
cinder/api/common.py (+1/-2)
cinder/api/contrib/admin_actions.py (+1/-1)
cinder/api/contrib/backups.py (+1/-1)
cinder/api/contrib/quota_classes.py (+2/-2)
cinder/api/contrib/types_extra_specs.py (+3/-8)
cinder/api/contrib/types_manage.py (+3/-3)
cinder/api/contrib/volume_actions.py (+1/-1)
cinder/api/contrib/volume_image_metadata.py (+4/-5)
cinder/api/contrib/volume_manage.py (+1/-1)
cinder/api/contrib/volume_type_access.py (+1/-2)
cinder/api/microversions.py (+2/-4)
cinder/api/openstack/api_version_request.py (+8/-6)
cinder/api/openstack/rest_api_version_history.rst (+2/-17)
cinder/api/openstack/wsgi.py (+15/-5)
cinder/api/v2/router.py (+93/-0)
cinder/api/v2/types.py (+1/-14)
cinder/api/v2/views/types.py (+1/-16)
cinder/api/v2/volumes.py (+2/-9)
cinder/api/v3/default_types.py (+21/-4)
cinder/api/v3/group_specs.py (+5/-5)
cinder/api/v3/group_types.py (+3/-3)
cinder/api/v3/limits.py (+2/-3)
cinder/api/v3/router.py (+2/-2)
cinder/api/v3/snapshots.py (+6/-77)
cinder/api/v3/views/snapshots.py (+3/-5)
cinder/api/v3/views/volumes.py (+0/-3)
cinder/api/v3/volumes.py (+14/-22)
cinder/api/versions.py (+28/-2)
cinder/backup/api.py (+2/-2)
cinder/backup/chunkeddriver.py (+9/-14)
cinder/backup/driver.py (+5/-5)
cinder/backup/drivers/ceph.py (+2/-2)
cinder/backup/drivers/gcs.py (+6/-8)
cinder/backup/drivers/glusterfs.py (+3/-2)
cinder/backup/drivers/nfs.py (+3/-2)
cinder/backup/drivers/posix.py (+6/-8)
cinder/backup/drivers/s3.py (+6/-8)
cinder/backup/drivers/swift.py (+9/-36)
cinder/backup/manager.py (+19/-122)
cinder/brick/local_dev/lvm.py (+5/-2)
cinder/cmd/manage.py (+37/-124)
cinder/common/config.py (+7/-0)
cinder/compute/nova.py (+0/-1)
cinder/context.py (+16/-48)
cinder/coordination.py (+2/-37)
cinder/db/api.py (+0/-16)
cinder/db/base.py (+22/-4)
cinder/db/migration.py (+26/-135)
cinder/db/sqlalchemy/api.py (+11/-108)
cinder/db/sqlalchemy/migrate_repo/manage.py (+3/-2)
cinder/db/sqlalchemy/migrate_repo/versions/123_cinder_init.py (+906/-0)
cinder/db/sqlalchemy/migrate_repo/versions/124_placeholder.py (+22/-0)
cinder/db/sqlalchemy/migrate_repo/versions/125_placeholder.py (+22/-0)
cinder/db/sqlalchemy/migrate_repo/versions/126_placeholder.py (+22/-0)
cinder/db/sqlalchemy/migrate_repo/versions/127_change_project_resource_attribute_for_quota_usages.py (+38/-0)
cinder/db/sqlalchemy/migrate_repo/versions/128_add_project_id_and_accepted_to_transfer.py (+34/-0)
cinder/db/sqlalchemy/migrate_repo/versions/129_placeholder.py (+2/-2)
cinder/db/sqlalchemy/migrate_repo/versions/130_placeholder.py (+2/-2)
cinder/db/sqlalchemy/migrate_repo/versions/131_placeholder.py (+2/-2)
cinder/db/sqlalchemy/migrate_repo/versions/132_create_default_volume_type.py (+44/-0)
cinder/db/sqlalchemy/migrate_repo/versions/133_placeholder.py (+22/-0)
cinder/db/sqlalchemy/migrate_repo/versions/134_placeholder.py (+22/-0)
cinder/db/sqlalchemy/migrate_repo/versions/135_placeholder.py (+22/-0)
cinder/db/sqlalchemy/migrate_repo/versions/136_make_vol_type_col_non_nullable.py (+5/-5)
cinder/db/sqlalchemy/migrate_repo/versions/140_create_project_default_volume_type.py (+13/-18)
cinder/db/sqlalchemy/migrate_repo/versions/141_add_quota_usage_unique_constraint.py (+5/-6)
cinder/db/sqlalchemy/models.py (+328/-390)
cinder/exception.py (+6/-10)
cinder/flow_utils.py (+3/-4)
cinder/group/api.py (+2/-2)
cinder/image/cache.py (+15/-52)
cinder/image/glance.py (+5/-10)
cinder/image/image_utils.py (+93/-168)
cinder/interface/base.py (+8/-3)
cinder/manager.py (+15/-22)
cinder/message/api.py (+0/-34)
cinder/message/message_field.py (+0/-36)
cinder/objects/backup.py (+12/-1)
cinder/objects/base.py (+68/-59)
cinder/objects/cgsnapshot.py (+0/-1)
cinder/objects/cleanup_request.py (+0/-1)
cinder/objects/cluster.py (+15/-4)
cinder/objects/consistencygroup.py (+13/-0)
cinder/objects/dynamic_log.py (+0/-1)
cinder/objects/group.py (+12/-1)
cinder/objects/group_snapshot.py (+0/-1)
cinder/objects/group_type.py (+0/-1)
cinder/objects/manageableresources.py (+0/-2)
cinder/objects/qos_specs.py (+0/-1)
cinder/objects/request_spec.py (+15/-1)
cinder/objects/service.py (+20/-1)
cinder/objects/snapshot.py (+16/-20)
cinder/objects/volume.py (+12/-41)
cinder/objects/volume_attachment.py (+11/-1)
cinder/objects/volume_type.py (+16/-1)
cinder/opts.py (+2/-1)
cinder/policies/attachments.py (+10/-43)
cinder/policies/backups.py (+15/-57)
cinder/policies/base.py (+68/-285)
cinder/policies/default_types.py (+12/-33)
cinder/policies/group_actions.py (+11/-51)
cinder/policies/group_snapshots.py (+10/-42)
cinder/policies/group_types.py (+10/-86)
cinder/policies/groups.py (+9/-35)
cinder/policies/limits.py (+2/-9)
cinder/policies/messages.py (+6/-26)
cinder/policies/quota_class.py (+4/-25)
cinder/policies/quotas.py (+4/-12)
cinder/policies/snapshot_actions.py (+4/-14)
cinder/policies/snapshot_metadata.py (+7/-26)
cinder/policies/snapshots.py (+12/-49)
cinder/policies/type_extra_specs.py (+7/-57)
cinder/policies/volume_access.py (+7/-39)
cinder/policies/volume_actions.py (+34/-125)
cinder/policies/volume_metadata.py (+20/-87)
cinder/policies/volume_transfer.py (+10/-41)
cinder/policies/volume_type.py (+68/-141)
cinder/policies/volumes.py (+19/-76)
cinder/policy.py (+1/-3)
cinder/quota.py (+3/-2)
cinder/quota_utils.py (+96/-0)
cinder/rpc.py (+6/-15)
cinder/scheduler/filter_scheduler.py (+22/-35)
cinder/scheduler/manager.py (+5/-17)
cinder/tests/fixtures.py (+0/-25)
cinder/tests/functional/api_sample_tests/samples/versions/versions-response.json.tpl (+24/-0)
cinder/tests/functional/api_sample_tests/samples/volume_type/encryption-type-create-request.json.tpl (+1/-1)
cinder/tests/functional/api_sample_tests/samples/volume_type/encryption-type-create-response.json.tpl (+1/-1)
cinder/tests/functional/api_sample_tests/samples/volume_type/encryption-type-show-response.json.tpl (+1/-1)
cinder/tests/functional/api_sample_tests/samples/volumes/volumes-list-detailed-response.json.tpl (+8/-2)
cinder/tests/functional/api_sample_tests/test_limits.py (+2/-2)
cinder/tests/functional/api_sample_tests/test_qos.py (+2/-2)
cinder/tests/functional/api_sample_tests/test_quota_classes.py (+2/-2)
cinder/tests/functional/api_sample_tests/test_quota_sets.py (+2/-2)
cinder/tests/functional/api_sample_tests/test_snapshots.py (+22/-42)
cinder/tests/functional/api_sample_tests/test_volume_actions.py (+2/-2)
cinder/tests/functional/api_sample_tests/test_volume_transfer.py (+2/-2)
cinder/tests/functional/api_sample_tests/test_volumes.py (+49/-55)
cinder/tests/functional/api_samples_test_base.py (+25/-47)
cinder/tests/functional/functional_helpers.py (+2/-54)
cinder/tests/functional/test_default_types.py (+24/-6)
cinder/tests/functional/test_group_replication.py (+2/-1)
cinder/tests/functional/test_group_snapshots.py (+2/-1)
cinder/tests/functional/test_groups.py (+2/-1)
cinder/tests/unit/api/contrib/test_admin_actions.py (+30/-23)
cinder/tests/unit/api/contrib/test_backups.py (+82/-81)
cinder/tests/unit/api/contrib/test_cgsnapshots.py (+15/-15)
cinder/tests/unit/api/contrib/test_consistencygroups.py (+66/-64)
cinder/tests/unit/api/contrib/test_extended_snapshot_attributes.py (+2/-2)
cinder/tests/unit/api/contrib/test_qos_specs_manage.py (+53/-53)
cinder/tests/unit/api/contrib/test_quotas.py (+1/-2)
cinder/tests/unit/api/contrib/test_scheduler_hints.py (+11/-11)
cinder/tests/unit/api/contrib/test_scheduler_stats.py (+3/-3)
cinder/tests/unit/api/contrib/test_services.py (+9/-9)
cinder/tests/unit/api/contrib/test_snapshot_actions.py (+6/-6)
cinder/tests/unit/api/contrib/test_snapshot_manage.py (+4/-4)
cinder/tests/unit/api/contrib/test_snapshot_unmanage.py (+3/-3)
cinder/tests/unit/api/contrib/test_types_extra_specs.py (+55/-89)
cinder/tests/unit/api/contrib/test_types_manage.py (+49/-68)
cinder/tests/unit/api/contrib/test_volume_actions.py (+58/-58)
cinder/tests/unit/api/contrib/test_volume_encryption_metadata.py (+11/-11)
cinder/tests/unit/api/contrib/test_volume_host_attribute.py (+7/-7)
cinder/tests/unit/api/contrib/test_volume_image_metadata.py (+16/-16)
cinder/tests/unit/api/contrib/test_volume_manage.py (+41/-6)
cinder/tests/unit/api/contrib/test_volume_migration_status_attribute.py (+7/-7)
cinder/tests/unit/api/contrib/test_volume_tenant_attribute.py (+8/-8)
cinder/tests/unit/api/contrib/test_volume_transfer.py (+25/-25)
cinder/tests/unit/api/contrib/test_volume_type_access.py (+29/-29)
cinder/tests/unit/api/contrib/test_volume_type_encryption.py (+16/-16)
cinder/tests/unit/api/contrib/test_volume_unmanage.py (+3/-3)
cinder/tests/unit/api/fakes.py (+11/-1)
cinder/tests/unit/api/test_api_validation.py (+6/-1)
cinder/tests/unit/api/test_common.py (+2/-3)
cinder/tests/unit/api/test_versions.py (+51/-16)
cinder/tests/unit/api/v2/test_snapshot_metadata.py (+42/-58)
cinder/tests/unit/api/v2/test_snapshots.py (+15/-15)
cinder/tests/unit/api/v2/test_types.py (+218/-85)
cinder/tests/unit/api/v3/fakes.py (+0/-44)
cinder/tests/unit/api/v3/test_attachments.py (+32/-1)
cinder/tests/unit/api/v3/test_backups.py (+1/-1)
cinder/tests/unit/api/v3/test_default_types.py (+38/-1)
cinder/tests/unit/api/v3/test_groups.py (+0/-1)
cinder/tests/unit/api/v3/test_snapshots.py (+9/-89)
cinder/tests/unit/api/v3/test_types.py (+24/-34)
cinder/tests/unit/api/v3/test_volumes.py (+3/-66)
cinder/tests/unit/attachments/test_attachments_api.py (+24/-0)
cinder/tests/unit/attachments/test_attachments_manager.py (+14/-20)
cinder/tests/unit/backup/drivers/test_backup_swift.py (+0/-48)
cinder/tests/unit/backup/fake_service.py (+2/-2)
cinder/tests/unit/backup/fake_swift_client.py (+3/-5)
cinder/tests/unit/backup/fake_swift_client2.py (+1/-1)
cinder/tests/unit/backup/test_backup.py (+7/-15)
cinder/tests/unit/brick/test_brick_lvm.py (+27/-27)
cinder/tests/unit/cmd/test_status.py (+5/-1)
cinder/tests/unit/db/test_migrations.py (+38/-132)
cinder/tests/unit/db/test_purge.py (+33/-3)
cinder/tests/unit/message/test_api.py (+0/-29)
cinder/tests/unit/objects/test_backup.py (+6/-1)
cinder/tests/unit/objects/test_base.py (+2/-3)
cinder/tests/unit/objects/test_cgsnapshot.py (+6/-1)
cinder/tests/unit/objects/test_cleanable.py (+13/-18)
cinder/tests/unit/objects/test_cluster.py (+13/-0)
cinder/tests/unit/objects/test_consistencygroup.py (+6/-1)
cinder/tests/unit/objects/test_group.py (+23/-1)
cinder/tests/unit/objects/test_group_snapshot.py (+6/-1)
cinder/tests/unit/objects/test_group_type.py (+6/-1)
cinder/tests/unit/objects/test_objects.py (+2/-6)
cinder/tests/unit/objects/test_service.py (+6/-1)
cinder/tests/unit/objects/test_snapshot.py (+29/-12)
cinder/tests/unit/objects/test_volume.py (+48/-94)
cinder/tests/unit/objects/test_volume_attachment.py (+26/-1)
cinder/tests/unit/objects/test_volume_type.py (+18/-1)
cinder/tests/unit/policies/test_default_volume_types.py (+58/-149)
cinder/tests/unit/policies/test_volume.py (+2/-340)
cinder/tests/unit/policies/test_volume_actions.py (+8/-694)
cinder/tests/unit/policies/test_volume_metadata.py (+3/-316)
cinder/tests/unit/policies/test_volume_type.py (+3/-138)
cinder/tests/unit/policy.yaml (+180/-0)
cinder/tests/unit/scheduler/test_scheduler.py (+8/-11)
cinder/tests/unit/test.py (+19/-37)
cinder/tests/unit/test_cmd.py (+2/-151)
cinder/tests/unit/test_context.py (+0/-83)
cinder/tests/unit/test_coordination.py (+9/-106)
cinder/tests/unit/test_db_api.py (+1/-165)
cinder/tests/unit/test_image_utils.py (+42/-6)
cinder/tests/unit/test_quota_utils.py (+95/-5)
cinder/tests/unit/test_rpc.py (+8/-9)
cinder/tests/unit/test_service.py (+15/-4)
cinder/tests/unit/test_utils.py (+16/-106)
cinder/tests/unit/test_volume_transfer.py (+89/-114)
cinder/tests/unit/test_volume_utils.py (+10/-19)
cinder/tests/unit/utils.py (+5/-6)
cinder/tests/unit/volume/__init__.py (+0/-4)
cinder/tests/unit/volume/drivers/dell_emc/powermax/powermax_data.py (+4/-4)
cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_common.py (+1/-1)
cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_fc.py (+1/-2)
cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_provision.py (+0/-18)
cinder/tests/unit/volume/drivers/dell_emc/powermax/test_powermax_rest.py (+1/-23)
cinder/tests/unit/volume/drivers/hitachi/test_hitachi_hbsd_rest_fc.py (+12/-187)
cinder/tests/unit/volume/drivers/hitachi/test_hitachi_hbsd_rest_iscsi.py (+10/-186)
cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py (+120/-2236)
cinder/tests/unit/volume/drivers/inspur/instorage/test_common.py (+7/-4)
cinder/tests/unit/volume/drivers/inspur/instorage/test_fc_driver.py (+3/-2)
cinder/tests/unit/volume/drivers/inspur/instorage/test_iscsi_driver.py (+3/-2)
cinder/tests/unit/volume/drivers/inspur/instorage/test_replication.py (+4/-2)
cinder/tests/unit/volume/drivers/netapp/dataontap/client/fakes.py (+1/-101)
cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode.py (+4/-363)
cinder/tests/unit/volume/drivers/netapp/dataontap/fakes.py (+0/-30)
cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py (+0/-14)
cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_cmode.py (+3/-733)
cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_base.py (+0/-35)
cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py (+4/-480)
cinder/tests/unit/volume/drivers/netapp/dataontap/utils/test_data_motion.py (+0/-297)
cinder/tests/unit/volume/drivers/netapp/fakes.py (+2/-2)
cinder/tests/unit/volume/drivers/open_e/test_iscsi.py (+6/-10)
cinder/tests/unit/volume/drivers/solidfire/test_solidfire.py (+5/-6)
cinder/tests/unit/volume/drivers/test_lvm_driver.py (+26/-18)
cinder/tests/unit/volume/drivers/test_nimble.py (+4/-2)
cinder/tests/unit/volume/drivers/test_pure.py (+3/-120)
cinder/tests/unit/volume/drivers/test_quobyte.py (+3/-1)
cinder/tests/unit/volume/drivers/test_rbd.py (+0/-31)
cinder/tests/unit/volume/drivers/test_seagate.py (+4/-192)
cinder/tests/unit/volume/drivers/toyou/test_acs5000.py (+5/-3)
cinder/tests/unit/volume/drivers/vmware/test_vmware_datastore.py (+5/-3)
cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py (+19/-21)
cinder/tests/unit/volume/drivers/vmware/test_vmware_volumeops.py (+26/-20)
cinder/tests/unit/volume/flows/test_create_volume_flow.py (+3/-111)
cinder/tests/unit/volume/flows/test_manage_volume_flow.py (+7/-2)
cinder/tests/unit/volume/test_driver.py (+0/-32)
cinder/tests/unit/volume/test_image.py (+3/-4)
cinder/tests/unit/volume/test_replication_manager.py (+2/-4)
cinder/tests/unit/volume/test_snapshot.py (+6/-69)
cinder/tests/unit/volume/test_volume.py (+31/-162)
cinder/tests/unit/volume/test_volume_manager.py (+4/-4)
cinder/tests/unit/volume/test_volume_migration.py (+2/-11)
cinder/tests/unit/zonemanager/test_volume_driver.py (+7/-7)
cinder/transfer/api.py (+2/-2)
cinder/utils.py (+97/-157)
cinder/volume/api.py (+16/-19)
cinder/volume/driver.py (+3/-58)
cinder/volume/drivers/dell_emc/powermax/fc.py (+3/-2)
cinder/volume/drivers/dell_emc/powermax/iscsi.py (+2/-1)
cinder/volume/drivers/dell_emc/powermax/provision.py (+1/-2)
cinder/volume/drivers/dell_emc/powermax/rest.py (+3/-8)
cinder/volume/drivers/dell_emc/powermax/utils.py (+0/-9)
cinder/volume/drivers/dell_emc/unity/utils.py (+1/-1)
cinder/volume/drivers/hitachi/hbsd_common.py (+2/-23)
cinder/volume/drivers/hitachi/hbsd_fc.py (+0/-36)
cinder/volume/drivers/hitachi/hbsd_iscsi.py (+0/-37)
cinder/volume/drivers/hitachi/hbsd_rest.py (+0/-279)
cinder/volume/drivers/hitachi/hbsd_rest_api.py (+0/-8)
cinder/volume/drivers/hitachi/hbsd_utils.py (+0/-49)
cinder/volume/drivers/hpe/hpe_3par_base.py (+0/-5)
cinder/volume/drivers/hpe/hpe_3par_common.py (+11/-11)
cinder/volume/drivers/ibm/storwize_svc/replication.py (+2/-22)
cinder/volume/drivers/ibm/storwize_svc/storwize_const.py (+2/-2)
cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py (+226/-566)
cinder/volume/drivers/ibm/storwize_svc/storwize_svc_fc.py (+7/-142)
cinder/volume/drivers/ibm/storwize_svc/storwize_svc_iscsi.py (+6/-20)
cinder/volume/drivers/linstordrv.py (+1/-0)
cinder/volume/drivers/lvm.py (+1/-0)
cinder/volume/drivers/netapp/dataontap/block_base.py (+0/-5)
cinder/volume/drivers/netapp/dataontap/block_cmode.py (+1/-343)
cinder/volume/drivers/netapp/dataontap/client/client_cmode.py (+6/-273)
cinder/volume/drivers/netapp/dataontap/fc_cmode.py (+1/-20)
cinder/volume/drivers/netapp/dataontap/iscsi_cmode.py (+0/-6)
cinder/volume/drivers/netapp/dataontap/nfs_base.py (+0/-16)
cinder/volume/drivers/netapp/dataontap/nfs_cmode.py (+1/-234)
cinder/volume/drivers/netapp/dataontap/utils/data_motion.py (+0/-102)
cinder/volume/drivers/netapp/dataontap/utils/utils.py (+0/-1)
cinder/volume/drivers/netapp/options.py (+1/-20)
cinder/volume/drivers/netapp/utils.py (+0/-4)
cinder/volume/drivers/nimble.py (+6/-2)
cinder/volume/drivers/open_e/iscsi.py (+116/-120)
cinder/volume/drivers/open_e/jovian_common/jdss_common.py (+2/-2)
cinder/volume/drivers/open_e/jovian_common/rest.py (+32/-39)
cinder/volume/drivers/open_e/jovian_common/rest_proxy.py (+2/-2)
cinder/volume/drivers/pure.py (+18/-36)
cinder/volume/drivers/quobyte.py (+1/-1)
cinder/volume/drivers/rbd.py (+8/-2)
cinder/volume/drivers/remotefs.py (+2/-0)
cinder/volume/drivers/san/hp/hpmsa_common.py (+0/-8)
cinder/volume/drivers/san/hp/hpmsa_fc.py (+1/-1)
cinder/volume/drivers/san/hp/hpmsa_iscsi.py (+1/-2)
cinder/volume/drivers/spdk.py (+1/-0)
cinder/volume/drivers/stx/client.py (+1/-60)
cinder/volume/drivers/stx/common.py (+0/-92)
cinder/volume/drivers/stx/fc.py (+0/-22)
cinder/volume/drivers/stx/iscsi.py (+0/-22)
cinder/volume/drivers/vmware/datastore.py (+9/-14)
cinder/volume/drivers/vmware/vmdk.py (+9/-17)
cinder/volume/drivers/vmware/volumeops.py (+4/-5)
cinder/volume/flows/api/create_volume.py (+45/-130)
cinder/volume/flows/common.py (+1/-3)
cinder/volume/flows/manager/create_volume.py (+36/-96)
cinder/volume/manager.py (+321/-403)
cinder/volume/rpcapi.py (+8/-29)
cinder/volume/targets/driver.py (+1/-4)
cinder/volume/volume_types.py (+1/-2)
cinder/volume/volume_utils.py (+98/-235)
contrib/block-box/etc/api-paste.ini (+10/-0)
dev/null (+0/-6)
doc/source/admin/blockstorage-get-capabilities.rst (+1/-1)
doc/source/admin/blockstorage-manage-volumes.rst (+0/-1)
doc/source/admin/generalized_filters.rst (+1/-1)
doc/source/admin/index.rst (+0/-1)
doc/source/cli/cinder-manage.rst (+0/-42)
doc/source/conf.py (+0/-4)
doc/source/configuration/block-storage/drivers/dell-emc-powermax-driver.rst (+40/-52)
doc/source/configuration/block-storage/drivers/dell-emc-powervault-me.rst (+3/-3)
doc/source/configuration/block-storage/drivers/dell-emc-unity-driver.rst (+1/-1)
doc/source/configuration/block-storage/drivers/dell-emc-vnx-driver.rst (+1/-1)
doc/source/configuration/block-storage/drivers/hitachi-vsp-driver.rst (+0/-2)
doc/source/configuration/block-storage/drivers/hpe-3par-driver.rst (+34/-34)
doc/source/configuration/block-storage/drivers/ibm-flashsystem-volume-driver.rst (+3/-8)
doc/source/configuration/block-storage/drivers/ibm-storwize-svc-driver.rst (+47/-56)
doc/source/configuration/block-storage/drivers/nimble-volume-driver.rst (+17/-22)
doc/source/configuration/block-storage/drivers/open-e-joviandss-driver.rst (+25/-26)
doc/source/configuration/block-storage/policy-config-HOWTO.rst (+4/-7)
doc/source/configuration/block-storage/samples/api-paste.ini.inc (+10/-0)
doc/source/configuration/block-storage/samples/policy.yaml.rst (+5/-13)
doc/source/configuration/block-storage/volume-encryption.rst (+7/-0)
doc/source/configuration/index.rst (+0/-1)
doc/source/contributor/addmethod.openstackapi.rst (+1/-1)
doc/source/contributor/api_microversion_dev.rst (+0/-25)
doc/source/contributor/contributing.rst (+2/-32)
doc/source/contributor/gerrit.rst (+1/-52)
doc/source/contributor/high_availability.rst (+0/-34)
doc/source/contributor/index.rst (+0/-11)
doc/source/contributor/releasenotes.rst (+9/-19)
doc/source/install/cinder-controller-install-obs.rst (+75/-5)
doc/source/install/cinder-controller-install-rdo.rst (+74/-4)
doc/source/install/cinder-controller-install-ubuntu.rst (+75/-5)
doc/source/install/cinder-storage-install-rdo.rst (+1/-1)
doc/source/reference/support-matrix.ini (+9/-9)
etc/cinder/api-paste.ini (+10/-0)
etc/cinder/resource_filters.json (+3/-4)
lower-constraints.txt (+155/-0)
mypy-files.txt (+0/-12)
rally-jobs/cinder.yaml (+45/-45)
releasenotes/notes/cgroups-v1-status-note-b1eff0e1907aa0f2.yaml (+30/-0)
releasenotes/notes/fix-transfer-accept-policy-7594806372b14284.yaml (+4/-3)
releasenotes/notes/mtls-fix-for-glance-api-calls-469b992adc5f49ff.yaml (+12/-0)
releasenotes/notes/wallaby-encryption-known-issues-4078b6b066e51553.yaml (+64/-0)
releasenotes/notes/wallaby-prelude-661b619978e1b339.yaml (+5/-0)
releasenotes/source/index.rst (+0/-1)
reno.yaml (+10/-11)
requirements.txt (+5/-5)
setup.cfg (+6/-4)
test-requirements.txt (+2/-2)
tools/mypywrap.sh (+2/-2)
tox.ini (+10/-4)
Reviewer Review Type Date Requested Status
Corey Bryant Pending
Review via email: mp+421882@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.pylintrc b/.pylintrc
2index 7ed8550..8c0091a 100644
3--- a/.pylintrc
4+++ b/.pylintrc
5@@ -222,7 +222,6 @@ additional-builtins=_
6 [TYPECHECK]
7 # List of module names for which member attributes should not be checked
8 ignored-modules=six.moves,_MovedItems
9-signature-mutators=unittest.mock.patch,unittest.mock.patch.object,sqlalchemy.util._preloaded.dependencies
10
11 # This is for cinder.objects.*, and requests.packages.*, but due to
12 # https://github.com/PyCQA/pylint/issues/2498
13diff --git a/.zuul.yaml b/.zuul.yaml
14index 435020c..a79713e 100644
15--- a/.zuul.yaml
16+++ b/.zuul.yaml
17@@ -1,7 +1,7 @@
18 - project:
19 templates:
20- - openstack-python3-xena-jobs
21- - openstack-python3-xena-jobs-arm64
22+ - openstack-python3-wallaby-jobs
23+ - openstack-python3-wallaby-jobs-arm64
24 - publish-openstack-docs-pti
25 - periodic-stable-jobs
26 - check-requirements
27@@ -11,13 +11,12 @@
28 jobs:
29 - cinder-code-coverage:
30 voting: false
31- - cinder-mypy:
32- voting: false
33 - cinder-tox-bandit-baseline:
34 voting: false
35 - openstack-tox-functional-py36:
36 irrelevant-files: &functional-irrelevant-files
37 - ^.*\.rst$
38+ - ^api-ref/.*$
39 - ^cinder/locale/.*$
40 - ^cinder/tests/hacking/.*$
41 - ^cinder/tests/unit.*$
42@@ -31,18 +30,11 @@
43 - openstack-tox-pylint:
44 voting: false
45 timeout: 5400
46- irrelevant-files:
47- - ^.*\.rst$
48- - ^api-ref/.*$
49- - ^cinder/locale/.*$
50- - ^cinder/tests/hacking/.*$
51- - ^cinder/tests/unit.*$
52- - ^contrib/block-box.*$
53- - ^doc/.*$
54- - ^releasenotes/.*$
55+ irrelevant-files: *functional-irrelevant-files
56 - cinder-plugin-ceph-tempest:
57 irrelevant-files: &gate-irrelevant-files
58 - ^(test-|)requirements.txt$
59+ - ^lower-constraints.txt$
60 - ^.*\.rst$
61 - ^api-ref/.*$
62 - ^cinder/cmd/status\.py$
63@@ -66,9 +58,6 @@
64 - cinder-tempest-lvm-multibackend:
65 voting: false
66 irrelevant-files: *gate-irrelevant-files
67- - cinder-for-glance-optimized:
68- voting: false
69- irrelevant-files: *gate-irrelevant-files
70 - devstack-plugin-nfs-tempest-full:
71 voting: false
72 irrelevant-files: *gate-irrelevant-files
73@@ -83,7 +72,7 @@
74 - openstacksdk-functional-devstack:
75 required-projects:
76 - name: opendev.org/openstack/openstacksdk
77- override-branch: stable/xena
78+ override-branch: stable/wallaby
79 irrelevant-files: *gate-irrelevant-files
80 gate:
81 jobs:
82@@ -100,10 +89,12 @@
83 - openstacksdk-functional-devstack:
84 required-projects:
85 - name: opendev.org/openstack/openstacksdk
86- override-branch: stable/xena
87+ override-branch: stable/wallaby
88 irrelevant-files: *gate-irrelevant-files
89 experimental:
90 jobs:
91+ - tempest-cinder-v2-api:
92+ irrelevant-files: *gate-irrelevant-files
93 - cinder-multibackend-matrix-migration:
94 irrelevant-files: *gate-irrelevant-files
95 - cinder-grenade-mn-sub-volschbak:
96@@ -134,6 +125,7 @@
97 timeout: 2400
98 irrelevant-files:
99 - ^(test-|)requirements.txt$
100+ - ^lower-constraints.txt$
101 - ^.*\.rst$
102 - ^api-ref/.*$
103 - ^cinder/cmd/status\.py$
104@@ -295,29 +287,6 @@
105 irrelevant-files: *gate-irrelevant-files
106
107 - job:
108- name: cinder-mypy
109- parent: openstack-tox
110- vars:
111- tox_envlist: mypy
112-
113-- job:
114- name: cinder-for-glance-optimized
115- parent: cinder-tempest-plugin-basic
116- description: |
117- Configures glance with cinder as a backend for multiple glance cinder
118- stores and with cinder configured to use the optimized workflow of
119- moving image data directly in the backend.
120- vars:
121- devstack_localrc:
122- USE_CINDER_FOR_GLANCE: True
123- GLANCE_ENABLE_MULTIPLE_STORES: True
124- CINDER_ENABLED_BACKENDS: lvm:lvmdriver-1
125- GLANCE_CINDER_DEFAULT_BACKEND: lvmdriver-1
126- GLANCE_SHOW_DIRECT_URL: True
127- GLANCE_SHOW_MULTIPLE_LOCATIONS: True
128- CINDER_ALLOWED_DIRECT_URL_SCHEMES: cinder
129-
130-- job:
131 name: cinder-multibackend-matrix-migration
132 parent: devstack-tempest
133 description: |
134diff --git a/AUTHORS b/AUTHORS
135index 733ae20..d1151a9 100644
136--- a/AUTHORS
137+++ b/AUTHORS
138@@ -14,6 +14,7 @@ Accela Zhao <bigzhao@cisco.com>
139 Adalberto Medeiros <adalbas@linux.vnet.ibm.com>
140 Adam Gandelman <adam.gandelman@canonical.com>
141 Adam Gandelman <adamg@canonical.com>
142+Adam Harwell <flux.adam@gmail.com>
143 Adam Krpan <akrpan@purestorage.com>
144 Adam Spiers <aspiers@suse.com>
145 Adam Young <ayoung@redhat.com>
146@@ -167,7 +168,6 @@ Christian Berendt <berendt@b1-systems.de>
147 Christian Berendt <berendt@betacloud-solutions.de>
148 Christian Rohmann <christian.rohmann@inovex.de>
149 Christoph Kassen <c.kassen@telekom.de>
150-Christophe Drevet-Droguet <cdr@antemeta.fr>
151 Christopher J Schaefer <cjschaef@us.ibm.com>
152 Christopher MacGown <chris@pistoncloud.com>
153 Chuck Fouts <fchuck@netapp.com>
154@@ -426,7 +426,6 @@ Joe Gordon <joe.gordon0@gmail.com>
155 Joe Gordon <jogo@cloudscaling.com>
156 Joel Coffman <joel.coffman@jhuapl.edu>
157 Joel Friedly <joelfriedly@gmail.com>
158-Johannes Kulik <johannes.kulik@sap.com>
159 John Cates <jccates@us.ibm.com>
160 John Garbutt <john.garbutt@citrix.com>
161 John Griffith <john.griffith8@gmail.com>
162@@ -805,8 +804,6 @@ Sreedhar Varma <sreedhar.varma.ctr@kaminario.com>
163 Stack <vijay.ladani@hpe.com>
164 Stefan Amann <stefan.amann@de.ibm.com>
165 Stefan Nica <snica@suse.com>
166-Stephan Pampel <stephan.pampel@canonical.com>
167-Stephen Finucane <stephenfin@redhat.com>
168 Stephen Mulcahy <stephen.mulcahy@hp.com>
169 Steve Kowalik <steven@wedontsleep.org>
170 Steve Noyes <steve.noyes@oracle.com>
171@@ -853,7 +850,6 @@ Tin Lam <tl3438@att.com>
172 Tina <tina.tang@emc.com>
173 Tina Tang <tina.tang@emc.com>
174 Tingting Zha <zhatt.fnst@cn.fujitsu.com>
175-Tobias Urdin <tobias.urdin@binero.se>
176 Tobias Urdin <tobias@busybox.se>
177 Tom Barron <tbarron@dyncloud.net>
178 Tom Barron <tbarron@netapp.com>
179@@ -946,7 +942,6 @@ Yaguang Tang <yaguang.tang@canonical.com>
180 Yaguang Tang <ytang@mirantis.com>
181 Yaguo Zhou <zhouyaguo@gmail.com>
182 YanLin Ren <renylin@cn.ibm.com>
183-Yandong Xuan <xuanyandong@inspur.com>
184 Yang Youseok <ileixe@gmail.com>
185 Yang Yu <yuyangbj@cn.ibm.com>
186 YangLei <yanglyy@cn.ibm.com>
187@@ -1002,7 +997,6 @@ aimee.ukasick <au7569@att.com>
188 albertjone <guanalbertjone@gmail.com>
189 alexey-mr <alexey.morlang@gmail.com>
190 alonma <alonma@il.ibm.com>
191-amar7ibm <amar.rajeev.singuluri@ibm.com>
192 amoturi <abhiram.moturi@oracle.com>
193 anastasia-karpinska <akarpinska@griddynamics.com>
194 anastasiya-zhyrkevich <anastasiya.zhyrkevich@gmail.com>
195@@ -1037,7 +1031,6 @@ chihyuwu <chihyuwu@synology.com>
196 clayg <clay.gerrard@gmail.com>
197 czl389 <czl389@163.com>
198 daisy-ycguo <daisy.ycguo@gmail.com>
199-dengzhaosen <dengzhaosen@inspur.com>
200 dhinesh <dhinesh@hedviginc.com>
201 diem_tran <diem.tran@oracle.com>
202 digvijay2016 <digvijay.ukirde@in.ibm.com>
203@@ -1123,7 +1116,6 @@ lijing <lijing@gohighsec.com>
204 lijunbo <lijunbo@fiberhome.com>
205 lijunjie <lijunjie@cloudin.cn>
206 lijunli1 <lijunli@chinac.com>
207-likui <likui@yovole.com>
208 limin0801 <limin.lc@inspur.com>
209 ling-yun <zengyunling@huawei.com>
210 lirenke <lvhancy@163.com>
211@@ -1196,7 +1188,6 @@ ramakris <rama.kri.b@hp.com>
212 rick.chen <rick.chen@prophetstor.com>
213 ricolin <rico.lin.guanyu@gmail.com>
214 root <daniel.tadrzak@intel.com>
215-root <gopalakrishna.krishna@ibm.com>
216 root <ranasheel2000@gmail.com>
217 root <root@lhx-ceph-1.novalocal>
218 root <root@localhost.localdomain>
219@@ -1222,7 +1213,6 @@ smartu3 <zzj123389602@gmail.com>
220 sparkliu <spark.liu@cn.ibm.com>
221 srushti <srushti.gadadare@nttdata.com>
222 stack <kushal.wathore@hpe.com>
223-stack <raghavendra.tilay@hpe.com>
224 stack <sumit.shatwara@hpe.com>
225 stack <vijay.ladani@hpe.com>
226 stack <yixuan_z@hotmail.com>
227diff --git a/ChangeLog b/ChangeLog
228index ec0cce7..69c16b3 100644
229--- a/ChangeLog
230+++ b/ChangeLog
231@@ -1,244 +1,68 @@
232 CHANGES
233 =======
234
235-19.1.0
236+18.2.0
237 ------
238
239-* Doc: Typos in Spectrum Virtulize family user guide
240-* Doc: IBM flashsystem driver update
241 * [stable-only] Specify openstacksdk stable branch
242+* Volume transfers: Remove duplicate policy check
243 * Fix: Race between attachment and volume deletion
244 * Expose volume\_attachments in Volume OVO
245 * Delete attachment on remove\_export failure
246 * Fix detach notification
247-* Volume transfers: Remove duplicate policy check
248 * Reject bad img formats for uploaded encrypted vols
249 * NetApp ONTAP: Fix sub-clone zapi call
250-* [stable-xena-only] update xena personas doc
251-* Dell PowerVault: Fix "cinder manageable-list"
252-* Seagate driver: fix get\_volume\_size()
253+* Driver assisted migration on retype when it's safe
254+* [Pure Storage] Add missing DB values when performing create CG from CG snap
255 * Fixed copy-on-write mode in GPFS NFS driver
256-* [Pure Storage] Add check for NVMe-FC capable array
257+* RBD: Call trash operation when plain deletion fails
258 * RBD: Open RBD images read-only where possible
259-* PowerMax Driver - Fix for legacy PowerMax OS around generations
260-* [Pure Storage] Add missing DB values when performing create CG from CG snap
261-* Fix typo in message policy deprecations
262-* PowerMax Docs - Xena release notes
263+* Log connection info returned from driver
264+* Native multibackend-matrix Zuul v3 job
265+* PowerMax Driver - Allow for case mismatch in SGs
266+* Change 'host' option from HostAddressOpt to StrOpt
267
268-19.0.0
269+18.1.0
270 ------
271
272-* Use os-brick 5.0.1
273-* Add "known issues" to xena release note
274-* PowerMax Driver - Fix for GVG snapshot delete
275-* PowerMax Driver - Port load balancing fix
276-* Dell PowerVault driver: Fix documentation typos
277-* Add warning about qcow2 version 2 format images
278-* Fix cinder-manage db version
279-* fixtures: Don't persist state in the Database fixture
280-* Fix typo in release note file
281-* Raise min of oslo.db to 11.0.0
282-* RBD: Call trash operation when plain deletion fails
283-* Specify xena os-brick series in requirements
284-* Add deprecation notices to deprecated policy rules
285-* Update SQLAlchemy related requirements
286-* Raise min of oslo.policy to 3.8.1
287-* Raise minimum oslo.log to 4.5.0
288-* Update TOX\_CONSTRAINTS\_FILE for stable/xena
289-* Update .gitreview for stable/xena
290-
291-19.0.0.0rc1
292------------
293-
294-* Correct "Add release note about xena policy changes"
295-* Correct "Clean up policy matrix for Xena release"
296-* mypy: Fix unused type: ignore in manager.py
297-* Add release note about xena policy changes
298-* Clean up policy matrix for Xena release
299-* Add release note prelude for the Xena release
300-* Update policies related to user visible extra specs
301-* Implement project personas for snapshot metadata
302-* Implement Xena project personas for group snapshots
303-* Implement project personas for backups API
304-* Implement project personas for volume actions
305-* Better workaround for policy file in PDF docs
306-* Remove sample policy config from docs generation
307-* [SVF] Fix extend issue for mirroring volumes
308-* Implement Xena project personas for group\_actions
309-* Add request method to test requests
310-* [SVF]:Storwize HyperSwap snapshot clone is failing
311-* Implement Xena personas for volume groups
312-* Implement Xena project personas for volume types
313-* Xena project personas for volume type access API
314-* Implement project personas for snapshots
315-* Implement secure RBAC for snapshot actions
316-* Implement project personas for volume metadata API
317-* Implement project personas for the limits API
318-* Fix: Online migration for volume\_use\_quota\_online\_data\_migration
319-* Implement project personas group\_types
320-* Update project personas for default\_types
321-* Implement project personas for volume API
322-* Implement project personas for quotas and quota\_classes
323-* Implement project personas for volume transfers
324-* Native multibackend-matrix Zuul v3 job
325-* [SVF]:HyperSwap volume service status update
326-* Hitachi: Add generic volume groups
327-* Nimble: Add Alletra 6k related information
328-* [SVF] Update rccg details for mirror volumes
329-* JovianDSS: add multiattach and 16K block support
330-* JovianDSS: fix code style and naming
331-* NetApp ONTAP: Add option to report storage provisioned capacity
332-* Netapp ONTAP: Add support to revert to snapshot
333-* Clean up user visible extra specs release note
334-* Implement user visible extra specs
335-* JovianDSS: fix iscsi target recovery function
336-* HPE 3PAR: Add HPE Alletra 9k related information
337-* Remove extraneous space from error message
338-* Docs: Discourage using naked rechecks
339-* NetApp ONTAP: Add storage assisted migration support
340-* Implement project personas for attachments
341-* Implement project personas for messages
342-* Add infrastructure for testing new RBAC policies
343-* Snapshot in-use volumes without force flag
344-* Update mv version history document for 3.65
345-* [SVF] Manage GMCV volumes on separate pools
346-* Update base policy file
347-* Correct the rest api url of import\_record of backup
348-* db: Remove 'db' argument from various managers
349-* db: Remove 'db\_driver' option
350-* db: Integrate alembic
351-* db: Add all migrations to initial alembic migration
352-* db: Add initial alembic migration
353-* db: Add alembic boilerplate
354-* db: Vendor 'oslo\_db.sqlalchemy.migration'
355-* db: Move sqlalchemy-migrate migrations
356-* Add user messages for backup operations
357-* Test glance with cinder backend optimization
358-* Expose volume & snapshot use\_quota field
359-* Improve quota usage for temporary resources
360-* Clear OVO history and compatibility
361-* Fix notifications of migration temp volume
362-* Change 'host' option from HostAddressOpt to StrOpt
363-* Update snapshot api microversion docs and tests
364-* [SVF]:Fix multiple lshost calls during attach
365+* Fix: Schema validation for attachment create API
366 * Support Images API v2.11
367-* Log connection info returned from driver
368-* [SVF]:Fix add volumes to GMCV group
369-* [SVF]:Retype in-use hyperswap volume
370-* [SVF] Fixed update\_rep\_properties for empty values
371+* Allow removing NFS snapshots in error status
372 * LVM: Retry lvextend commands on code 139
373-* [SVF]:Fix create volume on drp
374-* Add releasenote for schema validation fix
375-* Doc: IBM Storages user documentation update
376-* [SVF] Fix issue to get volume relationship details
377-* mypy: continued manager, scheduler, rpcapi
378-* conditional\_update(): disable false pylint error message
379-* mypy: image cache
380-* mypy: create\_volume flows
381-* Fix cinder-manage clean\_locks command
382 * PowerMax Driver - Fix for create snapshot
383-* [SVF]: Fix Enable Replication for Storwize\_V5000E
384-* Doc: Remove backup\_id from backup import url and parameter
385-* Add cinder permissions matrix
386-* Remove 'enable\_v3\_api' option
387-* Add cinder-manage command to remove file locks
388-* Remove file locks once we delete a resource
389 * [Pure Storage] Resolve missing provider\_id issue (PowerVC)
390 * RBD: use correct stripe unit in clone operation
391 * [rbd] Fix create encrypted volume from snapshot
392-* Allow removing NFS snapshots in error status
393-* Replace deprecated tenacity.Retrying.call
394-* Add openstacksdk-functional-devstack job in cinder gate
395-
396-19.0.0.0b1
397-----------
398-
399-* Doc: api-ref doc update
400 * [Pure Storage] Fix CG cloning crash when very long volume names
401-* Run cinder-mypy job in the check
402-* Add installation of mypy stubs packages
403-* db: Reorder initial migration
404-* db: Use 'import sqlalchemy as sa' pattern
405-* Tests: Fix InvalidUUID warnings
406-* Drop lower-constraints jobs
407 * NFS: Update connection info on online snap create
408-* mypy: image\_utils
409-* LVM: Simplify version fetching
410-* Tests: Simplify LVM fake\_execute
411+* Add libcgroup related packages in bindep.txt
412+* Abort volume creation when encryption spec is invalid
413+* NetApp ONTAP: Fix QoS lost after moving volume
414 * [Pure Storage] Fix minimum SDK version required
415-* Add backup\_swift\_create\_storage\_policy config opt
416 * LVM: Retry lvdisplay and lvcreate calls on segfault
417-* Use mv.LIMITS\_ADMIN\_FILTER in the code
418-* Retry "lvs" call on segfault for \_get\_thin\_pool\_free\_space
419-* streamline \_report\_driver\_status method
420-* Fix: Schema validation for attachment create API
421 * LVM: Use --readonly for lvdisplay in lv\_has\_snapshot
422-* Fix typo in Dell EMC Unity driver documentation
423-* Update decode\_cipher doc text about encryption ciphers
424-* Add libcgroup related packages in bindep.txt
425-* PowerMax Driver - Allow for case mismatch in SGs
426-* Move require\_driver\_initialized / log\_unsupp to volume\_utils
427-* NetApp ONTAP: Fix QoS lost after moving volume
428-* Update Block Storage API v2 api-ref
429-* Remove Block Storage API v2
430-* [SVF] Support volume-resize to hyperswap volume
431-* [SVF] Fixed add volumes to clone group issue
432-* [Pure Storage] Ensure multiattach volumes are not disconnected early
433-* [SVF]: Fix extend issue for a clone of rep-volume
434-* [SVF]:Bulk create Hyperswap volume is failing
435-* Update volume api microversion doc and tests
436-* PowerMax Docs - Corrections to QoS section
437-* Update IRC info
438-* Fix functional jobs
439-* Doc: Remove incorrect note about encryption flag
440-* Tests: Don't assert notifier not called
441+* Fix instance locality scheduler filter
442 * PowerMax Driver - Fix for create group from source
443-* Replace getargspec with getfullargspec
444-* SQLA 1.4: Fix calculate\_resource\_count
445-* SQLA 1.4: Fix conditional update Case
446-* api-ref: Use key\_size 256 in API examples
447-* Abort volume creation when encryption spec is invalid
448-* remove the oslo\_utils.fnmatch
449-* Tests: Fix oslo.i18n warning
450-* zuul: fixes for the A/A job (nodeset, variables)
451-* Fix PowerFlex volume type conversion
452-* volume api: Remove unused get\_snapshot\_metadata\_value method
453-* mypy: annotate volume\_utils / utils / exc
454-* zuul: add mypy experimental job
455-* Drop support for SQLite < 3.7
456-* image\_utils: Remove unused \_validate\_file\_format method
457-* filter\_scheduler: Remove schedule() method
458-* Remove references to 'sys.version\_info'
459-* vmware: Use oslo.vmware's get\_moref\_value()
460-* vmware tests: Support different moref backend representations
461+* PowerMax Driver - Fix for deleting replication group
462+* PowerMax Driver - Temporary snapshot enhancements
463+* [Pure Storage] Ensure multiattach volumes are not disconnected early
464+* Retry "lvs" call on segfault for \_get\_thin\_pool\_free\_space
465+* Fix typo in Dell EMC Unity driver documentation
466+* Add warning message about slow volume backend
467 * PowerMax Docs - Wallaby documentation
468-* db: Compact migrations to Train
469-* db: Remove 'cinder.database.migration\_backend' entrypoint
470-* setup.cfg: Replace dashes with underscores
471-* Tests: Add coverage for coordinator start/stop
472-* Remove unused \_get\_non\_shared\_target\_hosts from cmd/manage
473-* Unit test RBD clone depth calculation
474-* api-ref: Fix "name" parameter
475-* Update release note info
476-* Add Python3 xena unit tests
477-* Driver assisted migration on retype when it's safe
478-* pylint: Fix migration E1120 no-value-for-parameter
479-* pylint: Fix E0213 no-self-argument in tests
480-* pylint: Fix E1120 no-value-for-parameter for mocks
481+* Fix PowerFlex volume type conversion
482+* zuul: fixes for the A/A job (nodeset, variables)
483 * Fix sporadic cleanup unit test failure
484-* Fix instance locality scheduler filter
485-* Pure Storage - bump version numbers for Xena
486-* Remove uuid check/generate in service
487 * Open local image files with "rb" mode
488-* Bug fix for free space calculation
489-* Reserve migrations for DB backports
490-* PowerMax Driver - Fix for deleting replication group
491-* Update to pylint 2.7.4
492+* Drop lower-constraints job
493+
494+18.0.0
495+------
496+
497+* Add known issue note about encrypted volumes
498+* Add releasenote for glance mTLS fix
499+* Add release note about cgroups v1
500 * Fix: show volume by name for non-admins
501-* Modify/Move project validation methods to api\_utils
502-* api-ref: add additional info for mv 3.64
503-* Remove unused \_db\_error code from cmd/manage.py
504-* Set Wallaby maximum mv in REST API version history
505 * Quota: Fix multiple race conditions
506 * Prevent quota and reservations to go into negative
507 * Update cinder manage quota commands
508@@ -246,34 +70,27 @@ CHANGES
509 * Remove nested quota leftovers
510 * Quota: Fix until\_refresh config changes
511 * Remove unused quota python classes
512-* Add quota utils to cinder-manage
513-* Update help text for backup compression option
514-* Use os-brick 4.3.1
515 * LVM: Fix delete volume error due to lvs failure
516+* Add quota utils to cinder-manage
517 * Change snapshots type with volume retype
518+* Cinder - Creating clone of encrypted volume fails
519+* Use os-brick 4.3.1
520+* Add prelude for Wallaby release notes
521 * Fix automatic quota sync for temporary volumes
522-* Remove unnecessary DB read
523-* Remove unused code path in attachment\_delete
524-* Update master for stable/wallaby
525+* Fix PowerStore iSCSI targets filtering
526+* Update TOX\_CONSTRAINTS\_FILE for stable/wallaby
527+* Update .gitreview for stable/wallaby
528
529 18.0.0.0rc1
530 -----------
531
532 * Use os-brick 4.3.0
533-* Cinder - Creating clone of encrypted volume fails
534-* PowerMax Driver - Temporary snapshot enhancements
535-* api-ref: Fix "id" parameter
536 * NetApp ONTAP: Fix FlexGroup replication
537 * Imported Translations from Zanata
538-* Make availability zone type exception easier to understand
539-* Update contributor doc with additional meetings
540 * Support mTLS when calling the glance API
541 * Follow up NetApp ONTAP FlexGroup feature
542-* Backup manager: Synchronously call remove\_export\_snapshot
543 * Backup manager: Synchronously call remove\_export
544-* Fix PowerStore iSCSI targets filtering
545 * Bug fix for revert to snapshot feature
546-* Remove six from quota.py
547 * JovianDSS: add certs and snapshot restore
548 * Update code layout and missing Zadara features
549 * doc: Remove cryptsetup reference for compute setup
550@@ -298,8 +115,6 @@ CHANGES
551 * PowerMax Driver - Release notes for 761643 and 767172
552 * Add Consistency Groups support in PowerStore driver
553 * Add OpenStack volume replication v2.1 support in PowerStore driver
554-* Remove six from cinder.tests.unit.objects
555-* Fix invalid yaml in reno template
556 * API validation: Add cinder\_host type to support ipv6 in manage
557 * [SVF] Set volume IOPS based on volume size
558 * Add QoS Suport for Pure Storage
559@@ -318,8 +133,6 @@ CHANGES
560 * [Storwize] Provide IOPS based storage offering
561 * doc: add specs repo maintenance tasks
562 * PowerMax Driver - Extend replicated volume
563-* Add warning message about slow volume backend
564-* [doc] remove outdated package python-keystone
565 * Hitachi: Trace REST API input/output logs
566 * PowerMax Driver - Fix pylint errors in test\_common and provision
567 * PowerMax Driver - U4P Failover SerialNumber KeyError fix
568@@ -327,7 +140,6 @@ CHANGES
569 * Fix in api-ref
570 * [Pure] Fix failing consistency group tempest tests
571 * Resolve SAWarning SQLAlchemy warning
572-* [PURE] support IPv6 / add parameter pure\_iscsi\_cidr\_list
573 * Fix CI\_WIKI\_NAME entries
574 * Use TOX\_CONSTRAINTS\_FILE
575 * Drop policy check failures to DEBUG
576@@ -350,7 +162,6 @@ CHANGES
577 * HPE: Add Peer Persistence support for Primera backend
578 * Use os-brick 4.2.0
579 * Move trace methods from utils to volume\_utils
580-* Tests: test\_backup - specify volume\_type\_id for snapshots
581 * Imported Translations from Zanata
582 * Bump pylint to 2.6.0
583 * LVM: fix \_create\_vg
584@@ -362,7 +173,6 @@ CHANGES
585 * doc: add rbd-iscsi-client info
586 * Fix RBD\_OPERATION\_FEATURE\_CLONE\_PARENT in unittest
587 * Require oslo.serialization 4.1.0
588-* image\_utils: Simplify fetch\_verify\_image
589 * Update ceph driver docs, mentioning Hyper-V support
590 * PowerMax Driver - Check for missing port group
591 * Add encryption\_key\_id to volume and backup details
592@@ -376,7 +186,6 @@ CHANGES
593 * Tests: Add another mock psutil in quobyte tests
594 * Add ceph iscsi volume driver
595 * Add Cinder driver for TOYOU ACS5000
596-* Tests: Solidfire - Use UUIDs in object UUID fields
597 * Remove NestedQuotaDriver
598 * Label temporary files created by image\_utils
599 * Update SolidFire Storage assisted migration in support-matrix
600@@ -384,7 +193,6 @@ CHANGES
601 * Add driver for Dell EMC PowerVault ME Series
602 * Imported Translations from Zanata
603 * Introduces MV to add volume type ID in volumes details
604-* HPMSA: Report SAN driver options
605 * LVM: Support only LVM 2.02.107+
606 * LVM: Use --readonly for lvs
607 * NetApp SolidFire: Refactor DuplicateSfVolumeNames exception
608@@ -392,7 +200,6 @@ CHANGES
609 * Remove \_\_unicode\_\_() from CinderException
610 * doc: update release cycle tasks
611 * tox mypy: Call mypywrap.sh directly
612-* Tests: Improve cascade delete coverage
613 * pylint: run coding-checks.sh with bash
614 * Hitachi: Wait until the volume can be deleted
615 * Basic volume QoS doc
616@@ -807,7 +614,6 @@ CHANGES
617 * Fix a spelling mistake
618 * Do not rename rbd based volume after migration
619 * PowerMax Driver - Allowing for default volume type in group
620-* Excess availability\_zone judgment code
621 * Vmware: Revert the volume stats revert
622 * Update weekly meeting location
623 * Imported Translations from Zanata
624diff --git a/PKG-INFO b/PKG-INFO
625index c4068a6..5aabd63 100644
626--- a/PKG-INFO
627+++ b/PKG-INFO
628@@ -1,6 +1,6 @@
629 Metadata-Version: 2.1
630 Name: cinder
631-Version: 19.1.0
632+Version: 18.2.0
633 Summary: OpenStack Block Storage
634 Home-page: https://docs.openstack.org/cinder/latest/
635 Author: OpenStack
636diff --git a/api-ref/source/v2/ext-backups.inc b/api-ref/source/v2/ext-backups.inc
637index f6e5d50..98fd41e 100644
638--- a/api-ref/source/v2/ext-backups.inc
639+++ b/api-ref/source/v2/ext-backups.inc
640@@ -374,7 +374,7 @@ Response Example
641 Import backup
642 ~~~~~~~~~~~~~
643
644-.. rest_method:: POST /v2/{project_id}/backups/import_record
645+.. rest_method:: POST /v2/{project_id}/backups/{backup_id}/import_record
646
647 Import information about a backup.
648
649@@ -396,6 +396,7 @@ Request
650 .. rest_parameters:: parameters.yaml
651
652 - project_id: project_id_path
653+ - backup_id: backup_id
654 - backup-record: backup_record
655 - backup_service: backup_service
656 - backup_url: backup_url
657diff --git a/api-ref/source/v2/index.rst b/api-ref/source/v2/index.rst
658index ff8ab1d..7070c06 100644
659--- a/api-ref/source/v2/index.rst
660+++ b/api-ref/source/v2/index.rst
661@@ -1,23 +1,8 @@
662 :tocdepth: 2
663
664-==============================
665-Block Storage API V2 (REMOVED)
666-==============================
667-
668-.. note::
669- Version 2 of the Block Storage API was `deprecated in the Pike release
670- <https://docs.openstack.org/releasenotes/cinder/pike.html#deprecation-notes>`_
671- and was removed during the Xena development cycle. `This document is
672- maintained for historical purposes only.`
673-
674- `Version 3
675- <https://docs.openstack.org/api-ref/block-storage/v3/>`_
676- of the Block Storage API was `introduced in the Mitaka release
677- <https://review.opendev.org/c/openstack/cinder/+/224910>`_. Version
678- 3.0, which is the default microversion at the ``/v3`` endpoint, was
679- designed to be identical to version 2. Thus, scripts using the Block
680- Storage API v2 should be adaptable to version 3 with minimal changes.
681-
682+=================================
683+Block Storage API V2 (DEPRECATED)
684+=================================
685
686 .. rest_expand_all::
687
688diff --git a/api-ref/source/v2/samples/encryption-type-create-request.json b/api-ref/source/v2/samples/encryption-type-create-request.json
689index 581a028..6b9f97e 100644
690--- a/api-ref/source/v2/samples/encryption-type-create-request.json
691+++ b/api-ref/source/v2/samples/encryption-type-create-request.json
692@@ -1,6 +1,6 @@
693 {
694 "encryption":{
695- "key_size": 256,
696+ "key_size": 128,
697 "provider": "luks",
698 "control_location":"front-end",
699 "cipher": "aes-xts-plain64"
700diff --git a/api-ref/source/v2/samples/encryption-type-create-response.json b/api-ref/source/v2/samples/encryption-type-create-response.json
701index de0964b..ad7f5c8 100644
702--- a/api-ref/source/v2/samples/encryption-type-create-response.json
703+++ b/api-ref/source/v2/samples/encryption-type-create-response.json
704@@ -3,7 +3,7 @@
705 "volume_type_id": "2d29462d-76cb-417c-8a9f-fb23140f1577",
706 "control_location": "front-end",
707 "encryption_id": "81e069c6-7394-4856-8df7-3b237ca61f74",
708- "key_size": 256,
709+ "key_size": 128,
710 "provider": "luks",
711 "cipher": "aes-xts-plain64"
712 }
713diff --git a/api-ref/source/v2/samples/encryption-type-show-response.json b/api-ref/source/v2/samples/encryption-type-show-response.json
714index 3747f69..9a168bf 100644
715--- a/api-ref/source/v2/samples/encryption-type-show-response.json
716+++ b/api-ref/source/v2/samples/encryption-type-show-response.json
717@@ -5,7 +5,7 @@
718 "created_at": "2016-12-28T02:32:25.000000",
719 "updated_at": null,
720 "encryption_id": "81e069c6-7394-4856-8df7-3b237ca61f74",
721- "key_size": 256,
722+ "key_size": 128,
723 "provider": "luks",
724 "deleted_at": null,
725 "cipher": "aes-xts-plain64"
726diff --git a/api-ref/source/v3/ext-backups.inc b/api-ref/source/v3/ext-backups.inc
727index 7e67935..d120568 100644
728--- a/api-ref/source/v3/ext-backups.inc
729+++ b/api-ref/source/v3/ext-backups.inc
730@@ -475,7 +475,7 @@ Response Example
731 Import a backup
732 ~~~~~~~~~~~~~~~
733
734-.. rest_method:: POST /v3/{project_id}/backups/import_record
735+.. rest_method:: POST /v3/{project_id}/backups/{backup_id}/import_record
736
737 Import information about a backup.
738
739@@ -499,6 +499,7 @@ Request
740 .. rest_parameters:: parameters.yaml
741
742 - project_id: project_id_path
743+ - backup_id: backup_id_required
744 - backup-record: backup_record
745 - backup_service: backup_service
746 - backup_url: backup_url
747diff --git a/api-ref/source/v3/os-vol-transfer-v3.inc b/api-ref/source/v3/os-vol-transfer-v3.inc
748index 47a68f4..e9e0bed 100644
749--- a/api-ref/source/v3/os-vol-transfer-v3.inc
750+++ b/api-ref/source/v3/os-vol-transfer-v3.inc
751@@ -43,7 +43,7 @@ Response Parameters
752
753 - transfer: transfer
754 - volume_id: volume_id
755- - id: transfer_obj_id
756+ - id: id
757 - links: links
758 - name: name
759
760@@ -101,7 +101,7 @@ Response Parameters
761 - links: links
762 - created_at: created_at
763 - volume_id: volume_id
764- - id: transfer_obj_id
765+ - id: id
766 - name: name
767
768 Response Example
769@@ -141,7 +141,7 @@ Response Parameters
770 .. rest_parameters:: parameters.yaml
771
772 - volume_id: volume_id
773- - id: transfer_obj_id
774+ - id: id
775 - links: links
776 - name: name
777
778@@ -184,7 +184,7 @@ Response Parameters
779
780 - created_at: created_at
781 - volume_id: volume_id
782- - id: transfer_obj_id
783+ - id: id
784 - links: links
785 - name: name
786
787@@ -250,7 +250,7 @@ Response Parameters
788 - transfers: transfers
789 - created_at: created_at
790 - volume_id: volume_id
791- - id: transfer_obj_id
792+ - id: id
793 - links: links
794 - name: name
795
796diff --git a/api-ref/source/v3/parameters.yaml b/api-ref/source/v3/parameters.yaml
797index f887e4b..3066a37 100644
798--- a/api-ref/source/v3/parameters.yaml
799+++ b/api-ref/source/v3/parameters.yaml
800@@ -214,18 +214,6 @@ detail:
801 in: query
802 required: false
803 type: boolean
804-filter_consumes_quota:
805- description: |
806- Filters results by ``consumes_quota`` field. Resources that don't use
807- quotas are usually temporary internal resources created to perform an
808- operation. Default is to not filter by it. Filtering by this option may
809- not be always possible in a cloud, see
810- :ref:`List Resource Filters <resource-filters>` to determine whether this
811- filter is available in your cloud.
812- in: query
813- required: false
814- type: boolean
815- min_version: 3.65
816 filter_created_at:
817 description: |
818 Filters reuslts by a time that resources are created at with time
819@@ -853,15 +841,6 @@ consumer:
820 in: body
821 required: false
822 type: string
823-consumes_quota:
824- description: |
825- Whether this resource consumes quota or not. Resources that not counted
826- for quota usage are usually temporary internal resources created to perform
827- an operation.
828- in: body
829- required: false
830- type: boolean
831- min_version: 3.65
832 container:
833 description: |
834 The container name or null.
835@@ -1167,11 +1146,10 @@ encryption_id_body:
836 type: string
837 encryption_key_id:
838 description: |
839- The UUID of the encryption key. Only included for encrypted volumes.
840+ The UUID of the encryption key.
841 in: body
842 required: false
843 type: string
844- min_version: 3.64
845 event_id:
846 description: |
847 The id of the event to this message, this id could
848@@ -1292,7 +1270,6 @@ group_id_optional:
849 in: body
850 required: false
851 type: string
852- min_version: 3.13
853 group_name:
854 description: |
855 The group name.
856@@ -1301,11 +1278,10 @@ group_name:
857 type: string
858 group_replication_status:
859 description: |
860- The group replication status.
861+ The group replication status. Introduced with API microversion 3.38.
862 in: body
863 required: false
864 type: string
865- min_version: 3.38
866 group_snapshot:
867 description: |
868 The group snapshot.
869@@ -1318,13 +1294,6 @@ group_snapshot_id:
870 in: body
871 required: false
872 type: string
873-group_snapshot_id_3_14:
874- description: |
875- The ID of the group snapshot.
876- in: body
877- required: true
878- type: string
879- min_version: 3.14
880 group_snapshot_id_req:
881 description: |
882 The ID of the group snapshot.
883@@ -1461,7 +1430,7 @@ hosts:
884 type: object
885 id:
886 description: |
887- The UUID of the object.
888+ The UUID of the volume transfer.
889 in: body
890 required: true
891 type: string
892@@ -1923,9 +1892,9 @@ multiattach_resp:
893 type: boolean
894 name:
895 description: |
896- The name of the object.
897+ The name of the Volume Transfer.
898 in: body
899- required: false
900+ required: true
901 type: string
902 name_backend_pool:
903 description: |
904@@ -2345,15 +2314,6 @@ provider: # required response parameter (get/create)
905 in: body
906 required: true
907 type: string
908-provider_id:
909- description: |
910- The provider ID for the volume. The value is either a string set by the
911- driver or ``null`` if the driver doesn't use the field or if it hasn't
912- created it yet. Only returned for administrators.
913- in: body
914- required: false
915- type: string
916- min_version: 3.21
917 provider_optional: # optional response parameter (update)
918 description: |
919 The class that provides encryption support.
920@@ -2697,12 +2657,6 @@ snapshot_id_source_vol:
921 in: body
922 required: false
923 type: string
924-snapshot_name:
925- description: |
926- The name of the snapshot.
927- in: body
928- required: false
929- type: string
930 snapshot_obj:
931 description: |
932 A ``snapshot`` object.
933@@ -2948,18 +2902,6 @@ transfer:
934 in: body
935 required: true
936 type: object
937-transfer_name:
938- description: |
939- The name of the volume transfer.
940- in: body
941- required: true
942- type: string
943-transfer_obj_id:
944- description: |
945- The UUID of the volume transfer.
946- in: body
947- required: true
948- type: string
949 transfers:
950 description: |
951 List of transfer details.
952diff --git a/api-ref/source/v3/resource-filters.inc b/api-ref/source/v3/resource-filters.inc
953index 37f662c..b5064e9 100644
954--- a/api-ref/source/v3/resource-filters.inc
955+++ b/api-ref/source/v3/resource-filters.inc
956@@ -1,7 +1,5 @@
957 .. -*- rst -*-
958
959-.. _resource-filters:
960-
961 Resource Filters (resource_filters)
962 ===================================
963
964diff --git a/api-ref/source/v3/samples/snapshots/snapshot-create-response.json b/api-ref/source/v3/samples/snapshots/snapshot-create-response.json
965index e19e407..8819dd9 100644
966--- a/api-ref/source/v3/samples/snapshots/snapshot-create-response.json
967+++ b/api-ref/source/v3/samples/snapshots/snapshot-create-response.json
968@@ -12,4 +12,4 @@
969 "updated_at": null,
970 "volume_id": "d291b81c-6e40-4525-8231-90aa1588121e"
971 }
972-}
973+}
974\ No newline at end of file
975diff --git a/api-ref/source/v3/samples/snapshots/snapshot-show-response.json b/api-ref/source/v3/samples/snapshots/snapshot-show-response.json
976index b4979f3..da7e68d 100644
977--- a/api-ref/source/v3/samples/snapshots/snapshot-show-response.json
978+++ b/api-ref/source/v3/samples/snapshots/snapshot-show-response.json
979@@ -14,4 +14,4 @@
980 "updated_at": null,
981 "volume_id": "b72c48f1-64b7-4cd8-9745-b12e0be82d37"
982 }
983-}
984+}
985\ No newline at end of file
986diff --git a/api-ref/source/v3/samples/snapshots/snapshot-update-response.json b/api-ref/source/v3/samples/snapshots/snapshot-update-response.json
987index d69a8ae..5d9c9bb 100644
988--- a/api-ref/source/v3/samples/snapshots/snapshot-update-response.json
989+++ b/api-ref/source/v3/samples/snapshots/snapshot-update-response.json
990@@ -12,4 +12,4 @@
991 "updated_at": null,
992 "volume_id": "070c942d-9909-42e9-a467-7a781f150c58"
993 }
994-}
995+}
996\ No newline at end of file
997diff --git a/api-ref/source/v3/samples/snapshots/snapshots-list-detailed-response.json b/api-ref/source/v3/samples/snapshots/snapshots-list-detailed-response.json
998index a73af20..9c452f3 100644
999--- a/api-ref/source/v3/samples/snapshots/snapshots-list-detailed-response.json
1000+++ b/api-ref/source/v3/samples/snapshots/snapshots-list-detailed-response.json
1001@@ -16,4 +16,4 @@
1002 "volume_id": "7acd675e-4e06-4653-af9f-2ecd546342d6"
1003 }
1004 ]
1005-}
1006+}
1007\ No newline at end of file
1008diff --git a/api-ref/source/v3/samples/snapshots/v3.14/snapshot-create-response.json b/api-ref/source/v3/samples/snapshots/v3.14/snapshot-create-response.json
1009deleted file mode 100644
1010index 84e3a98..0000000
1011--- a/api-ref/source/v3/samples/snapshots/v3.14/snapshot-create-response.json
1012+++ /dev/null
1013@@ -1,16 +0,0 @@
1014-{
1015- "snapshot": {
1016- "created_at": "2019-03-11T16:24:34.469003",
1017- "description": "Daily backup",
1018- "id": "b36476e5-d18b-47f9-ac69-4818cb43ee21",
1019- "metadata": {
1020- "key": "v3"
1021- },
1022- "name": "snap-001",
1023- "size": 10,
1024- "status": "creating",
1025- "updated_at": null,
1026- "volume_id": "d291b81c-6e40-4525-8231-90aa1588121e",
1027- "group_snapshot_id": null
1028- }
1029-}
1030diff --git a/api-ref/source/v3/samples/snapshots/v3.14/snapshot-show-response.json b/api-ref/source/v3/samples/snapshots/v3.14/snapshot-show-response.json
1031deleted file mode 100644
1032index b7c09aa..0000000
1033--- a/api-ref/source/v3/samples/snapshots/v3.14/snapshot-show-response.json
1034+++ /dev/null
1035@@ -1,18 +0,0 @@
1036-{
1037- "snapshot": {
1038- "created_at": "2019-03-12T04:42:00.809352",
1039- "description": "Daily backup",
1040- "id": "4a584cae-e4ce-429b-9154-d4c9eb8fda4c",
1041- "metadata": {
1042- "key": "v3"
1043- },
1044- "name": "snap-001",
1045- "os-extended-snapshot-attributes:progress": "0%",
1046- "os-extended-snapshot-attributes:project_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1047- "size": 10,
1048- "status": "creating",
1049- "updated_at": null,
1050- "volume_id": "b72c48f1-64b7-4cd8-9745-b12e0be82d37",
1051- "group_snapshot_id": null
1052- }
1053-}
1054diff --git a/api-ref/source/v3/samples/snapshots/v3.14/snapshot-update-response.json b/api-ref/source/v3/samples/snapshots/v3.14/snapshot-update-response.json
1055deleted file mode 100644
1056index fc31078..0000000
1057--- a/api-ref/source/v3/samples/snapshots/v3.14/snapshot-update-response.json
1058+++ /dev/null
1059@@ -1,16 +0,0 @@
1060-{
1061- "snapshot": {
1062- "created_at": "2019-03-12T04:53:53.426591",
1063- "description": "This is yet, another snapshot.",
1064- "id": "43666194-8e72-451a-b7bb-54fef763b2b8",
1065- "metadata": {
1066- "key": "v3"
1067- },
1068- "name": "snap-002",
1069- "size": 10,
1070- "status": "creating",
1071- "updated_at": null,
1072- "volume_id": "070c942d-9909-42e9-a467-7a781f150c58",
1073- "group_snapshot_id": null
1074- }
1075-}
1076diff --git a/api-ref/source/v3/samples/snapshots/v3.14/snapshots-list-detailed-response.json b/api-ref/source/v3/samples/snapshots/v3.14/snapshots-list-detailed-response.json
1077deleted file mode 100644
1078index 2d1e4b9..0000000
1079--- a/api-ref/source/v3/samples/snapshots/v3.14/snapshots-list-detailed-response.json
1080+++ /dev/null
1081@@ -1,20 +0,0 @@
1082-{
1083- "snapshots": [
1084- {
1085- "created_at": "2019-03-11T16:24:36.464445",
1086- "description": "Daily backup",
1087- "id": "d0083dc5-8795-4c1a-bc9c-74f70006c205",
1088- "metadata": {
1089- "key": "v3"
1090- },
1091- "name": "snap-001",
1092- "os-extended-snapshot-attributes:progress": "0%",
1093- "os-extended-snapshot-attributes:project_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1094- "size": 10,
1095- "status": "creating",
1096- "updated_at": null,
1097- "volume_id": "7acd675e-4e06-4653-af9f-2ecd546342d6",
1098- "group_snapshot_id": null
1099- }
1100- ]
1101-}
1102diff --git a/api-ref/source/v3/samples/snapshots/v3.41/snapshot-create-response.json b/api-ref/source/v3/samples/snapshots/v3.41/snapshot-create-response.json
1103deleted file mode 100644
1104index 08e06f6..0000000
1105--- a/api-ref/source/v3/samples/snapshots/v3.41/snapshot-create-response.json
1106+++ /dev/null
1107@@ -1,17 +0,0 @@
1108-{
1109- "snapshot": {
1110- "created_at": "2019-03-11T16:24:34.469003",
1111- "description": "Daily backup",
1112- "id": "b36476e5-d18b-47f9-ac69-4818cb43ee21",
1113- "metadata": {
1114- "key": "v3"
1115- },
1116- "name": "snap-001",
1117- "size": 10,
1118- "status": "creating",
1119- "updated_at": null,
1120- "volume_id": "d291b81c-6e40-4525-8231-90aa1588121e",
1121- "group_snapshot_id": null,
1122- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e"
1123- }
1124-}
1125diff --git a/api-ref/source/v3/samples/snapshots/v3.41/snapshot-show-response.json b/api-ref/source/v3/samples/snapshots/v3.41/snapshot-show-response.json
1126deleted file mode 100644
1127index 71368b0..0000000
1128--- a/api-ref/source/v3/samples/snapshots/v3.41/snapshot-show-response.json
1129+++ /dev/null
1130@@ -1,19 +0,0 @@
1131-{
1132- "snapshot": {
1133- "created_at": "2019-03-12T04:42:00.809352",
1134- "description": "Daily backup",
1135- "id": "4a584cae-e4ce-429b-9154-d4c9eb8fda4c",
1136- "metadata": {
1137- "key": "v3"
1138- },
1139- "name": "snap-001",
1140- "os-extended-snapshot-attributes:progress": "0%",
1141- "os-extended-snapshot-attributes:project_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1142- "size": 10,
1143- "status": "creating",
1144- "updated_at": null,
1145- "volume_id": "b72c48f1-64b7-4cd8-9745-b12e0be82d37",
1146- "group_snapshot_id": null,
1147- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e"
1148- }
1149-}
1150diff --git a/api-ref/source/v3/samples/snapshots/v3.41/snapshot-update-response.json b/api-ref/source/v3/samples/snapshots/v3.41/snapshot-update-response.json
1151deleted file mode 100644
1152index 307e694..0000000
1153--- a/api-ref/source/v3/samples/snapshots/v3.41/snapshot-update-response.json
1154+++ /dev/null
1155@@ -1,17 +0,0 @@
1156-{
1157- "snapshot": {
1158- "created_at": "2019-03-12T04:53:53.426591",
1159- "description": "This is yet, another snapshot.",
1160- "id": "43666194-8e72-451a-b7bb-54fef763b2b8",
1161- "metadata": {
1162- "key": "v3"
1163- },
1164- "name": "snap-002",
1165- "size": 10,
1166- "status": "creating",
1167- "updated_at": null,
1168- "volume_id": "070c942d-9909-42e9-a467-7a781f150c58",
1169- "group_snapshot_id": null,
1170- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e"
1171- }
1172-}
1173diff --git a/api-ref/source/v3/samples/snapshots/v3.41/snapshots-list-detailed-response.json b/api-ref/source/v3/samples/snapshots/v3.41/snapshots-list-detailed-response.json
1174deleted file mode 100644
1175index 1f9b123..0000000
1176--- a/api-ref/source/v3/samples/snapshots/v3.41/snapshots-list-detailed-response.json
1177+++ /dev/null
1178@@ -1,21 +0,0 @@
1179-{
1180- "snapshots": [
1181- {
1182- "created_at": "2019-03-11T16:24:36.464445",
1183- "description": "Daily backup",
1184- "id": "d0083dc5-8795-4c1a-bc9c-74f70006c205",
1185- "metadata": {
1186- "key": "v3"
1187- },
1188- "name": "snap-001",
1189- "os-extended-snapshot-attributes:progress": "0%",
1190- "os-extended-snapshot-attributes:project_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1191- "size": 10,
1192- "status": "creating",
1193- "updated_at": null,
1194- "volume_id": "7acd675e-4e06-4653-af9f-2ecd546342d6",
1195- "group_snapshot_id": null,
1196- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e"
1197- }
1198- ]
1199-}
1200diff --git a/api-ref/source/v3/samples/snapshots/v3.65/snapshot-create-response.json b/api-ref/source/v3/samples/snapshots/v3.65/snapshot-create-response.json
1201deleted file mode 100644
1202index b38d662..0000000
1203--- a/api-ref/source/v3/samples/snapshots/v3.65/snapshot-create-response.json
1204+++ /dev/null
1205@@ -1,18 +0,0 @@
1206-{
1207- "snapshot": {
1208- "created_at": "2019-03-11T16:24:34.469003",
1209- "description": "Daily backup",
1210- "id": "b36476e5-d18b-47f9-ac69-4818cb43ee21",
1211- "metadata": {
1212- "key": "v3"
1213- },
1214- "name": "snap-001",
1215- "size": 10,
1216- "status": "creating",
1217- "updated_at": null,
1218- "volume_id": "d291b81c-6e40-4525-8231-90aa1588121e",
1219- "group_snapshot_id": null,
1220- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1221- "consumes_quota": true
1222- }
1223-}
1224diff --git a/api-ref/source/v3/samples/snapshots/v3.65/snapshot-show-response.json b/api-ref/source/v3/samples/snapshots/v3.65/snapshot-show-response.json
1225deleted file mode 100644
1226index 69be72e..0000000
1227--- a/api-ref/source/v3/samples/snapshots/v3.65/snapshot-show-response.json
1228+++ /dev/null
1229@@ -1,20 +0,0 @@
1230-{
1231- "snapshot": {
1232- "created_at": "2019-03-12T04:42:00.809352",
1233- "description": "Daily backup",
1234- "id": "4a584cae-e4ce-429b-9154-d4c9eb8fda4c",
1235- "metadata": {
1236- "key": "v3"
1237- },
1238- "name": "snap-001",
1239- "os-extended-snapshot-attributes:progress": "0%",
1240- "os-extended-snapshot-attributes:project_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1241- "size": 10,
1242- "status": "creating",
1243- "updated_at": null,
1244- "volume_id": "b72c48f1-64b7-4cd8-9745-b12e0be82d37",
1245- "group_snapshot_id": null,
1246- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1247- "consumes_quota": true
1248- }
1249-}
1250diff --git a/api-ref/source/v3/samples/snapshots/v3.65/snapshot-update-response.json b/api-ref/source/v3/samples/snapshots/v3.65/snapshot-update-response.json
1251deleted file mode 100644
1252index c097889..0000000
1253--- a/api-ref/source/v3/samples/snapshots/v3.65/snapshot-update-response.json
1254+++ /dev/null
1255@@ -1,18 +0,0 @@
1256-{
1257- "snapshot": {
1258- "created_at": "2019-03-12T04:53:53.426591",
1259- "description": "This is yet, another snapshot.",
1260- "id": "43666194-8e72-451a-b7bb-54fef763b2b8",
1261- "metadata": {
1262- "key": "v3"
1263- },
1264- "name": "snap-002",
1265- "size": 10,
1266- "status": "creating",
1267- "updated_at": null,
1268- "volume_id": "070c942d-9909-42e9-a467-7a781f150c58",
1269- "group_snapshot_id": null,
1270- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1271- "consumes_quota": true
1272- }
1273-}
1274diff --git a/api-ref/source/v3/samples/snapshots/v3.65/snapshots-list-detailed-response.json b/api-ref/source/v3/samples/snapshots/v3.65/snapshots-list-detailed-response.json
1275deleted file mode 100644
1276index 7c9e8d4..0000000
1277--- a/api-ref/source/v3/samples/snapshots/v3.65/snapshots-list-detailed-response.json
1278+++ /dev/null
1279@@ -1,22 +0,0 @@
1280-{
1281- "snapshots": [
1282- {
1283- "created_at": "2019-03-11T16:24:36.464445",
1284- "description": "Daily backup",
1285- "id": "d0083dc5-8795-4c1a-bc9c-74f70006c205",
1286- "metadata": {
1287- "key": "v3"
1288- },
1289- "name": "snap-001",
1290- "os-extended-snapshot-attributes:progress": "0%",
1291- "os-extended-snapshot-attributes:project_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1292- "size": 10,
1293- "status": "creating",
1294- "updated_at": null,
1295- "volume_id": "7acd675e-4e06-4653-af9f-2ecd546342d6",
1296- "group_snapshot_id": null,
1297- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1298- "consumes_quota": true
1299- }
1300- ]
1301-}
1302diff --git a/api-ref/source/v3/samples/versions/version-show-response.json b/api-ref/source/v3/samples/versions/version-show-response.json
1303index 63d41fa..df31cb2 100644
1304--- a/api-ref/source/v3/samples/versions/version-show-response.json
1305+++ b/api-ref/source/v3/samples/versions/version-show-response.json
1306@@ -21,8 +21,8 @@
1307 ],
1308 "min_version": "3.0",
1309 "status": "CURRENT",
1310- "updated": "2021-09-16T00:00:00Z",
1311- "version": "3.66"
1312+ "updated": "2021-02-03T00:00:00Z",
1313+ "version": "3.64"
1314 }
1315 ]
1316 }
1317diff --git a/api-ref/source/v3/samples/versions/versions-response.json b/api-ref/source/v3/samples/versions/versions-response.json
1318index 92bfafc..b1c96e5 100644
1319--- a/api-ref/source/v3/samples/versions/versions-response.json
1320+++ b/api-ref/source/v3/samples/versions/versions-response.json
1321@@ -1,6 +1,30 @@
1322 {
1323 "versions": [
1324 {
1325+ "id": "v2.0",
1326+ "links": [
1327+ {
1328+ "href": "https://docs.openstack.org/",
1329+ "rel": "describedby",
1330+ "type": "text/html"
1331+ },
1332+ {
1333+ "href": "http://127.0.0.1:45697/v2/",
1334+ "rel": "self"
1335+ }
1336+ ],
1337+ "media-types": [
1338+ {
1339+ "base": "application/json",
1340+ "type": "application/vnd.openstack.volume+json;version=2"
1341+ }
1342+ ],
1343+ "min_version": "",
1344+ "status": "DEPRECATED",
1345+ "updated": "2017-02-25T12:00:00Z",
1346+ "version": ""
1347+ },
1348+ {
1349 "id": "v3.0",
1350 "links": [
1351 {
1352@@ -21,8 +45,8 @@
1353 ],
1354 "min_version": "3.0",
1355 "status": "CURRENT",
1356- "updated": "2021-09-16T00:00:00Z",
1357- "version": "3.66"
1358+ "updated": "2021-02-03T00:00:00Z",
1359+ "version": "3.64"
1360 }
1361 ]
1362 }
1363diff --git a/api-ref/source/v3/samples/volume_type/encryption-type-create-request.json b/api-ref/source/v3/samples/volume_type/encryption-type-create-request.json
1364index 581a028..6b9f97e 100644
1365--- a/api-ref/source/v3/samples/volume_type/encryption-type-create-request.json
1366+++ b/api-ref/source/v3/samples/volume_type/encryption-type-create-request.json
1367@@ -1,6 +1,6 @@
1368 {
1369 "encryption":{
1370- "key_size": 256,
1371+ "key_size": 128,
1372 "provider": "luks",
1373 "control_location":"front-end",
1374 "cipher": "aes-xts-plain64"
1375diff --git a/api-ref/source/v3/samples/volume_type/encryption-type-create-response.json b/api-ref/source/v3/samples/volume_type/encryption-type-create-response.json
1376index de0964b..ad7f5c8 100644
1377--- a/api-ref/source/v3/samples/volume_type/encryption-type-create-response.json
1378+++ b/api-ref/source/v3/samples/volume_type/encryption-type-create-response.json
1379@@ -3,7 +3,7 @@
1380 "volume_type_id": "2d29462d-76cb-417c-8a9f-fb23140f1577",
1381 "control_location": "front-end",
1382 "encryption_id": "81e069c6-7394-4856-8df7-3b237ca61f74",
1383- "key_size": 256,
1384+ "key_size": 128,
1385 "provider": "luks",
1386 "cipher": "aes-xts-plain64"
1387 }
1388diff --git a/api-ref/source/v3/samples/volume_type/encryption-type-show-response.json b/api-ref/source/v3/samples/volume_type/encryption-type-show-response.json
1389index 3747f69..9a168bf 100644
1390--- a/api-ref/source/v3/samples/volume_type/encryption-type-show-response.json
1391+++ b/api-ref/source/v3/samples/volume_type/encryption-type-show-response.json
1392@@ -5,7 +5,7 @@
1393 "created_at": "2016-12-28T02:32:25.000000",
1394 "updated_at": null,
1395 "encryption_id": "81e069c6-7394-4856-8df7-3b237ca61f74",
1396- "key_size": 256,
1397+ "key_size": 128,
1398 "provider": "luks",
1399 "deleted_at": null,
1400 "cipher": "aes-xts-plain64"
1401diff --git a/api-ref/source/v3/samples/volumes/v3.13/volume-create-response.json b/api-ref/source/v3/samples/volumes/v3.13/volume-create-response.json
1402deleted file mode 100644
1403index 427f60d..0000000
1404--- a/api-ref/source/v3/samples/volumes/v3.13/volume-create-response.json
1405+++ /dev/null
1406@@ -1,35 +0,0 @@
1407-{
1408- "volume": {
1409- "attachments": [],
1410- "availability_zone": "nova",
1411- "bootable": "false",
1412- "consistencygroup_id": null,
1413- "created_at": "2018-11-28T06:21:12.715987",
1414- "description": null,
1415- "encrypted": false,
1416- "id": "2b955850-f177-45f7-9f49-ecb2c256d161",
1417- "links": [
1418- {
1419- "href": "http://127.0.0.1:33951/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1420- "rel": "self"
1421- },
1422- {
1423- "href": "http://127.0.0.1:33951/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1424- "rel": "bookmark"
1425- }
1426- ],
1427- "metadata": {},
1428- "migration_status": null,
1429- "multiattach": false,
1430- "name": null,
1431- "replication_status": null,
1432- "size": 10,
1433- "snapshot_id": null,
1434- "source_volid": null,
1435- "status": "creating",
1436- "updated_at": null,
1437- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1438- "volume_type": "__DEFAULT__",
1439- "group_id": null
1440- }
1441-}
1442diff --git a/api-ref/source/v3/samples/volumes/v3.13/volume-show-response.json b/api-ref/source/v3/samples/volumes/v3.13/volume-show-response.json
1443deleted file mode 100644
1444index 7358146..0000000
1445--- a/api-ref/source/v3/samples/volumes/v3.13/volume-show-response.json
1446+++ /dev/null
1447@@ -1,39 +0,0 @@
1448-{
1449- "volume": {
1450- "attachments": [],
1451- "availability_zone": "nova",
1452- "bootable": "false",
1453- "consistencygroup_id": null,
1454- "created_at": "2018-11-29T06:50:07.770785",
1455- "description": null,
1456- "encrypted": false,
1457- "id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
1458- "links": [
1459- {
1460- "href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
1461- "rel": "self"
1462- },
1463- {
1464- "href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
1465- "rel": "bookmark"
1466- }
1467- ],
1468- "metadata": {},
1469- "migration_status": null,
1470- "multiattach": false,
1471- "name": null,
1472- "os-vol-host-attr:host": null,
1473- "os-vol-mig-status-attr:migstat": null,
1474- "os-vol-mig-status-attr:name_id": null,
1475- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1476- "replication_status": null,
1477- "size": 10,
1478- "snapshot_id": null,
1479- "source_volid": null,
1480- "status": "creating",
1481- "updated_at": null,
1482- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1483- "volume_type": "__DEFAULT__",
1484- "group_id": null
1485- }
1486-}
1487diff --git a/api-ref/source/v3/samples/volumes/v3.13/volume-update-response.json b/api-ref/source/v3/samples/volumes/v3.13/volume-update-response.json
1488deleted file mode 100644
1489index 906739a..0000000
1490--- a/api-ref/source/v3/samples/volumes/v3.13/volume-update-response.json
1491+++ /dev/null
1492@@ -1,37 +0,0 @@
1493-{
1494- "volume": {
1495- "attachments": [],
1496- "availability_zone": "nova",
1497- "bootable": "false",
1498- "consistencygroup_id": null,
1499- "created_at": "2018-11-29T06:59:23.679903",
1500- "description": "This is yet, another volume.",
1501- "encrypted": false,
1502- "id": "8b2459d1-0059-4e14-a89f-dfa73a452af6",
1503- "links": [
1504- {
1505- "href": "http://127.0.0.1:41467/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
1506- "rel": "self"
1507- },
1508- {
1509- "href": "http://127.0.0.1:41467/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
1510- "rel": "bookmark"
1511- }
1512- ],
1513- "metadata": {
1514- "name": "metadata0"
1515- },
1516- "migration_status": null,
1517- "multiattach": false,
1518- "name": "vol-003",
1519- "replication_status": null,
1520- "size": 10,
1521- "snapshot_id": null,
1522- "source_volid": null,
1523- "status": "creating",
1524- "updated_at": null,
1525- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1526- "volume_type": "__DEFAULT__",
1527- "group_id": null
1528- }
1529-}
1530diff --git a/api-ref/source/v3/samples/volumes/v3.13/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/v3.13/volumes-list-detailed-response.json
1531deleted file mode 100644
1532index 3f545d2..0000000
1533--- a/api-ref/source/v3/samples/volumes/v3.13/volumes-list-detailed-response.json
1534+++ /dev/null
1535@@ -1,41 +0,0 @@
1536-{
1537- "volumes": [
1538- {
1539- "attachments": [],
1540- "availability_zone": "nova",
1541- "bootable": "false",
1542- "consistencygroup_id": null,
1543- "created_at": "2018-11-28T06:25:15.288987",
1544- "description": null,
1545- "encrypted": false,
1546- "id": "cb49b381-9012-40cb-b8ee-80c19a4801b5",
1547- "links": [
1548- {
1549- "href": "http://127.0.0.1:43543/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
1550- "rel": "self"
1551- },
1552- {
1553- "href": "http://127.0.0.1:43543/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
1554- "rel": "bookmark"
1555- }
1556- ],
1557- "metadata": {},
1558- "migration_status": null,
1559- "multiattach": false,
1560- "name": null,
1561- "os-vol-host-attr:host": null,
1562- "os-vol-mig-status-attr:migstat": null,
1563- "os-vol-mig-status-attr:name_id": null,
1564- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1565- "replication_status": null,
1566- "size": 10,
1567- "snapshot_id": null,
1568- "source_volid": null,
1569- "status": "creating",
1570- "updated_at": null,
1571- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1572- "volume_type": "__DEFAULT__",
1573- "group_id": null
1574- }
1575- ]
1576-}
1577diff --git a/api-ref/source/v3/samples/volumes/v3.21/volume-create-response.json b/api-ref/source/v3/samples/volumes/v3.21/volume-create-response.json
1578deleted file mode 100644
1579index 3ac6eb6..0000000
1580--- a/api-ref/source/v3/samples/volumes/v3.21/volume-create-response.json
1581+++ /dev/null
1582@@ -1,36 +0,0 @@
1583-{
1584- "volume": {
1585- "attachments": [],
1586- "availability_zone": "nova",
1587- "bootable": "false",
1588- "consistencygroup_id": null,
1589- "created_at": "2018-11-28T06:21:12.715987",
1590- "description": null,
1591- "encrypted": false,
1592- "id": "2b955850-f177-45f7-9f49-ecb2c256d161",
1593- "links": [
1594- {
1595- "href": "http://127.0.0.1:33951/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1596- "rel": "self"
1597- },
1598- {
1599- "href": "http://127.0.0.1:33951/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1600- "rel": "bookmark"
1601- }
1602- ],
1603- "metadata": {},
1604- "migration_status": null,
1605- "multiattach": false,
1606- "name": null,
1607- "replication_status": null,
1608- "size": 10,
1609- "snapshot_id": null,
1610- "source_volid": null,
1611- "status": "creating",
1612- "updated_at": null,
1613- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1614- "volume_type": "__DEFAULT__",
1615- "group_id": null,
1616- "provider_id": null
1617- }
1618-}
1619diff --git a/api-ref/source/v3/samples/volumes/v3.21/volume-show-response.json b/api-ref/source/v3/samples/volumes/v3.21/volume-show-response.json
1620deleted file mode 100644
1621index fa480be..0000000
1622--- a/api-ref/source/v3/samples/volumes/v3.21/volume-show-response.json
1623+++ /dev/null
1624@@ -1,40 +0,0 @@
1625-{
1626- "volume": {
1627- "attachments": [],
1628- "availability_zone": "nova",
1629- "bootable": "false",
1630- "consistencygroup_id": null,
1631- "created_at": "2018-11-29T06:50:07.770785",
1632- "description": null,
1633- "encrypted": false,
1634- "id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
1635- "links": [
1636- {
1637- "href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
1638- "rel": "self"
1639- },
1640- {
1641- "href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
1642- "rel": "bookmark"
1643- }
1644- ],
1645- "metadata": {},
1646- "migration_status": null,
1647- "multiattach": false,
1648- "name": null,
1649- "os-vol-host-attr:host": null,
1650- "os-vol-mig-status-attr:migstat": null,
1651- "os-vol-mig-status-attr:name_id": null,
1652- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1653- "replication_status": null,
1654- "size": 10,
1655- "snapshot_id": null,
1656- "source_volid": null,
1657- "status": "creating",
1658- "updated_at": null,
1659- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1660- "volume_type": "__DEFAULT__",
1661- "group_id": null,
1662- "provider_id": null
1663- }
1664-}
1665diff --git a/api-ref/source/v3/samples/volumes/v3.21/volume-update-response.json b/api-ref/source/v3/samples/volumes/v3.21/volume-update-response.json
1666deleted file mode 100644
1667index b861368..0000000
1668--- a/api-ref/source/v3/samples/volumes/v3.21/volume-update-response.json
1669+++ /dev/null
1670@@ -1,38 +0,0 @@
1671-{
1672- "volume": {
1673- "attachments": [],
1674- "availability_zone": "nova",
1675- "bootable": "false",
1676- "consistencygroup_id": null,
1677- "created_at": "2018-11-29T06:59:23.679903",
1678- "description": "This is yet, another volume.",
1679- "encrypted": false,
1680- "id": "8b2459d1-0059-4e14-a89f-dfa73a452af6",
1681- "links": [
1682- {
1683- "href": "http://127.0.0.1:41467/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
1684- "rel": "self"
1685- },
1686- {
1687- "href": "http://127.0.0.1:41467/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
1688- "rel": "bookmark"
1689- }
1690- ],
1691- "metadata": {
1692- "name": "metadata0"
1693- },
1694- "migration_status": null,
1695- "multiattach": false,
1696- "name": "vol-003",
1697- "replication_status": null,
1698- "size": 10,
1699- "snapshot_id": null,
1700- "source_volid": null,
1701- "status": "creating",
1702- "updated_at": null,
1703- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1704- "volume_type": "__DEFAULT__",
1705- "group_id": null,
1706- "provider_id": null
1707- }
1708-}
1709diff --git a/api-ref/source/v3/samples/volumes/v3.21/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/v3.21/volumes-list-detailed-response.json
1710deleted file mode 100644
1711index ab72a30..0000000
1712--- a/api-ref/source/v3/samples/volumes/v3.21/volumes-list-detailed-response.json
1713+++ /dev/null
1714@@ -1,42 +0,0 @@
1715-{
1716- "volumes": [
1717- {
1718- "attachments": [],
1719- "availability_zone": "nova",
1720- "bootable": "false",
1721- "consistencygroup_id": null,
1722- "created_at": "2018-11-28T06:25:15.288987",
1723- "description": null,
1724- "encrypted": false,
1725- "id": "cb49b381-9012-40cb-b8ee-80c19a4801b5",
1726- "links": [
1727- {
1728- "href": "http://127.0.0.1:43543/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
1729- "rel": "self"
1730- },
1731- {
1732- "href": "http://127.0.0.1:43543/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
1733- "rel": "bookmark"
1734- }
1735- ],
1736- "metadata": {},
1737- "migration_status": null,
1738- "multiattach": false,
1739- "name": null,
1740- "os-vol-host-attr:host": null,
1741- "os-vol-mig-status-attr:migstat": null,
1742- "os-vol-mig-status-attr:name_id": null,
1743- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1744- "replication_status": null,
1745- "size": 10,
1746- "snapshot_id": null,
1747- "source_volid": null,
1748- "status": "creating",
1749- "updated_at": null,
1750- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1751- "volume_type": "__DEFAULT__",
1752- "group_id": null,
1753- "provider_id": null
1754- }
1755- ]
1756-}
1757diff --git a/api-ref/source/v3/samples/volumes/v3.48/volume-create-response.json b/api-ref/source/v3/samples/volumes/v3.48/volume-create-response.json
1758deleted file mode 100644
1759index 92592a9..0000000
1760--- a/api-ref/source/v3/samples/volumes/v3.48/volume-create-response.json
1761+++ /dev/null
1762@@ -1,38 +0,0 @@
1763-{
1764- "volume": {
1765- "attachments": [],
1766- "availability_zone": "nova",
1767- "bootable": "false",
1768- "consistencygroup_id": null,
1769- "created_at": "2018-11-28T06:21:12.715987",
1770- "description": null,
1771- "encrypted": false,
1772- "id": "2b955850-f177-45f7-9f49-ecb2c256d161",
1773- "links": [
1774- {
1775- "href": "http://127.0.0.1:33951/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1776- "rel": "self"
1777- },
1778- {
1779- "href": "http://127.0.0.1:33951/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1780- "rel": "bookmark"
1781- }
1782- ],
1783- "metadata": {},
1784- "migration_status": null,
1785- "multiattach": false,
1786- "name": null,
1787- "replication_status": null,
1788- "size": 10,
1789- "snapshot_id": null,
1790- "source_volid": null,
1791- "status": "creating",
1792- "updated_at": null,
1793- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1794- "volume_type": "__DEFAULT__",
1795- "group_id": null,
1796- "provider_id": null,
1797- "service_uuid": null,
1798- "shared_targets": true
1799- }
1800-}
1801diff --git a/api-ref/source/v3/samples/volumes/v3.48/volume-show-response.json b/api-ref/source/v3/samples/volumes/v3.48/volume-show-response.json
1802deleted file mode 100644
1803index 7657eab..0000000
1804--- a/api-ref/source/v3/samples/volumes/v3.48/volume-show-response.json
1805+++ /dev/null
1806@@ -1,42 +0,0 @@
1807-{
1808- "volume": {
1809- "attachments": [],
1810- "availability_zone": "nova",
1811- "bootable": "false",
1812- "consistencygroup_id": null,
1813- "created_at": "2018-11-29T06:50:07.770785",
1814- "description": null,
1815- "encrypted": false,
1816- "id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
1817- "links": [
1818- {
1819- "href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
1820- "rel": "self"
1821- },
1822- {
1823- "href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
1824- "rel": "bookmark"
1825- }
1826- ],
1827- "metadata": {},
1828- "migration_status": null,
1829- "multiattach": false,
1830- "name": null,
1831- "os-vol-host-attr:host": null,
1832- "os-vol-mig-status-attr:migstat": null,
1833- "os-vol-mig-status-attr:name_id": null,
1834- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1835- "replication_status": null,
1836- "size": 10,
1837- "snapshot_id": null,
1838- "source_volid": null,
1839- "status": "creating",
1840- "updated_at": null,
1841- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1842- "volume_type": "__DEFAULT__",
1843- "provider_id": null,
1844- "group_id": null,
1845- "service_uuid": null,
1846- "shared_targets": true
1847- }
1848-}
1849diff --git a/api-ref/source/v3/samples/volumes/v3.48/volume-update-response.json b/api-ref/source/v3/samples/volumes/v3.48/volume-update-response.json
1850deleted file mode 100644
1851index c76a1a9..0000000
1852--- a/api-ref/source/v3/samples/volumes/v3.48/volume-update-response.json
1853+++ /dev/null
1854@@ -1,40 +0,0 @@
1855-{
1856- "volume": {
1857- "attachments": [],
1858- "availability_zone": "nova",
1859- "bootable": "false",
1860- "consistencygroup_id": null,
1861- "created_at": "2018-11-29T06:59:23.679903",
1862- "description": "This is yet, another volume.",
1863- "encrypted": false,
1864- "id": "8b2459d1-0059-4e14-a89f-dfa73a452af6",
1865- "links": [
1866- {
1867- "href": "http://127.0.0.1:41467/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
1868- "rel": "self"
1869- },
1870- {
1871- "href": "http://127.0.0.1:41467/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
1872- "rel": "bookmark"
1873- }
1874- ],
1875- "metadata": {
1876- "name": "metadata0"
1877- },
1878- "migration_status": null,
1879- "multiattach": false,
1880- "name": "vol-003",
1881- "replication_status": null,
1882- "size": 10,
1883- "snapshot_id": null,
1884- "source_volid": null,
1885- "status": "creating",
1886- "updated_at": null,
1887- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1888- "volume_type": "__DEFAULT__",
1889- "group_id": null,
1890- "provider_id": null,
1891- "service_uuid": null,
1892- "shared_targets": true
1893- }
1894-}
1895diff --git a/api-ref/source/v3/samples/volumes/v3.48/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/v3.48/volumes-list-detailed-response.json
1896deleted file mode 100644
1897index 1130e6d..0000000
1898--- a/api-ref/source/v3/samples/volumes/v3.48/volumes-list-detailed-response.json
1899+++ /dev/null
1900@@ -1,44 +0,0 @@
1901-{
1902- "volumes": [
1903- {
1904- "attachments": [],
1905- "availability_zone": "nova",
1906- "bootable": "false",
1907- "consistencygroup_id": null,
1908- "created_at": "2018-11-28T06:25:15.288987",
1909- "description": null,
1910- "encrypted": false,
1911- "id": "cb49b381-9012-40cb-b8ee-80c19a4801b5",
1912- "links": [
1913- {
1914- "href": "http://127.0.0.1:43543/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
1915- "rel": "self"
1916- },
1917- {
1918- "href": "http://127.0.0.1:43543/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
1919- "rel": "bookmark"
1920- }
1921- ],
1922- "metadata": {},
1923- "migration_status": null,
1924- "multiattach": false,
1925- "name": null,
1926- "os-vol-host-attr:host": null,
1927- "os-vol-mig-status-attr:migstat": null,
1928- "os-vol-mig-status-attr:name_id": null,
1929- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
1930- "replication_status": null,
1931- "size": 10,
1932- "snapshot_id": null,
1933- "source_volid": null,
1934- "status": "creating",
1935- "updated_at": null,
1936- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1937- "volume_type": "__DEFAULT__",
1938- "provider_id": null,
1939- "group_id": null,
1940- "service_uuid": null,
1941- "shared_targets": true
1942- }
1943- ]
1944-}
1945diff --git a/api-ref/source/v3/samples/volumes/v3.61/volume-create-response.json b/api-ref/source/v3/samples/volumes/v3.61/volume-create-response.json
1946deleted file mode 100644
1947index 53bf50b..0000000
1948--- a/api-ref/source/v3/samples/volumes/v3.61/volume-create-response.json
1949+++ /dev/null
1950@@ -1,39 +0,0 @@
1951-{
1952- "volume": {
1953- "attachments": [],
1954- "availability_zone": "nova",
1955- "bootable": "false",
1956- "consistencygroup_id": null,
1957- "created_at": "2018-11-28T06:21:12.715987",
1958- "description": null,
1959- "encrypted": false,
1960- "id": "2b955850-f177-45f7-9f49-ecb2c256d161",
1961- "links": [
1962- {
1963- "href": "http://127.0.0.1:33951/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1964- "rel": "self"
1965- },
1966- {
1967- "href": "http://127.0.0.1:33951/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
1968- "rel": "bookmark"
1969- }
1970- ],
1971- "metadata": {},
1972- "migration_status": null,
1973- "multiattach": false,
1974- "name": null,
1975- "replication_status": null,
1976- "size": 10,
1977- "snapshot_id": null,
1978- "source_volid": null,
1979- "status": "creating",
1980- "updated_at": null,
1981- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
1982- "volume_type": "__DEFAULT__",
1983- "group_id": null,
1984- "provider_id": null,
1985- "service_uuid": null,
1986- "shared_targets": true,
1987- "cluster_name": null
1988- }
1989-}
1990diff --git a/api-ref/source/v3/samples/volumes/v3.61/volume-show-response.json b/api-ref/source/v3/samples/volumes/v3.61/volume-show-response.json
1991deleted file mode 100644
1992index 4a77b01..0000000
1993--- a/api-ref/source/v3/samples/volumes/v3.61/volume-show-response.json
1994+++ /dev/null
1995@@ -1,43 +0,0 @@
1996-{
1997- "volume": {
1998- "attachments": [],
1999- "availability_zone": "nova",
2000- "bootable": "false",
2001- "consistencygroup_id": null,
2002- "created_at": "2018-11-29T06:50:07.770785",
2003- "description": null,
2004- "encrypted": false,
2005- "id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
2006- "links": [
2007- {
2008- "href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
2009- "rel": "self"
2010- },
2011- {
2012- "href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
2013- "rel": "bookmark"
2014- }
2015- ],
2016- "metadata": {},
2017- "migration_status": null,
2018- "multiattach": false,
2019- "name": null,
2020- "os-vol-host-attr:host": null,
2021- "os-vol-mig-status-attr:migstat": null,
2022- "os-vol-mig-status-attr:name_id": null,
2023- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
2024- "replication_status": null,
2025- "size": 10,
2026- "snapshot_id": null,
2027- "source_volid": null,
2028- "status": "creating",
2029- "updated_at": null,
2030- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2031- "volume_type": "__DEFAULT__",
2032- "provider_id": null,
2033- "group_id": null,
2034- "service_uuid": null,
2035- "shared_targets": true,
2036- "cluster_name": null
2037- }
2038-}
2039diff --git a/api-ref/source/v3/samples/volumes/v3.61/volume-update-response.json b/api-ref/source/v3/samples/volumes/v3.61/volume-update-response.json
2040deleted file mode 100644
2041index 7e64c11..0000000
2042--- a/api-ref/source/v3/samples/volumes/v3.61/volume-update-response.json
2043+++ /dev/null
2044@@ -1,41 +0,0 @@
2045-{
2046- "volume": {
2047- "attachments": [],
2048- "availability_zone": "nova",
2049- "bootable": "false",
2050- "consistencygroup_id": null,
2051- "created_at": "2018-11-29T06:59:23.679903",
2052- "description": "This is yet, another volume.",
2053- "encrypted": false,
2054- "id": "8b2459d1-0059-4e14-a89f-dfa73a452af6",
2055- "links": [
2056- {
2057- "href": "http://127.0.0.1:41467/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
2058- "rel": "self"
2059- },
2060- {
2061- "href": "http://127.0.0.1:41467/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
2062- "rel": "bookmark"
2063- }
2064- ],
2065- "metadata": {
2066- "name": "metadata0"
2067- },
2068- "migration_status": null,
2069- "multiattach": false,
2070- "name": "vol-003",
2071- "replication_status": null,
2072- "size": 10,
2073- "snapshot_id": null,
2074- "source_volid": null,
2075- "status": "creating",
2076- "updated_at": null,
2077- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2078- "volume_type": "__DEFAULT__",
2079- "group_id": null,
2080- "provider_id": null,
2081- "service_uuid": null,
2082- "shared_targets": true,
2083- "cluster_name": null
2084- }
2085-}
2086diff --git a/api-ref/source/v3/samples/volumes/v3.61/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/v3.61/volumes-list-detailed-response.json
2087deleted file mode 100644
2088index 4f36bf8..0000000
2089--- a/api-ref/source/v3/samples/volumes/v3.61/volumes-list-detailed-response.json
2090+++ /dev/null
2091@@ -1,45 +0,0 @@
2092-{
2093- "volumes": [
2094- {
2095- "attachments": [],
2096- "availability_zone": "nova",
2097- "bootable": "false",
2098- "consistencygroup_id": null,
2099- "created_at": "2018-11-28T06:25:15.288987",
2100- "description": null,
2101- "encrypted": false,
2102- "id": "cb49b381-9012-40cb-b8ee-80c19a4801b5",
2103- "links": [
2104- {
2105- "href": "http://127.0.0.1:43543/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
2106- "rel": "self"
2107- },
2108- {
2109- "href": "http://127.0.0.1:43543/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
2110- "rel": "bookmark"
2111- }
2112- ],
2113- "metadata": {},
2114- "migration_status": null,
2115- "multiattach": false,
2116- "name": null,
2117- "os-vol-host-attr:host": null,
2118- "os-vol-mig-status-attr:migstat": null,
2119- "os-vol-mig-status-attr:name_id": null,
2120- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
2121- "replication_status": null,
2122- "size": 10,
2123- "snapshot_id": null,
2124- "source_volid": null,
2125- "status": "creating",
2126- "updated_at": null,
2127- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2128- "volume_type": "__DEFAULT__",
2129- "provider_id": null,
2130- "group_id": null,
2131- "service_uuid": null,
2132- "shared_targets": true,
2133- "cluster_name": null
2134- }
2135- ]
2136-}
2137diff --git a/api-ref/source/v3/samples/volumes/v3.63/volume-create-response.json b/api-ref/source/v3/samples/volumes/v3.63/volume-create-response.json
2138deleted file mode 100644
2139index 16808b7..0000000
2140--- a/api-ref/source/v3/samples/volumes/v3.63/volume-create-response.json
2141+++ /dev/null
2142@@ -1,40 +0,0 @@
2143-{
2144- "volume": {
2145- "attachments": [],
2146- "availability_zone": "nova",
2147- "bootable": "false",
2148- "consistencygroup_id": null,
2149- "created_at": "2018-11-28T06:21:12.715987",
2150- "description": null,
2151- "encrypted": false,
2152- "id": "2b955850-f177-45f7-9f49-ecb2c256d161",
2153- "links": [
2154- {
2155- "href": "http://127.0.0.1:33951/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
2156- "rel": "self"
2157- },
2158- {
2159- "href": "http://127.0.0.1:33951/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
2160- "rel": "bookmark"
2161- }
2162- ],
2163- "metadata": {},
2164- "migration_status": null,
2165- "multiattach": false,
2166- "name": null,
2167- "replication_status": null,
2168- "size": 10,
2169- "snapshot_id": null,
2170- "source_volid": null,
2171- "status": "creating",
2172- "updated_at": null,
2173- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2174- "volume_type": "__DEFAULT__",
2175- "group_id": null,
2176- "provider_id": null,
2177- "service_uuid": null,
2178- "shared_targets": true,
2179- "cluster_name": null,
2180- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d"
2181- }
2182-}
2183diff --git a/api-ref/source/v3/samples/volumes/v3.63/volume-show-response.json b/api-ref/source/v3/samples/volumes/v3.63/volume-show-response.json
2184deleted file mode 100644
2185index 0057291..0000000
2186--- a/api-ref/source/v3/samples/volumes/v3.63/volume-show-response.json
2187+++ /dev/null
2188@@ -1,44 +0,0 @@
2189-{
2190- "volume": {
2191- "attachments": [],
2192- "availability_zone": "nova",
2193- "bootable": "false",
2194- "consistencygroup_id": null,
2195- "created_at": "2018-11-29T06:50:07.770785",
2196- "description": null,
2197- "encrypted": false,
2198- "id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
2199- "links": [
2200- {
2201- "href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
2202- "rel": "self"
2203- },
2204- {
2205- "href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
2206- "rel": "bookmark"
2207- }
2208- ],
2209- "metadata": {},
2210- "migration_status": null,
2211- "multiattach": false,
2212- "name": null,
2213- "os-vol-host-attr:host": null,
2214- "os-vol-mig-status-attr:migstat": null,
2215- "os-vol-mig-status-attr:name_id": null,
2216- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
2217- "replication_status": null,
2218- "size": 10,
2219- "snapshot_id": null,
2220- "source_volid": null,
2221- "status": "creating",
2222- "updated_at": null,
2223- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2224- "volume_type": "__DEFAULT__",
2225- "provider_id": null,
2226- "group_id": null,
2227- "service_uuid": null,
2228- "shared_targets": true,
2229- "cluster_name": null,
2230- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d"
2231- }
2232-}
2233diff --git a/api-ref/source/v3/samples/volumes/v3.63/volume-update-response.json b/api-ref/source/v3/samples/volumes/v3.63/volume-update-response.json
2234deleted file mode 100644
2235index 29b5d06..0000000
2236--- a/api-ref/source/v3/samples/volumes/v3.63/volume-update-response.json
2237+++ /dev/null
2238@@ -1,42 +0,0 @@
2239-{
2240- "volume": {
2241- "attachments": [],
2242- "availability_zone": "nova",
2243- "bootable": "false",
2244- "consistencygroup_id": null,
2245- "created_at": "2018-11-29T06:59:23.679903",
2246- "description": "This is yet, another volume.",
2247- "encrypted": false,
2248- "id": "8b2459d1-0059-4e14-a89f-dfa73a452af6",
2249- "links": [
2250- {
2251- "href": "http://127.0.0.1:41467/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
2252- "rel": "self"
2253- },
2254- {
2255- "href": "http://127.0.0.1:41467/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
2256- "rel": "bookmark"
2257- }
2258- ],
2259- "metadata": {
2260- "name": "metadata0"
2261- },
2262- "migration_status": null,
2263- "multiattach": false,
2264- "name": "vol-003",
2265- "replication_status": null,
2266- "size": 10,
2267- "snapshot_id": null,
2268- "source_volid": null,
2269- "status": "creating",
2270- "updated_at": null,
2271- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2272- "volume_type": "__DEFAULT__",
2273- "group_id": null,
2274- "provider_id": null,
2275- "service_uuid": null,
2276- "shared_targets": true,
2277- "cluster_name": null,
2278- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d"
2279- }
2280-}
2281diff --git a/api-ref/source/v3/samples/volumes/v3.63/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/v3.63/volumes-list-detailed-response.json
2282deleted file mode 100644
2283index b899e84..0000000
2284--- a/api-ref/source/v3/samples/volumes/v3.63/volumes-list-detailed-response.json
2285+++ /dev/null
2286@@ -1,46 +0,0 @@
2287-{
2288- "volumes": [
2289- {
2290- "attachments": [],
2291- "availability_zone": "nova",
2292- "bootable": "false",
2293- "consistencygroup_id": null,
2294- "created_at": "2018-11-28T06:25:15.288987",
2295- "description": null,
2296- "encrypted": false,
2297- "id": "cb49b381-9012-40cb-b8ee-80c19a4801b5",
2298- "links": [
2299- {
2300- "href": "http://127.0.0.1:43543/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
2301- "rel": "self"
2302- },
2303- {
2304- "href": "http://127.0.0.1:43543/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
2305- "rel": "bookmark"
2306- }
2307- ],
2308- "metadata": {},
2309- "migration_status": null,
2310- "multiattach": false,
2311- "name": null,
2312- "os-vol-host-attr:host": null,
2313- "os-vol-mig-status-attr:migstat": null,
2314- "os-vol-mig-status-attr:name_id": null,
2315- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
2316- "replication_status": null,
2317- "size": 10,
2318- "snapshot_id": null,
2319- "source_volid": null,
2320- "status": "creating",
2321- "updated_at": null,
2322- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2323- "volume_type": "__DEFAULT__",
2324- "provider_id": null,
2325- "group_id": null,
2326- "service_uuid": null,
2327- "shared_targets": true,
2328- "cluster_name": null,
2329- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d"
2330- }
2331- ]
2332-}
2333diff --git a/api-ref/source/v3/samples/volumes/v3.65/volume-create-response.json b/api-ref/source/v3/samples/volumes/v3.65/volume-create-response.json
2334deleted file mode 100644
2335index 4dc4775..0000000
2336--- a/api-ref/source/v3/samples/volumes/v3.65/volume-create-response.json
2337+++ /dev/null
2338@@ -1,41 +0,0 @@
2339-{
2340- "volume": {
2341- "attachments": [],
2342- "availability_zone": "nova",
2343- "bootable": "false",
2344- "consistencygroup_id": null,
2345- "created_at": "2018-11-28T06:21:12.715987",
2346- "description": null,
2347- "encrypted": false,
2348- "id": "2b955850-f177-45f7-9f49-ecb2c256d161",
2349- "links": [
2350- {
2351- "href": "http://127.0.0.1:33951/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
2352- "rel": "self"
2353- },
2354- {
2355- "href": "http://127.0.0.1:33951/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/2b955850-f177-45f7-9f49-ecb2c256d161",
2356- "rel": "bookmark"
2357- }
2358- ],
2359- "metadata": {},
2360- "migration_status": null,
2361- "multiattach": false,
2362- "name": null,
2363- "replication_status": null,
2364- "size": 10,
2365- "snapshot_id": null,
2366- "source_volid": null,
2367- "status": "creating",
2368- "updated_at": null,
2369- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2370- "volume_type": "__DEFAULT__",
2371- "group_id": null,
2372- "provider_id": null,
2373- "service_uuid": null,
2374- "shared_targets": true,
2375- "cluster_name": null,
2376- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d",
2377- "consumes_quota": true
2378- }
2379-}
2380diff --git a/api-ref/source/v3/samples/volumes/v3.65/volume-show-response.json b/api-ref/source/v3/samples/volumes/v3.65/volume-show-response.json
2381deleted file mode 100644
2382index 690bb22..0000000
2383--- a/api-ref/source/v3/samples/volumes/v3.65/volume-show-response.json
2384+++ /dev/null
2385@@ -1,45 +0,0 @@
2386-{
2387- "volume": {
2388- "attachments": [],
2389- "availability_zone": "nova",
2390- "bootable": "false",
2391- "consistencygroup_id": null,
2392- "created_at": "2018-11-29T06:50:07.770785",
2393- "description": null,
2394- "encrypted": false,
2395- "id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
2396- "links": [
2397- {
2398- "href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
2399- "rel": "self"
2400- },
2401- {
2402- "href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
2403- "rel": "bookmark"
2404- }
2405- ],
2406- "metadata": {},
2407- "migration_status": null,
2408- "multiattach": false,
2409- "name": null,
2410- "os-vol-host-attr:host": null,
2411- "os-vol-mig-status-attr:migstat": null,
2412- "os-vol-mig-status-attr:name_id": null,
2413- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
2414- "replication_status": null,
2415- "size": 10,
2416- "snapshot_id": null,
2417- "source_volid": null,
2418- "status": "creating",
2419- "updated_at": null,
2420- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2421- "volume_type": "__DEFAULT__",
2422- "provider_id": null,
2423- "group_id": null,
2424- "service_uuid": null,
2425- "shared_targets": true,
2426- "cluster_name": null,
2427- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d",
2428- "consumes_quota": true
2429- }
2430-}
2431diff --git a/api-ref/source/v3/samples/volumes/v3.65/volume-update-response.json b/api-ref/source/v3/samples/volumes/v3.65/volume-update-response.json
2432deleted file mode 100644
2433index 3d8f209..0000000
2434--- a/api-ref/source/v3/samples/volumes/v3.65/volume-update-response.json
2435+++ /dev/null
2436@@ -1,43 +0,0 @@
2437-{
2438- "volume": {
2439- "attachments": [],
2440- "availability_zone": "nova",
2441- "bootable": "false",
2442- "consistencygroup_id": null,
2443- "created_at": "2018-11-29T06:59:23.679903",
2444- "description": "This is yet, another volume.",
2445- "encrypted": false,
2446- "id": "8b2459d1-0059-4e14-a89f-dfa73a452af6",
2447- "links": [
2448- {
2449- "href": "http://127.0.0.1:41467/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
2450- "rel": "self"
2451- },
2452- {
2453- "href": "http://127.0.0.1:41467/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/8b2459d1-0059-4e14-a89f-dfa73a452af6",
2454- "rel": "bookmark"
2455- }
2456- ],
2457- "metadata": {
2458- "name": "metadata0"
2459- },
2460- "migration_status": null,
2461- "multiattach": false,
2462- "name": "vol-003",
2463- "replication_status": null,
2464- "size": 10,
2465- "snapshot_id": null,
2466- "source_volid": null,
2467- "status": "creating",
2468- "updated_at": null,
2469- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2470- "volume_type": "__DEFAULT__",
2471- "group_id": null,
2472- "provider_id": null,
2473- "service_uuid": null,
2474- "shared_targets": true,
2475- "cluster_name": null,
2476- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d",
2477- "consumes_quota": true
2478- }
2479-}
2480diff --git a/api-ref/source/v3/samples/volumes/v3.65/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/v3.65/volumes-list-detailed-response.json
2481deleted file mode 100644
2482index ceaa39c..0000000
2483--- a/api-ref/source/v3/samples/volumes/v3.65/volumes-list-detailed-response.json
2484+++ /dev/null
2485@@ -1,47 +0,0 @@
2486-{
2487- "volumes": [
2488- {
2489- "attachments": [],
2490- "availability_zone": "nova",
2491- "bootable": "false",
2492- "consistencygroup_id": null,
2493- "created_at": "2018-11-28T06:25:15.288987",
2494- "description": null,
2495- "encrypted": false,
2496- "id": "cb49b381-9012-40cb-b8ee-80c19a4801b5",
2497- "links": [
2498- {
2499- "href": "http://127.0.0.1:43543/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
2500- "rel": "self"
2501- },
2502- {
2503- "href": "http://127.0.0.1:43543/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/cb49b381-9012-40cb-b8ee-80c19a4801b5",
2504- "rel": "bookmark"
2505- }
2506- ],
2507- "metadata": {},
2508- "migration_status": null,
2509- "multiattach": false,
2510- "name": null,
2511- "os-vol-host-attr:host": null,
2512- "os-vol-mig-status-attr:migstat": null,
2513- "os-vol-mig-status-attr:name_id": null,
2514- "os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
2515- "replication_status": null,
2516- "size": 10,
2517- "snapshot_id": null,
2518- "source_volid": null,
2519- "status": "creating",
2520- "updated_at": null,
2521- "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2522- "volume_type": "__DEFAULT__",
2523- "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d",
2524- "provider_id": null,
2525- "group_id": null,
2526- "service_uuid": null,
2527- "shared_targets": true,
2528- "cluster_name": null,
2529- "consumes_quota": true
2530- }
2531- ]
2532-}
2533diff --git a/api-ref/source/v3/samples/volumes/volume-create-response.json b/api-ref/source/v3/samples/volumes/volume-create-response.json
2534index 4bd8a6e..30feb2a 100644
2535--- a/api-ref/source/v3/samples/volumes/volume-create-response.json
2536+++ b/api-ref/source/v3/samples/volumes/volume-create-response.json
2537@@ -31,4 +31,4 @@
2538 "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2539 "volume_type": "__DEFAULT__"
2540 }
2541-}
2542+}
2543\ No newline at end of file
2544diff --git a/api-ref/source/v3/samples/volumes/volume-show-response.json b/api-ref/source/v3/samples/volumes/volume-show-response.json
2545index faf9be2..186411e 100644
2546--- a/api-ref/source/v3/samples/volumes/volume-show-response.json
2547+++ b/api-ref/source/v3/samples/volumes/volume-show-response.json
2548@@ -35,4 +35,4 @@
2549 "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2550 "volume_type": "__DEFAULT__"
2551 }
2552-}
2553+}
2554\ No newline at end of file
2555diff --git a/api-ref/source/v3/samples/volumes/volume-update-response.json b/api-ref/source/v3/samples/volumes/volume-update-response.json
2556index a41d41f..4a587f6 100644
2557--- a/api-ref/source/v3/samples/volumes/volume-update-response.json
2558+++ b/api-ref/source/v3/samples/volumes/volume-update-response.json
2559@@ -33,4 +33,4 @@
2560 "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2561 "volume_type": "__DEFAULT__"
2562 }
2563-}
2564+}
2565\ No newline at end of file
2566diff --git a/api-ref/source/v3/samples/volumes/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes/volumes-list-detailed-response.json
2567index f077bec..82c73ee 100644
2568--- a/api-ref/source/v3/samples/volumes/volumes-list-detailed-response.json
2569+++ b/api-ref/source/v3/samples/volumes/volumes-list-detailed-response.json
2570@@ -34,7 +34,13 @@
2571 "status": "creating",
2572 "updated_at": null,
2573 "user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
2574- "volume_type": "__DEFAULT__"
2575+ "volume_type": "__DEFAULT__",
2576+ "volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d",
2577+ "provider_id": null,
2578+ "group_id": null,
2579+ "service_uuid": null,
2580+ "shared_targets": true,
2581+ "cluster_name": null
2582 }
2583 ]
2584-}
2585+}
2586\ No newline at end of file
2587diff --git a/api-ref/source/v3/vol-transfer-v3.inc b/api-ref/source/v3/vol-transfer-v3.inc
2588index 4328bd6..62f5136 100644
2589--- a/api-ref/source/v3/vol-transfer-v3.inc
2590+++ b/api-ref/source/v3/vol-transfer-v3.inc
2591@@ -50,7 +50,7 @@ Response Parameters
2592 - volume_id: volume_id
2593 - id: id
2594 - links: links
2595- - name: transfer_name
2596+ - name: name
2597
2598 Response Example
2599 ----------------
2600diff --git a/api-ref/source/v3/volumes-v3-snapshots.inc b/api-ref/source/v3/volumes-v3-snapshots.inc
2601index cede89a..246511a 100644
2602--- a/api-ref/source/v3/volumes-v3-snapshots.inc
2603+++ b/api-ref/source/v3/volumes-v3-snapshots.inc
2604@@ -67,7 +67,6 @@ Request
2605 - offset: offset
2606 - marker: marker
2607 - with_count: with_count
2608- - consumes_quota: filter_consumes_quota
2609
2610
2611 Response Parameters
2612@@ -89,13 +88,11 @@ Response Parameters
2613 - count: count
2614 - updated_at: updated_at
2615 - snapshots_links: links_snap
2616- - group_snapshot_id: group_snapshot_id_3_14
2617- - consumes_quota: consumes_quota
2618
2619-Response Example (v3.65)
2620-------------------------
2621+Response Example
2622+----------------
2623
2624-.. literalinclude:: ./samples/snapshots/v3.65/snapshots-list-detailed-response.json
2625+.. literalinclude:: ./samples/snapshots/snapshots-list-detailed-response.json
2626 :language: javascript
2627
2628
2629@@ -107,12 +104,6 @@ Create a snapshot
2630 Creates a volume snapshot, which is a point-in-time, complete copy of a volume.
2631 You can create a volume from a snapshot.
2632
2633-Prior to API version 3.66, a 'force' flag was required to create a snapshot of
2634-an in-use volume, but this is no longer the case. From API version 3.66, the
2635-'force' flag is invalid when passed in a volume snapshot request. (For
2636-backward compatibility, however, a 'force' flag with a value evaluating to
2637-True is silently ignored.)
2638-
2639 Response codes
2640 --------------
2641
2642@@ -156,13 +147,11 @@ Response Parameters
2643 - id: id_snap
2644 - size: size
2645 - updated_at: updated_at
2646- - group_snapshot_id: group_snapshot_id_3_14
2647- - consumes_quota: consumes_quota
2648
2649-Response Example (v3.65)
2650-------------------------
2651+Response Example
2652+----------------
2653
2654-.. literalinclude:: ./samples/snapshots/v3.65/snapshot-create-response.json
2655+.. literalinclude:: ./samples/snapshots/snapshot-create-response.json
2656 :language: javascript
2657
2658
2659@@ -198,7 +187,6 @@ Request
2660 - limit: limit
2661 - offset: offset
2662 - marker: marker
2663- - consumes_quota: filter_consumes_quota
2664 - with_count: with_count
2665
2666
2667@@ -397,13 +385,11 @@ Response Parameters
2668 - id: id_snap
2669 - metadata: metadata
2670 - updated_at: updated_at
2671- - group_snapshot_id: group_snapshot_id_3_14
2672- - consumes_quota: consumes_quota
2673
2674-Response Example (v3.65)
2675-------------------------
2676+Response Example
2677+----------------
2678
2679-.. literalinclude:: ./samples/snapshots/v3.65/snapshot-show-response.json
2680+.. literalinclude:: ./samples/snapshots/snapshot-show-response.json
2681 :language: javascript
2682
2683
2684@@ -431,7 +417,7 @@ Request
2685 - snapshot_id: snapshot_id_path
2686 - snapshot: snapshot_obj
2687 - description: description_snap
2688- - name: snapshot_name
2689+ - name: name
2690
2691 Request Example
2692 ---------------
2693@@ -456,13 +442,11 @@ Response Parameters
2694 - volume_id: volume_id_snap
2695 - user_id: user_id_min
2696 - metadata: metadata
2697- - group_snapshot_id: group_snapshot_id_3_14
2698- - consumes_quota: consumes_quota
2699
2700-Response Example (v3.65)
2701-------------------------
2702+Response Example
2703+----------------
2704
2705-.. literalinclude:: ./samples/snapshots/v3.65/snapshot-update-response.json
2706+.. literalinclude:: ./samples/snapshots/snapshot-update-response.json
2707 :language: javascript
2708
2709
2710diff --git a/api-ref/source/v3/volumes-v3-volumes.inc b/api-ref/source/v3/volumes-v3-volumes.inc
2711index 2d7d8f4..49cbc4b 100644
2712--- a/api-ref/source/v3/volumes-v3-volumes.inc
2713+++ b/api-ref/source/v3/volumes-v3-volumes.inc
2714@@ -4,9 +4,7 @@ Volumes (volumes)
2715 =================
2716
2717 A volume is a detachable block storage device similar to a USB hard
2718-drive. You can attach a volume to an instance, and if the volume is
2719-of an appropriate volume type, a volume can be attached to multiple
2720-instances.
2721+drive. You can attach a volume to one instance at a time.
2722
2723 The ``snapshot_id`` and ``source_volid`` parameters specify the ID
2724 of the snapshot or volume from which this volume originates. If the
2725@@ -98,7 +96,6 @@ Request
2726 - with_count: with_count
2727 - created_at: filter_created_at
2728 - updated_at: filter_updated_at
2729- - consumes_quota: filter_consumes_quota
2730
2731
2732 Response Parameters
2733@@ -137,18 +134,14 @@ Response Parameters
2734 - volume_type_id: volume_type_id_363
2735 - group_id: group_id_optional
2736 - volumes_links: links_vol_optional
2737- - provider_id: provider_id
2738- - service_uuid: service_uuid
2739- - shared_targets: shared_targets
2740- - cluster_name: cluster_name
2741- - consumes_quota: consumes_quota
2742 - count: count
2743
2744
2745-Response Example (v3.65)
2746-------------------------
2747
2748-.. literalinclude:: ./samples/volumes/v3.65/volumes-list-detailed-response.json
2749+Response Example
2750+----------------
2751+
2752+.. literalinclude:: ./samples/volumes/volumes-list-detailed-response.json
2753 :language: javascript
2754
2755
2756@@ -254,18 +247,12 @@ Response Parameters
2757 - bootable: bootable_response
2758 - created_at: created_at
2759 - volume_type: volume_type_vol
2760- - volume_type_id: volume_type_id_363
2761 - group_id: group_id_optional
2762- - provider_id: provider_id
2763- - service_uuid: service_uuid
2764- - shared_targets: shared_targets
2765- - cluster_name: cluster_name
2766- - consumes_quota: consumes_quota
2767
2768-Response Example (v3.65)
2769-------------------------
2770+Response Example
2771+----------------
2772
2773-.. literalinclude:: ./samples/volumes/v3.65/volume-create-response.json
2774+.. literalinclude:: ./samples/volumes/volume-create-response.json
2775 :language: javascript
2776
2777
2778@@ -304,7 +291,6 @@ Request
2779 - marker: marker
2780 - with_count: with_count
2781 - created_at: filter_created_at
2782- - consumes_quota: filter_consumes_quota
2783 - updated_at: filter_updated_at
2784
2785
2786@@ -396,15 +382,12 @@ Response Parameters
2787 - service_uuid: service_uuid
2788 - shared_targets: shared_targets
2789 - cluster_name: cluster_name
2790- - provider_id: provider_id
2791- - group_id: group_id_optional
2792- - consumes_quota: consumes_quota
2793
2794
2795-Response Example (v3.65)
2796-------------------------
2797+Response Example
2798+----------------
2799
2800-.. literalinclude:: ./samples/volumes/v3.65/volume-show-response.json
2801+.. literalinclude:: ./samples/volumes/volume-show-response.json
2802 :language: javascript
2803
2804
2805@@ -472,19 +455,12 @@ Response Parameters
2806 - bootable: bootable_response
2807 - created_at: created_at
2808 - volume_type: volume_type_vol
2809- - volume_type_id: volume_type_id_363
2810- - group_id: group_id_optional
2811- - provider_id: provider_id
2812- - service_uuid: service_uuid
2813- - shared_targets: shared_targets
2814- - cluster_name: cluster_name
2815- - consumes_quota: consumes_quota
2816
2817
2818-Response Example (v3.65)
2819-------------------------
2820+Response Example
2821+----------------
2822
2823-.. literalinclude:: ./samples/volumes/v3.65/volume-update-response.json
2824+.. literalinclude:: ./samples/volumes/volume-update-response.json
2825 :language: javascript
2826
2827
2828diff --git a/cinder.egg-info/PKG-INFO b/cinder.egg-info/PKG-INFO
2829index c4068a6..5aabd63 100644
2830--- a/cinder.egg-info/PKG-INFO
2831+++ b/cinder.egg-info/PKG-INFO
2832@@ -1,6 +1,6 @@
2833 Metadata-Version: 2.1
2834 Name: cinder
2835-Version: 19.1.0
2836+Version: 18.2.0
2837 Summary: OpenStack Block Storage
2838 Home-page: https://docs.openstack.org/cinder/latest/
2839 Author: OpenStack
2840diff --git a/cinder.egg-info/SOURCES.txt b/cinder.egg-info/SOURCES.txt
2841index cfb91e0..fdb5b7f 100644
2842--- a/cinder.egg-info/SOURCES.txt
2843+++ b/cinder.egg-info/SOURCES.txt
2844@@ -10,6 +10,7 @@ LICENSE
2845 README.rst
2846 bindep.txt
2847 driver-requirements.txt
2848+lower-constraints.txt
2849 mypy-files.txt
2850 reno.yaml
2851 requirements.txt
2852@@ -373,18 +374,6 @@ api-ref/source/v3/samples/snapshots/snapshot-update-request.json
2853 api-ref/source/v3/samples/snapshots/snapshot-update-response.json
2854 api-ref/source/v3/samples/snapshots/snapshots-list-detailed-response.json
2855 api-ref/source/v3/samples/snapshots/snapshots-list-response.json
2856-api-ref/source/v3/samples/snapshots/v3.14/snapshot-create-response.json
2857-api-ref/source/v3/samples/snapshots/v3.14/snapshot-show-response.json
2858-api-ref/source/v3/samples/snapshots/v3.14/snapshot-update-response.json
2859-api-ref/source/v3/samples/snapshots/v3.14/snapshots-list-detailed-response.json
2860-api-ref/source/v3/samples/snapshots/v3.41/snapshot-create-response.json
2861-api-ref/source/v3/samples/snapshots/v3.41/snapshot-show-response.json
2862-api-ref/source/v3/samples/snapshots/v3.41/snapshot-update-response.json
2863-api-ref/source/v3/samples/snapshots/v3.41/snapshots-list-detailed-response.json
2864-api-ref/source/v3/samples/snapshots/v3.65/snapshot-create-response.json
2865-api-ref/source/v3/samples/snapshots/v3.65/snapshot-show-response.json
2866-api-ref/source/v3/samples/snapshots/v3.65/snapshot-update-response.json
2867-api-ref/source/v3/samples/snapshots/v3.65/snapshots-list-detailed-response.json
2868 api-ref/source/v3/samples/versions/version-show-response.json
2869 api-ref/source/v3/samples/versions/versions-response.json
2870 api-ref/source/v3/samples/volume_actions/volume-upload-to-image-request.json
2871@@ -435,30 +424,6 @@ api-ref/source/v3/samples/volumes/volume-update-response.json
2872 api-ref/source/v3/samples/volumes/volumes-list-detailed-response.json
2873 api-ref/source/v3/samples/volumes/volumes-list-response.json
2874 api-ref/source/v3/samples/volumes/volumes-list-summary-response.json
2875-api-ref/source/v3/samples/volumes/v3.13/volume-create-response.json
2876-api-ref/source/v3/samples/volumes/v3.13/volume-show-response.json
2877-api-ref/source/v3/samples/volumes/v3.13/volume-update-response.json
2878-api-ref/source/v3/samples/volumes/v3.13/volumes-list-detailed-response.json
2879-api-ref/source/v3/samples/volumes/v3.21/volume-create-response.json
2880-api-ref/source/v3/samples/volumes/v3.21/volume-show-response.json
2881-api-ref/source/v3/samples/volumes/v3.21/volume-update-response.json
2882-api-ref/source/v3/samples/volumes/v3.21/volumes-list-detailed-response.json
2883-api-ref/source/v3/samples/volumes/v3.48/volume-create-response.json
2884-api-ref/source/v3/samples/volumes/v3.48/volume-show-response.json
2885-api-ref/source/v3/samples/volumes/v3.48/volume-update-response.json
2886-api-ref/source/v3/samples/volumes/v3.48/volumes-list-detailed-response.json
2887-api-ref/source/v3/samples/volumes/v3.61/volume-create-response.json
2888-api-ref/source/v3/samples/volumes/v3.61/volume-show-response.json
2889-api-ref/source/v3/samples/volumes/v3.61/volume-update-response.json
2890-api-ref/source/v3/samples/volumes/v3.61/volumes-list-detailed-response.json
2891-api-ref/source/v3/samples/volumes/v3.63/volume-create-response.json
2892-api-ref/source/v3/samples/volumes/v3.63/volume-show-response.json
2893-api-ref/source/v3/samples/volumes/v3.63/volume-update-response.json
2894-api-ref/source/v3/samples/volumes/v3.63/volumes-list-detailed-response.json
2895-api-ref/source/v3/samples/volumes/v3.65/volume-create-response.json
2896-api-ref/source/v3/samples/volumes/v3.65/volume-show-response.json
2897-api-ref/source/v3/samples/volumes/v3.65/volume-update-response.json
2898-api-ref/source/v3/samples/volumes/v3.65/volumes-list-detailed-response.json
2899 cinder/__init__.py
2900 cinder/context.py
2901 cinder/coordination.py
2902@@ -564,10 +529,14 @@ cinder/api/schemas/volumes.py
2903 cinder/api/schemas/workers.py
2904 cinder/api/v2/__init__.py
2905 cinder/api/v2/limits.py
2906+cinder/api/v2/router.py
2907+cinder/api/v2/snapshot_metadata.py
2908 cinder/api/v2/snapshots.py
2909+cinder/api/v2/types.py
2910 cinder/api/v2/volume_metadata.py
2911 cinder/api/v2/volumes.py
2912 cinder/api/v2/views/__init__.py
2913+cinder/api/v2/views/types.py
2914 cinder/api/v2/views/volumes.py
2915 cinder/api/v3/__init__.py
2916 cinder/api/v3/attachments.py
2917@@ -585,9 +554,7 @@ cinder/api/v3/resource_common_manage.py
2918 cinder/api/v3/resource_filters.py
2919 cinder/api/v3/router.py
2920 cinder/api/v3/snapshot_manage.py
2921-cinder/api/v3/snapshot_metadata.py
2922 cinder/api/v3/snapshots.py
2923-cinder/api/v3/types.py
2924 cinder/api/v3/volume_manage.py
2925 cinder/api/v3/volume_metadata.py
2926 cinder/api/v3/volume_transfer.py
2927@@ -604,7 +571,6 @@ cinder/api/v3/views/groups.py
2928 cinder/api/v3/views/messages.py
2929 cinder/api/v3/views/resource_filters.py
2930 cinder/api/v3/views/snapshots.py
2931-cinder/api/v3/views/types.py
2932 cinder/api/v3/views/volumes.py
2933 cinder/api/v3/views/workers.py
2934 cinder/api/validation/__init__.py
2935@@ -659,34 +625,36 @@ cinder/common/sqlalchemyutils.py
2936 cinder/compute/__init__.py
2937 cinder/compute/nova.py
2938 cinder/db/__init__.py
2939-cinder/db/alembic.ini
2940 cinder/db/api.py
2941 cinder/db/base.py
2942 cinder/db/migration.py
2943-cinder/db/legacy_migrations/README
2944-cinder/db/legacy_migrations/__init__.py
2945-cinder/db/legacy_migrations/manage.py
2946-cinder/db/legacy_migrations/migrate.cfg
2947-cinder/db/legacy_migrations/versions/135_cinder_init.py
2948-cinder/db/legacy_migrations/versions/136_make_vol_type_col_non_nullable.py
2949-cinder/db/legacy_migrations/versions/137_placeholder.py
2950-cinder/db/legacy_migrations/versions/138_placeholder.py
2951-cinder/db/legacy_migrations/versions/139_placeholder.py
2952-cinder/db/legacy_migrations/versions/140_create_project_default_volume_type.py
2953-cinder/db/legacy_migrations/versions/141_add_quota_usage_unique_constraint.py
2954-cinder/db/legacy_migrations/versions/142_placeholder.py
2955-cinder/db/legacy_migrations/versions/143_placeholder.py
2956-cinder/db/legacy_migrations/versions/144_placeholder.py
2957-cinder/db/legacy_migrations/versions/145_add_use_quota_fields.py
2958-cinder/db/legacy_migrations/versions/__init__.py
2959-cinder/db/migrations/__init__.py
2960-cinder/db/migrations/env.py
2961-cinder/db/migrations/script.py.mako
2962-cinder/db/migrations/versions/921e1a36b076_initial.py
2963-cinder/db/migrations/versions/__init__.py
2964 cinder/db/sqlalchemy/__init__.py
2965 cinder/db/sqlalchemy/api.py
2966 cinder/db/sqlalchemy/models.py
2967+cinder/db/sqlalchemy/migrate_repo/README
2968+cinder/db/sqlalchemy/migrate_repo/__init__.py
2969+cinder/db/sqlalchemy/migrate_repo/manage.py
2970+cinder/db/sqlalchemy/migrate_repo/migrate.cfg
2971+cinder/db/sqlalchemy/migrate_repo/versions/123_cinder_init.py
2972+cinder/db/sqlalchemy/migrate_repo/versions/124_placeholder.py
2973+cinder/db/sqlalchemy/migrate_repo/versions/125_placeholder.py
2974+cinder/db/sqlalchemy/migrate_repo/versions/126_placeholder.py
2975+cinder/db/sqlalchemy/migrate_repo/versions/127_change_project_resource_attribute_for_quota_usages.py
2976+cinder/db/sqlalchemy/migrate_repo/versions/128_add_project_id_and_accepted_to_transfer.py
2977+cinder/db/sqlalchemy/migrate_repo/versions/129_placeholder.py
2978+cinder/db/sqlalchemy/migrate_repo/versions/130_placeholder.py
2979+cinder/db/sqlalchemy/migrate_repo/versions/131_placeholder.py
2980+cinder/db/sqlalchemy/migrate_repo/versions/132_create_default_volume_type.py
2981+cinder/db/sqlalchemy/migrate_repo/versions/133_placeholder.py
2982+cinder/db/sqlalchemy/migrate_repo/versions/134_placeholder.py
2983+cinder/db/sqlalchemy/migrate_repo/versions/135_placeholder.py
2984+cinder/db/sqlalchemy/migrate_repo/versions/136_make_vol_type_col_non_nullable.py
2985+cinder/db/sqlalchemy/migrate_repo/versions/137_placeholder.py
2986+cinder/db/sqlalchemy/migrate_repo/versions/138_placeholder.py
2987+cinder/db/sqlalchemy/migrate_repo/versions/139_placeholder.py
2988+cinder/db/sqlalchemy/migrate_repo/versions/140_create_project_default_volume_type.py
2989+cinder/db/sqlalchemy/migrate_repo/versions/141_add_quota_usage_unique_constraint.py
2990+cinder/db/sqlalchemy/migrate_repo/versions/__init__.py
2991 cinder/group/__init__.py
2992 cinder/group/api.py
2993 cinder/image/__init__.py
2994@@ -893,18 +861,6 @@ cinder/tests/functional/api_sample_tests/samples/snapshots/snapshot-update-reque
2995 cinder/tests/functional/api_sample_tests/samples/snapshots/snapshot-update-response.json.tpl
2996 cinder/tests/functional/api_sample_tests/samples/snapshots/snapshots-list-detailed-response.json.tpl
2997 cinder/tests/functional/api_sample_tests/samples/snapshots/snapshots-list-response.json.tpl
2998-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.14/snapshot-create-response.json.tpl
2999-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.14/snapshot-show-response.json.tpl
3000-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.14/snapshot-update-response.json.tpl
3001-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.14/snapshots-list-detailed-response.json.tpl
3002-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.41/snapshot-create-response.json.tpl
3003-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.41/snapshot-show-response.json.tpl
3004-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.41/snapshot-update-response.json.tpl
3005-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.41/snapshots-list-detailed-response.json.tpl
3006-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.65/snapshot-create-response.json.tpl
3007-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.65/snapshot-show-response.json.tpl
3008-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.65/snapshot-update-response.json.tpl
3009-cinder/tests/functional/api_sample_tests/samples/snapshots/v3.65/snapshots-list-detailed-response.json.tpl
3010 cinder/tests/functional/api_sample_tests/samples/versions/version-show-response.json.tpl
3011 cinder/tests/functional/api_sample_tests/samples/versions/versions-response.json.tpl
3012 cinder/tests/functional/api_sample_tests/samples/volume_actions/volume-upload-to-image-request.json.tpl
3013@@ -952,30 +908,6 @@ cinder/tests/functional/api_sample_tests/samples/volumes/volume-update-request.j
3014 cinder/tests/functional/api_sample_tests/samples/volumes/volume-update-response.json.tpl
3015 cinder/tests/functional/api_sample_tests/samples/volumes/volumes-list-detailed-response.json.tpl
3016 cinder/tests/functional/api_sample_tests/samples/volumes/volumes-list-response.json.tpl
3017-cinder/tests/functional/api_sample_tests/samples/volumes/v3.13/volume-create-response.json.tpl
3018-cinder/tests/functional/api_sample_tests/samples/volumes/v3.13/volume-show-response.json.tpl
3019-cinder/tests/functional/api_sample_tests/samples/volumes/v3.13/volume-update-response.json.tpl
3020-cinder/tests/functional/api_sample_tests/samples/volumes/v3.13/volumes-list-detailed-response.json.tpl
3021-cinder/tests/functional/api_sample_tests/samples/volumes/v3.21/volume-create-response.json.tpl
3022-cinder/tests/functional/api_sample_tests/samples/volumes/v3.21/volume-show-response.json.tpl
3023-cinder/tests/functional/api_sample_tests/samples/volumes/v3.21/volume-update-response.json.tpl
3024-cinder/tests/functional/api_sample_tests/samples/volumes/v3.21/volumes-list-detailed-response.json.tpl
3025-cinder/tests/functional/api_sample_tests/samples/volumes/v3.48/volume-create-response.json.tpl
3026-cinder/tests/functional/api_sample_tests/samples/volumes/v3.48/volume-show-response.json.tpl
3027-cinder/tests/functional/api_sample_tests/samples/volumes/v3.48/volume-update-response.json.tpl
3028-cinder/tests/functional/api_sample_tests/samples/volumes/v3.48/volumes-list-detailed-response.json.tpl
3029-cinder/tests/functional/api_sample_tests/samples/volumes/v3.61/volume-create-response.json.tpl
3030-cinder/tests/functional/api_sample_tests/samples/volumes/v3.61/volume-show-response.json.tpl
3031-cinder/tests/functional/api_sample_tests/samples/volumes/v3.61/volume-update-response.json.tpl
3032-cinder/tests/functional/api_sample_tests/samples/volumes/v3.61/volumes-list-detailed-response.json.tpl
3033-cinder/tests/functional/api_sample_tests/samples/volumes/v3.63/volume-create-response.json.tpl
3034-cinder/tests/functional/api_sample_tests/samples/volumes/v3.63/volume-show-response.json.tpl
3035-cinder/tests/functional/api_sample_tests/samples/volumes/v3.63/volume-update-response.json.tpl
3036-cinder/tests/functional/api_sample_tests/samples/volumes/v3.63/volumes-list-detailed-response.json.tpl
3037-cinder/tests/functional/api_sample_tests/samples/volumes/v3.65/volume-create-response.json.tpl
3038-cinder/tests/functional/api_sample_tests/samples/volumes/v3.65/volume-show-response.json.tpl
3039-cinder/tests/functional/api_sample_tests/samples/volumes/v3.65/volume-update-response.json.tpl
3040-cinder/tests/functional/api_sample_tests/samples/volumes/v3.65/volumes-list-detailed-response.json.tpl
3041 cinder/tests/hacking/__init__.py
3042 cinder/tests/hacking/checks.py
3043 cinder/tests/stubs/oslo_i18n/__init__.pyi
3044@@ -1088,7 +1020,9 @@ cinder/tests/unit/api/openstack/test_wsgi.py
3045 cinder/tests/unit/api/v2/__init__.py
3046 cinder/tests/unit/api/v2/fakes.py
3047 cinder/tests/unit/api/v2/test_limits.py
3048+cinder/tests/unit/api/v2/test_snapshot_metadata.py
3049 cinder/tests/unit/api/v2/test_snapshots.py
3050+cinder/tests/unit/api/v2/test_types.py
3051 cinder/tests/unit/api/v2/test_volume_metadata.py
3052 cinder/tests/unit/api/v2/test_volumes.py
3053 cinder/tests/unit/api/v3/__init__.py
3054@@ -1107,10 +1041,8 @@ cinder/tests/unit/api/v3/test_limits.py
3055 cinder/tests/unit/api/v3/test_messages.py
3056 cinder/tests/unit/api/v3/test_resource_filters.py
3057 cinder/tests/unit/api/v3/test_snapshot_manage.py
3058-cinder/tests/unit/api/v3/test_snapshot_metadata.py
3059 cinder/tests/unit/api/v3/test_snapshots.py
3060 cinder/tests/unit/api/v3/test_types.py
3061-cinder/tests/unit/api/v3/test_types_orig.py
3062 cinder/tests/unit/api/v3/test_volume_manage.py
3063 cinder/tests/unit/api/v3/test_volume_metadata.py
3064 cinder/tests/unit/api/v3/test_volume_transfer.py
3065@@ -1130,7 +1062,6 @@ cinder/tests/unit/backup/fake_service.py
3066 cinder/tests/unit/backup/fake_swift_client.py
3067 cinder/tests/unit/backup/fake_swift_client2.py
3068 cinder/tests/unit/backup/test_backup.py
3069-cinder/tests/unit/backup/test_backup_messages.py
3070 cinder/tests/unit/backup/test_chunkeddriver.py
3071 cinder/tests/unit/backup/test_rpcapi.py
3072 cinder/tests/unit/backup/drivers/__init__.py
3073@@ -1155,7 +1086,6 @@ cinder/tests/unit/consistencygroup/fake_consistencygroup.py
3074 cinder/tests/unit/db/__init__.py
3075 cinder/tests/unit/db/test_cluster.py
3076 cinder/tests/unit/db/test_default_types.py
3077-cinder/tests/unit/db/test_migration.py
3078 cinder/tests/unit/db/test_migrations.py
3079 cinder/tests/unit/db/test_name_id.py
3080 cinder/tests/unit/db/test_orm_relationships.py
3081@@ -1208,28 +1138,11 @@ cinder/tests/unit/objects/test_volume.py
3082 cinder/tests/unit/objects/test_volume_attachment.py
3083 cinder/tests/unit/objects/test_volume_type.py
3084 cinder/tests/unit/policies/__init__.py
3085-cinder/tests/unit/policies/base.py
3086-cinder/tests/unit/policies/test_attachments.py
3087-cinder/tests/unit/policies/test_backups.py
3088 cinder/tests/unit/policies/test_base.py
3089 cinder/tests/unit/policies/test_default_volume_types.py
3090-cinder/tests/unit/policies/test_group_actions.py
3091-cinder/tests/unit/policies/test_group_snapshots.py
3092-cinder/tests/unit/policies/test_group_types.py
3093-cinder/tests/unit/policies/test_groups.py
3094-cinder/tests/unit/policies/test_limits.py
3095-cinder/tests/unit/policies/test_messages.py
3096-cinder/tests/unit/policies/test_quota_class.py
3097-cinder/tests/unit/policies/test_quotas.py
3098-cinder/tests/unit/policies/test_snapshot_actions.py
3099-cinder/tests/unit/policies/test_snapshot_metadata.py
3100-cinder/tests/unit/policies/test_snapshots.py
3101-cinder/tests/unit/policies/test_type_extra_specs.py
3102 cinder/tests/unit/policies/test_volume.py
3103-cinder/tests/unit/policies/test_volume_access.py
3104 cinder/tests/unit/policies/test_volume_actions.py
3105 cinder/tests/unit/policies/test_volume_metadata.py
3106-cinder/tests/unit/policies/test_volume_transfers.py
3107 cinder/tests/unit/policies/test_volume_type.py
3108 cinder/tests/unit/scheduler/__init__.py
3109 cinder/tests/unit/scheduler/fake_hosts.py
3110@@ -1391,7 +1304,6 @@ cinder/tests/unit/volume/drivers/fusionstorage/test_dsware.py
3111 cinder/tests/unit/volume/drivers/fusionstorage/test_fs_client.py
3112 cinder/tests/unit/volume/drivers/fusionstorage/test_fs_conf.py
3113 cinder/tests/unit/volume/drivers/fusionstorage/test_utils.py
3114-cinder/tests/unit/volume/drivers/hitachi/__init__.py
3115 cinder/tests/unit/volume/drivers/hitachi/test_hitachi_hbsd_rest_fc.py
3116 cinder/tests/unit/volume/drivers/hitachi/test_hitachi_hbsd_rest_iscsi.py
3117 cinder/tests/unit/volume/drivers/hpe/__init__.py
3118@@ -1433,8 +1345,6 @@ cinder/tests/unit/volume/drivers/netapp/dataontap/fakes.py
3119 cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py
3120 cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_cmode.py
3121 cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_driver_interfaces.py
3122-cinder/tests/unit/volume/drivers/netapp/dataontap/test_fc_cmode.py
3123-cinder/tests/unit/volume/drivers/netapp/dataontap/test_iscsi_cmode.py
3124 cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_base.py
3125 cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py
3126 cinder/tests/unit/volume/drivers/netapp/dataontap/client/__init__.py
3127@@ -1477,7 +1387,6 @@ cinder/tests/unit/volume/drivers/toyou/test_acs5000.py
3128 cinder/tests/unit/volume/drivers/veritas_access/__init__.py
3129 cinder/tests/unit/volume/drivers/veritas_access/test_veritas_iscsi.py
3130 cinder/tests/unit/volume/drivers/vmware/__init__.py
3131-cinder/tests/unit/volume/drivers/vmware/fake.py
3132 cinder/tests/unit/volume/drivers/vmware/test_fcd.py
3133 cinder/tests/unit/volume/drivers/vmware/test_vmware_datastore.py
3134 cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py
3135@@ -1612,7 +1521,6 @@ cinder/volume/drivers/hedvig/__init__.py
3136 cinder/volume/drivers/hedvig/config.py
3137 cinder/volume/drivers/hedvig/hedvig_cinder.py
3138 cinder/volume/drivers/hedvig/rest_client.py
3139-cinder/volume/drivers/hitachi/__init__.py
3140 cinder/volume/drivers/hitachi/hbsd_common.py
3141 cinder/volume/drivers/hitachi/hbsd_fc.py
3142 cinder/volume/drivers/hitachi/hbsd_iscsi.py
3143@@ -1889,7 +1797,6 @@ doc/source/admin/blockstorage-over-subscription.rst
3144 doc/source/admin/blockstorage-ratelimit-volume-copy-bandwidth.rst
3145 doc/source/admin/blockstorage-security.rst
3146 doc/source/admin/blockstorage-troubleshoot.rst
3147-doc/source/admin/blockstorage-user-visible-extra-specs.rst
3148 doc/source/admin/blockstorage-volume-backed-image.rst
3149 doc/source/admin/blockstorage-volume-backups-export-import.rst
3150 doc/source/admin/blockstorage-volume-backups.rst
3151@@ -1925,7 +1832,6 @@ doc/source/configuration/block-storage/config-options.rst
3152 doc/source/configuration/block-storage/fc-zoning.rst
3153 doc/source/configuration/block-storage/logs.rst
3154 doc/source/configuration/block-storage/policy-config-HOWTO.rst
3155-doc/source/configuration/block-storage/policy-personas.rst
3156 doc/source/configuration/block-storage/policy.rst
3157 doc/source/configuration/block-storage/scheduler-filters.rst
3158 doc/source/configuration/block-storage/scheduler-weights.rst
3159@@ -2143,7 +2049,6 @@ releasenotes/notes/ZadaraStorage-13a5fff6f4fa1710.yaml
3160 releasenotes/notes/a7401ead26a7c83b-keystone-url.yaml
3161 releasenotes/notes/add-availability_zone-filter-for-snapshot-8e1494212276abde.yaml
3162 releasenotes/notes/add-backup-project-attribute-3f57051ef9159b08.yaml
3163-releasenotes/notes/add-backup-swift-container-storage-policy-8d4a268ed61b9fe2.yaml
3164 releasenotes/notes/add-cg-capability-to-groups-2eb3e71682a88600.yaml
3165 releasenotes/notes/add-cluster-name-to-volume-details-ce01dd828faafcde.yaml
3166 releasenotes/notes/add-coho-driver-b4472bff3f64aa41.yaml
3167@@ -2193,7 +2098,6 @@ releasenotes/notes/backup-path-removal-c411bb6c0d3887f1.yaml
3168 releasenotes/notes/backup-snapshot-6e7447db930c31f6.yaml
3169 releasenotes/notes/backup-snapshots-2f547c8788bc11e1.yaml
3170 releasenotes/notes/backup-update-d0b0db6a7b1c2a5b.yaml
3171-releasenotes/notes/backup-user-messages-5ee0c7ead3def8f9.yaml
3172 releasenotes/notes/backup_driver_init_state-d4834fa927e502ab.yaml
3173 releasenotes/notes/backup_max_operations-27753c748ba1dc1a.yaml
3174 releasenotes/notes/backup_s3_driver-238e3612acd7cc06.yaml
3175@@ -2319,27 +2223,11 @@ releasenotes/notes/bug-1907964-9277e5ddec2abeda.yaml
3176 releasenotes/notes/bug-1908315-020fea3e244d49bb.yaml
3177 releasenotes/notes/bug-1912451-ibm-svf-update-replication-properties-68c4f9ea56df212d.yaml
3178 releasenotes/notes/bug-1912564-strowize-hyperswap-volume-is-not-deleting-a94291248f8f59cd.yaml
3179-releasenotes/notes/bug-1913363-ibm-svf_Fix_multiple_lshost_calls_during_attach-528f92b44a0ff6b8.yaml
3180 releasenotes/notes/bug-1913449-4796b366ae7e871b.yaml
3181-releasenotes/notes/bug-1917605-ibm-svf_Bulk_create_Hyperswap_volume_is_failing-79a9ec2108612240.yaml
3182-releasenotes/notes/bug-1918229-0aa9fd75c5e843d5.yaml
3183-releasenotes/notes/bug-1920099-ibm-svf-fix_extend_to_clone_rep_volumes-015e030332f2e714.yaml
3184 releasenotes/notes/bug-1920237-backup-remove-export-race-941e2ab1f056e54c.yaml
3185 releasenotes/notes/bug-1920729-powerstore-iscsi-targets-filtering-9623ac03da5c6721.yaml
3186-releasenotes/notes/bug-1920870-ibm-svf-fix-extend-issue-for-mirroring-volumes-31b1a9119c49e112.yaml
3187-releasenotes/notes/bug-1920890-ibm-svf-Retype-in-use-hyperswap-volume-95a6c033e493ee59.yaml
3188-releasenotes/notes/bug-1920912-add_volumes_to_clone_group_fix-1cc9668ea077831e.yaml
3189-releasenotes/notes/bug-1922013-ibm-svf-fix_addvol_gmcv_grp-caa0bc2035747d99.yaml
3190-releasenotes/notes/bug-1922255-dell-powervault-manage-volumes.rst
3191 releasenotes/notes/bug-1922408-create-encryption-volume-from-snapshot-skip-resize-bb5d77c5e912b5c1.yaml
3192-releasenotes/notes/bug-1924568-ibm-svf-fix_drp_vol_create_issue-d1b75c4befb0e993.yaml
3193-releasenotes/notes/bug-1924602-ibm-svf_Storwize_HyperSwap_snapshot_clone_is_failing-c144e6b99d56de64.yaml
3194-releasenotes/notes/bug-1926286-ibm-svf-fix-volume-relationship-properties-fetch-issue-6b443f8521cbb15c.yaml
3195-releasenotes/notes/bug-1926491-ibm-svf-update-rccg-info-for-mirror-volumes-67fbec05d803745d.yaml
3196-releasenotes/notes/bug-1931968-ibm-svf-HyperSwap_volume_service_status_update-293dea5d0f750824.yaml
3197-releasenotes/notes/bug-1935670-svc_update_rep_properties_for_empty_values_fix-a2faabbf2139195e.yaml
3198 releasenotes/notes/bug-193688-bb045badcd5aecad.yaml
3199-releasenotes/notes/bug-1938212-ibm-svf-fix-to-add-replication-support-for-V5000E-e88df9c8eb22c2a8.yaml
3200 releasenotes/notes/bug-1939139-02ab552420813e70.yaml
3201 releasenotes/notes/bug-1941815-RBD-call-trash-operation-when-plain-deletion-fails-50cef4a8a8010ba9.yaml
3202 releasenotes/notes/bug-1947518-rbd-open-readonly-ba523c4b0ddbba76.yaml
3203@@ -2361,6 +2249,7 @@ releasenotes/notes/castellan-backend-0c49591a54821c45.yaml
3204 releasenotes/notes/ceph-iscsi-driver-b515bd7fb73ce13b.yaml
3205 releasenotes/notes/cg-scheduler-change-180a36b77e8cc26b.yaml
3206 releasenotes/notes/cg_api_volume_type-7db1856776e707c7.yaml
3207+releasenotes/notes/cgroups-v1-status-note-b1eff0e1907aa0f2.yaml
3208 releasenotes/notes/change-default-rbd_exclusive_cinder_pool-e59c528c7f728780.yaml
3209 releasenotes/notes/change-encryption-key-on-clone-3be7cdb0e27386e0.yaml
3210 releasenotes/notes/check-displayname-displaydescription-123sd5gef91acb12.yaml
3211@@ -2377,8 +2266,6 @@ releasenotes/notes/cinder-status-check-backup_driver-fe009985df2bc32f.yaml
3212 releasenotes/notes/cinder-status-check-policyjson-ef61826eab95372b.yaml
3213 releasenotes/notes/cinder-status-check-stein_removed_drivers-8184abe8ce82f373.yaml
3214 releasenotes/notes/cinder-status-check-windows_iscsi_driver-5f4e0b93c7b92f53.yaml
3215-releasenotes/notes/clean-file-locks-on-remove-e5898012f4114d3c.yaml
3216-releasenotes/notes/clean-file-locks-tool-3a62ba05ef2d2239.yaml
3217 releasenotes/notes/cleanup-rbd-temp-file-during-convert-fail-3848e9dbe7e15fc6.yaml
3218 releasenotes/notes/cloudbyte-retype-support-4b9f79f351465279.yaml
3219 releasenotes/notes/cluster_job_distribution-f916dd2e4cce6c1b.yaml
3220@@ -2446,7 +2333,6 @@ releasenotes/notes/drbd-linstor-rest-update-52fd52f6c09a4dd3.yaml
3221 releasenotes/notes/drbd-linstor-volume-driver-20273a9ad3783cf5.yaml
3222 releasenotes/notes/drbd-resource-options-88599c0a8fc5b8a3.yaml
3223 releasenotes/notes/driver_reinitialization-b26a8b3e665567ec.yaml
3224-releasenotes/notes/drop-db_driver-opt-b644963bf3b6aced.yaml
3225 releasenotes/notes/drop-py2-377a91a5b66165ab.yaml
3226 releasenotes/notes/ds8k-allow-multi-attach-41fa7bddbbd719ec.yaml
3227 releasenotes/notes/ds8k-replication-group-3f2e8cd3c2e291a3.yaml
3228@@ -2469,7 +2355,6 @@ releasenotes/notes/fix-3par-migrate-rename-662d984e070a1de2.yaml
3229 releasenotes/notes/fix-abort-backup-df196e9dcb992586.yaml
3230 releasenotes/notes/fix-backup-handling-of-encryption-key-id-f2fa56cadd80d582.yaml
3231 releasenotes/notes/fix-cross-az-migration-ce97eff61280e1c7.yaml
3232-releasenotes/notes/fix-ensure-export-3cccf107a82b35a0.yaml
3233 releasenotes/notes/fix-extend-volume-939e30f2e9e516bc.yaml
3234 releasenotes/notes/fix-extend-volume-in-thin-pools-57a3d53be4d47704.yaml
3235 releasenotes/notes/fix-groups-actions-in-a-a-mode-5d554b30a26da22c.yaml
3236@@ -2491,7 +2376,6 @@ releasenotes/notes/fix-retype-with-az-e048123d982f213d.yaml
3237 releasenotes/notes/fix-schema-validation-attachment-create-3488914cb52d44d2.yaml
3238 releasenotes/notes/fix-show-transfer-for-non-admins-be001d79975b325d.yaml
3239 releasenotes/notes/fix-show-volume-non-admins-1bc5238398e73981.yaml
3240-releasenotes/notes/fix-size-reporting-seagate-driver.rst
3241 releasenotes/notes/fix-solidfire-provisioning-report-880141e64c1ea52f.yaml
3242 releasenotes/notes/fix-solidfire-python3-support-ee02ff2c1ec920f2.yaml
3243 releasenotes/notes/fix-solidfire-replication-dcb3e59b29950933.yaml
3244@@ -2523,7 +2407,6 @@ releasenotes/notes/healthcheck-449ed4292e6bfa22.yaml
3245 releasenotes/notes/hedvig-cinder-driver-e7b98f4bc214bc49.yaml
3246 releasenotes/notes/hgst-mark-unsupported-b2886de36421c8b0.yaml
3247 releasenotes/notes/hitachi-fix-delete-volume-issues-e648525e597505fd.yaml
3248-releasenotes/notes/hitachi-generic-volume-groups-434a27b290d51bf3.yaml
3249 releasenotes/notes/hitachi-storage-driver-d38dbd990730388d.yaml
3250 releasenotes/notes/hitachi-unsupported-drivers-37601e5bfabcdb8f.yaml
3251 releasenotes/notes/hitachi-vsp-driver-87659bb496bb459b.yaml
3252@@ -2538,7 +2421,6 @@ releasenotes/notes/hnas-list-manageable-9329866618fa9a9c.yaml
3253 releasenotes/notes/hnas-manage-unmanage-snapshot-support-40c8888cc594a7be.yaml
3254 releasenotes/notes/hnas-remove-iscsi-driver-419e9c08133f9f0a.yaml
3255 releasenotes/notes/hnas_deprecate_xml-16840b5a8c25d15e.yaml
3256-releasenotes/notes/hpe-3par-add-alletra-9k-info-5e1d09e083d3faa9.yaml
3257 releasenotes/notes/hpe-3par-peer-persistence.yaml-91cc84bf89dbb462.yaml
3258 releasenotes/notes/hpe-3par-pp-primera-a3442d004545b3a9.yaml
3259 releasenotes/notes/hpe-3par-pp-rcg-policy-options-53271f38c315779f.yaml
3260@@ -2569,9 +2451,7 @@ releasenotes/notes/ibm-storwize-removehostmappings-e7eeaf898786c6bf.yaml
3261 releasenotes/notes/ibm-storwize-supported-6518628fb78d58a4.yaml
3262 releasenotes/notes/ibm-storwize-unsupported-e79cfd27523f013c.yaml
3263 releasenotes/notes/ibm-storwzie-mirror-volume-ffe4c9bde78cdf1d.yaml
3264-releasenotes/notes/ibm-svf-manage-gmcv-change-volumes-on-childpools-9d2217e1e6f07a0e.yaml
3265 releasenotes/notes/ibm-svf-provide-IOPs-based-storage-offering-1b7532f42fd6d76e.yaml
3266-releasenotes/notes/ibm-svf-support-hyperswap-volume-extend-f578efa02314faff.yaml
3267 releasenotes/notes/ibmsvciogrpselection-e607739b6f655a27.yaml
3268 releasenotes/notes/iet-deprecation-f8059417c6adbb78.yaml
3269 releasenotes/notes/image-volume-type-c91b7cff3cb41c13.yaml
3270@@ -2647,8 +2527,8 @@ releasenotes/notes/move-scaleio-driver-to-dell-emc-dir-c195374ca6b7e98d.yaml
3271 releasenotes/notes/move-xtremio-driver-to-dell-emc-dir-f7e07a502cafd78f.yaml
3272 releasenotes/notes/msa-multiattach-5407eb60093de8f1.yaml
3273 releasenotes/notes/msa2060-99150398a9c416f6.yaml
3274+releasenotes/notes/mtls-fix-for-glance-api-calls-469b992adc5f49ff.yaml
3275 releasenotes/notes/multiple_clone-82bd7f80ae439080.yaml
3276-releasenotes/notes/mv-use_quota-b8e010f8f68a1eaa.yaml
3277 releasenotes/notes/mv-volume-type-name-and-id-5f4fd8480874fe9b.yaml
3278 releasenotes/notes/nec-allow-more-than-4iSCSI-portals-8342defe64491f81.yaml
3279 releasenotes/notes/nec-auto-accesscontrol-55f4b090e8128f5e.yaml
3280@@ -2670,7 +2550,6 @@ releasenotes/notes/netapp-log-filter-f3256f55c3ac3faa.yaml
3281 releasenotes/notes/netapp-migrated-qos-c0c8aae50d010c75.yaml
3282 releasenotes/notes/netapp-nfs-consistency-group-support-83eccc2da91ee19b.yaml
3283 releasenotes/notes/netapp-non-discovery-19af4e10f7b190ea.yaml
3284-releasenotes/notes/netapp-ontap-add-revert-to-snapshot-ce20810bcf094fce.yaml
3285 releasenotes/notes/netapp-ontap-fix-detach-multiattach-d99d33dff2fefb4c.yaml
3286 releasenotes/notes/netapp-ontap-fix-force-detach-55be3f4ac962b493.yaml
3287 releasenotes/notes/netapp-ontap-use_exact_size-d03c90efbb8a30ac.yaml
3288@@ -2695,7 +2574,6 @@ releasenotes/notes/nexentastor5_nfs-bcc8848716daea63.yaml
3289 releasenotes/notes/nfs-online-snapshot-c05e6c8113bbded6.yaml
3290 releasenotes/notes/nfs-snapshots-21b641300341cba1.yaml
3291 releasenotes/notes/nfs_backup_no_overwrite-be7b545453baf7a3.yaml
3292-releasenotes/notes/nimble-add-alletra-6k-info-8d242a809e6044a5.yaml
3293 releasenotes/notes/nimble-add-fc-support-0007fdbd647be947.yaml
3294 releasenotes/notes/nimble-add-force-backup-539e1e5c72f84e61.yaml
3295 releasenotes/notes/nimble-consistency-groups-support-7c932d5557fa725e.yaml
3296@@ -2706,9 +2584,6 @@ releasenotes/notes/nimble-qos-specs-8cd006777c66a64e.yaml
3297 releasenotes/notes/nimble-rest-api-support-75c2324ee462d026.yaml
3298 releasenotes/notes/nimble-retype-support-18f717072948ba6d.yaml
3299 releasenotes/notes/online-migration-checks-64b0d1732901e78e.yaml
3300-releasenotes/notes/ontap-add-provisioned-capacity-option-2f8122663eec51ae.yaml
3301-releasenotes/notes/ontap-add-storage-assisted-migration-70f6fb95dbb7e580.yaml
3302-releasenotes/notes/open-e-joviandss-enable-multiattach-b1d38ffcc53bf59c.yaml
3303 releasenotes/notes/operate-migrated-groups-with-cp-apis-e5835c6673191805.yaml
3304 releasenotes/notes/oracle-zfssa-unsupported-4ce035213fa0e097.yaml
3305 releasenotes/notes/orphaned_unmanaged_volume-db63ec0509b70b8f.yaml
3306@@ -2741,7 +2616,6 @@ releasenotes/notes/powermax-train-tag-removal-1dfa77df7440e5f5.yaml
3307 releasenotes/notes/powermax-user-defined-hostname-portgroup-0b01aaaa730dfaaf.yaml
3308 releasenotes/notes/powermax-vol-metadata-acd2555818d25b72.yaml
3309 releasenotes/notes/powermax_initiator_check-249279d30e3f8322.yaml
3310-releasenotes/notes/powermax_legacy_generation_fix-09e437f955cd9d70.yaml
3311 releasenotes/notes/powermax_port-check_enhancement-c95dd94328f31524.yaml
3312 releasenotes/notes/privsep-rocky-35bdfe70ed62a826.yaml
3313 releasenotes/notes/project-default-types-3a14ad0d653e604e.yaml
3314@@ -2751,7 +2625,6 @@ releasenotes/notes/prophetstor-generic-groups-c7136c32b2f75c0a.yaml
3315 releasenotes/notes/ps-removedriver-5ba447c50f2474e7.yaml
3316 releasenotes/notes/pure-active-active-support-dbd0d3da3ab64e64.yaml
3317 releasenotes/notes/pure-active-cluster-edf8e7e80739b0f8.yaml
3318-releasenotes/notes/pure-check-nvmefc-ports-cf2aec3952d8192f.yaml
3319 releasenotes/notes/pure-configure-pg-pod-names-525a4ce8e2f46b69.yaml
3320 releasenotes/notes/pure-custom-user-agent-dcca4cb44b69e763.yaml
3321 releasenotes/notes/pure-default-replica-interval-07de0a56f61c7c1e.yaml
3322@@ -2761,7 +2634,6 @@ releasenotes/notes/pure-fc-wwpn-case-c1d97f3fa7663acf.yaml
3323 releasenotes/notes/pure-generic-volume-groups-2b0941103f7c01cb.yaml
3324 releasenotes/notes/pure-host-personality-3512f7ccd961d4ad.yaml
3325 releasenotes/notes/pure-iscsi-cidr-cbc1afb3850a9217.yaml
3326-releasenotes/notes/pure-iscsi-cidrs-7195eda9f7214fce.yaml
3327 releasenotes/notes/pure-list-mangeable-fed4a1b23212f545.yaml
3328 releasenotes/notes/pure-storage-add-qos-37958a90beff12d6.yaml
3329 releasenotes/notes/pure-storage-multiattach-support-994da363e181d627.yaml
3330@@ -2787,7 +2659,6 @@ releasenotes/notes/quobyte_vol-snap-cache-baf607f14d916ec7.yaml
3331 releasenotes/notes/quota-on-retype-with-snapshots-2d9fc7b2c75f899d.yaml
3332 releasenotes/notes/quota-sync-migrating-2c99e134e117a945.yaml
3333 releasenotes/notes/quota-sync-temporary-b4103ebc2c484c89.yaml
3334-releasenotes/notes/quota-temp-snapshots-9d032f97f80050c5.yaml
3335 releasenotes/notes/quota-until_refresh-updated-d35e8530f30c5522.yaml
3336 releasenotes/notes/quota-usage-duplicates-c00725089da7bbd8.yaml
3337 releasenotes/notes/quota-volume-transfer-abd1f418c6c63db0.yaml
3338@@ -2814,12 +2685,10 @@ releasenotes/notes/redundancy-in-volume-url-4282087232e6e6f1.yaml
3339 releasenotes/notes/reduxio-iscsci-driver-5827c32a0c498949.yaml
3340 releasenotes/notes/refactor-disco-volume-driver-3ff0145707ec0f3e.yaml
3341 releasenotes/notes/reject-volume_clear_size-settings-larger-than-1024MiB-30b38811da048948.yaml
3342-releasenotes/notes/remove-api-v2-dadd877ee5457f79.yaml
3343 releasenotes/notes/remove-backup-service-to-driver-mapping-4d2ed6f868a64175.yaml
3344 releasenotes/notes/remove-block-device-driver-14f76dca2ee9bd38.yaml
3345 releasenotes/notes/remove-cinder-manage-logs-cmds-40fb8f475b37fb2f.yaml
3346 releasenotes/notes/remove-cinder-manage-shell-6d6f42e5a4ee8c5c.yaml
3347-releasenotes/notes/remove-configurable-migration-backend-aaee5a2f808c9b36.yaml
3348 releasenotes/notes/remove-datacore-300c667e9f504590.yaml
3349 releasenotes/notes/remove-deprecated-driver-mappings-b927d8ef9fc3b713.yaml
3350 releasenotes/notes/remove-deprecated-keymgr-d11a25c620862ed6.yaml
3351@@ -2925,7 +2794,6 @@ releasenotes/notes/smbfs-pools-support-bc43c653cfb1a34f.yaml
3352 releasenotes/notes/smbfs-removed-options-2c86101340273252.yaml
3353 releasenotes/notes/smbfs-revert-snapshot-5b265ed5ded951dc.yaml
3354 releasenotes/notes/smbfs-snapshot-attach-14742fe8f5864ac6.yaml
3355-releasenotes/notes/snapshot-in-use-without-force-86c6d74ebc9c0d60.yaml
3356 releasenotes/notes/snapshot_backing_up_status_support-164fbbb2a564e137.yaml
3357 releasenotes/notes/solidfire-active-active-replication-support-f77e0e12320f8b21.yaml
3358 releasenotes/notes/solidfire-scaled-qos-9b8632453909e2db.yaml
3359@@ -2976,7 +2844,6 @@ releasenotes/notes/support_sort_backup_by_name-0b080bcb60c0eaa0.yaml
3360 releasenotes/notes/support_sort_snapshot_with_name-7b66a2d8e587275d.yaml
3361 releasenotes/notes/supported-drivers-9c95dd2378cd308d.yaml
3362 releasenotes/notes/svf-revert-to-snapshot-globalmirror-volume-e70fdb9115020283.yaml
3363-releasenotes/notes/switch-to-alembic-2bbe27749fde70ff.yaml
3364 releasenotes/notes/sync-bump-versions-a1e6f6359173892e.yaml
3365 releasenotes/notes/synology-support-uc-model-9cda442828c2eb32.yaml
3366 releasenotes/notes/synology-volume-driver-c5e0f655b04390ce.yaml
3367@@ -3011,7 +2878,6 @@ releasenotes/notes/upload-volume-to-multiple-stores-ab130774897e41c3.yaml
3368 releasenotes/notes/use-castellan-key-manager-4911c3c4908ca633.yaml
3369 releasenotes/notes/use-glance-v2-api-and-deprecate-glance_api_version-1a3b698429cb754e.yaml
3370 releasenotes/notes/use-oslo_middleware_sizelimit-5f171cf1c44444f8.yaml
3371-releasenotes/notes/user-visible-extra-specs-6cf7e49c6be57a01.yaml
3372 releasenotes/notes/ussuri-release-prelude-ceeb11bc7fe46191.yaml
3373 releasenotes/notes/ussuri-unsupported-drivers-not-removed-8cfb3e01b720e9d1.yaml
3374 releasenotes/notes/validate-expired-user-tokens-40b15322197653ae.yaml
3375@@ -3092,7 +2958,6 @@ releasenotes/notes/vnx-revert-to-snapshot-e5494b6fb5ad5a1e.yaml
3376 releasenotes/notes/vnx-update-sg-in-cache-3ecb673727bea79b.yaml
3377 releasenotes/notes/vnx_clone_cg-db74ee2ea71bedcb.yaml
3378 releasenotes/notes/volume-filtering-for-quoted-display-name-7f5e8ac888a73001.yaml
3379-releasenotes/notes/volume-migrate-create-delete-notification-f567cae5522852ec.yaml
3380 releasenotes/notes/volume-type-encryption-api-policy-base-4334ca94d73df238.yaml
3381 releasenotes/notes/volume-type-encryption-api-policy-granularity-7071e45f4c7894c5.yaml
3382 releasenotes/notes/volume_init_max_objects_retrieval-966f607c46190946.yaml
3383@@ -3107,13 +2972,11 @@ releasenotes/notes/vxflexos-support-compression-9139e556677ac093.yaml
3384 releasenotes/notes/vxflexos_drop_deprecated_opt-3231a222e458fa92.yaml
3385 releasenotes/notes/vzstorage-log-path-7539342e562a2e4a.yaml
3386 releasenotes/notes/vzstorage-volume-format-cde85d3ad02f6bb4.yaml
3387+releasenotes/notes/wallaby-encryption-known-issues-4078b6b066e51553.yaml
3388+releasenotes/notes/wallaby-prelude-661b619978e1b339.yaml
3389 releasenotes/notes/win-iscsi-config-portals-51895294228d7883.yaml
3390 releasenotes/notes/windows-multiple-backends-9aa83631ad3d42f2.yaml
3391 releasenotes/notes/windows-volume-backup-b328858a20f5a499.yaml
3392-releasenotes/notes/xena-known-issues-d33a6a5e10fc16f0.yaml
3393-releasenotes/notes/xena-policy-changes-7a563020337f6be9.yaml
3394-releasenotes/notes/xena-qcow2-v2-warning-9381189b1c04734f.yaml
3395-releasenotes/notes/xena-release-prelude-2190d8c515dbedc1.yaml
3396 releasenotes/notes/xiv-ds8k-replication-2.1-996c871391152e31.yaml
3397 releasenotes/notes/xiv-generic-volume-group-4609cdc86d6aaf81.yaml
3398 releasenotes/notes/xiv-new-qos-independent-type-58885c77efe24798.yaml
3399@@ -3142,7 +3005,6 @@ releasenotes/source/train.rst
3400 releasenotes/source/unreleased.rst
3401 releasenotes/source/ussuri.rst
3402 releasenotes/source/victoria.rst
3403-releasenotes/source/wallaby.rst
3404 releasenotes/source/_static/.placeholder
3405 releasenotes/source/_templates/.placeholder
3406 releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
3407diff --git a/cinder.egg-info/entry_points.txt b/cinder.egg-info/entry_points.txt
3408index 147aba8..d7805bb 100644
3409--- a/cinder.egg-info/entry_points.txt
3410+++ b/cinder.egg-info/entry_points.txt
3411@@ -1,3 +1,6 @@
3412+[cinder.database.migration_backend]
3413+sqlalchemy = oslo_db.sqlalchemy.migration
3414+
3415 [cinder.scheduler.filters]
3416 AvailabilityZoneFilter = cinder.scheduler.filters.availability_zone_filter:AvailabilityZoneFilter
3417 CapabilitiesFilter = cinder.scheduler.filters.capabilities_filter:CapabilitiesFilter
3418diff --git a/cinder.egg-info/pbr.json b/cinder.egg-info/pbr.json
3419index 5425b4e..e3aedeb 100644
3420--- a/cinder.egg-info/pbr.json
3421+++ b/cinder.egg-info/pbr.json
3422@@ -1 +1 @@
3423-{"git_version": "59b8b516c", "is_release": true}
3424\ No newline at end of file
3425+{"git_version": "0a6d43a7c", "is_release": true}
3426\ No newline at end of file
3427diff --git a/cinder.egg-info/requires.txt b/cinder.egg-info/requires.txt
3428index ff12642..f3eed49 100644
3429--- a/cinder.egg-info/requires.txt
3430+++ b/cinder.egg-info/requires.txt
3431@@ -1,7 +1,7 @@
3432 Paste>=3.4.3
3433 PasteDeploy>=2.1.0
3434 Routes>=2.4.1
3435-SQLAlchemy>=1.4.23
3436+SQLAlchemy>=1.3.19
3437 WebOb>=1.8.6
3438 boto3>=1.16.51
3439 castellan>=3.6.0
3440@@ -18,17 +18,17 @@ keystoneauth1>=4.2.1
3441 keystonemiddleware>=9.1.0
3442 lxml>=4.5.2
3443 oauth2client>=4.1.3
3444-os-brick>=5.0.1
3445+os-brick>=4.3.1
3446 os-win>=5.4.0
3447 oslo.concurrency>=4.4.0
3448 oslo.config>=8.3.2
3449 oslo.context>=3.1.1
3450-oslo.db>=11.0.0
3451+oslo.db>=8.4.0
3452 oslo.i18n>=5.0.1
3453-oslo.log>=4.5.0
3454+oslo.log>=4.4.0
3455 oslo.messaging>=12.5.0
3456 oslo.middleware>=4.1.1
3457-oslo.policy>=3.8.1
3458+oslo.policy>=3.6.2
3459 oslo.privsep>=2.4.0
3460 oslo.reports>=2.2.0
3461 oslo.rootwrap>=6.2.0
3462@@ -118,7 +118,7 @@ storpool>=4.0.0
3463
3464 [test]
3465 PyMySQL>=0.10.0
3466-SQLAlchemy-Utils>=0.37.8
3467+SQLAlchemy-Utils>=0.36.8
3468 bandit==1.6.0
3469 coverage>=5.5
3470 ddt>=1.4.1
3471@@ -128,7 +128,7 @@ flake8-import-order
3472 flake8-logging-format>=0.6.0
3473 hacking<4.1.0,>=4.0.0
3474 moto>=1.3.15
3475-mypy>=0.910
3476+mypy>=0.782
3477 oslotest>=4.4.1
3478 psycopg2>=2.8.5
3479 stestr>=3.1.0
3480diff --git a/cinder/api/__init__.py b/cinder/api/__init__.py
3481index ea01b86..7351dfa 100644
3482--- a/cinder/api/__init__.py
3483+++ b/cinder/api/__init__.py
3484@@ -26,19 +26,18 @@ LOG = logging.getLogger(__name__)
3485
3486 def root_app_factory(loader, global_conf, **local_conf):
3487 # To support upgrades from previous api-paste config files, we need
3488- # to check for and remove any legacy references to the v1 or v2 API
3489+ # to check for and remove any legacy references to the v1 API
3490 if '/v1' in local_conf:
3491 LOG.warning('The v1 API has been removed and is no longer '
3492- 'available. Client applications should be '
3493- 'using v3, which is currently the only supported '
3494- 'version of the Block Storage API.')
3495+ 'available. Client applications should now be '
3496+ 'moving to v3. Ensure enable_v3_api=true in your '
3497+ 'cinder.conf file.')
3498 del local_conf['/v1']
3499
3500- if '/v2' in local_conf:
3501- LOG.warning('The v2 API has been removed and is no longer available. '
3502- 'Client applications must now use the v3 API only. '
3503- 'The \'enable_v2_api\' option has been removed and is '
3504- 'ignored in the cinder.conf file.')
3505+ if CONF.enable_v2_api:
3506+ LOG.warning('The v2 API is deprecated and is not under active '
3507+ 'development. You should set enable_v2_api=false '
3508+ 'and enable_v3_api=true in your cinder.conf file.')
3509+ else:
3510 del local_conf['/v2']
3511-
3512 return paste.urlmap.urlmap_factory(loader, global_conf, **local_conf)
3513diff --git a/cinder/api/api_utils.py b/cinder/api/api_utils.py
3514index 05a1c7a..0fcba43 100644
3515--- a/cinder/api/api_utils.py
3516+++ b/cinder/api/api_utils.py
3517@@ -10,23 +10,13 @@
3518 # License for the specific language governing permissions and limitations
3519 # under the License.
3520
3521-from keystoneauth1 import exceptions as ks_exc
3522-from keystoneauth1 import identity
3523-from keystoneauth1 import loading as ka_loading
3524-from keystoneclient import client
3525-from oslo_config import cfg
3526 from oslo_log import log as logging
3527 from oslo_utils import strutils
3528 import webob
3529 from webob import exc
3530
3531-from cinder import exception
3532 from cinder.i18n import _
3533
3534-CONF = cfg.CONF
3535-CONF.import_group('keystone_authtoken',
3536- 'keystonemiddleware.auth_token.__init__')
3537-
3538 LOG = logging.getLogger(__name__)
3539
3540
3541@@ -152,84 +142,3 @@ def walk_class_hierarchy(clazz, encountered=None):
3542 for subsubclass in walk_class_hierarchy(subclass, encountered):
3543 yield subsubclass
3544 yield subclass
3545-
3546-
3547-def _keystone_client(context, version=(3, 0)):
3548- """Creates and returns an instance of a generic keystone client.
3549-
3550- :param context: The request context
3551- :param version: version of Keystone to request
3552- :return: keystoneclient.client.Client object
3553- """
3554- if context.system_scope is not None:
3555- auth_plugin = identity.Token(
3556- auth_url=CONF.keystone_authtoken.auth_url,
3557- token=context.auth_token,
3558- system_scope=context.system_scope
3559- )
3560- elif context.domain_id is not None:
3561- auth_plugin = identity.Token(
3562- auth_url=CONF.keystone_authtoken.auth_url,
3563- token=context.auth_token,
3564- domain_id=context.domain_id
3565- )
3566- elif context.project_id is not None:
3567- auth_plugin = identity.Token(
3568- auth_url=CONF.keystone_authtoken.auth_url,
3569- token=context.auth_token,
3570- project_id=context.project_id
3571- )
3572- else:
3573- # We're dealing with an unscoped token from keystone that doesn't
3574- # carry any authoritative power outside of the user simplify proving
3575- # they know their own password. This token isn't associated with any
3576- # authorization target (e.g., system, domain, or project).
3577- auth_plugin = context.get_auth_plugin()
3578-
3579- client_session = ka_loading.session.Session().load_from_options(
3580- auth=auth_plugin,
3581- insecure=CONF.keystone_authtoken.insecure,
3582- cacert=CONF.keystone_authtoken.cafile,
3583- key=CONF.keystone_authtoken.keyfile,
3584- cert=CONF.keystone_authtoken.certfile,
3585- split_loggers=CONF.service_user.split_loggers)
3586- return client.Client(auth_url=CONF.keystone_authtoken.auth_url,
3587- session=client_session, version=version)
3588-
3589-
3590-class GenericProjectInfo(object):
3591- """Abstraction layer for Keystone V2 and V3 project objects"""
3592- def __init__(self, project_id, project_keystone_api_version,
3593- domain_id=None, name=None, description=None):
3594- self.id = project_id
3595- self.keystone_api_version = project_keystone_api_version
3596- self.domain_id = domain_id
3597- self.name = name
3598- self.description = description
3599-
3600-
3601-def get_project(context, project_id):
3602- """Method to verify project exists in keystone"""
3603- keystone = _keystone_client(context)
3604- generic_project = GenericProjectInfo(project_id, keystone.version)
3605- project = keystone.projects.get(project_id)
3606- generic_project.domain_id = project.domain_id
3607- generic_project.name = project.name
3608- generic_project.description = project.description
3609- return generic_project
3610-
3611-
3612-def validate_project_and_authorize(context, project_id, policy_check=None,
3613- validate_only=False):
3614- try:
3615- target_project = get_project(context, project_id)
3616- if not validate_only:
3617- target_project = {'project_id': target_project.id}
3618- context.authorize(policy_check, target=target_project)
3619- except ks_exc.http.NotFound:
3620- explanation = _("Project with id %s not found." % project_id)
3621- raise exc.HTTPNotFound(explanation=explanation)
3622- except exception.NotAuthorized:
3623- explanation = _("You are not authorized to perform this "
3624- "operation.")
3625- raise exc.HTTPForbidden(explanation=explanation)
3626diff --git a/cinder/api/common.py b/cinder/api/common.py
3627index 7479237..4320527 100644
3628--- a/cinder/api/common.py
3629+++ b/cinder/api/common.py
3630@@ -49,8 +49,7 @@ LOG = logging.getLogger(__name__)
3631 _FILTERS_COLLECTION = None
3632
3633 ATTRIBUTE_CONVERTERS = {'name~': 'display_name~',
3634- 'description~': 'display_description~',
3635- 'consumes_quota': 'use_quota'}
3636+ 'description~': 'display_description~'}
3637
3638
3639 METADATA_TYPES = enum.Enum('METADATA_TYPES', 'user image')
3640diff --git a/cinder/api/contrib/admin_actions.py b/cinder/api/contrib/admin_actions.py
3641index 37beb31..ffb7e62 100644
3642--- a/cinder/api/contrib/admin_actions.py
3643+++ b/cinder/api/contrib/admin_actions.py
3644@@ -202,7 +202,7 @@ class VolumeAdminController(AdminController):
3645
3646 @wsgi.response(HTTPStatus.ACCEPTED)
3647 @wsgi.action('os-migrate_volume')
3648- @validation.schema(admin_actions.migrate_volume, mv.BASE_VERSION,
3649+ @validation.schema(admin_actions.migrate_volume, mv.V2_BASE_VERSION,
3650 mv.get_prior_version(mv.VOLUME_MIGRATE_CLUSTER))
3651 @validation.schema(admin_actions.migrate_volume_v316,
3652 mv.VOLUME_MIGRATE_CLUSTER)
3653diff --git a/cinder/api/contrib/backups.py b/cinder/api/contrib/backups.py
3654index baba04d..2951a1e 100644
3655--- a/cinder/api/contrib/backups.py
3656+++ b/cinder/api/contrib/backups.py
3657@@ -145,7 +145,7 @@ class BackupsController(wsgi.Controller):
3658 # immediately
3659 # - maybe also do validation of swift container name
3660 @wsgi.response(HTTPStatus.ACCEPTED)
3661- @validation.schema(backup.create, mv.BASE_VERSION,
3662+ @validation.schema(backup.create, mv.V2_BASE_VERSION,
3663 mv.get_prior_version(mv.BACKUP_METADATA))
3664 @validation.schema(backup.create_backup_v343, mv.BACKUP_METADATA,
3665 mv.get_prior_version(mv.BACKUP_AZ))
3666diff --git a/cinder/api/contrib/quota_classes.py b/cinder/api/contrib/quota_classes.py
3667index 54cfafa..0d98c57 100644
3668--- a/cinder/api/contrib/quota_classes.py
3669+++ b/cinder/api/contrib/quota_classes.py
3670@@ -40,7 +40,7 @@ class QuotaClassSetsController(wsgi.Controller):
3671
3672 def show(self, req, id):
3673 context = req.environ['cinder.context']
3674- context.authorize(policy.GET_POLICY)
3675+ context.authorize(policy.MANAGE_POLICY)
3676 try:
3677 db.sqlalchemy.api.authorize_quota_class_context(context, id)
3678 except exception.NotAuthorized:
3679@@ -54,7 +54,7 @@ class QuotaClassSetsController(wsgi.Controller):
3680 @validation.schema(quota_class.update_quota_class)
3681 def update(self, req, id, body):
3682 context = req.environ['cinder.context']
3683- context.authorize(policy.UPDATE_POLICY)
3684+ context.authorize(policy.MANAGE_POLICY)
3685 self.validate_string_length(id, 'quota_class_name',
3686 min_length=1, max_length=255)
3687
3688diff --git a/cinder/api/contrib/types_extra_specs.py b/cinder/api/contrib/types_extra_specs.py
3689index a7790ee..45233e5 100644
3690--- a/cinder/api/contrib/types_extra_specs.py
3691+++ b/cinder/api/contrib/types_extra_specs.py
3692@@ -38,14 +38,9 @@ class VolumeTypeExtraSpecsController(wsgi.Controller):
3693
3694 def _get_extra_specs(self, context, type_id):
3695 extra_specs = db.volume_type_extra_specs_get(context, type_id)
3696- if context.authorize(policy.READ_SENSITIVE_POLICY, fatal=False):
3697- specs_dict = extra_specs
3698- else:
3699- # Limit the response to contain only user visible specs.
3700- specs_dict = {}
3701- for uv_spec in policy.USER_VISIBLE_EXTRA_SPECS:
3702- if uv_spec in extra_specs:
3703- specs_dict[uv_spec] = extra_specs[uv_spec]
3704+ specs_dict = {}
3705+ for key, value in extra_specs.items():
3706+ specs_dict[key] = value
3707 return dict(extra_specs=specs_dict)
3708
3709 def _check_type(self, context, type_id):
3710diff --git a/cinder/api/contrib/types_manage.py b/cinder/api/contrib/types_manage.py
3711index a5298a4..09306b4 100644
3712--- a/cinder/api/contrib/types_manage.py
3713+++ b/cinder/api/contrib/types_manage.py
3714@@ -54,7 +54,7 @@ class VolumeTypesManageController(wsgi.Controller):
3715 def _create(self, req, body):
3716 """Creates a new volume type."""
3717 context = req.environ['cinder.context']
3718- context.authorize(policy.CREATE_POLICY)
3719+ context.authorize(policy.MANAGE_POLICY)
3720 vol_type = body['volume_type']
3721 name = vol_type['name']
3722 description = vol_type.get('description')
3723@@ -89,7 +89,7 @@ class VolumeTypesManageController(wsgi.Controller):
3724 def _update(self, req, id, body):
3725 # Update description for a given volume type.
3726 context = req.environ['cinder.context']
3727- context.authorize(policy.UPDATE_POLICY)
3728+ context.authorize(policy.MANAGE_POLICY)
3729 vol_type = body['volume_type']
3730 description = vol_type.get('description')
3731 name = vol_type.get('name')
3732@@ -140,7 +140,7 @@ class VolumeTypesManageController(wsgi.Controller):
3733 def _delete(self, req, id):
3734 """Deletes an existing volume type."""
3735 context = req.environ['cinder.context']
3736- context.authorize(policy.DELETE_POLICY)
3737+ context.authorize(policy.MANAGE_POLICY)
3738
3739 try:
3740 vol_type = volume_types.get_volume_type(context, id)
3741diff --git a/cinder/api/contrib/volume_actions.py b/cinder/api/contrib/volume_actions.py
3742index da09d07..deb326b 100644
3743--- a/cinder/api/contrib/volume_actions.py
3744+++ b/cinder/api/contrib/volume_actions.py
3745@@ -192,7 +192,7 @@ class VolumeActionsController(wsgi.Controller):
3746
3747 @wsgi.response(HTTPStatus.ACCEPTED)
3748 @wsgi.action('os-volume_upload_image')
3749- @validation.schema(volume_action.volume_upload_image, mv.BASE_VERSION,
3750+ @validation.schema(volume_action.volume_upload_image, mv.V2_BASE_VERSION,
3751 mv.get_prior_version(mv.UPLOAD_IMAGE_PARAMS))
3752 @validation.schema(volume_action.volume_upload_image_v31,
3753 mv.UPLOAD_IMAGE_PARAMS)
3754diff --git a/cinder/api/contrib/volume_image_metadata.py b/cinder/api/contrib/volume_image_metadata.py
3755index b12525a..2e86f2f 100644
3756--- a/cinder/api/contrib/volume_image_metadata.py
3757+++ b/cinder/api/contrib/volume_image_metadata.py
3758@@ -72,13 +72,13 @@ class VolumeImageMetadataController(wsgi.Controller):
3759 @wsgi.extends
3760 def show(self, req, resp_obj, id):
3761 context = req.environ['cinder.context']
3762- if context.authorize(policy.IMAGE_METADATA_SHOW_POLICY, fatal=False):
3763+ if context.authorize(policy.IMAGE_METADATA_POLICY, fatal=False):
3764 self._add_image_metadata(context, [resp_obj.obj['volume']])
3765
3766 @wsgi.extends
3767 def detail(self, req, resp_obj):
3768 context = req.environ['cinder.context']
3769- if context.authorize(policy.IMAGE_METADATA_SHOW_POLICY, fatal=False):
3770+ if context.authorize(policy.IMAGE_METADATA_POLICY, fatal=False):
3771 # Just get the image metadata of those volumes in response.
3772 volumes = list(resp_obj.obj.get('volumes', []))
3773 if volumes:
3774@@ -89,7 +89,7 @@ class VolumeImageMetadataController(wsgi.Controller):
3775 def create(self, req, id, body):
3776 context = req.environ['cinder.context']
3777 volume = objects.Volume.get_by_id(context, id)
3778- if context.authorize(policy.IMAGE_METADATA_SET_POLICY,
3779+ if context.authorize(policy.IMAGE_METADATA_POLICY,
3780 target_obj=volume):
3781 metadata = body['os-set_image_metadata']['metadata']
3782 new_metadata = self._update_volume_image_metadata(context,
3783@@ -131,8 +131,7 @@ class VolumeImageMetadataController(wsgi.Controller):
3784 """Deletes an existing image metadata."""
3785 context = req.environ['cinder.context']
3786 volume = objects.Volume.get_by_id(context, id)
3787- if context.authorize(policy.IMAGE_METADATA_REMOVE_POLICY,
3788- target_obj=volume):
3789+ if context.authorize(policy.IMAGE_METADATA_POLICY, target_obj=volume):
3790 key = body['os-unset_image_metadata']['key']
3791
3792 vol, metadata = self._get_image_metadata(context, id)
3793diff --git a/cinder/api/contrib/volume_manage.py b/cinder/api/contrib/volume_manage.py
3794index 02b4ce1..959654a 100644
3795--- a/cinder/api/contrib/volume_manage.py
3796+++ b/cinder/api/contrib/volume_manage.py
3797@@ -46,7 +46,7 @@ class VolumeManageController(wsgi.Controller):
3798 self._list_manageable_view = list_manageable_view.ViewBuilder()
3799
3800 @wsgi.response(HTTPStatus.ACCEPTED)
3801- @validation.schema(volume_manage.volume_manage_create, mv.BASE_VERSION,
3802+ @validation.schema(volume_manage.volume_manage_create, mv.V2_BASE_VERSION,
3803 mv.get_prior_version(mv.VOLUME_MIGRATE_CLUSTER))
3804 @validation.schema(volume_manage.volume_manage_create_v316,
3805 mv.VOLUME_MIGRATE_CLUSTER)
3806diff --git a/cinder/api/contrib/volume_type_access.py b/cinder/api/contrib/volume_type_access.py
3807index 1ac1017..344f58b 100644
3808--- a/cinder/api/contrib/volume_type_access.py
3809+++ b/cinder/api/contrib/volume_type_access.py
3810@@ -40,7 +40,7 @@ class VolumeTypeAccessController(object):
3811
3812 def index(self, req, type_id):
3813 context = req.environ['cinder.context']
3814- context.authorize(policy.TYPE_ACCESS_WHO_POLICY)
3815+ context.authorize(policy.TYPE_ACCESS_POLICY)
3816
3817 # Not found exception will be handled at the wsgi level
3818 vol_type = volume_types.get_volume_type(
3819@@ -77,7 +77,6 @@ class VolumeTypeActionController(wsgi.Controller):
3820 vol_type = req.cached_resource_by_id(type_id, name='types')
3821 self._extend_vol_type(vol_type_rval, vol_type)
3822
3823- # TODO: remove this, there is no /types/detail call for this to extend
3824 @wsgi.extends
3825 def detail(self, req, resp_obj):
3826 context = req.environ['cinder.context']
3827diff --git a/cinder/api/microversions.py b/cinder/api/microversions.py
3828index 0c06e6c..e8605c6 100644
3829--- a/cinder/api/microversions.py
3830+++ b/cinder/api/microversions.py
3831@@ -37,6 +37,8 @@ from cinder import exception
3832
3833 # Add new constants here for each new microversion.
3834
3835+V2_BASE_VERSION = '2.0'
3836+
3837 BASE_VERSION = '3.0'
3838
3839 UPLOAD_IMAGE_PARAMS = '3.1'
3840@@ -167,10 +169,6 @@ VOLUME_TYPE_ID_IN_VOLUME_DETAIL = '3.63'
3841
3842 ENCRYPTION_KEY_ID_IN_DETAILS = '3.64'
3843
3844-USE_QUOTA = '3.65'
3845-
3846-SNAPSHOT_IN_USE = '3.66'
3847-
3848
3849 def get_mv_header(version):
3850 """Gets a formatted HTTP microversion header.
3851diff --git a/cinder/api/openstack/api_version_request.py b/cinder/api/openstack/api_version_request.py
3852index 183e904..bde0205 100644
3853--- a/cinder/api/openstack/api_version_request.py
3854+++ b/cinder/api/openstack/api_version_request.py
3855@@ -148,18 +148,16 @@ REST_API_VERSION_HISTORY = """
3856 ("GET /v3/{project_id}/volumes/detail") and volume-show
3857 ("GET /v3/{project_id}/volumes/{volume_id}") calls.
3858 * 3.64 - Include 'encryption_key_id' in volume and backup details
3859- * 3.65 - Include 'consumes_quota' in volume and snapshot details
3860- - Accept 'consumes_quota' filter in volume and snapshot list
3861- operation.
3862- * 3.66 - Allow snapshotting in-use volumes without force flag.
3863 """
3864
3865 # The minimum and maximum versions of the API supported
3866 # The default api version request is defined to be the
3867 # minimum version of the API supported.
3868+# Explicitly using /v2 endpoints will still work
3869 _MIN_API_VERSION = "3.0"
3870-_MAX_API_VERSION = "3.66"
3871-UPDATED = "2021-09-16T00:00:00Z"
3872+_MAX_API_VERSION = "3.64"
3873+_LEGACY_API_VERSION2 = "2.0"
3874+UPDATED = "2021-02-03T00:00:00Z"
3875
3876
3877 # NOTE(cyeoh): min and max versions declared as functions so we can
3878@@ -173,6 +171,10 @@ def max_api_version():
3879 return APIVersionRequest(_MAX_API_VERSION)
3880
3881
3882+def legacy_api_version2():
3883+ return APIVersionRequest(_LEGACY_API_VERSION2)
3884+
3885+
3886 class APIVersionRequest(utils.ComparableMixin):
3887 """This class represents an API Version Request.
3888
3889diff --git a/cinder/api/openstack/rest_api_version_history.rst b/cinder/api/openstack/rest_api_version_history.rst
3890index 666771a..c4d1c41 100644
3891--- a/cinder/api/openstack/rest_api_version_history.rst
3892+++ b/cinder/api/openstack/rest_api_version_history.rst
3893@@ -486,22 +486,7 @@ Includes volume type ID in the volume-show and volume-detail-list JSON
3894 responses. Before this microversion, Cinder returns only the volume type name
3895 in the volume details.
3896
3897-3.64 (Maximum in Wallaby)
3898--------------------------
3899+3.64
3900+----
3901 Include the ``encryption_key_id`` in volume and backup details when the
3902 associated volume is encrypted.
3903-
3904-3.65
3905-----
3906-Include a ``consumes_quota`` field in volume and snapshot details to indicate
3907-whether the resource is consuming quota or not. Also, accept a
3908-``consumes_quota`` filter, which takes a boolean value, in the volume and
3909-snapshot list requests. (The default listing behavior is not to use this
3910-filter.)
3911-
3912-3.66 (Maximum in Xena)
3913-----------------------
3914-Volume snapshots of in-use volumes can be created without the 'force' flag.
3915-Although the 'force' flag is now considered invalid when passed in a volume
3916-snapshot request, for backward compatibility, the 'force' flag with a value
3917-evaluating to True is silently ignored.
3918diff --git a/cinder/api/openstack/wsgi.py b/cinder/api/openstack/wsgi.py
3919index 2c3dc16..ab9e027 100644
3920--- a/cinder/api/openstack/wsgi.py
3921+++ b/cinder/api/openstack/wsgi.py
3922@@ -275,9 +275,16 @@ class Request(webob.Request):
3923 return self.accept_language.best_match(all_languages)
3924
3925 def set_api_version_request(self, url):
3926- """Set API version request based on the request header information."""
3927-
3928- if API_VERSION_REQUEST_HEADER in self.headers:
3929+ """Set API version request based on the request header information.
3930+
3931+ Microversions starts with /v3, so if a client sends a request for
3932+ version 1.0 or 2.0 with the /v3 endpoint, throw an exception.
3933+ Sending a header with any microversion to a /v2 endpoint will
3934+ be ignored.
3935+ Note that a microversion must be set for the legacy endpoint. This
3936+ will appear as 2.0 for /v2.
3937+ """
3938+ if API_VERSION_REQUEST_HEADER in self.headers and 'v3' in url:
3939 hdr_string = self.headers[API_VERSION_REQUEST_HEADER]
3940 # 'latest' is a special keyword which is equivalent to requesting
3941 # the maximum version of the API supported
3942@@ -307,8 +314,11 @@ class Request(webob.Request):
3943 max_ver=api_version.max_api_version().get_string())
3944
3945 else:
3946- self.api_version_request = api_version.APIVersionRequest(
3947- api_version._MIN_API_VERSION)
3948+ if 'v2' in url:
3949+ self.api_version_request = api_version.legacy_api_version2()
3950+ else:
3951+ self.api_version_request = api_version.APIVersionRequest(
3952+ api_version._MIN_API_VERSION)
3953
3954
3955 class ActionDispatcher(object):
3956diff --git a/cinder/api/v2/router.py b/cinder/api/v2/router.py
3957new file mode 100644
3958index 0000000..3a5ba81
3959--- /dev/null
3960+++ b/cinder/api/v2/router.py
3961@@ -0,0 +1,93 @@
3962+# Copyright 2011 OpenStack Foundation
3963+# Copyright 2011 United States Government as represented by the
3964+# Administrator of the National Aeronautics and Space Administration.
3965+# All Rights Reserved.
3966+#
3967+# Licensed under the Apache License, Version 2.0 (the "License"); you may
3968+# not use this file except in compliance with the License. You may obtain
3969+# a copy of the License at
3970+#
3971+# http://www.apache.org/licenses/LICENSE-2.0
3972+#
3973+# Unless required by applicable law or agreed to in writing, software
3974+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
3975+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
3976+# License for the specific language governing permissions and limitations
3977+# under the License.
3978+
3979+"""
3980+WSGI middleware for OpenStack Volume API.
3981+"""
3982+
3983+from cinder.api import extensions
3984+import cinder.api.openstack
3985+from cinder.api.v2 import limits
3986+from cinder.api.v2 import snapshot_metadata
3987+from cinder.api.v2 import snapshots
3988+from cinder.api.v2 import types
3989+from cinder.api.v2 import volume_metadata
3990+from cinder.api.v2 import volumes
3991+from cinder.api import versions
3992+
3993+
3994+class APIRouter(cinder.api.openstack.APIRouter):
3995+ """Routes requests on the API to the appropriate controller and method."""
3996+ ExtensionManager = extensions.ExtensionManager
3997+
3998+ def _setup_routes(self, mapper, ext_mgr):
3999+ self.resources['versions'] = versions.create_resource()
4000+ mapper.connect("versions", "/",
4001+ controller=self.resources['versions'],
4002+ action='index')
4003+
4004+ mapper.redirect("", "/")
4005+
4006+ self.resources['volumes'] = volumes.create_resource(ext_mgr)
4007+ mapper.resource("volume", "volumes",
4008+ controller=self.resources['volumes'],
4009+ collection={'detail': 'GET'},
4010+ member={'action': 'POST'})
4011+
4012+ self.resources['types'] = types.create_resource()
4013+ mapper.resource("type", "types",
4014+ controller=self.resources['types'],
4015+ member={'action': 'POST'})
4016+
4017+ self.resources['snapshots'] = snapshots.create_resource(ext_mgr)
4018+ mapper.resource("snapshot", "snapshots",
4019+ controller=self.resources['snapshots'],
4020+ collection={'detail': 'GET'},
4021+ member={'action': 'POST'})
4022+
4023+ self.resources['limits'] = limits.create_resource()
4024+ mapper.resource("limit", "limits",
4025+ controller=self.resources['limits'])
4026+
4027+ self.resources['snapshot_metadata'] = \
4028+ snapshot_metadata.create_resource()
4029+ snapshot_metadata_controller = self.resources['snapshot_metadata']
4030+
4031+ mapper.resource("snapshot_metadata", "metadata",
4032+ controller=snapshot_metadata_controller,
4033+ parent_resource=dict(member_name='snapshot',
4034+ collection_name='snapshots'))
4035+
4036+ mapper.connect("metadata",
4037+ "/{project_id}/snapshots/{snapshot_id}/metadata",
4038+ controller=snapshot_metadata_controller,
4039+ action='update_all',
4040+ conditions={"method": ['PUT']})
4041+
4042+ self.resources['volume_metadata'] = volume_metadata.create_resource()
4043+ volume_metadata_controller = self.resources['volume_metadata']
4044+
4045+ mapper.resource("volume_metadata", "metadata",
4046+ controller=volume_metadata_controller,
4047+ parent_resource=dict(member_name='volume',
4048+ collection_name='volumes'))
4049+
4050+ mapper.connect("metadata",
4051+ "/{project_id}/volumes/{volume_id}/metadata",
4052+ controller=volume_metadata_controller,
4053+ action='update_all',
4054+ conditions={"method": ['PUT']})
4055diff --git a/cinder/api/v3/snapshot_metadata.py b/cinder/api/v2/snapshot_metadata.py
4056similarity index 100%
4057rename from cinder/api/v3/snapshot_metadata.py
4058rename to cinder/api/v2/snapshot_metadata.py
4059diff --git a/cinder/api/v3/types.py b/cinder/api/v2/types.py
4060similarity index 93%
4061rename from cinder/api/v3/types.py
4062rename to cinder/api/v2/types.py
4063index abd160e..ae19cbe 100644
4064--- a/cinder/api/v3/types.py
4065+++ b/cinder/api/v2/types.py
4066@@ -23,10 +23,9 @@ from cinder.api import api_utils
4067 from cinder.api import common
4068 from cinder.api import microversions as mv
4069 from cinder.api.openstack import wsgi
4070-from cinder.api.v3.views import types as views_types
4071+from cinder.api.v2.views import types as views_types
4072 from cinder import exception
4073 from cinder.i18n import _
4074-from cinder.policies import type_extra_specs as extra_specs_policy
4075 from cinder.policies import volume_type as type_policy
4076 from cinder.volume import volume_types
4077
4078@@ -101,18 +100,6 @@ class VolumeTypesController(wsgi.Controller):
4079 except (ValueError, SyntaxError):
4080 LOG.debug('Could not evaluate "extra_specs" %s, assuming '
4081 'dictionary string.', filters['extra_specs'])
4082-
4083- # Do not allow sensitive extra specs to be used in a filter if
4084- # the context only allows access to user visible extra specs.
4085- # Removing the filter would yield inaccurate results, so an
4086- # empty result is returned because as far as an unauthorized
4087- # user goes, the list of volume-types meeting their filtering
4088- # criteria is empty.
4089- if not context.authorize(extra_specs_policy.READ_SENSITIVE_POLICY,
4090- fatal=False):
4091- for k in filters['extra_specs'].keys():
4092- if k not in extra_specs_policy.USER_VISIBLE_EXTRA_SPECS:
4093- return []
4094 limited_types = volume_types.get_all_types(context,
4095 filters=filters,
4096 marker=marker, limit=limit,
4097diff --git a/cinder/api/v3/views/types.py b/cinder/api/v2/views/types.py
4098similarity index 85%
4099rename from cinder/api/v3/views/types.py
4100rename to cinder/api/v2/views/types.py
4101index 2d1c80c..e9064b7 100644
4102--- a/cinder/api/v3/views/types.py
4103+++ b/cinder/api/v2/views/types.py
4104@@ -15,7 +15,6 @@
4105 # under the License.
4106
4107 from cinder.api import common
4108-from cinder.policies import type_extra_specs as extra_specs_policy
4109 from cinder.policies import volume_type as policy
4110
4111
4112@@ -28,24 +27,10 @@ class ViewBuilder(common.ViewBuilder):
4113 name=volume_type.get('name'),
4114 is_public=volume_type.get('is_public'),
4115 description=volume_type.get('description'))
4116-
4117 if context.authorize(policy.EXTRA_SPEC_POLICY, fatal=False):
4118- extra_specs = volume_type.get('extra_specs', {})
4119- if context.authorize(extra_specs_policy.READ_SENSITIVE_POLICY,
4120- fatal=False):
4121- trimmed_specs = extra_specs
4122- else:
4123- # Limit the response to contain only user visible specs.
4124- trimmed_specs = {}
4125- for uv_spec in extra_specs_policy.USER_VISIBLE_EXTRA_SPECS:
4126- if uv_spec in extra_specs:
4127- trimmed_specs[uv_spec] = extra_specs[uv_spec]
4128-
4129- trimmed['extra_specs'] = trimmed_specs
4130-
4131+ trimmed['extra_specs'] = volume_type.get('extra_specs')
4132 if context.authorize(policy.QOS_POLICY, fatal=False):
4133 trimmed['qos_specs_id'] = volume_type.get('qos_specs_id')
4134-
4135 return trimmed if brief else dict(volume_type=trimmed)
4136
4137 def index(self, request, volume_types):
4138diff --git a/cinder/api/v2/volumes.py b/cinder/api/v2/volumes.py
4139index ddff047..fb2e015 100644
4140--- a/cinder/api/v2/volumes.py
4141+++ b/cinder/api/v2/volumes.py
4142@@ -177,14 +177,8 @@ class VolumeController(wsgi.Controller):
4143 "access requested image.")
4144 raise exc.HTTPBadRequest(explanation=msg)
4145
4146- # NOTE: using mv.BASE_VERSION (which is 3.0) is a bit nonstandard,
4147- # but this class is no longer consumed by the v2 API, though it is
4148- # a superclass of cinder.api.v3.volumes. Although create() is
4149- # overridden in the subclass, I didn't want to remove it from
4150- # here until we are sure that the v3 unit tests for create() test
4151- # everything that the v2 unit tests covered.
4152 @wsgi.response(HTTPStatus.ACCEPTED)
4153- @validation.schema(volumes.create, mv.BASE_VERSION)
4154+ @validation.schema(volumes.create, mv.V2_BASE_VERSION)
4155 def create(self, req, body):
4156 """Creates a new volume."""
4157
4158@@ -285,8 +279,7 @@ class VolumeController(wsgi.Controller):
4159 """Return volume search options allowed by non-admin."""
4160 return common.get_enabled_resource_filters('volume').get('volume', [])
4161
4162- # NOTE: see NOTE for create(), above
4163- @validation.schema(volumes.update, mv.BASE_VERSION,
4164+ @validation.schema(volumes.update, mv.V2_BASE_VERSION,
4165 mv.get_prior_version(mv.SUPPORT_VOLUME_SCHEMA_CHANGES))
4166 @validation.schema(volumes.update_volume_v353,
4167 mv.SUPPORT_VOLUME_SCHEMA_CHANGES)
4168diff --git a/cinder/api/v3/default_types.py b/cinder/api/v3/default_types.py
4169index 536f52e..ffdf607 100644
4170--- a/cinder/api/v3/default_types.py
4171+++ b/cinder/api/v3/default_types.py
4172@@ -16,9 +16,9 @@
4173 """The resource filters api."""
4174 from http import HTTPStatus
4175
4176+from keystoneauth1 import exceptions as ks_exc
4177 from webob import exc
4178
4179-from cinder.api import api_utils as utils
4180 from cinder.api import microversions as mv
4181 from cinder.api.openstack import wsgi
4182 from cinder.api.schemas import default_types
4183@@ -29,6 +29,7 @@ from cinder import exception
4184 from cinder.i18n import _
4185 from cinder import objects
4186 from cinder.policies import default_types as policy
4187+from cinder import quota_utils
4188
4189
4190 class DefaultTypesController(wsgi.Controller):
4191@@ -36,6 +37,22 @@ class DefaultTypesController(wsgi.Controller):
4192
4193 _view_builder_class = default_types_view.ViewBuilder
4194
4195+ def _validate_project_and_authorize(self, context, project_id,
4196+ policy_check):
4197+ try:
4198+ target_project = quota_utils.get_project_hierarchy(context,
4199+ project_id)
4200+ target_project = {'project_id': target_project.id,
4201+ 'domain_id': target_project.domain_id}
4202+ context.authorize(policy_check, target=target_project)
4203+ except ks_exc.http.NotFound:
4204+ explanation = _("Project with id %s not found." % project_id)
4205+ raise exc.HTTPNotFound(explanation=explanation)
4206+ except exception.NotAuthorized:
4207+ explanation = _("You are not authorized to perform this "
4208+ "operation.")
4209+ raise exc.HTTPForbidden(explanation=explanation)
4210+
4211 @wsgi.response(HTTPStatus.OK)
4212 @wsgi.Controller.api_version(mv.DEFAULT_TYPE_OVERRIDES)
4213 @validation.schema(default_types.create_or_update)
4214@@ -46,7 +63,7 @@ class DefaultTypesController(wsgi.Controller):
4215 project_id = id
4216 volume_type_id = body['default_type']['volume_type']
4217
4218- utils.validate_project_and_authorize(context, project_id,
4219+ self._validate_project_and_authorize(context, project_id,
4220 policy.CREATE_UPDATE_POLICY)
4221 try:
4222 volume_type_id = objects.VolumeType.get_by_name_or_id(
4223@@ -68,7 +85,7 @@ class DefaultTypesController(wsgi.Controller):
4224 context = req.environ['cinder.context']
4225
4226 project_id = id
4227- utils.validate_project_and_authorize(context, project_id,
4228+ self._validate_project_and_authorize(context, project_id,
4229 policy.GET_POLICY)
4230 default_type = db.project_default_volume_type_get(context, project_id)
4231 if not default_type:
4232@@ -100,7 +117,7 @@ class DefaultTypesController(wsgi.Controller):
4233 context = req.environ['cinder.context']
4234
4235 project_id = id
4236- utils.validate_project_and_authorize(context, project_id,
4237+ self._validate_project_and_authorize(context, project_id,
4238 policy.DELETE_POLICY)
4239 db.project_default_volume_type_unset(context, id)
4240
4241diff --git a/cinder/api/v3/group_specs.py b/cinder/api/v3/group_specs.py
4242index 90102c3..60daa1b 100644
4243--- a/cinder/api/v3/group_specs.py
4244+++ b/cinder/api/v3/group_specs.py
4245@@ -49,7 +49,7 @@ class GroupTypeSpecsController(wsgi.Controller):
4246 def index(self, req, group_type_id):
4247 """Returns the list of group specs for a given group type."""
4248 context = req.environ['cinder.context']
4249- context.authorize(policy.SPEC_GET_ALL_POLICY)
4250+ context.authorize(policy.SPEC_POLICY)
4251 self._check_type(context, group_type_id)
4252 return self._get_group_specs(context, group_type_id)
4253
4254@@ -58,7 +58,7 @@ class GroupTypeSpecsController(wsgi.Controller):
4255 @validation.schema(group_specs.create)
4256 def create(self, req, group_type_id, body):
4257 context = req.environ['cinder.context']
4258- context.authorize(policy.SPEC_CREATE_POLICY)
4259+ context.authorize(policy.SPEC_POLICY)
4260
4261 self._check_type(context, group_type_id)
4262 specs = body['group_specs']
4263@@ -75,7 +75,7 @@ class GroupTypeSpecsController(wsgi.Controller):
4264 @validation.schema(group_specs.update)
4265 def update(self, req, group_type_id, id, body):
4266 context = req.environ['cinder.context']
4267- context.authorize(policy.SPEC_UPDATE_POLICY)
4268+ context.authorize(policy.SPEC_POLICY)
4269
4270 self._check_type(context, group_type_id)
4271 if id not in body:
4272@@ -96,7 +96,7 @@ class GroupTypeSpecsController(wsgi.Controller):
4273 def show(self, req, group_type_id, id):
4274 """Return a single extra spec item."""
4275 context = req.environ['cinder.context']
4276- context.authorize(policy.SPEC_GET_POLICY)
4277+ context.authorize(policy.SPEC_POLICY)
4278
4279 self._check_type(context, group_type_id)
4280 specs = self._get_group_specs(context, group_type_id)
4281@@ -111,7 +111,7 @@ class GroupTypeSpecsController(wsgi.Controller):
4282 def delete(self, req, group_type_id, id):
4283 """Deletes an existing group spec."""
4284 context = req.environ['cinder.context']
4285- context.authorize(policy.SPEC_DELETE_POLICY)
4286+ context.authorize(policy.SPEC_POLICY)
4287
4288 self._check_type(context, group_type_id)
4289
4290diff --git a/cinder/api/v3/group_types.py b/cinder/api/v3/group_types.py
4291index 6383220..cc7c4c6 100644
4292--- a/cinder/api/v3/group_types.py
4293+++ b/cinder/api/v3/group_types.py
4294@@ -57,7 +57,7 @@ class GroupTypesController(wsgi.Controller):
4295 def create(self, req, body):
4296 """Creates a new group type."""
4297 context = req.environ['cinder.context']
4298- context.authorize(policy.CREATE_POLICY)
4299+ context.authorize(policy.MANAGE_POLICY)
4300
4301 grp_type = body['group_type']
4302 name = grp_type['name']
4303@@ -93,7 +93,7 @@ class GroupTypesController(wsgi.Controller):
4304 def update(self, req, id, body):
4305 # Update description for a given group type.
4306 context = req.environ['cinder.context']
4307- context.authorize(policy.UPDATE_POLICY)
4308+ context.authorize(policy.MANAGE_POLICY)
4309
4310 grp_type = body['group_type']
4311 description = grp_type.get('description')
4312@@ -142,7 +142,7 @@ class GroupTypesController(wsgi.Controller):
4313 def delete(self, req, id):
4314 """Deletes an existing group type."""
4315 context = req.environ['cinder.context']
4316- context.authorize(policy.DELETE_POLICY)
4317+ context.authorize(policy.MANAGE_POLICY)
4318
4319 try:
4320 grp_type = group_types.get_group_type(context, id)
4321diff --git a/cinder/api/v3/limits.py b/cinder/api/v3/limits.py
4322index d0f2186..2e7b698 100644
4323--- a/cinder/api/v3/limits.py
4324+++ b/cinder/api/v3/limits.py
4325@@ -33,9 +33,8 @@ class LimitsController(limits_v2.LimitsController):
4326
4327 # TODO(wangxiyuan): Support "tenant_id" here to keep the backwards
4328 # compatibility. Remove it once we drop all support for "tenant".
4329- if (req_version.matches(None,
4330- mv.get_prior_version(mv.LIMITS_ADMIN_FILTER))
4331- or not context.is_admin):
4332+ if req_version.matches(None,
4333+ mv.GROUP_REPLICATION) or not context.is_admin:
4334 params.pop('project_id', None)
4335 params.pop('tenant_id', None)
4336 project_id = params.get(
4337diff --git a/cinder/api/v3/router.py b/cinder/api/v3/router.py
4338index 4ad2acf..dad5585 100644
4339--- a/cinder/api/v3/router.py
4340+++ b/cinder/api/v3/router.py
4341@@ -21,6 +21,8 @@ WSGI middleware for OpenStack Volume API.
4342
4343 from cinder.api import extensions
4344 import cinder.api.openstack
4345+from cinder.api.v2 import snapshot_metadata
4346+from cinder.api.v2 import types
4347 from cinder.api.v3 import attachments
4348 from cinder.api.v3 import backups
4349 from cinder.api.v3 import clusters
4350@@ -34,9 +36,7 @@ from cinder.api.v3 import limits
4351 from cinder.api.v3 import messages
4352 from cinder.api.v3 import resource_filters
4353 from cinder.api.v3 import snapshot_manage
4354-from cinder.api.v3 import snapshot_metadata
4355 from cinder.api.v3 import snapshots
4356-from cinder.api.v3 import types
4357 from cinder.api.v3 import volume_manage
4358 from cinder.api.v3 import volume_metadata
4359 from cinder.api.v3 import volume_transfer
4360diff --git a/cinder/api/v3/snapshots.py b/cinder/api/v3/snapshots.py
4361index 159cd30..9debfce 100644
4362--- a/cinder/api/v3/snapshots.py
4363+++ b/cinder/api/v3/snapshots.py
4364@@ -16,30 +16,19 @@
4365 """The volumes snapshots V3 API."""
4366
4367 import ast
4368-from http import HTTPStatus
4369
4370 from oslo_log import log as logging
4371-from oslo_utils import strutils
4372-from webob import exc
4373
4374 from cinder.api import api_utils
4375 from cinder.api import common
4376 from cinder.api import microversions as mv
4377 from cinder.api.openstack import wsgi
4378-from cinder.api.schemas import snapshots as snapshot
4379 from cinder.api.v2 import snapshots as snapshots_v2
4380 from cinder.api.v3.views import snapshots as snapshot_views
4381-from cinder.api import validation
4382 from cinder import utils
4383
4384 LOG = logging.getLogger(__name__)
4385
4386-SNAPSHOT_IN_USE_FLAG_MSG = (
4387- f"Since microversion {mv.SNAPSHOT_IN_USE} the 'force' flag is "
4388- "invalid for this request. For backward compatability, however, when "
4389- "the 'force' flag is passed with a value evaluating to True, it is "
4390- "silently ignored.")
4391-
4392
4393 class SnapshotsController(snapshots_v2.SnapshotsController):
4394 """The Snapshots API controller for the OpenStack API."""
4395@@ -64,24 +53,16 @@ class SnapshotsController(snapshots_v2.SnapshotsController):
4396 LOG.debug('Could not evaluate value %s, assuming string',
4397 search_opts['metadata'])
4398
4399- if 'use_quota' in search_opts:
4400- search_opts['use_quota'] = utils.get_bool_param('use_quota',
4401- search_opts)
4402-
4403- MV_ADDED_FILTERS = (
4404- (mv.get_prior_version(mv.SNAPSHOT_LIST_METADATA_FILTER), 'metadata'),
4405- # REST API receives consumes_quota, but process_general_filtering
4406- # transforms it into use_quota
4407- (mv.get_prior_version(mv.USE_QUOTA), 'use_quota'),
4408- )
4409-
4410 @common.process_general_filtering('snapshot')
4411 def _process_snapshot_filtering(self, context=None, filters=None,
4412 req_version=None):
4413 """Formats allowed filters"""
4414- for version, field in self.MV_ADDED_FILTERS:
4415- if req_version.matches(None, version):
4416- filters.pop(field, None)
4417+
4418+ # if the max version is less than SNAPSHOT_LIST_METADATA_FILTER
4419+ # metadata based filtering is not supported
4420+ if req_version.matches(
4421+ None, mv.get_prior_version(mv.SNAPSHOT_LIST_METADATA_FILTER)):
4422+ filters.pop('metadata', None)
4423
4424 # Filter out invalid options
4425 allowed_search_options = self._get_snapshot_filter_options()
4426@@ -142,58 +123,6 @@ class SnapshotsController(snapshots_v2.SnapshotsController):
4427 total_count)
4428 return snapshots
4429
4430- @wsgi.response(HTTPStatus.ACCEPTED)
4431- @validation.schema(snapshot.create)
4432- def create(self, req, body):
4433- """Creates a new snapshot."""
4434- kwargs = {}
4435- context = req.environ['cinder.context']
4436- snapshot = body['snapshot']
4437- kwargs['metadata'] = snapshot.get('metadata', None)
4438- volume_id = snapshot['volume_id']
4439- volume = self.volume_api.get(context, volume_id)
4440- req_version = req.api_version_request
4441- force_flag = snapshot.get('force')
4442- force = False
4443- if force_flag is not None:
4444- # note: this won't raise because it passed schema validation
4445- force = strutils.bool_from_string(force_flag, strict=True)
4446-
4447- if req_version.matches(mv.SNAPSHOT_IN_USE):
4448- # strictly speaking, the 'force' flag is invalid for
4449- # mv.SNAPSHOT_IN_USE, but we silently ignore a True
4450- # value for backward compatibility
4451- if force is False:
4452- raise exc.HTTPBadRequest(
4453- explanation=SNAPSHOT_IN_USE_FLAG_MSG)
4454-
4455- LOG.info("Create snapshot from volume %s", volume_id)
4456-
4457- self.validate_name_and_description(snapshot, check_length=False)
4458- if 'name' in snapshot:
4459- snapshot['display_name'] = snapshot.pop('name')
4460-
4461- if force:
4462- new_snapshot = self.volume_api.create_snapshot_force(
4463- context,
4464- volume,
4465- snapshot.get('display_name'),
4466- snapshot.get('description'),
4467- **kwargs)
4468- else:
4469- if req_version.matches(mv.SNAPSHOT_IN_USE):
4470- kwargs['allow_in_use'] = True
4471-
4472- new_snapshot = self.volume_api.create_snapshot(
4473- context,
4474- volume,
4475- snapshot.get('display_name'),
4476- snapshot.get('description'),
4477- **kwargs)
4478- req.cache_db_snapshot(new_snapshot)
4479-
4480- return self._view_builder.detail(req, new_snapshot)
4481-
4482
4483 def create_resource(ext_mgr):
4484 return wsgi.Resource(SnapshotsController(ext_mgr))
4485diff --git a/cinder/api/v3/views/snapshots.py b/cinder/api/v3/views/snapshots.py
4486index cd09f9c..857df05 100644
4487--- a/cinder/api/v3/views/snapshots.py
4488+++ b/cinder/api/v3/views/snapshots.py
4489@@ -27,11 +27,9 @@ class ViewBuilder(views_v2.ViewBuilder):
4490 req_version = request.api_version_request
4491 # Add group_snapshot_id if min version is greater than or equal
4492 # to GROUP_SNAPSHOTS.
4493- snap = snapshot_ref['snapshot']
4494 if req_version.matches(mv.GROUP_SNAPSHOTS, None):
4495- snap['group_snapshot_id'] = snapshot.get('group_snapshot_id')
4496+ snapshot_ref['snapshot']['group_snapshot_id'] = (
4497+ snapshot.get('group_snapshot_id'))
4498 if req_version.matches(mv.SNAPSHOT_LIST_USER_ID, None):
4499- snap['user_id'] = snapshot.get('user_id')
4500- if req_version.matches(mv.USE_QUOTA):
4501- snap['consumes_quota'] = snapshot.get('use_quota')
4502+ snapshot_ref['snapshot']['user_id'] = snapshot.get('user_id')
4503 return snapshot_ref
4504diff --git a/cinder/api/v3/views/volumes.py b/cinder/api/v3/views/volumes.py
4505index ded603a..ed171c7 100644
4506--- a/cinder/api/v3/views/volumes.py
4507+++ b/cinder/api/v3/views/volumes.py
4508@@ -77,9 +77,6 @@ class ViewBuilder(views_v2.ViewBuilder):
4509 encryption_key_id != cinder_constants.FIXED_KEY_ID):
4510 volume_ref['volume']['encryption_key_id'] = encryption_key_id
4511
4512- if req_version.matches(mv.USE_QUOTA):
4513- volume_ref['volume']['consumes_quota'] = volume.get('use_quota')
4514-
4515 return volume_ref
4516
4517 def _list_view(self, func, request, volumes, volume_count,
4518diff --git a/cinder/api/v3/volumes.py b/cinder/api/v3/volumes.py
4519index 0d2841c..09b5738 100644
4520--- a/cinder/api/v3/volumes.py
4521+++ b/cinder/api/v3/volumes.py
4522@@ -80,23 +80,18 @@ class VolumeController(volumes_v2.VolumeController):
4523
4524 return webob.Response(status_int=HTTPStatus.ACCEPTED)
4525
4526- MV_ADDED_FILTERS = (
4527- (mv.get_prior_version(mv.VOLUME_LIST_GLANCE_METADATA),
4528- 'glance_metadata'),
4529- (mv.get_prior_version(mv.VOLUME_LIST_GROUP), 'group_id'),
4530- (mv.get_prior_version(mv.VOLUME_TIME_COMPARISON_FILTER), 'created_at'),
4531- (mv.get_prior_version(mv.VOLUME_TIME_COMPARISON_FILTER), 'updated_at'),
4532- # REST API receives consumes_quota, but process_general_filtering
4533- # transforms it into use_quota
4534- (mv.get_prior_version(mv.USE_QUOTA), 'use_quota'),
4535- )
4536-
4537 @common.process_general_filtering('volume')
4538 def _process_volume_filtering(self, context=None, filters=None,
4539 req_version=None):
4540- for version, field in self.MV_ADDED_FILTERS:
4541- if req_version.matches(None, version):
4542- filters.pop(field, None)
4543+ if req_version.matches(None, mv.MESSAGES):
4544+ filters.pop('glance_metadata', None)
4545+
4546+ if req_version.matches(None, mv.BACKUP_UPDATE):
4547+ filters.pop('group_id', None)
4548+
4549+ if req_version.matches(None, mv.SUPPORT_TRANSFER_PAGINATION):
4550+ filters.pop('created_at', None)
4551+ filters.pop('updated_at', None)
4552
4553 api_utils.remove_invalid_filter_options(
4554 context, filters,
4555@@ -152,17 +147,13 @@ class VolumeController(volumes_v2.VolumeController):
4556 self._process_volume_filtering(context=context, filters=filters,
4557 req_version=req_version)
4558
4559- # NOTE: it's 'name' in the REST API, but 'display_name' in the
4560- # database layer, so we need to do this translation
4561+ # NOTE(thingee): v2 API allows name instead of display_name
4562 if 'name' in sort_keys:
4563 sort_keys[sort_keys.index('name')] = 'display_name'
4564
4565 if 'name' in filters:
4566 filters['display_name'] = filters.pop('name')
4567
4568- if 'use_quota' in filters:
4569- filters['use_quota'] = utils.get_bool_param('use_quota', filters)
4570-
4571 self._handle_time_comparison_filters(filters)
4572
4573 strict = req.api_version_request.matches(
4574@@ -311,11 +302,12 @@ class VolumeController(volumes_v2.VolumeController):
4575 kwargs = {}
4576 self.validate_name_and_description(volume, check_length=False)
4577
4578- # NOTE: it's 'name'/'description' in the REST API, but
4579- # 'display_name'/display_description' in the database layer,
4580- # so we need to do this translation
4581+ # NOTE(thingee): v2 API allows name instead of display_name
4582 if 'name' in volume:
4583 volume['display_name'] = volume.pop('name')
4584+
4585+ # NOTE(thingee): v2 API allows description instead of
4586+ # display_description
4587 if 'description' in volume:
4588 volume['display_description'] = volume.pop('description')
4589
4590diff --git a/cinder/api/versions.py b/cinder/api/versions.py
4591index 90f9b4d..24b9197 100644
4592--- a/cinder/api/versions.py
4593+++ b/cinder/api/versions.py
4594@@ -38,6 +38,18 @@ _LINKS = [{
4595
4596
4597 _KNOWN_VERSIONS = {
4598+ "v2.0": {
4599+ "id": "v2.0",
4600+ "status": "DEPRECATED",
4601+ "version": "",
4602+ "min_version": "",
4603+ "updated": "2017-02-25T12:00:00Z",
4604+ "links": _LINKS,
4605+ "media-types": [{
4606+ "base": "application/json",
4607+ "type": "application/vnd.openstack.volume+json;version=2",
4608+ }]
4609+ },
4610 "v3.0": {
4611 "id": "v3.0",
4612 "status": "CURRENT",
4613@@ -81,15 +93,24 @@ class VersionsController(wsgi.Controller):
4614 def __init__(self):
4615 super(VersionsController, self).__init__(None)
4616
4617- @wsgi.Controller.api_version('3.0')
4618+ @wsgi.Controller.api_version('2.0')
4619+ def index(self, req): # pylint: disable=E0102
4620+ """Return versions supported prior to the microversions epoch."""
4621+ builder = views_versions.get_view_builder(req)
4622+ known_versions = copy.deepcopy(_KNOWN_VERSIONS)
4623+ known_versions.pop('v3.0')
4624+ return builder.build_versions(known_versions)
4625+
4626+ @index.api_version('3.0')
4627 def index(self, req): # pylint: disable=E0102
4628 """Return versions supported after the start of microversions."""
4629 builder = views_versions.get_view_builder(req)
4630 known_versions = copy.deepcopy(_KNOWN_VERSIONS)
4631+ known_versions.pop('v2.0')
4632 return builder.build_versions(known_versions)
4633
4634 # NOTE (cknight): Calling the versions API without
4635- # /v3 in the URL will lead to this unversioned
4636+ # /v2 or /v3 in the URL will lead to this unversioned
4637 # method, which should always return info about all
4638 # available versions.
4639 @wsgi.response(HTTPStatus.MULTIPLE_CHOICES)
4640@@ -98,6 +119,11 @@ class VersionsController(wsgi.Controller):
4641 builder = views_versions.get_view_builder(req)
4642 known_versions = copy.deepcopy(_KNOWN_VERSIONS)
4643
4644+ if not CONF.enable_v2_api:
4645+ known_versions.pop('v2.0')
4646+ if not CONF.enable_v3_api:
4647+ known_versions.pop('v3.0')
4648+
4649 return builder.build_versions(known_versions)
4650
4651
4652diff --git a/cinder/backup/api.py b/cinder/backup/api.py
4653index f04f33f..7e03348 100644
4654--- a/cinder/backup/api.py
4655+++ b/cinder/backup/api.py
4656@@ -59,11 +59,11 @@ IMPORT_VOLUME_ID = '00000000-0000-0000-0000-000000000000'
4657 class API(base.Base):
4658 """API for interacting with the volume backup manager."""
4659
4660- def __init__(self):
4661+ def __init__(self, db=None):
4662 self.backup_rpcapi = backup_rpcapi.BackupAPI()
4663 self.scheduler_rpcapi = scheduler_rpcapi.SchedulerAPI()
4664 self.volume_api = cinder.volume.API()
4665- super().__init__()
4666+ super(API, self).__init__(db)
4667
4668 def get(self, context, backup_id):
4669 backup = objects.Backup.get_by_id(context, backup_id)
4670diff --git a/cinder/backup/chunkeddriver.py b/cinder/backup/chunkeddriver.py
4671index df094a3..b780d51 100644
4672--- a/cinder/backup/chunkeddriver.py
4673+++ b/cinder/backup/chunkeddriver.py
4674@@ -51,15 +51,11 @@ backup_opts = [
4675 cfg.StrOpt('backup_compression_algorithm',
4676 default='zlib',
4677 ignore_case=True,
4678- choices=[('none', 'Do not use compression'),
4679- ('off', "Same as 'none'"),
4680- ('no', "Same as 'none'"),
4681- ('zlib', 'Use the Deflate compression algorithm'),
4682- ('gzip', "Same as 'zlib'"),
4683- ('bz2', 'Use Burrows-Wheeler transform compression'),
4684- ('bzip2', "Same as 'bz2'"),
4685- ('zstd', 'Use the Zstandard compression algorithm')],
4686- help="Compression algorithm for backups ('none' to disable)"),
4687+ choices=['none', 'off', 'no',
4688+ 'zlib', 'gzip',
4689+ 'bz2', 'bzip2',
4690+ 'zstd'],
4691+ help='Compression algorithm ("none" to disable)'),
4692 ]
4693
4694 CONF = cfg.CONF
4695@@ -111,11 +107,10 @@ class ChunkedBackupDriver(driver.BackupDriver, metaclass=abc.ABCMeta):
4696 err = _('unsupported compression algorithm: %s') % algorithm
4697 raise ValueError(err)
4698
4699- def __init__(
4700- self, context, chunk_size_bytes, sha_block_size_bytes,
4701- backup_default_container, enable_progress_timer,
4702- ):
4703- super(ChunkedBackupDriver, self).__init__(context)
4704+ def __init__(self, context, chunk_size_bytes, sha_block_size_bytes,
4705+ backup_default_container, enable_progress_timer,
4706+ db=None):
4707+ super(ChunkedBackupDriver, self).__init__(context, db)
4708 self.chunk_size_bytes = chunk_size_bytes
4709 self.sha_block_size_bytes = sha_block_size_bytes
4710 self.backup_default_container = backup_default_container
4711diff --git a/cinder/backup/driver.py b/cinder/backup/driver.py
4712index f4dc24d..621695c 100644
4713--- a/cinder/backup/driver.py
4714+++ b/cinder/backup/driver.py
4715@@ -52,8 +52,8 @@ class BackupMetadataAPI(base.Base):
4716 TYPE_TAG_VOL_META = 'volume-metadata'
4717 TYPE_TAG_VOL_GLANCE_META = 'volume-glance-metadata'
4718
4719- def __init__(self, context):
4720- super().__init__()
4721+ def __init__(self, context, db=None):
4722+ super(BackupMetadataAPI, self).__init__(db)
4723 self.context = context
4724 self._key_mgr = None
4725
4726@@ -347,10 +347,10 @@ class BackupMetadataAPI(base.Base):
4727
4728 class BackupDriver(base.Base, metaclass=abc.ABCMeta):
4729
4730- def __init__(self, context):
4731- super().__init__()
4732+ def __init__(self, context, db=None):
4733+ super(BackupDriver, self).__init__(db)
4734 self.context = context
4735- self.backup_meta_api = BackupMetadataAPI(context)
4736+ self.backup_meta_api = BackupMetadataAPI(context, db)
4737 # This flag indicates if backup driver supports force
4738 # deletion. So it should be set to True if the driver that inherits
4739 # from BackupDriver supports the force deletion function.
4740diff --git a/cinder/backup/drivers/ceph.py b/cinder/backup/drivers/ceph.py
4741index 21a2a3a..e6f13ac 100644
4742--- a/cinder/backup/drivers/ceph.py
4743+++ b/cinder/backup/drivers/ceph.py
4744@@ -174,8 +174,8 @@ class CephBackupDriver(driver.BackupDriver):
4745 gain.
4746 """
4747
4748- def __init__(self, context, execute=None):
4749- super().__init__(context)
4750+ def __init__(self, context, db=None, execute=None):
4751+ super(CephBackupDriver, self).__init__(context, db)
4752 self.rbd = rbd
4753 self.rados = rados
4754 self.chunk_size = CONF.backup_ceph_chunk_size
4755diff --git a/cinder/backup/drivers/gcs.py b/cinder/backup/drivers/gcs.py
4756index c7288f3..d673fd5 100644
4757--- a/cinder/backup/drivers/gcs.py
4758+++ b/cinder/backup/drivers/gcs.py
4759@@ -163,20 +163,18 @@ def _get_dist_version(name):
4760 class GoogleBackupDriver(chunkeddriver.ChunkedBackupDriver):
4761 """Provides backup, restore and delete of backup objects within GCS."""
4762
4763- def __init__(self, context):
4764+ def __init__(self, context, db=None):
4765 global OAUTH_EXCEPTIONS
4766 backup_bucket = CONF.backup_gcs_bucket
4767 self.gcs_project_id = CONF.backup_gcs_project_id
4768 chunk_size_bytes = CONF.backup_gcs_object_size
4769 sha_block_size_bytes = CONF.backup_gcs_block_size
4770 enable_progress_timer = CONF.backup_gcs_enable_progress_timer
4771- super().__init__(
4772- context,
4773- chunk_size_bytes,
4774- sha_block_size_bytes,
4775- backup_bucket,
4776- enable_progress_timer,
4777- )
4778+ super(GoogleBackupDriver, self).__init__(context, chunk_size_bytes,
4779+ sha_block_size_bytes,
4780+ backup_bucket,
4781+ enable_progress_timer,
4782+ db)
4783 self.reader_chunk_size = CONF.backup_gcs_reader_chunk_size
4784 self.writer_chunk_size = CONF.backup_gcs_writer_chunk_size
4785 self.bucket_location = CONF.backup_gcs_bucket_location
4786diff --git a/cinder/backup/drivers/glusterfs.py b/cinder/backup/drivers/glusterfs.py
4787index 6e712a3..36420a7 100644
4788--- a/cinder/backup/drivers/glusterfs.py
4789+++ b/cinder/backup/drivers/glusterfs.py
4790@@ -46,13 +46,14 @@ CONF.register_opts(glusterfsbackup_service_opts)
4791 class GlusterfsBackupDriver(posix.PosixBackupDriver):
4792 """Provides backup, restore and delete using GlusterFS repository."""
4793
4794- def __init__(self, context):
4795+ def __init__(self, context, db=None):
4796 self.backup_mount_point_base = CONF.glusterfs_backup_mount_point
4797 self.backup_share = CONF.glusterfs_backup_share
4798 self._execute = putils.execute
4799 self._root_helper = utils.get_root_helper()
4800 backup_path = self._init_backup_repo_path()
4801- super().__init__(context, backup_path=backup_path)
4802+ super(GlusterfsBackupDriver, self).__init__(context,
4803+ backup_path=backup_path)
4804
4805 @staticmethod
4806 def get_driver_options():
4807diff --git a/cinder/backup/drivers/nfs.py b/cinder/backup/drivers/nfs.py
4808index a3b9b1f..886c2cb 100644
4809--- a/cinder/backup/drivers/nfs.py
4810+++ b/cinder/backup/drivers/nfs.py
4811@@ -58,7 +58,7 @@ CONF.register_opts(nfsbackup_service_opts)
4812 class NFSBackupDriver(posix.PosixBackupDriver):
4813 """Provides backup, restore and delete using NFS supplied repository."""
4814
4815- def __init__(self, context):
4816+ def __init__(self, context, db=None):
4817 self.backup_mount_point_base = CONF.backup_mount_point_base
4818 self.backup_share = CONF.backup_share
4819 self.mount_options = CONF.backup_mount_options
4820@@ -66,7 +66,8 @@ class NFSBackupDriver(posix.PosixBackupDriver):
4821 self._root_helper = utils.get_root_helper()
4822 backup_path = self._init_backup_repo_path()
4823 LOG.debug("Using NFS backup repository: %s", backup_path)
4824- super().__init__(context, backup_path=backup_path)
4825+ super(NFSBackupDriver, self).__init__(context,
4826+ backup_path=backup_path)
4827
4828 def check_for_setup_error(self):
4829 """Raises error if any required configuration flag is missing."""
4830diff --git a/cinder/backup/drivers/posix.py b/cinder/backup/drivers/posix.py
4831index e5967b5..4004f8c 100644
4832--- a/cinder/backup/drivers/posix.py
4833+++ b/cinder/backup/drivers/posix.py
4834@@ -70,18 +70,16 @@ CONF.register_opts(posixbackup_service_opts)
4835 class PosixBackupDriver(chunkeddriver.ChunkedBackupDriver):
4836 """Provides backup, restore and delete using a Posix file system."""
4837
4838- def __init__(self, context, backup_path=None):
4839+ def __init__(self, context, db=None, backup_path=None):
4840 chunk_size_bytes = CONF.backup_file_size
4841 sha_block_size_bytes = CONF.backup_sha_block_size_bytes
4842 backup_default_container = CONF.backup_container
4843 enable_progress_timer = CONF.backup_enable_progress_timer
4844- super().__init__(
4845- context,
4846- chunk_size_bytes,
4847- sha_block_size_bytes,
4848- backup_default_container,
4849- enable_progress_timer,
4850- )
4851+ super(PosixBackupDriver, self).__init__(context, chunk_size_bytes,
4852+ sha_block_size_bytes,
4853+ backup_default_container,
4854+ enable_progress_timer,
4855+ db)
4856 self.backup_path = backup_path
4857 if not backup_path:
4858 self.backup_path = CONF.backup_posix_path
4859diff --git a/cinder/backup/drivers/s3.py b/cinder/backup/drivers/s3.py
4860index 3288822..91a897f 100644
4861--- a/cinder/backup/drivers/s3.py
4862+++ b/cinder/backup/drivers/s3.py
4863@@ -170,18 +170,16 @@ def _wrap_exception(func):
4864 class S3BackupDriver(chunkeddriver.ChunkedBackupDriver):
4865 """Provides backup, restore and delete of backup objects within S3."""
4866
4867- def __init__(self, context):
4868+ def __init__(self, context, db=None):
4869 chunk_size_bytes = CONF.backup_s3_object_size
4870 sha_block_size_bytes = CONF.backup_s3_block_size
4871 backup_bucket = CONF.backup_s3_store_bucket
4872 enable_progress_timer = CONF.backup_s3_enable_progress_timer
4873- super().__init__(
4874- context,
4875- chunk_size_bytes,
4876- sha_block_size_bytes,
4877- backup_bucket,
4878- enable_progress_timer,
4879- )
4880+ super(S3BackupDriver, self).__init__(context, chunk_size_bytes,
4881+ sha_block_size_bytes,
4882+ backup_bucket,
4883+ enable_progress_timer,
4884+ db)
4885 config_args = dict(
4886 connect_timeout=CONF.backup_s3_timeout,
4887 read_timeout=CONF.backup_s3_timeout,
4888diff --git a/cinder/backup/drivers/swift.py b/cinder/backup/drivers/swift.py
4889index cf93b46..4afc5ba 100644
4890--- a/cinder/backup/drivers/swift.py
4891+++ b/cinder/backup/drivers/swift.py
4892@@ -51,7 +51,6 @@ from oslo_log import log as logging
4893 from oslo_utils import secretutils
4894 from oslo_utils import timeutils
4895 from swiftclient import client as swift
4896-from swiftclient import exceptions as swift_exc
4897
4898 from cinder.backup import chunkeddriver
4899 from cinder import exception
4900@@ -109,11 +108,6 @@ swiftbackup_service_opts = [
4901 cfg.StrOpt('backup_swift_container',
4902 default='volumebackups',
4903 help='The default Swift container to use'),
4904- cfg.StrOpt('backup_swift_create_storage_policy',
4905- default=None,
4906- help='The storage policy to use when creating the Swift '
4907- 'container. If the container already exists the '
4908- 'storage policy cannot be enforced'),
4909 cfg.IntOpt('backup_swift_object_size',
4910 default=52428800,
4911 help='The size in bytes of Swift backup objects'),
4912@@ -151,18 +145,16 @@ CONF.register_opts(swiftbackup_service_opts)
4913 class SwiftBackupDriver(chunkeddriver.ChunkedBackupDriver):
4914 """Provides backup, restore and delete of backup objects within Swift."""
4915
4916- def __init__(self, context):
4917+ def __init__(self, context, db=None):
4918 chunk_size_bytes = CONF.backup_swift_object_size
4919 sha_block_size_bytes = CONF.backup_swift_block_size
4920 backup_default_container = CONF.backup_swift_container
4921 enable_progress_timer = CONF.backup_swift_enable_progress_timer
4922- super().__init__(
4923- context,
4924- chunk_size_bytes,
4925- sha_block_size_bytes,
4926- backup_default_container,
4927- enable_progress_timer,
4928- )
4929+ super(SwiftBackupDriver, self).__init__(context, chunk_size_bytes,
4930+ sha_block_size_bytes,
4931+ backup_default_container,
4932+ enable_progress_timer,
4933+ db)
4934
4935 # Do not intialize the instance created when the backup service
4936 # starts up. The context will be missing information to do things
4937@@ -326,31 +318,12 @@ class SwiftBackupDriver(chunkeddriver.ChunkedBackupDriver):
4938 return body
4939
4940 def put_container(self, container):
4941- """Create the container if needed.
4942-
4943- Check if the container exist by issuing a HEAD request, if
4944- the container does not exist we create it.
4945-
4946- We cannot enforce a new storage policy on an
4947- existing container.
4948- """
4949+ """Create the container if needed. No failure if it pre-exists."""
4950 try:
4951- self.conn.head_container(container)
4952- except swift_exc.ClientException as e:
4953- if e.http_status == 404:
4954- try:
4955- storage_policy = CONF.backup_swift_create_storage_policy
4956- headers = ({'X-Storage-Policy': storage_policy}
4957- if storage_policy else None)
4958- self.conn.put_container(container, headers=headers)
4959- except socket.error as err:
4960- raise exception.SwiftConnectionFailed(reason=err)
4961- return
4962- LOG.warning("Failed to HEAD container to determine if it "
4963- "exists and should be created.")
4964- raise exception.SwiftConnectionFailed(reason=e)
4965+ self.conn.put_container(container)
4966 except socket.error as err:
4967 raise exception.SwiftConnectionFailed(reason=err)
4968+ return
4969
4970 def get_container_entries(self, container, prefix):
4971 """Get container entry names"""
4972diff --git a/cinder/backup/manager.py b/cinder/backup/manager.py
4973index 137a19d..1d58c73 100644
4974--- a/cinder/backup/manager.py
4975+++ b/cinder/backup/manager.py
4976@@ -51,8 +51,6 @@ from cinder import exception
4977 from cinder.i18n import _
4978 from cinder.keymgr import migration as key_migration
4979 from cinder import manager
4980-from cinder.message import api as message_api
4981-from cinder.message import message_field
4982 from cinder import objects
4983 from cinder.objects import fields
4984 from cinder import quota
4985@@ -137,7 +135,6 @@ class BackupManager(manager.SchedulerDependentManager):
4986 self.driver_name, new_name)
4987 self.driver_name = new_name
4988 self.service = importutils.import_class(self.driver_name)
4989- self.message_api = message_api.API()
4990
4991 def init_host(self, **kwargs):
4992 """Run initialization needed for a standalone service."""
4993@@ -158,7 +155,7 @@ class BackupManager(manager.SchedulerDependentManager):
4994 self.publish_service_capabilities(ctxt)
4995
4996 def _setup_backup_driver(self, ctxt):
4997- backup_service = self.service(context=ctxt)
4998+ backup_service = self.service(context=ctxt, db=self.db)
4999 backup_service.check_for_setup_error()
5000 self.is_initialized = True
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches