From 1a4841b535155eab1c5d9425718a5563347e22bb Mon Sep 17 00:00:00 2001 From: Maik Zumstrull Date: Mon, 3 Nov 2014 16:51:05 +0100 Subject: [PATCH] Add configuration helpers for Quobyte The Quobyte system is conceptionally similar to GlusterFS, which is why their Cinder driver is forked from the GlusterFS Cinder driver, so I have taken the same approach here. Change-Id: I5f207a2ca18bc039ad9d4a6036cec4ad84d5d5f5 --- manifests/backend/quobyte.pp | 63 +++++++++++++++++++++ manifests/volume/quobyte.pp | 55 ++++++++++++++++++ spec/classes/cinder_volume_quobyte_spec.rb | 43 ++++++++++++++ spec/defines/cinder_backend_quobyte_spec.rb | 45 +++++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 manifests/backend/quobyte.pp create mode 100644 manifests/volume/quobyte.pp create mode 100644 spec/classes/cinder_volume_quobyte_spec.rb create mode 100644 spec/defines/cinder_backend_quobyte_spec.rb diff --git a/manifests/backend/quobyte.pp b/manifests/backend/quobyte.pp new file mode 100644 index 00000000..234c5334 --- /dev/null +++ b/manifests/backend/quobyte.pp @@ -0,0 +1,63 @@ +# +# == Class: cinder::backend::quobyte +# +# Configures Cinder to use Quobyte USP as a volume driver +# +# === Parameters +# +# [*quobyte_volume_url*] +# (required) The URL of the Quobyte volume to use. +# Not an array as a Quobyte driver instance supports exactly one volume +# at a time - but you can load the driver more than once. +# Example: quobyte://quobyte.cluster.example.com/volume-name +# +# [*quobyte_client_cfg*] +# (optional) Path to a Quobyte client configuration file. +# This is needed if client certificate authentication is enabled on the +# Quobyte cluster. The config file includes the certificate and key. +# +# [*quobyte_qcow2_volumes*] +# (optional) Boolean if volumes should be created as qcow2 volumes. +# Defaults to True. qcow2 volumes allow snapshots, at the cost of a small +# performance penalty. If False, raw volumes will be used. +# +# [*quobyte_sparsed_volumes*] +# (optional) Boolean if raw volumes should be created as sparse files. +# Defaults to True. Non-sparse volumes may have a very small performance +# benefit, but take a long time to create. +# +# [*quobyte_mount_point_base*] +# (optional) Path where the driver should create mountpoints. +# Defaults to a subdirectory "mnt" under the Cinder state directory. +# +# [*volume_backend_name*] +# (optional) Allows for the volume_backend_name to be separate of $name. +# Defaults to: $name +# +# === Examples +# +# cinder::backend::quobyte { 'quobyte1': +# quobyte_volume_url => 'quobyte://quobyte.cluster.example.com/volume-name', +# } +# +define cinder::backend::quobyte ( + $quobyte_volume_url, + $quobyte_client_cfg = undef, + $quobyte_qcow2_volumes = undef, + $quobyte_sparsed_volumes = undef, + $quobyte_mount_point_base = undef, + $volume_backend_name = $name, +) { + + cinder_config { + "${name}/volume_backend_name": value => $volume_backend_name; + "${name}/volume_driver": value => + 'cinder.volume.drivers.quobyte.QuobyteDriver'; + "${name}/quobyte_volume_url": value => $quobyte_volume_url; + "${name}/quobyte_client_cfg": value => $quobyte_client_cfg; + "${name}/quobyte_qcow2_volumes": value => $quobyte_qcow2_volumes; + "${name}/quobyte_sparsed_volumes": value => $quobyte_sparsed_volumes; + "${name}/quobyte_mount_point_base": value => $quobyte_mount_point_base; + } + +} diff --git a/manifests/volume/quobyte.pp b/manifests/volume/quobyte.pp new file mode 100644 index 00000000..9f045a6c --- /dev/null +++ b/manifests/volume/quobyte.pp @@ -0,0 +1,55 @@ +# +# == Class: cinder::volume::quobyte +# +# Configures Cinder to use Quobyte USP as a volume driver +# +# === Parameters +# +# [*quobyte_volume_url*] +# (required) The URL of the Quobyte volume to use. +# Not an array as a Quobyte driver instance supports exactly one volume +# at a time - but you can load the driver more than once. +# Example: quobyte://quobyte.cluster.example.com/volume-name +# +# [*quobyte_client_cfg*] +# (optional) Path to a Quobyte client configuration file. +# This is needed if client certificate authentication is enabled on the +# Quobyte cluster. The config file includes the certificate and key. +# +# [*quobyte_qcow2_volumes*] +# (optional) Boolean if volumes should be created as qcow2 volumes. +# Defaults to True. qcow2 volumes allow snapshots, at the cost of a small +# performance penalty. If False, raw volumes will be used. +# +# [*quobyte_sparsed_volumes*] +# (optional) Boolean if raw volumes should be created as sparse files. +# Defaults to True. Non-sparse volumes may have a very small performance +# benefit, but take a long time to create. +# +# [*quobyte_mount_point_base*] +# (optional) Path where the driver should create mountpoints. +# Defaults to a subdirectory "mnt" under the Cinder state directory. +# +# === Examples +# +# class { 'cinder::volume::quobyte': +# quobyte_volume_url => 'quobyte://quobyte.cluster.example.com/volume-name', +# } +# +class cinder::volume::quobyte ( + $quobyte_volume_url, + $quobyte_client_cfg = undef, + $quobyte_qcow2_volumes = undef, + $quobyte_sparsed_volumes = undef, + $quobyte_mount_point_base = undef, +) { + + cinder::backend::quobyte { 'DEFAULT': + quobyte_volume_url => $quobyte_volume_url, + quobyte_client_cfg => $quobyte_client_cfg, + quobyte_qcow2_volumes => $quobyte_qcow2_volumes, + quobyte_sparsed_volumes => $quobyte_sparsed_volumes, + quobyte_mount_point_base => $quobyte_mount_point_base, + } + +} diff --git a/spec/classes/cinder_volume_quobyte_spec.rb b/spec/classes/cinder_volume_quobyte_spec.rb new file mode 100644 index 00000000..58ab3087 --- /dev/null +++ b/spec/classes/cinder_volume_quobyte_spec.rb @@ -0,0 +1,43 @@ +require 'spec_helper' + +describe 'cinder::volume::quobyte' do + + shared_examples_for 'quobyte volume driver' do + let :params do + { + :quobyte_volume_url => 'quobyte://quobyte.cluster.example.com/volume-name', + :quobyte_qcow2_volumes => false, + :quobyte_sparsed_volumes => true, + } + end + + it 'configures quobyte volume driver' do + should contain_cinder_config('DEFAULT/volume_driver').with_value( + 'cinder.volume.drivers.quobyte.QuobyteDriver') + should contain_cinder_config('DEFAULT/quobyte_volume_url').with_value( + 'quobyte://quobyte.cluster.example.com/volume-name') + should contain_cinder_config('DEFAULT/quobyte_qcow2_volumes').with_value( + false) + should contain_cinder_config('DEFAULT/quobyte_sparsed_volumes').with_value( + true) + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'quobyte volume driver' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + it_configures 'quobyte volume driver' + end + +end diff --git a/spec/defines/cinder_backend_quobyte_spec.rb b/spec/defines/cinder_backend_quobyte_spec.rb new file mode 100644 index 00000000..a3499f2b --- /dev/null +++ b/spec/defines/cinder_backend_quobyte_spec.rb @@ -0,0 +1,45 @@ +require 'spec_helper' + +describe 'cinder::backend::quobyte' do + + shared_examples_for 'quobyte volume driver' do + let(:title) {'myquobyte'} + + let :params do + { + :quobyte_volume_url => 'quobyte://quobyte.cluster.example.com/volume-name', + :quobyte_qcow2_volumes => false, + :quobyte_sparsed_volumes => true, + } + end + + it 'configures quobyte volume driver' do + should contain_cinder_config('myquobyte/volume_driver').with_value( + 'cinder.volume.drivers.quobyte.QuobyteDriver') + should contain_cinder_config('myquobyte/quobyte_volume_url').with_value( + 'quobyte://quobyte.cluster.example.com/volume-name') + should contain_cinder_config('myquobyte/quobyte_qcow2_volumes').with_value( + false) + should contain_cinder_config('myquobyte/quobyte_sparsed_volumes').with_value( + true) + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'quobyte volume driver' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + it_configures 'quobyte volume driver' + end + +end