diff --git a/lib/puppet/provider/pacemaker_common.rb b/lib/puppet/provider/pacemaker_common.rb index c9e45e2..3f8b99c 100644 --- a/lib/puppet/provider/pacemaker_common.rb +++ b/lib/puppet/provider/pacemaker_common.rb @@ -296,6 +296,14 @@ class Puppet::Provider::Pacemaker_common < Puppet::Provider primitives[primitive]['parent']['type'] == 'master' end + # return primitive class + # @param primitive [String] primitive id + # @return [String] + def primitive_class(primitive) + return unless primitive_exists? primitive + primitives[primitive]['class'] + end + # disable this primitive # @param primitive [String] def disable_primitive(primitive) diff --git a/lib/puppet/provider/service/pacemaker.rb b/lib/puppet/provider/service/pacemaker.rb index 5a6a0f2..3139867 100644 --- a/lib/puppet/provider/service/pacemaker.rb +++ b/lib/puppet/provider/service/pacemaker.rb @@ -186,8 +186,12 @@ Puppet::Type.type(:service).provide :pacemaker, :parent => Puppet::Provider::Pac Puppet.info "Basic service '#{extra_provider.name}' is disabled as reported by '#{extra_provider.class.name}' provider" end if extra_provider.status == :running - Puppet.info "Stop basic service '#{extra_provider.name}' using provider '#{extra_provider.class.name}'" - extra_provider.stop + if not ['lsb','systemd','upstart'].include?(primitive_class name) + Puppet.info "Stop basic service '#{extra_provider.name}' using provider '#{extra_provider.class.name}'" + extra_provider.stop + else + Puppet.info "Not stopping basic service '#{extra_provider.name}', since its Pacemaker primitive is using primitive_class '#{extra_provider.class.name}'" + end else Puppet.info "Basic service '#{extra_provider.name}' is stopped as reported by '#{extra_provider.class.name}' provider" end diff --git a/spec/unit/puppet/provider/service/pacemaker_spec.rb b/spec/unit/puppet/provider/service/pacemaker_spec.rb index ae7f9a5..96e4431 100644 --- a/spec/unit/puppet/provider/service/pacemaker_spec.rb +++ b/spec/unit/puppet/provider/service/pacemaker_spec.rb @@ -8,6 +8,7 @@ describe Puppet::Type.type(:service).provider(:pacemaker) do let(:full_name) { 'clone-p_myservice' } let(:name) { 'p_myservice' } let(:hostname) { 'mynode' } + let(:primitive_class) { 'ocf' } before :each do @class = provider @@ -17,6 +18,7 @@ describe Puppet::Type.type(:service).provider(:pacemaker) do @class.stubs(:name).returns(name) @class.stubs(:full_name).returns(full_name) @class.stubs(:basic_service_name).returns(title) + @class.stubs(:primitive_class).returns(primitive_class) @class.stubs(:cib_reset).returns(true) @@ -221,6 +223,12 @@ describe Puppet::Type.type(:service).provider(:pacemaker) do @class.extra_provider.expects(:stop) @class.disable_basic_service end + + it 'does not try to stop a systemd running service' do + @class.stubs(:primitive_class).returns('systemd') + @class.extra_provider.expects(:stop).never + @class.disable_basic_service + end end end