summaryrefslogtreecommitdiff
path: root/lib/chef/provider/service
diff options
context:
space:
mode:
authorPhil Dibowitz <phil@ipom.com>2019-11-01 17:59:04 -0700
committerPhil Dibowitz <phil@ipom.com>2019-11-04 15:46:07 -0800
commitd1305e8f114f89bf4a518afbdebba23544f73fd5 (patch)
tree7f0d35902dc6168dfef292dd838167a0eb257562 /lib/chef/provider/service
parenta16e94afeefe34abe1c57e6c4f44e25721db7082 (diff)
downloadchef-d1305e8f114f89bf4a518afbdebba23544f73fd5.tar.gz
Fix enable on indirect units
This follows this `is_masked` path to ensure we don't try to enable OR disable systemd units if they are indirect Fixes #9041 Signed-off-by: Phil Dibowitz <phil@ipom.com>
Diffstat (limited to 'lib/chef/provider/service')
-rw-r--r--lib/chef/provider/service/systemd.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/chef/provider/service/systemd.rb b/lib/chef/provider/service/systemd.rb
index 565668c081..3b190f0153 100644
--- a/lib/chef/provider/service/systemd.rb
+++ b/lib/chef/provider/service/systemd.rb
@@ -51,6 +51,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
current_resource.running(false)
current_resource.enabled(false)
current_resource.masked(false)
+ current_resource.indirect(false)
end
else
current_resource.running(is_active?)
@@ -58,6 +59,7 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
current_resource.enabled(is_enabled?)
current_resource.masked(is_masked?)
+ current_resource.indirect(is_indirect?)
current_resource
end
@@ -143,11 +145,19 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
end
def enable_service
+ if current_resource.masked || current_resource.indirect
+ logger.trace("#{new_resource} cannot be enabled: it is masked or indirect")
+ return
+ end
options, args = get_systemctl_options_args
shell_out!("#{systemctl_path} #{args} enable #{Shellwords.escape(new_resource.service_name)}", **options)
end
def disable_service
+ if current_resource.masked || current_resource.indirect
+ logger.trace("#{new_resource} cannot be disabled: it is masked or indirect")
+ return
+ end
options, args = get_systemctl_options_args
shell_out!("#{systemctl_path} #{args} disable #{Shellwords.escape(new_resource.service_name)}", **options)
end
@@ -172,6 +182,12 @@ class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
shell_out("#{systemctl_path} #{args} is-enabled #{Shellwords.escape(new_resource.service_name)} --quiet", **options).exitstatus == 0
end
+ def is_indirect?
+ options, args = get_systemctl_options_args
+ s = shell_out("#{systemctl_path} #{args} is-enabled #{Shellwords.escape(new_resource.service_name)}", **options)
+ s.stdout.include?("indirect")
+ end
+
def is_masked?
options, args = get_systemctl_options_args
s = shell_out("#{systemctl_path} #{args} is-enabled #{Shellwords.escape(new_resource.service_name)}", **options)