Add sparse image upload configuration parameters

Addng configuration option ``rbd_thin_provisioning`` and
``filesystem_thin_provisioning`` to rbd and filesystem
backends, to enable or not sparse upload.

A sparse file means that we do not actually write null byte
sequences but only the data itself at a given offset, the
"holes" which can appear will automatically be interpreted by
the storage backend as null bytes, and do not really consume
your storage.

Partially Implements: blueprint handle-sparse-image

Change-Id: Ic95fa45af0f1db92d8425862c6267f466764fbbe
This commit is contained in:
PranaliD 2020-09-10 09:59:28 +00:00 committed by Takashi Kajinami
parent 424891f43d
commit da9e1a7f4e
9 changed files with 59 additions and 13 deletions

View File

@ -9,13 +9,18 @@
# default_store == file. # default_store == file.
# Optional. Default: /var/lib/glance/images/ # Optional. Default: /var/lib/glance/images/
# #
# [*multi_store*] # [*filesystem_thin_provisioning*]
# (optional) Boolean describing if multiple backends will be configured # (optional) Boolean describing if thin provisioning is enabled or not
# Defaults to false # Defaults to $::os_service_default
#
# [*multi_store*]
# (optional) Boolean describing if multiple backends will be configured
# Defaults to false
# #
class glance::backend::file( class glance::backend::file(
$filesystem_store_datadir = '/var/lib/glance/images/', $filesystem_store_datadir = '/var/lib/glance/images/',
$multi_store = false, $filesystem_thin_provisioning = $::os_service_default,
$multi_store = false,
) { ) {
include glance::deps include glance::deps
@ -23,8 +28,9 @@ class glance::backend::file(
warning('glance::backend::file is deprecated. Use glance::backend::multistore::file instead.') warning('glance::backend::file is deprecated. Use glance::backend::multistore::file instead.')
glance::backend::multistore::file { 'glance_store': glance::backend::multistore::file { 'glance_store':
filesystem_store_datadir => $filesystem_store_datadir, filesystem_store_datadir => $filesystem_store_datadir,
store_description => undef, filesystem_thin_provisioning => $filesystem_thin_provisioning,
store_description => undef,
} }
if !$multi_store { if !$multi_store {

View File

@ -23,21 +23,27 @@
# Location where dist images are stored when the backend type is file. # Location where dist images are stored when the backend type is file.
# Defaults to $::os_service_default. # Defaults to $::os_service_default.
# #
# [*filesystem_thin_provisioning*]
# (optional) Boolean describing if thin provisioning is enabled or not
# Defaults to $::os_service_default
#
# [*store_description*] # [*store_description*]
# (optional) Provides constructive information about the store backend to # (optional) Provides constructive information about the store backend to
# end users. # end users.
# Defaults to $::os_service_default. # Defaults to $::os_service_default.
# #
define glance::backend::multistore::file( define glance::backend::multistore::file(
$filesystem_store_datadir = $::os_service_default, $filesystem_store_datadir = $::os_service_default,
$store_description = $::os_service_default, $filesystem_thin_provisioning = $::os_service_default,
$store_description = $::os_service_default,
) { ) {
include glance::deps include glance::deps
glance_api_config { glance_api_config {
"${name}/filesystem_store_datadir": value => $filesystem_store_datadir; "${name}/filesystem_store_datadir": value => $filesystem_store_datadir;
"${name}/store_description": value => $store_description; "${name}/filesystem_thin_provisioning": value => $filesystem_thin_provisioning;
"${name}/store_description": value => $store_description;
} }
glance_cache_config { glance_cache_config {

View File

@ -32,6 +32,10 @@
# [*rbd_store_chunk_size*] # [*rbd_store_chunk_size*]
# Optional. Default: $::os_service_default. # Optional. Default: $::os_service_default.
# #
# [*rbd_thin_provisioning*]
# Optional. Boolean describing if thin provisioning is enabled or not
# Defaults to $::os_service_default
#
# [*manage_packages*] # [*manage_packages*]
# Optional. Whether we should manage the packages. # Optional. Whether we should manage the packages.
# Defaults to true, # Defaults to true,
@ -57,6 +61,7 @@ define glance::backend::multistore::rbd(
$rbd_store_ceph_conf = $::os_service_default, $rbd_store_ceph_conf = $::os_service_default,
$rbd_store_pool = $::os_service_default, $rbd_store_pool = $::os_service_default,
$rbd_store_chunk_size = $::os_service_default, $rbd_store_chunk_size = $::os_service_default,
$rbd_thin_provisioning = $::os_service_default,
$manage_packages = true, $manage_packages = true,
$package_ensure = 'present', $package_ensure = 'present',
$rados_connect_timeout = $::os_service_default, $rados_connect_timeout = $::os_service_default,
@ -71,6 +76,7 @@ define glance::backend::multistore::rbd(
"${name}/rbd_store_user": value => $rbd_store_user; "${name}/rbd_store_user": value => $rbd_store_user;
"${name}/rbd_store_pool": value => $rbd_store_pool; "${name}/rbd_store_pool": value => $rbd_store_pool;
"${name}/rbd_store_chunk_size": value => $rbd_store_chunk_size; "${name}/rbd_store_chunk_size": value => $rbd_store_chunk_size;
"${name}/rbd_thin_provisioning": value => $rbd_thin_provisioning;
"${name}/rados_connect_timeout": value => $rados_connect_timeout; "${name}/rados_connect_timeout": value => $rados_connect_timeout;
"${name}/store_description": value => $store_description; "${name}/store_description": value => $store_description;
} }

View File

@ -17,6 +17,10 @@
# [*rbd_store_chunk_size*] # [*rbd_store_chunk_size*]
# Optional. Default: $::os_service_default. # Optional. Default: $::os_service_default.
# #
# [*rbd_thin_provisioning*]
# Optional. Boolean describing if thin provisioning is enabled or not
# Defaults to $::os_service_default
#
# [*manage_packages*] # [*manage_packages*]
# Optional. Whether we should manage the packages. # Optional. Whether we should manage the packages.
# Defaults to true, # Defaults to true,
@ -41,6 +45,7 @@ class glance::backend::rbd(
$rbd_store_ceph_conf = $::os_service_default, $rbd_store_ceph_conf = $::os_service_default,
$rbd_store_pool = $::os_service_default, $rbd_store_pool = $::os_service_default,
$rbd_store_chunk_size = $::os_service_default, $rbd_store_chunk_size = $::os_service_default,
$rbd_thin_provisioning = $::os_service_default,
$manage_packages = true, $manage_packages = true,
$package_ensure = 'present', $package_ensure = 'present',
$rados_connect_timeout = $::os_service_default, $rados_connect_timeout = $::os_service_default,
@ -57,6 +62,7 @@ class glance::backend::rbd(
rbd_store_user => $rbd_store_user, rbd_store_user => $rbd_store_user,
rbd_store_pool => $rbd_store_pool, rbd_store_pool => $rbd_store_pool,
rbd_store_chunk_size => $rbd_store_chunk_size, rbd_store_chunk_size => $rbd_store_chunk_size,
rbd_thin_provisioning => $rbd_thin_provisioning,
rados_connect_timeout => $rados_connect_timeout, rados_connect_timeout => $rados_connect_timeout,
manage_packages => $manage_packages, manage_packages => $manage_packages,
package_ensure => $package_ensure, package_ensure => $package_ensure,

View File

@ -0,0 +1,6 @@
---
features:
- |
Add new configuration option 'rbd_thin_provisioning' and
'filesystem_thin_provisioning' to rbd and filesystem
backends to enable or not sparse upload, default are False.

View File

@ -5,6 +5,7 @@ describe 'glance::backend::file' do
shared_examples_for 'glance::backend::file' do shared_examples_for 'glance::backend::file' do
it 'configures glance-api.conf' do it 'configures glance-api.conf' do
is_expected.to contain_glance_api_config('glance_store/default_store').with_value('file') is_expected.to contain_glance_api_config('glance_store/default_store').with_value('file')
is_expected.to contain_glance_api_config('glance_store/filesystem_thin_provisioning').with_value('<SERVICE DEFAULT>')
is_expected.to contain_glance_api_config('glance_store/filesystem_store_datadir').with_value('/var/lib/glance/images/') is_expected.to contain_glance_api_config('glance_store/filesystem_store_datadir').with_value('/var/lib/glance/images/')
end end
@ -14,11 +15,15 @@ describe 'glance::backend::file' do
describe 'when overriding datadir' do describe 'when overriding datadir' do
let :params do let :params do
{:filesystem_store_datadir => '/tmp/'} {
:filesystem_store_datadir => '/tmp/',
:filesystem_thin_provisioning => 'true',
}
end end
it 'configures glance-api.conf' do it 'configures glance-api.conf' do
is_expected.to contain_glance_api_config('glance_store/filesystem_store_datadir').with_value('/tmp/') is_expected.to contain_glance_api_config('glance_store/filesystem_store_datadir').with_value('/tmp/')
is_expected.to contain_glance_api_config('glance_store/filesystem_thin_provisioning').with_value('true')
end end
it 'configures glance-cache.conf' do it 'configures glance-cache.conf' do

View File

@ -7,6 +7,7 @@ describe 'glance::backend::rbd' do
it { should contain_glance_api_config('glance_store/rbd_store_pool').with_value('<SERVICE DEFAULT>') } it { should contain_glance_api_config('glance_store/rbd_store_pool').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('glance_store/rbd_store_ceph_conf').with_value('<SERVICE DEFAULT>') } it { should contain_glance_api_config('glance_store/rbd_store_ceph_conf').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('glance_store/rbd_store_chunk_size').with_value('<SERVICE DEFAULT>') } it { should contain_glance_api_config('glance_store/rbd_store_chunk_size').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('glance_store/rbd_thin_provisioning').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('glance_store/rados_connect_timeout').with_value('<SERVICE DEFAULT>')} it { should contain_glance_api_config('glance_store/rados_connect_timeout').with_value('<SERVICE DEFAULT>')}
it { should contain_glance_api_config('glance_store/rbd_store_user').with_value('<SERVICE DEFAULT>')} it { should contain_glance_api_config('glance_store/rbd_store_user').with_value('<SERVICE DEFAULT>')}
@ -21,6 +22,7 @@ describe 'glance::backend::rbd' do
{ {
:rbd_store_user => 'user', :rbd_store_user => 'user',
:rbd_store_chunk_size => '2', :rbd_store_chunk_size => '2',
:rbd_thin_provisioning => 'true',
:package_ensure => 'latest', :package_ensure => 'latest',
:rados_connect_timeout => '30', :rados_connect_timeout => '30',
} }
@ -28,6 +30,7 @@ describe 'glance::backend::rbd' do
it { should contain_glance_api_config('glance_store/rbd_store_user').with_value('user') } it { should contain_glance_api_config('glance_store/rbd_store_user').with_value('user') }
it { should contain_glance_api_config('glance_store/rbd_store_chunk_size').with_value('2') } it { should contain_glance_api_config('glance_store/rbd_store_chunk_size').with_value('2') }
it { should contain_glance_api_config('glance_store/rbd_thin_provisioning').with_value('true') }
it { should contain_glance_api_config('glance_store/rados_connect_timeout').with_value('30')} it { should contain_glance_api_config('glance_store/rados_connect_timeout').with_value('30')}
it { should contain_package('python-ceph').with( it { should contain_package('python-ceph').with(

View File

@ -24,6 +24,7 @@ describe 'glance::backend::multistore::file' do
shared_examples_for 'glance::backend::multistore::file' do shared_examples_for 'glance::backend::multistore::file' do
it 'configures glance-api.conf' do it 'configures glance-api.conf' do
is_expected.to contain_glance_api_config('file/store_description').with_value('<SERVICE DEFAULT>') is_expected.to contain_glance_api_config('file/store_description').with_value('<SERVICE DEFAULT>')
is_expected.to contain_glance_api_config('file/filesystem_thin_provisioning').with_value('<SERVICE DEFAULT>')
is_expected.to contain_glance_api_config('file/filesystem_store_datadir').with_value('<SERVICE DEFAULT>') is_expected.to contain_glance_api_config('file/filesystem_store_datadir').with_value('<SERVICE DEFAULT>')
end end
@ -34,11 +35,15 @@ describe 'glance::backend::multistore::file' do
describe 'when overriding datadir' do describe 'when overriding datadir' do
let :params do let :params do
{:filesystem_store_datadir => '/tmp/'} {
:filesystem_store_datadir => '/tmp/',
:filesystem_thin_provisioning => 'true',
}
end end
it 'configures glance-api.conf' do it 'configures glance-api.conf' do
is_expected.to contain_glance_api_config('file/filesystem_store_datadir').with_value('/tmp/') is_expected.to contain_glance_api_config('file/filesystem_store_datadir').with_value('/tmp/')
is_expected.to contain_glance_api_config('file/filesystem_thin_provisioning').with_value('true')
end end
it 'configures glance-cache.conf' do it 'configures glance-cache.conf' do

View File

@ -27,6 +27,7 @@ describe 'glance::backend::multistore::rbd' do
it { should contain_glance_api_config('rbd/rbd_store_pool').with_value('<SERVICE DEFAULT>') } it { should contain_glance_api_config('rbd/rbd_store_pool').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('rbd/rbd_store_ceph_conf').with_value('<SERVICE DEFAULT>') } it { should contain_glance_api_config('rbd/rbd_store_ceph_conf').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('rbd/rbd_store_chunk_size').with_value('<SERVICE DEFAULT>') } it { should contain_glance_api_config('rbd/rbd_store_chunk_size').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('rbd/rbd_thin_provisioning').with_value('<SERVICE DEFAULT>') }
it { should contain_glance_api_config('rbd/rados_connect_timeout').with_value('<SERVICE DEFAULT>')} it { should contain_glance_api_config('rbd/rados_connect_timeout').with_value('<SERVICE DEFAULT>')}
it { should contain_glance_api_config('rbd/rbd_store_user').with_value('<SERVICE DEFAULT>')} it { should contain_glance_api_config('rbd/rbd_store_user').with_value('<SERVICE DEFAULT>')}
@ -42,6 +43,7 @@ describe 'glance::backend::multistore::rbd' do
:store_description => 'My rbd store', :store_description => 'My rbd store',
:rbd_store_user => 'user', :rbd_store_user => 'user',
:rbd_store_chunk_size => '2', :rbd_store_chunk_size => '2',
:rbd_thin_provisioning => 'true',
:package_ensure => 'latest', :package_ensure => 'latest',
:rados_connect_timeout => '30', :rados_connect_timeout => '30',
} }
@ -50,6 +52,7 @@ describe 'glance::backend::multistore::rbd' do
it { should contain_glance_api_config('rbd/store_description').with_value('My rbd store') } it { should contain_glance_api_config('rbd/store_description').with_value('My rbd store') }
it { should contain_glance_api_config('rbd/rbd_store_user').with_value('user') } it { should contain_glance_api_config('rbd/rbd_store_user').with_value('user') }
it { should contain_glance_api_config('rbd/rbd_store_chunk_size').with_value('2') } it { should contain_glance_api_config('rbd/rbd_store_chunk_size').with_value('2') }
it { should contain_glance_api_config('rbd/rbd_thin_provisioning').with_value('true') }
it { should contain_glance_api_config('rbd/rados_connect_timeout').with_value('30')} it { should contain_glance_api_config('rbd/rados_connect_timeout').with_value('30')}
it { should contain_package('python-ceph').with( it { should contain_package('python-ceph').with(