diff --git a/manifests/backend/bdd.pp b/manifests/backend/bdd.pp new file mode 100644 index 00000000..9faf7e12 --- /dev/null +++ b/manifests/backend/bdd.pp @@ -0,0 +1,89 @@ +# +# Define: cinder::backend::bdd +# +# This class activate Cinder Block Device driver backend +# +# === Parameters: +# +# [*iscsi_ip_address*] +# (Required) The IP address that the iSCSI daemon is listening on +# +# [*available_devices*] +# (Required) List of all available devices. Real hard disks. +# Should be a string. +# +# [*volume_backend_name*] +# (optional) Allows for the volume_backend_name to be separate of $name. +# Defaults to: $name +# +# [*volume_driver*] +# (Optional) Driver to use for volume creation +# Defaults to 'cinder.volume.drivers.block_device.BlockDeviceDriver'. +# +# [*volume_group*] +# (Optional) Name for the VG that will contain exported volumes +# Defaults to $::os_service_default +# +# [*volumes_dir*] +# (Optional) Volume configuration file storage directory +# Defaults to '/var/lib/cinder/volumes'. +# +# [*iscsi_helper*] +# (Optional) iSCSI target user-land tool to use. +# Defaults to fake. +# +# [*iscsi_protocol*] +# (Optional) Protocol to use as iSCSI driver +# Defaults to $::os_service_default. +# +# [*volume_clear*] +# (Optional) Method used to wipe old volumes +# Defaults to $::os_service_default. +# +# [*extra_options*] +# (optional) Hash of extra options to pass to the backend +# Defaults to: {} +# Example : +# { 'bdd_backend/param1' => { 'value' => value1 } } +# +# === Examples +# +# cinder::backend::bdd { 'myBDDbackend': +# iscsi_ip_address => '10.20.0.2', +# available_devices => '/dev/sda,/dev/sdb' +# } +# +# === Authors +# +# Denis Egorenko +# +define cinder::backend::bdd ( + $iscsi_ip_address, + $available_devices, + $volume_backend_name = $name, + $volume_driver = 'cinder.volume.drivers.block_device.BlockDeviceDriver', + $volume_group = $::os_service_default, + $volumes_dir = '/var/lib/cinder/volumes', + $iscsi_helper = 'fake', + $iscsi_protocol = $::os_service_default, + $volume_clear = $::os_service_default, + $extra_options = {}, +) { + + include ::cinder::params + + cinder_config { + "${name}/available_devices": value => $available_devices; + "${name}/volume_backend_name": value => $volume_backend_name; + "${name}/volume_driver": value => $volume_driver; + "${name}/iscsi_ip_address": value => $iscsi_ip_address; + "${name}/iscsi_helper": value => $iscsi_helper; + "${name}/volume_group": value => $volume_group; + "${name}/volumes_dir": value => $volumes_dir; + "${name}/iscsi_protocol": value => $iscsi_protocol; + "${name}/volume_clear": value => $volume_clear; + } + + create_resources('cinder_config', $extra_options) + +} diff --git a/spec/defines/cinder_backend_bdd_spec.rb b/spec/defines/cinder_backend_bdd_spec.rb new file mode 100644 index 00000000..cbb6d5c4 --- /dev/null +++ b/spec/defines/cinder_backend_bdd_spec.rb @@ -0,0 +1,72 @@ +require 'spec_helper' + +describe 'cinder::backend::bdd' do + + let(:title) { 'hippo' } + + let :params do { + :iscsi_ip_address => '127.0.0.2', + :available_devices => '/dev/sda', + } + end + + shared_examples_for 'cinder block device' do + context 'with default parameters' do + it 'should configure bdd driver in cinder.conf with defaults' do + should contain_cinder_config('hippo/volume_backend_name').with_value('hippo') + should contain_cinder_config('hippo/volume_driver').with_value('cinder.volume.drivers.block_device.BlockDeviceDriver') + should contain_cinder_config('hippo/available_devices').with_value('/dev/sda') + should contain_cinder_config('hippo/iscsi_helper').with_value('fake') + should contain_cinder_config('hippo/volumes_dir').with_value('/var/lib/cinder/volumes') + should contain_cinder_config('hippo/iscsi_ip_address').with_value('127.0.0.2') + should contain_cinder_config('hippo/volume_group').with_value('') + should contain_cinder_config('hippo/iscsi_protocol').with_value('') + should contain_cinder_config('hippo/volume_clear').with_value('') + end + end + + context 'with optional parameters' do + before :each do + params.merge!({ + :iscsi_ip_address => '10.20.0.2', + :available_devices => '/dev/sdb,/dev/sdc', + :volumes_dir => '/var/lib/cinder/bdd-volumes', + :volume_clear => 'zero', + :volume_group => 'cinder', + }) + end + + it 'should configure bdd driver in cinder.conf' do + should contain_cinder_config('hippo/available_devices').with_value('/dev/sdb,/dev/sdc') + should contain_cinder_config('hippo/volumes_dir').with_value('/var/lib/cinder/bdd-volumes') + should contain_cinder_config('hippo/iscsi_ip_address').with_value('10.20.0.2') + should contain_cinder_config('hippo/volume_group').with_value('cinder') + should contain_cinder_config('hippo/volume_clear').with_value('zero') + end + end + + context 'block device backend with additional configuration' do + before do + params.merge!({:extra_options => {'hippo/param1' => { 'value' => 'value1' }}}) + end + + it 'configure vmdk backend with additional configuration' do + is_expected.to contain_cinder_config('hippo/param1').with({ + :value => 'value1' + }) + end + end + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge!(OSDefaults.get_facts()) + end + + it_configures 'cinder block device' + end + end +end