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,154 @@
1
+ #
2
+ # Author:: Bryan McLellan (btm@loftninjas.org)
3
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
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/mixin/command'
21
+
22
+ class Chef
23
+ class Provider
24
+ class Service
25
+ class Freebsd < Chef::Provider::Service::Init
26
+
27
+ def load_current_resource
28
+ @current_resource = Chef::Resource::Service.new(@new_resource.name)
29
+ @current_resource.service_name(@new_resource.service_name)
30
+
31
+ # Determine if we're talking about /etc/rc.d or /usr/local/etc/rc.d
32
+ if ::File.exists?("/etc/rc.d/#{current_resource.service_name}")
33
+ @init_command = "/etc/rc.d/#{current_resource.service_name}"
34
+ elsif ::File.exists?("/usr/local/etc/rc.d/#{current_resource.service_name}")
35
+ @init_command = "/usr/local/etc/rc.d/#{current_resource.service_name}"
36
+ else
37
+ raise Chef::Exceptions::Service, "#{@new_resource}: unable to locate the rc.d script"
38
+ end
39
+ Chef::Log.debug("#{@current_resource} found at #{@init_command}")
40
+
41
+ if @new_resource.supports[:status]
42
+ begin
43
+ if run_command(:command => "#{@init_command} status") == 0
44
+ @current_resource.running true
45
+ Chef::Log.debug("#{@new_resource} is running")
46
+ end
47
+ rescue Chef::Exceptions::Exec
48
+ @current_resource.running false
49
+ nil
50
+ end
51
+
52
+ elsif @new_resource.status_command
53
+ begin
54
+ if run_command(:command => @new_resource.status_command) == 0
55
+ @current_resource.running true
56
+ Chef::Log.debug("#{@new_resource} is running")
57
+ end
58
+ rescue Chef::Exceptions::Exec
59
+ @current_resource.running false
60
+ nil
61
+ end
62
+
63
+ else
64
+ Chef::Log.debug("#{@new_resource} does not support status and you have not specified a status command, falling back to process table inspection")
65
+
66
+ if node[:command][:ps].nil? or node[:command][:ps].empty?
67
+ raise Chef::Exceptions::Service, "#{@new_resource} could not determine how to inspect the process table, please set this nodes 'ps' attribute"
68
+ end
69
+
70
+ status = popen4(node[:command][:ps]) do |pid, stdin, stdout, stderr|
71
+ r = Regexp.new(@new_resource.pattern)
72
+ Chef::Log.debug("#{@new_resource} attempting to match #{@new_resource.pattern} (#{r}) against process table")
73
+ stdout.each_line do |line|
74
+ if r.match(line)
75
+ @current_resource.running true
76
+ break
77
+ end
78
+ end
79
+ @current_resource.running false unless @current_resource.running
80
+ end
81
+ unless status.exitstatus == 0
82
+ raise Chef::Exceptions::Service, "Command #{node[:command][:ps]} failed"
83
+ else
84
+ Chef::Log.debug("#{@new_resource} #{node[:command][:ps]} exited and parsed successfully, process running: #{@current_resource.running}")
85
+ end
86
+ end
87
+
88
+ if ::File.exists?("/etc/rc.conf")
89
+ read_rc_conf.each do |line|
90
+ case line
91
+ when /#{Regexp.escape(service_enable_variable_name)}="(\w+)"/
92
+ if $1 =~ /[Yy][Ee][Ss]/
93
+ @current_resource.enabled true
94
+ elsif $1 =~ /[Nn][Oo][Nn]?[Oo]?[Nn]?[Ee]?/
95
+ @current_resource.enabled false
96
+ end
97
+ end
98
+ end
99
+ end
100
+ unless @current_resource.enabled
101
+ Chef::Log.debug("#{@new_resource.name} enable/disable state unknown")
102
+ end
103
+
104
+ @current_resource
105
+ end
106
+
107
+ def read_rc_conf
108
+ ::File.open("/etc/rc.conf", 'r') { |file| file.readlines }
109
+ end
110
+
111
+ def write_rc_conf(lines)
112
+ ::File.open("/etc/rc.conf", 'w') do |file|
113
+ lines.each { |line| file.puts(line) }
114
+ end
115
+ end
116
+
117
+
118
+ # The variable name used in /etc/rc.conf for enabling this service
119
+ def service_enable_variable_name
120
+ # Look for name="foo" in the shell script @init_command. Use this for determining the variable name in /etc/rc.conf
121
+ # corresponding to this service
122
+ # For example: to enable the service mysql-server with the init command /usr/local/etc/rc.d/mysql-server, you need
123
+ # to set mysql_enable="YES" in /etc/rc.conf
124
+ makefile = ::File.open(@init_command)
125
+ makefile.each do |line|
126
+ case line
127
+ when /^name="?(\w+)"?/
128
+ return $1 + "_enable"
129
+ end
130
+ end
131
+ raise Chef::Exceptions::Service, "Could not find name=\"service\" line in #{@init_command}"
132
+ end
133
+
134
+ def set_service_enable(value)
135
+ lines = read_rc_conf
136
+ # Remove line that set the old value
137
+ lines.delete_if { |line| line =~ /#{service_enable_variable_name}/ }
138
+ # And append the line that sets the new value at the end
139
+ lines << "#{service_enable_variable_name}=\"#{value}\""
140
+ write_rc_conf(lines)
141
+ end
142
+
143
+ def enable_service()
144
+ set_service_enable("YES") unless @current_resource.enabled
145
+ end
146
+
147
+ def disable_service()
148
+ set_service_enable("NO") if @current_resource.enabled
149
+ end
150
+
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,53 @@
1
+ #
2
+ # Author:: Lee Jensen (<ljensen@engineyard.com>)
3
+ # Author:: AJ Christensen (<aj@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
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
+ require 'chef/provider/service'
21
+ require 'chef/mixin/command'
22
+
23
+ class Chef::Provider::Service::Gentoo < Chef::Provider::Service::Init
24
+ def load_current_resource
25
+
26
+ @new_resource.supports[:status] = true
27
+ @new_resource.supports[:restart] = true
28
+
29
+ super
30
+
31
+ raise Chef::Exceptions::Service unless ::File.exists?("/sbin/rc-update")
32
+
33
+ @current_resource.enabled(
34
+ Dir.glob("/etc/runlevels/**/#{@current_resource.service_name}").any? do |file|
35
+ exists = ::File.exists? file
36
+ readable = ::File.readable? file
37
+ Chef::Log.debug "#{@new_resource} exists: #{exists}, readable: #{readable}"
38
+ exists and readable
39
+ end
40
+ )
41
+ Chef::Log.debug "#{@new_resource} enabled: #{@current_resource.enabled}"
42
+
43
+ @current_resource
44
+ end
45
+
46
+ def enable_service()
47
+ run_command(:command => "/sbin/rc-update add #{@new_resource.service_name} default")
48
+ end
49
+
50
+ def disable_service()
51
+ run_command(:command => "/sbin/rc-update del #{@new_resource.service_name} default")
52
+ end
53
+ end
@@ -0,0 +1,71 @@
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/simple'
21
+ require 'chef/mixin/command'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Service
26
+ class Init < Chef::Provider::Service::Simple
27
+
28
+ def initialize(new_resource, run_context)
29
+ super
30
+ @init_command = "/etc/init.d/#{@new_resource.service_name}"
31
+ end
32
+
33
+ def start_service
34
+ if @new_resource.start_command
35
+ super
36
+ else
37
+ run_command(:command => "#{@init_command} start")
38
+ end
39
+ end
40
+
41
+ def stop_service
42
+ if @new_resource.stop_command
43
+ super
44
+ else
45
+ run_command(:command => "#{@init_command} stop")
46
+ end
47
+ end
48
+
49
+ def restart_service
50
+ if @new_resource.restart_command
51
+ super
52
+ elsif @new_resource.supports[:restart]
53
+ run_command(:command => "#{@init_command} restart")
54
+ else
55
+ stop_service
56
+ sleep 1
57
+ start_service
58
+ end
59
+ end
60
+
61
+ def reload_service
62
+ if @new_resource.reload_command
63
+ super
64
+ elsif @new_resource.supports[:reload]
65
+ run_command(:command => "#{@init_command} reload")
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,52 @@
1
+ #
2
+ # Author:: Bryan McLellan <btm@loftninjas.org>
3
+ # Copyright:: Copyright (c) 2011 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 Insserv < Chef::Provider::Service::Init
27
+
28
+ def load_current_resource
29
+ super
30
+
31
+ # Look for a /etc/rc.*/SnnSERVICE link to signifiy that the service would be started in a runlevel
32
+ if Dir.glob("/etc/rc**/S*#{@current_resource.service_name}").empty?
33
+ @current_resource.enabled false
34
+ else
35
+ @current_resource.enabled true
36
+ end
37
+
38
+ @current_resource
39
+ end
40
+
41
+ def enable_service()
42
+ run_command(:command => "/sbin/insserv -r -f #{@new_resource.service_name}")
43
+ run_command(:command => "/sbin/insserv -d -f #{@new_resource.service_name}")
44
+ end
45
+
46
+ def disable_service()
47
+ run_command(:command => "/sbin/insserv -r -f #{@new_resource.service_name}")
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,60 @@
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/shell_out'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Service
26
+ class Redhat < Chef::Provider::Service::Init
27
+ include Chef::Mixin::ShellOut
28
+
29
+ CHKCONFIG_ON = /\d:on/
30
+
31
+ def initialize(new_resource, run_context)
32
+ super
33
+ @init_command = "/sbin/service #{@new_resource.service_name}"
34
+ @new_resource.supports[:status] = true
35
+ end
36
+
37
+ def load_current_resource
38
+ unless ::File.exists? "/sbin/chkconfig"
39
+ raise Chef::Exceptions::Service, "/sbin/chkconfig does not exist!"
40
+ end
41
+
42
+ super
43
+
44
+ chkconfig = shell_out!("/sbin/chkconfig --list #{@current_resource.service_name}", :returns => [0,1])
45
+ @current_resource.enabled(!!(chkconfig.stdout =~ CHKCONFIG_ON))
46
+ @current_resource
47
+ end
48
+
49
+ def enable_service()
50
+ shell_out! "/sbin/chkconfig #{@new_resource.service_name} on"
51
+ end
52
+
53
+ def disable_service()
54
+ shell_out! "/sbin/chkconfig #{@new_resource.service_name} off"
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,120 @@
1
+ #
2
+ # Author:: Mathieu Sauve-Frankel <msf@kisoku.net>
3
+ # Copyright:: Copyright (c) 2009 Mathieu Sauve-Frankel
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/mixin/command'
21
+
22
+ class Chef
23
+ class Provider
24
+ class Service
25
+ class Simple < Chef::Provider::Service
26
+ def load_current_resource
27
+ @current_resource = Chef::Resource::Service.new(@new_resource.name)
28
+ @current_resource.service_name(@new_resource.service_name)
29
+ if @new_resource.status_command
30
+ Chef::Log.debug("#{@new_resource} you have specified a status command, running..")
31
+
32
+ begin
33
+ if run_command(:command => @new_resource.status_command) == 0
34
+ @current_resource.running true
35
+ Chef::Log.debug("#{@new_resource} is running")
36
+ end
37
+ rescue Chef::Exceptions::Exec
38
+ @current_resource.running false
39
+ nil
40
+ end
41
+
42
+ elsif @new_resource.supports[:status]
43
+ Chef::Log.debug("#{@new_resource} supports status, running")
44
+
45
+ begin
46
+ if run_command(:command => "#{@init_command} status") == 0
47
+ @current_resource.running true
48
+ Chef::Log.debug("#{@new_resource} is running")
49
+ end
50
+ rescue Chef::Exceptions::Exec
51
+ @current_resource.running false
52
+ nil
53
+ end
54
+ elsif
55
+ Chef::Log.debug "#{@new_resource} falling back to process table inspection"
56
+ if ps_cmd.nil? or ps_cmd.empty?
57
+ raise Chef::Exceptions::Service, "#{@new_resource} could not determine how to inspect the process table, please set this nodes 'command.ps' attribute"
58
+ end
59
+ status = popen4(ps_cmd) do |pid, stdin, stdout, stderr|
60
+ r = Regexp.new(@new_resource.pattern)
61
+ Chef::Log.debug "#{@new_resource} attempting to match '#{@new_resource.pattern}' (#{r.inspect}) against process list"
62
+ stdout.each_line do |line|
63
+ if r.match(line)
64
+ @current_resource.running true
65
+ break
66
+ end
67
+ end
68
+ @current_resource.running false unless @current_resource.running
69
+ end
70
+ unless status.exitstatus == 0
71
+ raise Chef::Exceptions::Service, "Command #{ps_cmd} failed"
72
+ else
73
+ Chef::Log.debug "#{@new_resource} running: #{@current_resource.running}"
74
+ end
75
+ end
76
+
77
+ @current_resource
78
+ end
79
+
80
+ def start_service
81
+ if @new_resource.start_command
82
+ run_command(:command => @new_resource.start_command)
83
+ else
84
+ raise Chef::Exceptions::Service, "#{self.to_s} requires that start_command to be set"
85
+ end
86
+ end
87
+
88
+ def stop_service
89
+ if @new_resource.stop_command
90
+ run_command(:command => @new_resource.stop_command)
91
+ else
92
+ raise Chef::Exceptions::Service, "#{self.to_s} requires that stop_command to be set"
93
+ end
94
+ end
95
+
96
+ def restart_service
97
+ if @new_resource.restart_command
98
+ run_command(:command => @new_resource.restart_command)
99
+ else
100
+ stop_service
101
+ sleep 1
102
+ start_service
103
+ end
104
+ end
105
+
106
+ def reload_service
107
+ if @new_resource.reload_command
108
+ run_command(:command => @new_resource.reload_command)
109
+ else
110
+ raise Chef::Exceptions::Service, "#{self.to_s} requires that reload_command to be set"
111
+ end
112
+ end
113
+
114
+ def ps_cmd
115
+ @run_context.node[:command] && @run_context.node[:command][:ps]
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end