microwave 0.1004.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +102 -0
  3. data/bin/chef-solo +25 -0
  4. data/lib/chef.rb +41 -0
  5. data/lib/chef/application.rb +147 -0
  6. data/lib/chef/application/solo.rb +181 -0
  7. data/lib/chef/applications.rb +1 -0
  8. data/lib/chef/checksum.rb +83 -0
  9. data/lib/chef/checksum_cache.rb +189 -0
  10. data/lib/chef/client.rb +325 -0
  11. data/lib/chef/config.rb +152 -0
  12. data/lib/chef/cookbook/chefignore.rb +66 -0
  13. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  14. data/lib/chef/cookbook/cookbook_version_loader.rb +173 -0
  15. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  16. data/lib/chef/cookbook/file_vendor.rb +48 -0
  17. data/lib/chef/cookbook/metadata.rb +629 -0
  18. data/lib/chef/cookbook/syntax_check.rb +136 -0
  19. data/lib/chef/cookbook_loader.rb +121 -0
  20. data/lib/chef/cookbook_version.rb +786 -0
  21. data/lib/chef/cookbook_version_selector.rb +151 -0
  22. data/lib/chef/environment.rb +267 -0
  23. data/lib/chef/exceptions.rb +150 -0
  24. data/lib/chef/file_access_control.rb +144 -0
  25. data/lib/chef/file_cache.rb +218 -0
  26. data/lib/chef/handler.rb +206 -0
  27. data/lib/chef/handler/error_report.rb +33 -0
  28. data/lib/chef/handler/json_file.rb +58 -0
  29. data/lib/chef/json_compat.rb +52 -0
  30. data/lib/chef/log.rb +39 -0
  31. data/lib/chef/mash.rb +211 -0
  32. data/lib/chef/mixin/check_helper.rb +31 -0
  33. data/lib/chef/mixin/checksum.rb +32 -0
  34. data/lib/chef/mixin/command.rb +221 -0
  35. data/lib/chef/mixin/command/unix.rb +215 -0
  36. data/lib/chef/mixin/command/windows.rb +76 -0
  37. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  38. data/lib/chef/mixin/create_path.rb +57 -0
  39. data/lib/chef/mixin/deep_merge.rb +225 -0
  40. data/lib/chef/mixin/deprecation.rb +65 -0
  41. data/lib/chef/mixin/from_file.rb +50 -0
  42. data/lib/chef/mixin/get_source_from_package.rb +42 -0
  43. data/lib/chef/mixin/language.rb +125 -0
  44. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  45. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  46. data/lib/chef/mixin/params_validate.rb +225 -0
  47. data/lib/chef/mixin/recipe_definition_dsl_core.rb +78 -0
  48. data/lib/chef/mixin/shell_out.rb +41 -0
  49. data/lib/chef/mixin/template.rb +95 -0
  50. data/lib/chef/mixin/xml_escape.rb +140 -0
  51. data/lib/chef/mixins.rb +15 -0
  52. data/lib/chef/monkey_patches/dir.rb +36 -0
  53. data/lib/chef/monkey_patches/numeric.rb +15 -0
  54. data/lib/chef/monkey_patches/object.rb +9 -0
  55. data/lib/chef/monkey_patches/regexp.rb +34 -0
  56. data/lib/chef/monkey_patches/string.rb +49 -0
  57. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  58. data/lib/chef/nil_argument.rb +3 -0
  59. data/lib/chef/node.rb +469 -0
  60. data/lib/chef/node/attribute.rb +487 -0
  61. data/lib/chef/platform.rb +409 -0
  62. data/lib/chef/provider.rb +124 -0
  63. data/lib/chef/provider/breakpoint.rb +31 -0
  64. data/lib/chef/provider/cookbook_file.rb +100 -0
  65. data/lib/chef/provider/cron.rb +186 -0
  66. data/lib/chef/provider/cron/solaris.rb +195 -0
  67. data/lib/chef/provider/deploy.rb +343 -0
  68. data/lib/chef/provider/deploy/revision.rb +80 -0
  69. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  70. data/lib/chef/provider/directory.rb +72 -0
  71. data/lib/chef/provider/env.rb +152 -0
  72. data/lib/chef/provider/env/windows.rb +75 -0
  73. data/lib/chef/provider/erl_call.rb +101 -0
  74. data/lib/chef/provider/execute.rb +66 -0
  75. data/lib/chef/provider/file.rb +222 -0
  76. data/lib/chef/provider/git.rb +243 -0
  77. data/lib/chef/provider/group.rb +133 -0
  78. data/lib/chef/provider/group/aix.rb +70 -0
  79. data/lib/chef/provider/group/dscl.rb +121 -0
  80. data/lib/chef/provider/group/gpasswd.rb +53 -0
  81. data/lib/chef/provider/group/groupadd.rb +81 -0
  82. data/lib/chef/provider/group/pw.rb +84 -0
  83. data/lib/chef/provider/group/suse.rb +53 -0
  84. data/lib/chef/provider/group/usermod.rb +57 -0
  85. data/lib/chef/provider/group/windows.rb +79 -0
  86. data/lib/chef/provider/ifconfig.rb +134 -0
  87. data/lib/chef/provider/link.rb +164 -0
  88. data/lib/chef/provider/log.rb +54 -0
  89. data/lib/chef/provider/mdadm.rb +91 -0
  90. data/lib/chef/provider/mount.rb +114 -0
  91. data/lib/chef/provider/mount/mount.rb +240 -0
  92. data/lib/chef/provider/mount/windows.rb +81 -0
  93. data/lib/chef/provider/ohai.rb +42 -0
  94. data/lib/chef/provider/package.rb +163 -0
  95. data/lib/chef/provider/package/apt.rb +135 -0
  96. data/lib/chef/provider/package/dpkg.rb +115 -0
  97. data/lib/chef/provider/package/easy_install.rb +136 -0
  98. data/lib/chef/provider/package/freebsd.rb +125 -0
  99. data/lib/chef/provider/package/macports.rb +105 -0
  100. data/lib/chef/provider/package/pacman.rb +101 -0
  101. data/lib/chef/provider/package/portage.rb +135 -0
  102. data/lib/chef/provider/package/rpm.rb +104 -0
  103. data/lib/chef/provider/package/rubygems.rb +465 -0
  104. data/lib/chef/provider/package/solaris.rb +130 -0
  105. data/lib/chef/provider/package/yum-dump.py +286 -0
  106. data/lib/chef/provider/package/yum.rb +1128 -0
  107. data/lib/chef/provider/package/zypper.rb +144 -0
  108. data/lib/chef/provider/remote_directory.rb +137 -0
  109. data/lib/chef/provider/route.rb +193 -0
  110. data/lib/chef/provider/ruby_block.rb +34 -0
  111. data/lib/chef/provider/script.rb +55 -0
  112. data/lib/chef/provider/service.rb +122 -0
  113. data/lib/chef/provider/service/arch.rb +116 -0
  114. data/lib/chef/provider/service/debian.rb +130 -0
  115. data/lib/chef/provider/service/freebsd.rb +154 -0
  116. data/lib/chef/provider/service/gentoo.rb +53 -0
  117. data/lib/chef/provider/service/init.rb +71 -0
  118. data/lib/chef/provider/service/insserv.rb +52 -0
  119. data/lib/chef/provider/service/redhat.rb +60 -0
  120. data/lib/chef/provider/service/simple.rb +120 -0
  121. data/lib/chef/provider/service/solaris.rb +85 -0
  122. data/lib/chef/provider/service/systemd.rb +102 -0
  123. data/lib/chef/provider/service/upstart.rb +198 -0
  124. data/lib/chef/provider/service/windows.rb +146 -0
  125. data/lib/chef/provider/subversion.rb +197 -0
  126. data/lib/chef/provider/template.rb +104 -0
  127. data/lib/chef/provider/user.rb +186 -0
  128. data/lib/chef/provider/user/dscl.rb +280 -0
  129. data/lib/chef/provider/user/pw.rb +113 -0
  130. data/lib/chef/provider/user/useradd.rb +137 -0
  131. data/lib/chef/provider/user/windows.rb +124 -0
  132. data/lib/chef/providers.rb +93 -0
  133. data/lib/chef/recipe.rb +129 -0
  134. data/lib/chef/resource.rb +584 -0
  135. data/lib/chef/resource/apt_package.rb +34 -0
  136. data/lib/chef/resource/bash.rb +33 -0
  137. data/lib/chef/resource/breakpoint.rb +35 -0
  138. data/lib/chef/resource/cookbook_file.rb +45 -0
  139. data/lib/chef/resource/cron.rb +188 -0
  140. data/lib/chef/resource/csh.rb +33 -0
  141. data/lib/chef/resource/deploy.rb +380 -0
  142. data/lib/chef/resource/deploy_revision.rb +40 -0
  143. data/lib/chef/resource/directory.rb +89 -0
  144. data/lib/chef/resource/dpkg_package.rb +34 -0
  145. data/lib/chef/resource/easy_install_package.rb +57 -0
  146. data/lib/chef/resource/env.rb +58 -0
  147. data/lib/chef/resource/erl_call.rb +83 -0
  148. data/lib/chef/resource/execute.rb +127 -0
  149. data/lib/chef/resource/file.rb +112 -0
  150. data/lib/chef/resource/freebsd_package.rb +35 -0
  151. data/lib/chef/resource/gem_package.rb +53 -0
  152. data/lib/chef/resource/git.rb +46 -0
  153. data/lib/chef/resource/group.rb +70 -0
  154. data/lib/chef/resource/ifconfig.rb +134 -0
  155. data/lib/chef/resource/link.rb +105 -0
  156. data/lib/chef/resource/log.rb +62 -0
  157. data/lib/chef/resource/macports_package.rb +29 -0
  158. data/lib/chef/resource/mdadm.rb +82 -0
  159. data/lib/chef/resource/mount.rb +134 -0
  160. data/lib/chef/resource/ohai.rb +40 -0
  161. data/lib/chef/resource/package.rb +80 -0
  162. data/lib/chef/resource/pacman_package.rb +33 -0
  163. data/lib/chef/resource/perl.rb +33 -0
  164. data/lib/chef/resource/portage_package.rb +33 -0
  165. data/lib/chef/resource/python.rb +33 -0
  166. data/lib/chef/resource/remote_directory.rb +109 -0
  167. data/lib/chef/resource/route.rb +135 -0
  168. data/lib/chef/resource/rpm_package.rb +34 -0
  169. data/lib/chef/resource/ruby.rb +33 -0
  170. data/lib/chef/resource/ruby_block.rb +40 -0
  171. data/lib/chef/resource/scm.rb +147 -0
  172. data/lib/chef/resource/script.rb +60 -0
  173. data/lib/chef/resource/service.rb +160 -0
  174. data/lib/chef/resource/solaris_package.rb +36 -0
  175. data/lib/chef/resource/subversion.rb +36 -0
  176. data/lib/chef/resource/template.rb +69 -0
  177. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  178. data/lib/chef/resource/user.rb +130 -0
  179. data/lib/chef/resource/yum_package.rb +63 -0
  180. data/lib/chef/resource_collection.rb +217 -0
  181. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  182. data/lib/chef/resource_definition.rb +67 -0
  183. data/lib/chef/resource_definition_list.rb +38 -0
  184. data/lib/chef/resources.rb +62 -0
  185. data/lib/chef/role.rb +225 -0
  186. data/lib/chef/run_context.rb +126 -0
  187. data/lib/chef/run_list.rb +161 -0
  188. data/lib/chef/run_list/run_list_expansion.rb +159 -0
  189. data/lib/chef/run_list/run_list_item.rb +92 -0
  190. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  191. data/lib/chef/run_status.rb +121 -0
  192. data/lib/chef/runner.rb +105 -0
  193. data/lib/chef/shell_out.rb +250 -0
  194. data/lib/chef/shell_out/unix.rb +223 -0
  195. data/lib/chef/shell_out/windows.rb +98 -0
  196. data/lib/chef/tasks/chef_repo.rake +330 -0
  197. data/lib/chef/util/file_edit.rb +122 -0
  198. data/lib/chef/util/windows.rb +56 -0
  199. data/lib/chef/util/windows/net_group.rb +101 -0
  200. data/lib/chef/util/windows/net_use.rb +121 -0
  201. data/lib/chef/util/windows/net_user.rb +198 -0
  202. data/lib/chef/util/windows/volume.rb +59 -0
  203. data/lib/chef/version.rb +23 -0
  204. data/lib/chef/version_class.rb +70 -0
  205. data/lib/chef/version_constraint.rb +116 -0
  206. metadata +493 -0
@@ -0,0 +1,34 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: AJ Christensen (<aj@opscode.com>)
4
+ # Copyright:: Copyright (c) 2009 Opscode
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ class Chef
21
+ class Provider
22
+ class RubyBlock < Chef::Provider
23
+ def load_current_resource
24
+ true
25
+ end
26
+
27
+ def action_create
28
+ @new_resource.block.call
29
+ Chef::Log.info("#{@new_resource} called")
30
+ @new_resource.updated_by_last_action(true)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,55 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'tempfile'
20
+ require 'chef/provider/execute'
21
+
22
+ class Chef
23
+ class Provider
24
+ class Script < Chef::Provider::Execute
25
+
26
+ def action_run
27
+ script_file.puts(@new_resource.code)
28
+ script_file.close
29
+
30
+ set_owner_and_group
31
+
32
+ @new_resource.command("\"#{@new_resource.interpreter}\" #{@new_resource.flags} \"#{script_file.path}\"")
33
+ super
34
+ ensure
35
+ unlink_script_file
36
+ end
37
+
38
+ def set_owner_and_group
39
+ # FileUtils itself implements a no-op if +user+ or +group+ are nil
40
+ # You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
41
+ # as an unprivileged user.
42
+ FileUtils.chown(@new_resource.user, @new_resource.group, script_file.path)
43
+ end
44
+
45
+ def script_file
46
+ @script_file ||= Tempfile.open("chef-script")
47
+ end
48
+
49
+ def unlink_script_file
50
+ @script_file && @script_file.close!
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,122 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@hjksolutions.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/mixin/command'
20
+ require 'chef/provider'
21
+
22
+ class Chef
23
+ class Provider
24
+ class Service < Chef::Provider
25
+
26
+ include Chef::Mixin::Command
27
+
28
+ def initialize(new_resource, run_context)
29
+ super
30
+ @enabled = nil
31
+ end
32
+
33
+ def action_enable
34
+ if @current_resource.enabled
35
+ Chef::Log.debug("#{@new_resource} already enabled - nothing to do")
36
+ else
37
+ if $testrun || enable_service
38
+ @new_resource.updated_by_last_action(true)
39
+ Chef::Log.info("#{@new_resource} enabled")
40
+ end
41
+ end
42
+ end
43
+
44
+ def action_disable
45
+ if @current_resource.enabled
46
+ if $testrun || disable_service
47
+ @new_resource.updated_by_last_action(true)
48
+ Chef::Log.info("#{@new_resource} disabled")
49
+ end
50
+ else
51
+ Chef::Log.debug("#{@new_resource} already disabled - nothing to do")
52
+ end
53
+ end
54
+
55
+ def action_start
56
+ unless @current_resource.running
57
+ if $testrun || start_service
58
+ @new_resource.updated_by_last_action(true)
59
+ Chef::Log.info("#{@new_resource} started")
60
+ end
61
+ else
62
+ Chef::Log.debug("#{@new_resource} already running - nothing to do")
63
+ end
64
+ end
65
+
66
+ def action_stop
67
+ if @current_resource.running
68
+ if $testrun || stop_service
69
+ @new_resource.updated_by_last_action(true)
70
+ Chef::Log.info("#{@new_resource} stopped")
71
+ end
72
+ else
73
+ Chef::Log.debug("#{@new_resource} already stopped - nothing to do")
74
+ end
75
+ end
76
+
77
+ def action_restart
78
+ if $testrun || restart_service
79
+ @new_resource.updated_by_last_action(true)
80
+ Chef::Log.info("#{@new_resource} restarted")
81
+ end
82
+ end
83
+
84
+ def action_reload
85
+ unless (@new_resource.supports[:reload] || @new_resource.reload_command)
86
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :reload"
87
+ end
88
+ if @current_resource.running
89
+ if $testrun || reload_service
90
+ @new_resource.updated_by_last_action(true)
91
+ Chef::Log.info("#{@new_resource} reloaded")
92
+ end
93
+ end
94
+ end
95
+
96
+ def enable_service
97
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :enable"
98
+ end
99
+
100
+ def disable_service
101
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :disable"
102
+ end
103
+
104
+ def start_service
105
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :start"
106
+ end
107
+
108
+ def stop_service
109
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :stop"
110
+ end
111
+
112
+ def restart_service
113
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :restart"
114
+ end
115
+
116
+ def reload_service
117
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :restart"
118
+ end
119
+
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,116 @@
1
+ #
2
+ # Author:: Jan Zimmek (<jan.zimmek@web.de>)
3
+ # Copyright:: Copyright (c) 2010 Jan Zimmek
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/provider/service/init'
20
+ require 'chef/mixin/command'
21
+
22
+ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
23
+
24
+ def initialize(new_resource, run_context)
25
+ super
26
+ @init_command = "/etc/rc.d/#{@new_resource.service_name}"
27
+ end
28
+
29
+ def load_current_resource
30
+
31
+ raise Chef::Exceptions::Service unless ::File.exists?("/etc/rc.conf")
32
+ raise Chef::Exceptions::Service unless ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
33
+
34
+ super
35
+
36
+ @current_resource.enabled(daemons.include?(@current_resource.service_name))
37
+
38
+ @current_resource
39
+ end
40
+
41
+ # Get list of all daemons from the file '/etc/rc.conf'.
42
+ # Mutiple lines and background form are supported. Example:
43
+ # DAEMONS=(\
44
+ # foobar \
45
+ # @example \
46
+ # !net \
47
+ # )
48
+ def daemons
49
+ entries = []
50
+ if ::File.read("/etc/rc.conf").match(/DAEMONS=\((.*)\)/m)
51
+ entries += $1.gsub(/\\?[\r\n]/, ' ').gsub(/# *[^ ]+/,' ').split(' ') if $1.length > 0
52
+ end
53
+
54
+ yield(entries) if block_given?
55
+
56
+ entries
57
+ end
58
+
59
+ # FIXME: Multiple entries of DAEMONS will cause very bad results :)
60
+ def update_daemons(entries)
61
+ content = ::File.read("/etc/rc.conf").gsub(/DAEMONS=\((.*)\)/m, "DAEMONS=(#{entries.join(' ')})")
62
+ ::File.open("/etc/rc.conf", "w") do |f|
63
+ f.write(content)
64
+ end
65
+ end
66
+
67
+ def enable_service()
68
+ new_daemons = []
69
+ entries = daemons
70
+
71
+ if entries.include?(new_resource.service_name) or entries.include?("@#{new_resource.service_name}")
72
+ # exists and already enabled (or already enabled as a background service)
73
+ # new_daemons += entries
74
+ else
75
+ if entries.include?("!#{new_resource.service_name}")
76
+ # exists but disabled
77
+ entries.each do |daemon|
78
+ if daemon == "!#{new_resource.service_name}"
79
+ new_daemons << new_resource.service_name
80
+ else
81
+ new_daemons << daemon
82
+ end
83
+ end
84
+ else
85
+ # does not exist
86
+ new_daemons += entries
87
+ new_daemons << new_resource.service_name
88
+ end
89
+ update_daemons(new_daemons)
90
+ end
91
+ end
92
+
93
+ def disable_service()
94
+ new_daemons = []
95
+ entries = daemons
96
+
97
+ if entries.include?("!#{new_resource.service_name}")
98
+ # exists and disabled
99
+ # new_daemons += entries
100
+ else
101
+ if entries.include?(new_resource.service_name) or entries.include?("@#{new_resource.service_name}")
102
+ # exists but enabled (or enabled as a back-ground service)
103
+ # FIXME: Does arch support !@foobar ?
104
+ entries.each do |daemon|
105
+ if [new_resource.service_name, "@#{new_resource.service_name}"].include?(daemon)
106
+ new_daemons << "!#{new_resource.service_name}"
107
+ else
108
+ new_daemons << daemon
109
+ end
110
+ end
111
+ end
112
+ update_daemons(new_daemons)
113
+ end
114
+ end
115
+
116
+ end
@@ -0,0 +1,130 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@hjksolutions.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/provider/service'
20
+ require 'chef/provider/service/init'
21
+ require 'chef/mixin/command'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Service
26
+ class Debian < Chef::Provider::Service::Init
27
+ UPDATE_RC_D_ENABLED_MATCHES = /\/rc[\dS].d\/S|not installed/i
28
+ UPDATE_RC_D_PRIORITIES = /\/rc([\dS]).d\/([SK])(\d\d)/i
29
+
30
+ def load_current_resource
31
+ super
32
+
33
+ @current_resource.priority(get_priority)
34
+ @current_resource.enabled(service_currently_enabled?(@current_resource.priority))
35
+ @current_resource
36
+ end
37
+
38
+ def assert_update_rcd_available
39
+ unless ::File.exists? "/usr/sbin/update-rc.d"
40
+ raise Chef::Exceptions::Service, "/usr/sbin/update-rc.d does not exist!"
41
+ end
42
+ end
43
+
44
+ def get_priority
45
+ assert_update_rcd_available
46
+ priority = {}
47
+
48
+ status = popen4("/usr/sbin/update-rc.d -n -f #{@current_resource.service_name} remove") do |pid, stdin, stdout, stderr|
49
+
50
+ [stdout, stderr].each do |iop|
51
+ iop.each_line do |line|
52
+ if UPDATE_RC_D_PRIORITIES =~ line
53
+ # priority[runlevel] = [ S|K, priority ]
54
+ # S = Start, K = Kill
55
+ # debian runlevels: 0 Halt, 1 Singleuser, 2 Multiuser, 3-5 == 2, 6 Reboot
56
+ priority[$1] = [($2 == "S" ? :start : :stop), $3]
57
+ end
58
+ if line =~ UPDATE_RC_D_ENABLED_MATCHES
59
+ enabled = true
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ unless status.exitstatus == 0
66
+ raise Chef::Exceptions::Service, "/usr/sbin/update-rc.d -n -f #{@current_resource.service_name} failed - #{status.inspect}"
67
+ end
68
+ priority
69
+ end
70
+
71
+ def service_currently_enabled?(priority)
72
+ enabled = false
73
+
74
+ priority.each { |runlevel, arguments|
75
+ Chef::Log.debug("#{@new_resource} runlevel #{runlevel}, action #{arguments[0]}, priority #{arguments[1]}")
76
+
77
+ # if we are in a update-rc.d default startup runlevel && we start in this runlevel
78
+ if (2..5).include?(runlevel.to_i) && arguments[0] == :start
79
+ enabled = true
80
+ end
81
+ }
82
+
83
+ enabled
84
+ end
85
+
86
+ def enable_service()
87
+ if @new_resource.priority.is_a? Integer
88
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
89
+ run_command(:command => "/usr/sbin/update-rc.d #{@new_resource.service_name} defaults #{@new_resource.priority} #{100 - @new_resource.priority}")
90
+ elsif @new_resource.priority.is_a? Hash
91
+ # we call the same command regardless of we're enabling or disabling
92
+ # users passing a Hash are responsible for setting their own start priorities
93
+ set_priority()
94
+ else # No priority, go with update-rc.d defaults
95
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
96
+ run_command(:command => "/usr/sbin/update-rc.d #{@new_resource.service_name} defaults")
97
+ end
98
+
99
+ end
100
+
101
+ def disable_service()
102
+ if @new_resource.priority.is_a? Integer
103
+ # Stop processes in reverse order of start using '100 - start_priority'
104
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
105
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} stop #{100 - @new_resource.priority} 2 3 4 5 .")
106
+ elsif @new_resource.priority.is_a? Hash
107
+ # we call the same command regardless of we're enabling or disabling
108
+ # users passing a Hash are responsible for setting their own stop priorities
109
+ set_priority()
110
+ else
111
+ # no priority, using '100 - 20 (update-rc.d default)' to stop in reverse order of start
112
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
113
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} stop 80 2 3 4 5 .")
114
+ end
115
+ end
116
+
117
+ def set_priority()
118
+ args = ""
119
+ @new_resource.priority.each do |level, o|
120
+ action = o[0]
121
+ priority = o[1]
122
+ args += "#{action} #{priority} #{level} . "
123
+ end
124
+ run_command(:command => "/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
125
+ run_command(:command => "/usr/sbin/update-rc.d #{@new_resource.service_name} #{args}")
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end