summaryrefslogtreecommitdiff
path: root/chef/lib/chef/provider/service/arch.rb
diff options
context:
space:
mode:
Diffstat (limited to 'chef/lib/chef/provider/service/arch.rb')
-rw-r--r--chef/lib/chef/provider/service/arch.rb63
1 files changed, 35 insertions, 28 deletions
diff --git a/chef/lib/chef/provider/service/arch.rb b/chef/lib/chef/provider/service/arch.rb
index 58fcac057a..4f8e3e0b50 100644
--- a/chef/lib/chef/provider/service/arch.rb
+++ b/chef/lib/chef/provider/service/arch.rb
@@ -20,16 +20,16 @@ require 'chef/provider/service/init'
require 'chef/mixin/command'
class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
-
+
def initialize(new_resource, run_context)
super
@init_command = "/etc/rc.d/#{@new_resource.service_name}"
end
-
+
def load_current_resource
-
+
raise Chef::Exceptions::Service unless ::File.exists?("/etc/rc.conf")
- raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
+ raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
super
@@ -38,38 +38,46 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
@current_resource
end
+ # Get list of all daemons from the file '/etc/rc.conf'.
+ # Mutiple lines and background form are supported. Example:
+ # DAEMONS=(\
+ # foobar \
+ # @example \
+ # !net \
+ # )
def daemons
entries = []
- if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/)
- entries += $1.split(" ") if $1.length > 0
+ if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
+ entries += $1.gsub(/\\?[\r\n]/, ' ').gsub(/# *[^ ]+/,' ').split(' ') if $1.length > 0
end
-
+
yield(entries) if block_given?
-
+
entries
end
-
+
+ # FIXME: Multiple entries of DAEMONS will cause very bad results :)
def update_daemons(entries)
- content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/, "DAEMONS=(#{entries.join(' ')})")
+ content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/m, "DAEMONS=(#{entries.join(' ')})")
::File.open("/etc/rc.conf", "w") do |f|
f.write(content)
end
end
-
+
def enable_service()
new_daemons = []
entries = daemons
-
- if entries.include?(new_resource.service_name)
- # exists and already enabled
- new_daemons += entries
+
+ if entries.include?(new_resource.service_name) or entries.include?("@#{new_resource.service_name}")
+ # exists and already enabled (or already enabled as a background service)
+ # new_daemons += entries
else
if entries.include?("!#{new_resource.service_name}")
# exists but disabled
entries.each do |daemon|
- if daemon == "!#{new_resource.service_name}"
+ if daemon == "!#{new_resource.service_name}"
new_daemons << new_resource.service_name
- else
+ else
new_daemons << daemon
end
end
@@ -78,32 +86,31 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
new_daemons += entries
new_daemons << new_resource.service_name
end
+ update_daemons(new_daemons)
end
-
- update_daemons(new_daemons)
end
-
+
def disable_service()
new_daemons = []
entries = daemons
-
+
if entries.include?("!#{new_resource.service_name}")
# exists and disabled
- new_daemons += entries
+ # new_daemons += entries
else
- if entries.include?(new_resource.service_name)
- # exists but enabled
+ if entries.include?(new_resource.service_name) or entries.include?("@#{new_resource.service_name}")
+ # exists but enabled (or enabled as a back-ground service)
+ # FIXME: Does arch support !@foobar ?
entries.each do |daemon|
- if daemon == new_resource.service_name
+ if [new_resource.service_name, "@#{new_resource.service_name}"].include?(daemon)
new_daemons << "!#{new_resource.service_name}"
- else
+ else
new_daemons << daemon
end
end
end
+ update_daemons(new_daemons)
end
-
- update_daemons(new_daemons)
end
end