diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2014-11-03 16:14:33 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2014-11-08 11:26:07 -0800 |
commit | 7be31e8c29760c600f7af0dd7413055c5c276525 (patch) | |
tree | e8be1323b3ae13ad25b839ca8c95a342c806538f /lib | |
parent | 73302b061284f485c9ec67cc17badc48269dc094 (diff) | |
download | chef-7be31e8c29760c600f7af0dd7413055c5c276525.tar.gz |
systemctl path fixes, rspec modernization, etc
- systemd provider uses `which` mixin to determine systemctl path
- let-ification of spec tests for system provider
- fix some stubbing and mocking of current_resource that was confusing
and useless
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/provider/service/systemd.rb | 76 |
1 files changed, 45 insertions, 31 deletions
diff --git a/lib/chef/provider/service/systemd.rb b/lib/chef/provider/service/systemd.rb index 311751ab9a..717ff7dc5c 100644 --- a/lib/chef/provider/service/systemd.rb +++ b/lib/chef/provider/service/systemd.rb @@ -18,87 +18,91 @@ require 'chef/resource/service' require 'chef/provider/service/simple' +require 'chef/mixin/which' class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple + include Chef::Mixin::Which + provides :service, os: "linux" + attr_accessor :status_check_success + def self.supports?(resource, action) Chef::Platform::ServiceHelpers.service_resource_providers.include?(:systemd) end def load_current_resource - @current_resource = Chef::Resource::Service.new(@new_resource.name) - @current_resource.service_name(@new_resource.service_name) + @current_resource = Chef::Resource::Service.new(new_resource.name) + current_resource.service_name(new_resource.service_name) @status_check_success = true - if @new_resource.status_command - Chef::Log.debug("#{@new_resource} you have specified a status command, running..") + if new_resource.status_command + Chef::Log.debug("#{new_resource} you have specified a status command, running..") - unless shell_out(@new_resource.status_command).error? - @current_resource.running(true) + unless shell_out(new_resource.status_command).error? + current_resource.running(true) else @status_check_success = false - @current_resource.running(false) - @current_resource.enabled(false) - nil + current_resource.running(false) + current_resource.enabled(false) end else - @current_resource.running(is_active?) + current_resource.running(is_active?) end - @current_resource.enabled(is_enabled?) - @current_resource + current_resource.enabled(is_enabled?) + current_resource end def define_resource_requirements shared_resource_requirements requirements.assert(:all_actions) do |a| - a.assertion { @status_check_success } + a.assertion { status_check_success } # We won't stop in any case, but in whyrun warn and tell what we're doing. - a.whyrun ["Failed to determine status of #{@new_resource}, using command #{@new_resource.status_command}.", + a.whyrun ["Failed to determine status of #{new_resource}, using command #{new_resource.status_command}.", "Assuming service would have been installed and is disabled"] end end def start_service - if @current_resource.running - Chef::Log.debug("#{@new_resource} already running, not starting") + if current_resource.running + Chef::Log.debug("#{new_resource} already running, not starting") else - if @new_resource.start_command + if new_resource.start_command super else - shell_out_with_systems_locale!("/bin/systemctl start #{@new_resource.service_name}") + shell_out_with_systems_locale!("#{systemctl_path} start #{new_resource.service_name}") end end end def stop_service - unless @current_resource.running - Chef::Log.debug("#{@new_resource} not running, not stopping") + unless current_resource.running + Chef::Log.debug("#{new_resource} not running, not stopping") else - if @new_resource.stop_command + if new_resource.stop_command super else - shell_out_with_systems_locale!("/bin/systemctl stop #{@new_resource.service_name}") + shell_out_with_systems_locale!("#{systemctl_path} stop #{new_resource.service_name}") end end end def restart_service - if @new_resource.restart_command + if new_resource.restart_command super else - shell_out_with_systems_locale!("/bin/systemctl restart #{@new_resource.service_name}") + shell_out_with_systems_locale!("#{systemctl_path} restart #{new_resource.service_name}") end end def reload_service - if @new_resource.reload_command + if new_resource.reload_command super else - if @current_resource.running - shell_out_with_systems_locale!("/bin/systemctl reload #{@new_resource.service_name}") + if current_resource.running + shell_out_with_systems_locale!("#{systemctl_path} reload #{new_resource.service_name}") else start_service end @@ -106,18 +110,28 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple end def enable_service - shell_out!("/bin/systemctl enable #{@new_resource.service_name}") + shell_out!("#{systemctl_path} enable #{new_resource.service_name}") end def disable_service - shell_out!("/bin/systemctl disable #{@new_resource.service_name}") + shell_out!("#{systemctl_path} disable #{new_resource.service_name}") end def is_active? - shell_out("/bin/systemctl is-active #{@new_resource.service_name} --quiet").exitstatus == 0 + shell_out("#{systemctl_path} is-active #{new_resource.service_name} --quiet").exitstatus == 0 end def is_enabled? - shell_out("/bin/systemctl is-enabled #{@new_resource.service_name} --quiet").exitstatus == 0 + shell_out("#{systemctl_path} is-enabled #{new_resource.service_name} --quiet").exitstatus == 0 end + + private + + def systemctl_path + if @systemctl_path.nil? + @systemctl_path = which("systemctl") + end + @systemctl_path + end + end |