Add support of Block Device backend for Cinder

This backend provide better storage performance by attaching HDD
to VM via cinder block device driver.

Change-Id: Idb3475a35a7825bb4c97ed5bcdd5dc436e6b9bcf
This commit is contained in:
Denis Egorenko 2016-02-25 20:10:25 +03:00
parent 06e52c2078
commit 42615fe7c9
2 changed files with 161 additions and 0 deletions

89
manifests/backend/bdd.pp Normal file
View File

@ -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 <degorenko@mirantis.com>
#
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)
}

View File

@ -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('<SERVICE DEFAULT>')
should contain_cinder_config('hippo/iscsi_protocol').with_value('<SERVICE DEFAULT>')
should contain_cinder_config('hippo/volume_clear').with_value('<SERVICE DEFAULT>')
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