summaryrefslogtreecommitdiff
path: root/chef-helpers/lib/chef-helpers/service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'chef-helpers/lib/chef-helpers/service.rb')
-rw-r--r--chef-helpers/lib/chef-helpers/service.rb63
1 files changed, 63 insertions, 0 deletions
diff --git a/chef-helpers/lib/chef-helpers/service.rb b/chef-helpers/lib/chef-helpers/service.rb
new file mode 100644
index 0000000000..0d865fe00a
--- /dev/null
+++ b/chef-helpers/lib/chef-helpers/service.rb
@@ -0,0 +1,63 @@
+#
+# Copyright:: Copyright 2018-2018, Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# 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.
+#
+
+module ChefHelpers
+ # NOTE: these are mixed into the service resource+providers specifically and deliberately not
+ # injected into the global namespace
+ module Service
+ extend self
+
+ def debianrcd?(node = Internal.getnode)
+ ::File.exist?("/usr/sbin/update-rc.d")
+ end
+
+ def invokercd?(node = Internal.getnode)
+ ::File.exist?("/usr/sbin/invoke-rc.d")
+ end
+
+ def upstart?(node = Internal.getnode)
+ ::File.exist?("/sbin/initctl")
+ end
+
+ def insserv?(node = Internal.getnode)
+ ::File.exist?("/sbin/insserv")
+ end
+
+ def redhatrcd?(node = Internal.getnode)
+ ::File.exist?("/sbin/chkconfig")
+ end
+
+ def service_script_exist?(type, script)
+ case type
+ when :initd
+ ::File.exist?("/etc/init.d/#{script}")
+ when :upstart
+ ::File.exist?("/etc/init/#{script}.conf")
+ when :xinetd
+ ::File.exist?("/etc/xinetd.d/#{script}")
+ when :etc_rcd
+ ::File.exist?("/etc/rc.d/#{script}")
+ when :systemd
+ ::File.exist?("/etc/init.d/#{script}") ||
+ ChefHelpers::Introspection.has_systemd_service_unit?(script) ||
+ ChefHelpers::Introspection.has_systemd_unit?(script)
+ else
+ raise ArgumentError, "type of service must be one of :initd, :upstart, :xinetd, :etc_rcd, or :systemd"
+ end
+ end
+ end
+end