summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith84@gmail.com>2020-03-05 19:41:19 -0800
committerTim Smith <tsmith84@gmail.com>2020-03-05 19:41:19 -0800
commit54f854ba098769c98d1f2868adb0dfcc4eabcdbf (patch)
tree5e935ba25a136ed83ed003771cce413849309cc4
parente06e4ae6833fb2ef7cadd154130914aaf300420d (diff)
downloadchef-remove_legacy_updaterc.tar.gz
Remove support in debian service init for old update-rcremove_legacy_updaterc
This code supports sysv-rc < 2.88 Debian 8 comes with 2.88dsf-59 Debian 7 comes with 2.88dsf-41 So it seems that this code support Debian 6 which went EOL almost exactly 4 years ago. Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r--lib/chef/provider/service/debian.rb62
-rw-r--r--spec/unit/provider/service/debian_service_spec.rb174
2 files changed, 41 insertions, 195 deletions
diff --git a/lib/chef/provider/service/debian.rb b/lib/chef/provider/service/debian.rb
index 76628f92ca..e6987db305 100644
--- a/lib/chef/provider/service/debian.rb
+++ b/lib/chef/provider/service/debian.rb
@@ -1,6 +1,6 @@
#
# Author:: AJ Christensen (<aj@hjksolutions.com>)
-# Copyright:: Copyright 2008-2018, Chef Software Inc.
+# Copyright:: Copyright 2008-2020, Chef Software Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -173,38 +173,13 @@ class Chef
end
shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
-
- # Use legacy syntax if update-rc.d supports it for backward compatibility.
- if use_legacy_update_rc_d?
- # If no priority was given assume 20 (update-rc.d default).
- start_priority = new_resource.priority.is_a?(Integer) ? new_resource.priority : 20
- # Stop processes in reverse order of start using '100 - start_priority'.
- stop_priority = 100 - start_priority
-
- shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} stop #{stop_priority} 2 3 4 5 .")
- else
- shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} defaults")
- shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} disable")
- end
+ shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} defaults")
+ shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} disable")
end
def set_priority
shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
- # Use legacy syntax if update-rc.d supports it for backward compatibility.
- if use_legacy_update_rc_d?
- args = ""
- new_resource.priority.each do |level, o|
- action = o[0]
- priority = o[1]
- args += "#{action} #{priority} #{level} . "
- end
- shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} #{args}")
- return
- end
-
- # Use modern syntax, ignoring priorities as update-rc.d does not support it.
- #
# Reset priorities to default values before applying customizations. This way
# the final state will always be consistent, regardless if all runlevels were
# provided.
@@ -215,37 +190,6 @@ class Chef
shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} #{disable_or_enable} #{level}")
end
end
-
- # Ancient Debian releases used run levels and priorities to manage dependencies ordering.
- # Old syntax no longer works and new syntax does not support priorities. If Chef detects
- # ancient update-rc.d it will prefer legacy syntax so priorities can be set correctly in
- # case the host is in fact running SysVinit.
- #
- # Additional context: https://lists.debian.org/debian-devel/2013/05/msg01109.html
- def use_legacy_update_rc_d?
- @sysv_rc_version ||= shell_out!("dpkg-query -W --showformat '${Version}' sysv-rc").stdout.strip
-
- # sysv-rc is not installed therefore we're on modern Debian and legacy syntax does not work
- if @sysv_rc_version.empty?
- logger.trace("sysv-rc package is not installed. update-rc.d will use modern syntax")
- return false
- end
-
- # sysv-rc is installed and update-rc.d is old enough to support legacy syntax and features
- if @sysv_rc_version.to_f < 2.88
- logger.trace("sysv-rc #{@sysv_rc_version} detected. update-rc.d will use legacy syntax")
- return true
- end
-
- # sysv-rc 2.88dsf-42 drops the legacy syntax
- if @sysv_rc_version.to_f == 2.88 && @sysv_rc_version[8..9].to_i < 42
- logger.trace("sysv-rc #{@sysv_rc_version} detected. update-rc.d will use legacy syntax")
- return true
- end
-
- # default to modern syntax
- false
- end
end
end
end
diff --git a/spec/unit/provider/service/debian_service_spec.rb b/spec/unit/provider/service/debian_service_spec.rb
index a69909107c..60c20118bc 100644
--- a/spec/unit/provider/service/debian_service_spec.rb
+++ b/spec/unit/provider/service/debian_service_spec.rb
@@ -1,6 +1,6 @@
#
# Author:: AJ Christensen (<aj@hjksolutions.com>)
-# Copyright:: Copyright 2008-2016, HJK Solutions, LLC
+# Copyright:: Copyright 2008-2020, Chef Software, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -211,34 +211,14 @@ describe Chef::Provider::Service::Debian do
@new_resource.priority(2 => [:start, 20], 3 => [:stop, 55])
end
- context "when modern update-rc.d is detected" do
- before do
- expect(@provider).to receive(:use_legacy_update_rc_d?).and_return(false)
- end
-
- it "calls update-rc.d remove => defaults => enable|disable <runlevel>" do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d #{service_name} defaults",
- "/usr/sbin/update-rc.d #{service_name} enable 2",
- "/usr/sbin/update-rc.d #{service_name} disable 3",
- ])
- @provider.enable_service
- end
- end
-
- context "when legacy update-rc.d is detected" do
- before do
- expect(@provider).to receive(:use_legacy_update_rc_d?).and_return(true)
- end
-
- it "calls update-rc.d remove => start|stop <priority> <levels> ." do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d #{service_name} start 20 2 . stop 55 3 . ",
- ])
- @provider.disable_service
- end
+ it "calls update-rc.d remove => defaults => enable|disable <runlevel>" do
+ expect_commands(@provider, [
+ "/usr/sbin/update-rc.d -f #{service_name} remove",
+ "/usr/sbin/update-rc.d #{service_name} defaults",
+ "/usr/sbin/update-rc.d #{service_name} enable 2",
+ "/usr/sbin/update-rc.d #{service_name} disable 3",
+ ])
+ @provider.enable_service
end
end
end
@@ -246,124 +226,46 @@ describe Chef::Provider::Service::Debian do
describe "disable_service" do
let(:service_name) { @new_resource.service_name }
- context "when modern update-rc.d is detected" do
- before do
- expect(@provider).to receive(:use_legacy_update_rc_d?).and_return(false)
- end
-
- context "when the service doesn't set a priority" do
- it "calls update-rc.d remove => defaults => disable" do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d #{service_name} defaults",
- "/usr/sbin/update-rc.d #{service_name} disable",
- ])
- @provider.disable_service
- end
- end
-
- context "when the service sets a simple priority 75" do
- before do
- @new_resource.priority(75)
- end
-
- it "ignores priority and calls update-rc.d remove => defaults => disable" do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d #{service_name} defaults",
- "/usr/sbin/update-rc.d #{service_name} disable",
- ])
- @provider.disable_service
- end
- end
-
- context "when the service sets complex priorities using Hash" do
- before do
- @new_resource.priority(2 => [:start, 20], 3 => [:stop, 55])
- end
-
- it "ignores priority and calls update-rc.d remove => defaults => enable|disable <runlevel>" do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d #{service_name} defaults",
- "/usr/sbin/update-rc.d #{service_name} enable 2",
- "/usr/sbin/update-rc.d #{service_name} disable 3",
- ])
- @provider.disable_service
- end
+ context "when the service doesn't set a priority" do
+ it "calls update-rc.d remove => defaults => disable" do
+ expect_commands(@provider, [
+ "/usr/sbin/update-rc.d -f #{service_name} remove",
+ "/usr/sbin/update-rc.d #{service_name} defaults",
+ "/usr/sbin/update-rc.d #{service_name} disable",
+ ])
+ @provider.disable_service
end
end
- context "when legacy update-rc.d is detected" do
+ context "when the service sets a simple priority 75" do
before do
- expect(@provider).to receive(:use_legacy_update_rc_d?).and_return(true)
+ @new_resource.priority(75)
end
- context "when the service doesn't set a priority" do
- it "assumes default priority 20 and calls update-rc.d remove => stop 80 2 3 4 5 ." do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d -f #{service_name} stop 80 2 3 4 5 .",
- ])
- @provider.disable_service
- end
+ it "ignores priority and calls update-rc.d remove => defaults => disable" do
+ expect_commands(@provider, [
+ "/usr/sbin/update-rc.d -f #{service_name} remove",
+ "/usr/sbin/update-rc.d #{service_name} defaults",
+ "/usr/sbin/update-rc.d #{service_name} disable",
+ ])
+ @provider.disable_service
end
+ end
- context "when the service sets a simple priority 75" do
- before do
- @new_resource.priority(75)
- end
-
- it "reverses priority and calls update-rc.d remove => stop 25 2 3 4 5 ." do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d -f #{service_name} stop #{100 - @new_resource.priority} 2 3 4 5 .",
- ])
- @provider.disable_service
- end
+ context "when the service sets complex priorities using Hash" do
+ before do
+ @new_resource.priority(2 => [:start, 20], 3 => [:stop, 55])
end
- context "when the service sets complex priorities using Hash" do
- before do
- @new_resource.priority(2 => [:start, 20], 3 => [:stop, 55])
- end
-
- it "calls update-rc.d remove => start|stop <priority> <levels> ." do
- expect_commands(@provider, [
- "/usr/sbin/update-rc.d -f #{service_name} remove",
- "/usr/sbin/update-rc.d #{service_name} start 20 2 . stop 55 3 . ",
- ])
- @provider.disable_service
- end
+ it "ignores priority and calls update-rc.d remove => defaults => enable|disable <runlevel>" do
+ expect_commands(@provider, [
+ "/usr/sbin/update-rc.d -f #{service_name} remove",
+ "/usr/sbin/update-rc.d #{service_name} defaults",
+ "/usr/sbin/update-rc.d #{service_name} enable 2",
+ "/usr/sbin/update-rc.d #{service_name} disable 3",
+ ])
+ @provider.disable_service
end
end
end
-
- describe "use_legacy_update_rc_d?" do
- let(:dpkg_query_cmd) { "dpkg-query -W --showformat '${Version}' sysv-rc" }
-
- it "is true when svsv-rc package version < 2.88 is installed" do
- shellout_result = double(stdout: "2.86.ds1-34\n")
- expect(@provider).to receive(:shell_out!).with(dpkg_query_cmd).and_return(shellout_result)
- expect(@provider.use_legacy_update_rc_d?).to eq(true)
- end
-
- it "is true when sysv-rc is 2.88 and patch level < ('dsf-')42" do
- shellout_result = double(stdout: "2.88.dsf-41\n")
- expect(@provider).to receive(:shell_out!).with(dpkg_query_cmd).and_return(shellout_result)
- expect(@provider.use_legacy_update_rc_d?).to eq(true)
- end
-
- it "is false when sysv-rc package version >= 2.88 is installed" do
- shellout_result = double(stdout: "2.88dsf-59.9\n")
- expect(@provider).to receive(:shell_out!).with(dpkg_query_cmd).and_return(shellout_result)
- expect(@provider.use_legacy_update_rc_d?).to eq(false)
- end
-
- it "is false when sysv-rc package is not installed" do
- shellout_result = double(stdout: "\n")
- expect(@provider).to receive(:shell_out!).with(dpkg_query_cmd).and_return(shellout_result)
- expect(@provider.use_legacy_update_rc_d?).to eq(false)
- end
- end
end