diff --git a/manifests/backup/ceph.pp b/manifests/backup/ceph.pp new file mode 100644 index 00000000..9ac208ab --- /dev/null +++ b/manifests/backup/ceph.pp @@ -0,0 +1,76 @@ +# +# Copyright (C) 2013 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. +# +# == Class: cinder::backup::ceph +# +# Setup Cinder to backup volumes into Ceph +# +# === Parameters +# +# [*backup_ceph_conf*] +# (optional) Ceph config file to use. +# Should be a valid ceph configuration file +# Defaults to '/etc/ceph/ceph.conf' +# +# [*backup_ceph_user*] +# (optional) The Ceph user to connect with. +# Should be a valid user +# Defaults to 'cinder' +# +# [*backup_ceph_chunk_size*] +# (optional) The chunk size in bytes that a backup will be broken into +# before transfer to backup store. +# Should be a valid integer +# Defaults to '134217728' +# +# [*backup_ceph_pool*] +# (optional) The Ceph pool to backup to. +# Should be a valid ceph pool +# Defaults to 'backups' +# +# [*backup_ceph_stripe_unit*] +# (optional) RBD stripe unit to use when creating a backup image. +# Should be a valid integer +# Defaults to '0' +# +# [*backup_ceph_stripe_count*] +# (optional) RBD stripe count to use when creating a backup image. +# Should be a valid integer +# Defaults to '0' +# + +class cinder::backup::ceph ( + $backup_driver = 'cinder.backup.driver.ceph', + $backup_ceph_conf = '/etc/ceph/ceph.conf', + $backup_ceph_user = 'cinder', + $backup_ceph_chunk_size = '134217728', + $backup_ceph_pool = 'backups', + $backup_ceph_stripe_unit = '0', + $backup_ceph_stripe_count = '0' +) { + + cinder_config { + 'DEFAULT/backup_driver': value => $backup_driver; + 'DEFAULT/backup_ceph_conf': value => $backup_ceph_conf; + 'DEFAULT/backup_ceph_user': value => $backup_ceph_user; + 'DEFAULT/backup_ceph_chunk_size': value => $backup_ceph_chunk_size; + 'DEFAULT/backup_ceph_pool': value => $backup_ceph_pool; + 'DEFAULT/backup_ceph_stripe_unit': value => $backup_ceph_stripe_unit; + 'DEFAULT/backup_ceph_stripe_count': value => $backup_ceph_stripe_count; + } + +} diff --git a/spec/classes/cinder_backup_ceph_spec.rb b/spec/classes/cinder_backup_ceph_spec.rb new file mode 100644 index 00000000..bedd7cdc --- /dev/null +++ b/spec/classes/cinder_backup_ceph_spec.rb @@ -0,0 +1,89 @@ +# +# Copyright (C) 2013 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::ceph class +# + +require 'spec_helper' + +describe 'cinder::backup::ceph' do + + let :default_params do + { :backup_ceph_conf => '/etc/ceph/ceph.conf', + :backup_ceph_user => 'cinder', + :backup_ceph_chunk_size => '134217728', + :backup_ceph_pool => 'backups', + :backup_ceph_stripe_unit => '0', + :backup_ceph_stripe_count => '0' } + end + + let :params do + {} + end + + shared_examples_for 'cinder backup with ceph' do + let :p do + default_params.merge(params) + end + + it 'configures cinder.conf' do + should contain_cinder_config('DEFAULT/backup_driver').with_value('cinder.backup.driver.ceph') + should contain_cinder_config('DEFAULT/backup_ceph_conf').with_value(p[:backup_ceph_conf]) + should contain_cinder_config('DEFAULT/backup_ceph_user').with_value(p[:backup_ceph_user]) + should contain_cinder_config('DEFAULT/backup_ceph_chunk_size').with_value(p[:backup_ceph_chunk_size]) + should contain_cinder_config('DEFAULT/backup_ceph_pool').with_value(p[:backup_ceph_pool]) + should contain_cinder_config('DEFAULT/backup_ceph_stripe_unit').with_value(p[:backup_ceph_stripe_unit]) + should contain_cinder_config('DEFAULT/backup_ceph_stripe_count').with_value(p[:backup_ceph_stripe_count]) + end + + context 'when overriding default parameters' do + before :each do + params.merge!(:backup_ceph_conf => '/tmp/ceph.conf') + params.merge!(:backup_ceph_user => 'toto') + params.merge!(:backup_ceph_chunk_size => '123') + params.merge!(:backup_ceph_pool => 'foo') + params.merge!(:backup_ceph_stripe_unit => '56') + params.merge!(:backup_ceph_stripe_count => '67') + end + it 'should replace default parameters with new values' do + should contain_cinder_config('DEFAULT/backup_ceph_conf').with_value(p[:backup_ceph_conf]) + should contain_cinder_config('DEFAULT/backup_ceph_user').with_value(p[:backup_ceph_user]) + should contain_cinder_config('DEFAULT/backup_ceph_chunk_size').with_value(p[:backup_ceph_chunk_size]) + should contain_cinder_config('DEFAULT/backup_ceph_pool').with_value(p[:backup_ceph_pool]) + should contain_cinder_config('DEFAULT/backup_ceph_stripe_unit').with_value(p[:backup_ceph_stripe_unit]) + should contain_cinder_config('DEFAULT/backup_ceph_stripe_count').with_value(p[:backup_ceph_stripe_count]) + end + end + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'cinder backup with ceph' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + it_configures 'cinder backup with ceph' + end + +end