Add Ceph RBD mirror Pacemaker profile
This change adds a profile for the Ceph RBD mirror service, which should be managed by Pacemaker to make sure there is always a single instance running. Change-Id: Ic63dc5cffece38942d305f538f71dd58a5d50789 Partial-Bug: #1652177
This commit is contained in:
parent
bf68fa9683
commit
cdd7341b50
|
@ -0,0 +1,77 @@
|
|||
# Copyright 2016 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.
|
||||
#
|
||||
# == Class: tripleo::profile::pacemaker::ceph::rbdmirror
|
||||
#
|
||||
# Ceph RBD mirror Pacemaker profile for tripleo
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*bootstrap_node*]
|
||||
# (Optional) The hostname of the node responsible for bootstrapping tasks
|
||||
# Defaults to hiera('ceph_rbdmirror_bootstrap_short_node_name')
|
||||
#
|
||||
# [*client_name*]
|
||||
# (Optional) Name assigned to the RBD mirror client
|
||||
# Defaults to 'rbd-mirror'
|
||||
#
|
||||
# [*stack_action*]
|
||||
# (Optional) Action executed on the stack. See tripleo-heat-templates
|
||||
# for more details.
|
||||
# Defaults to hiera('stack_action')
|
||||
#
|
||||
# [*step*]
|
||||
# (Optional) The current step in deployment. See tripleo-heat-templates
|
||||
# for more details.
|
||||
# Defaults to hiera('step')
|
||||
#
|
||||
class tripleo::profile::pacemaker::ceph::rbdmirror (
|
||||
$bootstrap_node = hiera('ceph_rbdmirror_bootstrap_short_node_name'),
|
||||
$client_name = 'openstack',
|
||||
$stack_action = hiera('stack_action'),
|
||||
$step = hiera('step'),
|
||||
) {
|
||||
Service <| tag == 'ceph-rbd-mirror' |> {
|
||||
hasrestart => true,
|
||||
restart => '/bin/true',
|
||||
start => '/bin/true',
|
||||
stop => '/bin/true',
|
||||
}
|
||||
|
||||
if $::hostname == downcase($bootstrap_node) {
|
||||
$pacemaker_master = true
|
||||
} else {
|
||||
$pacemaker_master = false
|
||||
}
|
||||
|
||||
include ::tripleo::profile::base::ceph
|
||||
|
||||
if $step >= 3 {
|
||||
ceph::mirror { $client_name:
|
||||
rbd_mirror_enable => false,
|
||||
rbd_mirror_ensure => 'stopped',
|
||||
} ->
|
||||
pacemaker::resource::service { "ceph-rbd-mirror_${client_name}":
|
||||
# NOTE(gfidente): systemd uses the @ sign but it is an invalid
|
||||
# character in a pcmk resource name, so we need to use it only
|
||||
# for the name of the service
|
||||
service_name => "ceph-rbd-mirror@${client_name}"
|
||||
}
|
||||
}
|
||||
|
||||
if $step >= 3 and $pacemaker_master and $stack_action == 'UPDATE' {
|
||||
Ceph_config<||> ~> Tripleo::Pacemaker::Resource_restart_flag["ceph-rbd-mirror@${client_name}"]
|
||||
tripleo::pacemaker::resource_restart_flag { "ceph-rbd-mirror@${client_name}": }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
#
|
||||
# Copyright (C) 2016 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::ceph::rbdmirror' do
|
||||
shared_examples_for 'tripleo::profile::pacemaker::ceph::rbdmirror' do
|
||||
let (:pre_condition) do
|
||||
<<-eof
|
||||
class { '::tripleo::profile::base::ceph':
|
||||
step => #{params[:step]}
|
||||
}
|
||||
eof
|
||||
end
|
||||
|
||||
context 'with step less than 3' do
|
||||
let(:params) { { :step => 2 } }
|
||||
it 'should do nothing' do
|
||||
is_expected.to contain_class('tripleo::profile::base::ceph')
|
||||
is_expected.to_not contain_class('ceph::mirror')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with step 3 and client_name' do
|
||||
let(:params) { {
|
||||
:step => 3,
|
||||
:client_name => 'myname',
|
||||
} }
|
||||
|
||||
it 'should include rbdmirror configuration' do
|
||||
is_expected.to contain_class('tripleo::profile::base::ceph')
|
||||
is_expected.to contain_class('ceph::rbdmirror').with(
|
||||
:rbd_mirror_enable => false,
|
||||
:rbd_mirror_ensure => 'stopped',
|
||||
)
|
||||
is_expected.to contain_class('pacemaker::resource::service')
|
||||
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::ceph::rbdmirror'
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue