From 690e16d290fe80320820f29cc82463b3bbdca48c Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Mon, 17 Mar 2014 15:14:23 +0100 Subject: [PATCH] multi-backend: configure default type This patch aims to - configure a default type in cinder-volume (without it, a volume can't boot without explicitly specifying a type from the client, which could lead to errors) - add unit tests for cinder::backends class Change-Id: Ia0a475a629576596dd60e513bf0764e9bc3000ab Signed-off-by: Emilien Macchi --- manifests/backends.pp | 25 ++++++++- spec/classes/cinder_backends_spec.rb | 84 ++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 spec/classes/cinder_backends_spec.rb diff --git a/manifests/backends.pp b/manifests/backends.pp index eb674729..eb417b96 100644 --- a/manifests/backends.pp +++ b/manifests/backends.pp @@ -9,13 +9,32 @@ # This should contain names used in ceph::backend::* resources. # Example: ['volume1', 'volume2', 'sata3'] # +# [*default_volume_type*] +# (optional) default volume type to use. +# This should contain the name of the default volume type to use. +# If not configured, it produces an error when creating a volume +# without specifying a type. +# Defaults to 'false'. +# # Author: Andrew Woodward class cinder::backends ( - $enabled_backends = undef + $enabled_backends = undef, + $default_volume_type = false ){ # Maybe this could be extented to dynamicly find the enabled names cinder_config { - 'DEFAULT/enabled_backends': value => join($enabled_backends, ','); + 'DEFAULT/enabled_backends': value => join($enabled_backends, ','); } -} \ No newline at end of file + + if $default_volume_type { + cinder_config { + 'DEFAULT/default_volume_type': value => $default_volume_type; + } + } else { + cinder_config { + 'DEFAULT/default_volume_type': ensure => absent; + } + } + +} diff --git a/spec/classes/cinder_backends_spec.rb b/spec/classes/cinder_backends_spec.rb new file mode 100644 index 00000000..a0f48c1b --- /dev/null +++ b/spec/classes/cinder_backends_spec.rb @@ -0,0 +1,84 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Author: Emilien Macchi +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Unit tests for cinder::backends class +# + +require 'spec_helper' + +describe 'cinder::backends' do + + let :default_params do + {} + end + + let :params do + {} + end + + shared_examples_for 'cinder backends' do + + let :p do + default_params.merge(params) + end + + context 'configure cinder with default parameters' do + before :each do + params.merge!( + :enabled_backends => ['lowcost', 'regular', 'premium'], + :default_volume_type => false + ) + end + + it 'configures cinder.conf with default params' do + should contain_cinder_config('DEFAULT/enabled_backends').with_value(p[:enabled_backends].join(',')) + should contain_cinder_config('DEFAULT/default_volume_type').with_ensure('absent') + end + end + + context 'configure cinder with a default volume type' do + before :each do + params.merge!( + :enabled_backends => ['lowcost', 'regular', 'premium'], + :default_volume_type => 'regular' + ) + end + + it 'configures cinder.conf with default params' do + should contain_cinder_config('DEFAULT/default_volume_type').with_value('regular') + end + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'cinder backends' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + it_configures 'cinder backends' + end + +end