From 5a45ef93dcfe49902f95521ee485bd72944d9c37 Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Tue, 23 Sep 2014 08:49:35 -0400 Subject: [PATCH] iSCSI backend for Cinder volumes As part of multi-backends, add iSCSI cinder backend. * Add iscsi new backend. * Allow to run iSCSI in multi-backend configurations via Hiera. * Unit tests to validate both iSCSI & multi-backends. --- manifests/volume/backend/iscsi.pp | 46 +++++++++++++++++++++++ manifests/volume/storage.pp | 10 ++++- spec/classes/cloud_volume_storage_spec.rb | 21 ++++++++++- 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 manifests/volume/backend/iscsi.pp diff --git a/manifests/volume/backend/iscsi.pp b/manifests/volume/backend/iscsi.pp new file mode 100644 index 00000000..5bd28671 --- /dev/null +++ b/manifests/volume/backend/iscsi.pp @@ -0,0 +1,46 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# Configure iSCSI backend for Cinder +# +# +# === Parameters +# +# [*iscsi_ip_address*] +# (required) IP address of iSCSI target. +# +# [*volume_group*] +# (optional) Cinder volume group name. +# Defaults to 'cinder-volumes'. +# + +define cloud::volume::backend::iscsi ( + $iscsi_ip_address, + $volume_group = 'cinder-volumes', + $volume_backend_name = $name, +) { + + + cinder::backend::iscsi { $name: + iscsi_ip_address => $iscsi_ip_address, + volume_group => $volume_group, + } + + @cinder::type { $volume_backend_name: + set_key => 'volume_backend_name', + set_value => $volume_backend_name, + notify => Service['cinder-volume'] + } +} diff --git a/manifests/volume/storage.pp b/manifests/volume/storage.pp index 26d3b60b..a1f6b777 100644 --- a/manifests/volume/storage.pp +++ b/manifests/volume/storage.pp @@ -83,8 +83,16 @@ class cloud::volume::storage( $netapp_backends = { } } + if has_key($cinder_backends, 'iscsi') { + $iscsi_backends = $cinder_backends['iscsi'] + create_resources('cloud::volume::backend::iscsi', $iscsi_backends) + } + else { + $iscsi_backends = { } + } + class { 'cinder::backends': - enabled_backends => keys(merge($rbd_backends, $netapp_backends)) + enabled_backends => keys(merge($rbd_backends, $netapp_backends, $iscsi_backends)) } # Manage Volume types. diff --git a/spec/classes/cloud_volume_storage_spec.rb b/spec/classes/cloud_volume_storage_spec.rb index 9e44331c..71f9a452 100644 --- a/spec/classes/cloud_volume_storage_spec.rb +++ b/spec/classes/cloud_volume_storage_spec.rb @@ -55,6 +55,12 @@ describe 'cloud::volume::storage' do 'netapp_login' => 'joe', 'netapp_password' => 'secret' } + }, + 'iscsi' => { + 'fast' => { + 'iscsi_ip_address' => '10.0.0.1', + 'volume_group' => 'fast-vol' + } } }, :ks_keystone_internal_proto => 'http', @@ -132,6 +138,19 @@ describe 'cloud::volume::storage' do end end + context 'with iSCSI backend' do + it 'configures iSCSI volume driver' do + should contain_cinder_config('fast/volume_backend_name').with_value('fast') + should contain_cinder_config('fast/iscsi_ip_address').with_value('10.0.0.1') + should contain_cinder_config('fast/volume_group').with_value('fast-vol') + should contain_cinder__type('fast').with( + :set_key => 'volume_backend_name', + :set_value => 'fast', + :notify => 'Service[cinder-volume]' + ) + end + end + context 'with two RBD backends' do before :each do params.merge!( @@ -185,7 +204,7 @@ describe 'cloud::volume::storage' do context 'with all backends enabled' do it 'configure all cinder backends' do should contain_class('cinder::backends').with( - :enabled_backends => ['lowcost', 'premium'] + :enabled_backends => ['lowcost', 'premium', 'fast'] ) end end