puppet-tripleo/spec/classes/tripleo_profile_pacemaker_manila_share_bundle_spec.rb
Alan Bishop a33f0c1f21 Avoid hard-coded settings in Manila HA containers
Add parameters for controlling the docker container settings used to
create the manila-share pacemaker bundle. The parameters eliminate the
need to hard-code the list of docker volumes and environment variables,
making it possible to control the values using hiera data.

For backward compatibility, the previous hard-coded values are used
when no parameter inputs are supplied.

Partial-Bug: #1749752
Change-Id: Ia81602f8a3454fcb0be2eaa9126021331d37b147
2018-07-05 09:31:53 -04:00

141 lines
5.3 KiB
Ruby

#
# Copyright (C) 2018 Red Hat, Inc.
#
# 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.
#
require 'spec_helper'
describe 'tripleo::profile::pacemaker::manila::share_bundle' do
shared_examples_for 'tripleo::profile::pacemaker::manila::share_bundle' do
before :each do
facts.merge!({ :step => params[:step] })
end
context 'with step less than 2' do
let(:params) { { :step => 1 } }
it 'should do nothing' do
is_expected.to contain_class('tripleo::profile::base::manila::share')
end
end
context 'with step 2 on bootstrap node' do
let(:params) { {
:step => 2,
} }
it 'should create pacemaker properties' do
is_expected.to contain_pacemaker__property('manila-share-role-manila-1')
is_expected.to contain_pacemaker__property('manila-share-role-manila-2')
end
end
context 'with step 2 not on bootstrap node' do
let(:params) { {
:step => 2,
:bootstrap_node => 'other.example.com',
} }
it 'should not create pacemaker properties' do
is_expected.to_not contain_pacemaker__property('manila-share-role-manila-1')
is_expected.to_not contain_pacemaker__property('manila-share-role-manila-2')
end
end
context 'with step 5' do
let(:params) { {
:step => 5,
:manila_share_docker_image => 'manila-share-image',
} }
context 'with default inputs' do
it 'should create default manila-share resource bundle' do
is_expected.to contain_pacemaker__resource__bundle('openstack-manila-share').with(
:image => 'manila-share-image',
:options => '--ipc=host --privileged=true --user=root --log-driver=journald -e KOLLA_CONFIG_STRATEGY=COPY_ALWAYS',
)
# The default list of storage_maps is rather long, and this
# just does a spot-check of a few key entries. The point is
# to verify the default list is used when the docker_volumes
# input parameter isn't specified.
storage_maps = catalogue.resource(
'Pacemaker::Resource::Bundle', 'openstack-manila-share').send(:parameters)[:storage_maps]
expect(storage_maps).to include('manila-share-cfg-files', 'manila-share-cfg-data')
# CephFS is disabled by default, so ensure no resources are created.
is_expected.to_not contain_pacemaker__constraint__order('ceph-nfs-then-manila-share')
is_expected.to_not contain_pacemaker__constraint__colocation('openstack-manila-share-with-ceph-nfs')
expect(storage_maps).to_not include('manila-share-dbus-docker', 'manila-share-etc-ganesha')
end
end
context 'with cephfs backend enabled' do
before :each do
params.merge!({
:backend_cephfs_enabled => true,
})
end
it 'should include cephfs docker volumes and pacemaker constraints' do
is_expected.to contain_pacemaker__constraint__order('ceph-nfs-then-manila-share')
is_expected.to contain_pacemaker__constraint__colocation('openstack-manila-share-with-ceph-nfs')
storage_maps = catalogue.resource(
'Pacemaker::Resource::Bundle', 'openstack-manila-share').send(:parameters)[:storage_maps]
expect(storage_maps).to include('manila-share-dbus-docker', 'manila-share-etc-ganesha')
end
end
context 'with docker volumes and environment inputs' do
before :each do
params.merge!({
:docker_volumes => ['/src/1:/tgt/1', '/src/2:/tgt/2:ro', '/src/3:/tgt/3:ro,z'],
:docker_environment => ['RIGHT=LEFT', 'UP=DOWN'],
})
end
it 'should create custom manila-share resource bundle' do
is_expected.to contain_pacemaker__resource__bundle('openstack-manila-share').with(
:image => 'manila-share-image',
:options => '--ipc=host --privileged=true --user=root --log-driver=journald -e RIGHT=LEFT -e UP=DOWN',
:storage_maps => {
'manila-share-src-1' => {
'source-dir' => '/src/1',
'target-dir' => '/tgt/1',
'options' => 'rw',
},
'manila-share-src-2' => {
'source-dir' => '/src/2',
'target-dir' => '/tgt/2',
'options' => 'ro',
},
'manila-share-src-3' => {
'source-dir' => '/src/3',
'target-dir' => '/tgt/3',
'options' => 'ro,z',
},
},
)
end
end
end
end
on_supported_os.each do |os, facts|
context "on #{os}" do
let(:facts) do
facts.merge({ :hostname => 'node.example.com' })
end
it_behaves_like 'tripleo::profile::pacemaker::manila::share_bundle'
end
end
end