runa-chef 0.8.0.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 (216) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +136 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +26 -0
  5. data/bin/knife +27 -0
  6. data/bin/shef +45 -0
  7. data/distro/README +2 -0
  8. data/distro/common/man/man1/chef-indexer.1 +42 -0
  9. data/distro/common/man/man1/chef-server.1 +108 -0
  10. data/distro/common/man/man8/chef-client.8 +61 -0
  11. data/distro/common/man/man8/chef-solo.8 +58 -0
  12. data/distro/common/man/man8/knife.8 +359 -0
  13. data/distro/debian/etc/init.d/chef-client +175 -0
  14. data/distro/debian/etc/init.d/chef-indexer +175 -0
  15. data/distro/debian/etc/init.d/chef-server +120 -0
  16. data/distro/redhat/etc/init.d/chef-client +78 -0
  17. data/distro/redhat/etc/init.d/chef-indexer +76 -0
  18. data/distro/redhat/etc/init.d/chef-server +78 -0
  19. data/distro/redhat/etc/sysconfig/chef-client +10 -0
  20. data/distro/redhat/etc/sysconfig/chef-indexer +8 -0
  21. data/distro/redhat/etc/sysconfig/chef-server +10 -0
  22. data/distro/suse/etc/init.d/chef-client +121 -0
  23. data/lib/chef.rb +49 -0
  24. data/lib/chef/api_client.rb +269 -0
  25. data/lib/chef/application.rb +98 -0
  26. data/lib/chef/application/agent.rb +18 -0
  27. data/lib/chef/application/client.rb +214 -0
  28. data/lib/chef/application/knife.rb +138 -0
  29. data/lib/chef/application/server.rb +19 -0
  30. data/lib/chef/application/solo.rb +214 -0
  31. data/lib/chef/cache.rb +61 -0
  32. data/lib/chef/cache/checksum.rb +70 -0
  33. data/lib/chef/certificate.rb +154 -0
  34. data/lib/chef/client.rb +323 -0
  35. data/lib/chef/compile.rb +158 -0
  36. data/lib/chef/config.rb +195 -0
  37. data/lib/chef/cookbook.rb +198 -0
  38. data/lib/chef/cookbook/metadata.rb +487 -0
  39. data/lib/chef/cookbook/metadata/version.rb +87 -0
  40. data/lib/chef/cookbook_loader.rb +180 -0
  41. data/lib/chef/couchdb.rb +273 -0
  42. data/lib/chef/daemon.rb +170 -0
  43. data/lib/chef/data_bag.rb +216 -0
  44. data/lib/chef/data_bag_item.rb +227 -0
  45. data/lib/chef/exceptions.rb +39 -0
  46. data/lib/chef/file_cache.rb +205 -0
  47. data/lib/chef/knife.rb +300 -0
  48. data/lib/chef/knife/client_bulk_delete.rb +41 -0
  49. data/lib/chef/knife/client_create.rb +55 -0
  50. data/lib/chef/knife/client_delete.rb +37 -0
  51. data/lib/chef/knife/client_edit.rb +37 -0
  52. data/lib/chef/knife/client_list.rb +40 -0
  53. data/lib/chef/knife/client_reregister.rb +48 -0
  54. data/lib/chef/knife/client_show.rb +42 -0
  55. data/lib/chef/knife/configure.rb +84 -0
  56. data/lib/chef/knife/cookbook_bulk_delete.rb +47 -0
  57. data/lib/chef/knife/cookbook_delete.rb +41 -0
  58. data/lib/chef/knife/cookbook_download.rb +57 -0
  59. data/lib/chef/knife/cookbook_list.rb +41 -0
  60. data/lib/chef/knife/cookbook_metadata.rb +87 -0
  61. data/lib/chef/knife/cookbook_show.rb +75 -0
  62. data/lib/chef/knife/cookbook_upload.rb +173 -0
  63. data/lib/chef/knife/data_bag_create.rb +43 -0
  64. data/lib/chef/knife/data_bag_delete.rb +43 -0
  65. data/lib/chef/knife/data_bag_edit.rb +49 -0
  66. data/lib/chef/knife/data_bag_list.rb +42 -0
  67. data/lib/chef/knife/data_bag_show.rb +40 -0
  68. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  69. data/lib/chef/knife/node_bulk_delete.rb +44 -0
  70. data/lib/chef/knife/node_create.rb +39 -0
  71. data/lib/chef/knife/node_delete.rb +36 -0
  72. data/lib/chef/knife/node_edit.rb +36 -0
  73. data/lib/chef/knife/node_from_file.rb +42 -0
  74. data/lib/chef/knife/node_list.rb +41 -0
  75. data/lib/chef/knife/node_run_list_add.rb +64 -0
  76. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  77. data/lib/chef/knife/node_show.rb +46 -0
  78. data/lib/chef/knife/role_bulk_delete.rb +45 -0
  79. data/lib/chef/knife/role_create.rb +44 -0
  80. data/lib/chef/knife/role_delete.rb +36 -0
  81. data/lib/chef/knife/role_edit.rb +37 -0
  82. data/lib/chef/knife/role_from_file.rb +46 -0
  83. data/lib/chef/knife/role_list.rb +40 -0
  84. data/lib/chef/knife/role_show.rb +43 -0
  85. data/lib/chef/knife/search.rb +94 -0
  86. data/lib/chef/log.rb +39 -0
  87. data/lib/chef/mixin/check_helper.rb +31 -0
  88. data/lib/chef/mixin/checksum.rb +32 -0
  89. data/lib/chef/mixin/command.rb +390 -0
  90. data/lib/chef/mixin/convert_to_class_name.rb +57 -0
  91. data/lib/chef/mixin/create_path.rb +56 -0
  92. data/lib/chef/mixin/deep_merge.rb +33 -0
  93. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  94. data/lib/chef/mixin/from_file.rb +50 -0
  95. data/lib/chef/mixin/generate_url.rb +58 -0
  96. data/lib/chef/mixin/language.rb +107 -0
  97. data/lib/chef/mixin/language_include_attribute.rb +56 -0
  98. data/lib/chef/mixin/language_include_recipe.rb +53 -0
  99. data/lib/chef/mixin/params_validate.rb +197 -0
  100. data/lib/chef/mixin/recipe_definition_dsl_core.rb +79 -0
  101. data/lib/chef/mixin/template.rb +94 -0
  102. data/lib/chef/nanite.rb +100 -0
  103. data/lib/chef/node.rb +463 -0
  104. data/lib/chef/node/attribute.rb +412 -0
  105. data/lib/chef/openid_registration.rb +181 -0
  106. data/lib/chef/platform.rb +268 -0
  107. data/lib/chef/provider.rb +101 -0
  108. data/lib/chef/provider/breakpoint.rb +36 -0
  109. data/lib/chef/provider/cron.rb +184 -0
  110. data/lib/chef/provider/deploy.rb +314 -0
  111. data/lib/chef/provider/deploy/revision.rb +70 -0
  112. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  113. data/lib/chef/provider/directory.rb +72 -0
  114. data/lib/chef/provider/erl_call.rb +72 -0
  115. data/lib/chef/provider/execute.rb +58 -0
  116. data/lib/chef/provider/file.rb +195 -0
  117. data/lib/chef/provider/git.rb +203 -0
  118. data/lib/chef/provider/group.rb +120 -0
  119. data/lib/chef/provider/group/dscl.rb +128 -0
  120. data/lib/chef/provider/group/gpasswd.rb +50 -0
  121. data/lib/chef/provider/group/groupadd.rb +78 -0
  122. data/lib/chef/provider/group/pw.rb +88 -0
  123. data/lib/chef/provider/group/usermod.rb +57 -0
  124. data/lib/chef/provider/http_request.rb +106 -0
  125. data/lib/chef/provider/ifconfig.rb +131 -0
  126. data/lib/chef/provider/link.rb +157 -0
  127. data/lib/chef/provider/mdadm.rb +88 -0
  128. data/lib/chef/provider/mount.rb +117 -0
  129. data/lib/chef/provider/mount/mount.rb +208 -0
  130. data/lib/chef/provider/package.rb +160 -0
  131. data/lib/chef/provider/package/apt.rb +110 -0
  132. data/lib/chef/provider/package/dpkg.rb +109 -0
  133. data/lib/chef/provider/package/easy_install.rb +106 -0
  134. data/lib/chef/provider/package/freebsd.rb +153 -0
  135. data/lib/chef/provider/package/macports.rb +105 -0
  136. data/lib/chef/provider/package/portage.rb +124 -0
  137. data/lib/chef/provider/package/rpm.rb +99 -0
  138. data/lib/chef/provider/package/rubygems.rb +136 -0
  139. data/lib/chef/provider/package/yum-dump.py +125 -0
  140. data/lib/chef/provider/package/yum.rb +175 -0
  141. data/lib/chef/provider/package/zypper.rb +132 -0
  142. data/lib/chef/provider/remote_directory.rb +126 -0
  143. data/lib/chef/provider/remote_file.rb +141 -0
  144. data/lib/chef/provider/route.rb +118 -0
  145. data/lib/chef/provider/ruby_block.rb +33 -0
  146. data/lib/chef/provider/script.rb +42 -0
  147. data/lib/chef/provider/service.rb +135 -0
  148. data/lib/chef/provider/service/debian.rb +64 -0
  149. data/lib/chef/provider/service/freebsd.rb +156 -0
  150. data/lib/chef/provider/service/gentoo.rb +54 -0
  151. data/lib/chef/provider/service/init.rb +71 -0
  152. data/lib/chef/provider/service/redhat.rb +62 -0
  153. data/lib/chef/provider/service/simple.rb +114 -0
  154. data/lib/chef/provider/subversion.rb +156 -0
  155. data/lib/chef/provider/template.rb +175 -0
  156. data/lib/chef/provider/user.rb +170 -0
  157. data/lib/chef/provider/user/dscl.rb +280 -0
  158. data/lib/chef/provider/user/pw.rb +113 -0
  159. data/lib/chef/provider/user/useradd.rb +108 -0
  160. data/lib/chef/recipe.rb +105 -0
  161. data/lib/chef/resource.rb +380 -0
  162. data/lib/chef/resource/apt_package.rb +34 -0
  163. data/lib/chef/resource/bash.rb +33 -0
  164. data/lib/chef/resource/breakpoint.rb +35 -0
  165. data/lib/chef/resource/cron.rb +179 -0
  166. data/lib/chef/resource/csh.rb +33 -0
  167. data/lib/chef/resource/deploy.rb +359 -0
  168. data/lib/chef/resource/deploy_revision.rb +35 -0
  169. data/lib/chef/resource/directory.rb +76 -0
  170. data/lib/chef/resource/dpkg_package.rb +34 -0
  171. data/lib/chef/resource/easy_install_package.rb +41 -0
  172. data/lib/chef/resource/erl_call.rb +83 -0
  173. data/lib/chef/resource/execute.rb +127 -0
  174. data/lib/chef/resource/file.rb +84 -0
  175. data/lib/chef/resource/gem_package.rb +41 -0
  176. data/lib/chef/resource/git.rb +36 -0
  177. data/lib/chef/resource/group.rb +70 -0
  178. data/lib/chef/resource/http_request.rb +52 -0
  179. data/lib/chef/resource/ifconfig.rb +134 -0
  180. data/lib/chef/resource/link.rb +78 -0
  181. data/lib/chef/resource/macports_package.rb +29 -0
  182. data/lib/chef/resource/mdadm.rb +82 -0
  183. data/lib/chef/resource/mount.rb +135 -0
  184. data/lib/chef/resource/package.rb +80 -0
  185. data/lib/chef/resource/perl.rb +33 -0
  186. data/lib/chef/resource/portage_package.rb +33 -0
  187. data/lib/chef/resource/python.rb +33 -0
  188. data/lib/chef/resource/remote_directory.rb +91 -0
  189. data/lib/chef/resource/remote_file.rb +60 -0
  190. data/lib/chef/resource/route.rb +135 -0
  191. data/lib/chef/resource/ruby.rb +33 -0
  192. data/lib/chef/resource/ruby_block.rb +39 -0
  193. data/lib/chef/resource/scm.rb +137 -0
  194. data/lib/chef/resource/script.rb +51 -0
  195. data/lib/chef/resource/service.rb +134 -0
  196. data/lib/chef/resource/subversion.rb +34 -0
  197. data/lib/chef/resource/template.rb +60 -0
  198. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  199. data/lib/chef/resource/user.rb +101 -0
  200. data/lib/chef/resource_collection.rb +212 -0
  201. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  202. data/lib/chef/resource_definition.rb +67 -0
  203. data/lib/chef/rest.rb +298 -0
  204. data/lib/chef/role.rb +301 -0
  205. data/lib/chef/run_list.rb +164 -0
  206. data/lib/chef/runner.rb +130 -0
  207. data/lib/chef/search/query.rb +71 -0
  208. data/lib/chef/shef.rb +220 -0
  209. data/lib/chef/shef/ext.rb +297 -0
  210. data/lib/chef/shef/shef_session.rb +175 -0
  211. data/lib/chef/streaming_cookbook_uploader.rb +185 -0
  212. data/lib/chef/tasks/chef_repo.rake +245 -0
  213. data/lib/chef/util/file_edit.rb +125 -0
  214. data/lib/chef/util/fileedit.rb +121 -0
  215. data/lib/chef/webui_user.rb +231 -0
  216. metadata +398 -0
@@ -0,0 +1,141 @@
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 'chef/provider/file'
20
+ require 'chef/rest'
21
+ require 'chef/mixin/find_preferred_file'
22
+ require 'uri'
23
+ require 'tempfile'
24
+ require 'net/https'
25
+
26
+ class Chef
27
+ class Provider
28
+ class RemoteFile < Chef::Provider::File
29
+
30
+ include Chef::Mixin::FindPreferredFile
31
+
32
+ def action_create
33
+ Chef::Log.debug("Checking #{@new_resource} for changes")
34
+ do_remote_file(@new_resource.source, @current_resource.path)
35
+ end
36
+
37
+ def action_create_if_missing
38
+ if ::File.exists?(@new_resource.path)
39
+ Chef::Log.debug("File #{@new_resource.path} exists, taking no action.")
40
+ else
41
+ action_create
42
+ end
43
+ end
44
+
45
+ def do_remote_file(source, path)
46
+ retval = true
47
+
48
+ if(@new_resource.checksum && @current_resource.checksum && @current_resource.checksum =~ /^#{@new_resource.checksum}/)
49
+ Chef::Log.debug("File #{@new_resource} checksum matches, not updating")
50
+ else
51
+ begin
52
+ # The remote filehandle
53
+ raw_file = get_from_uri(source) ||
54
+ get_from_server(source, @current_resource.checksum) ||
55
+ get_from_local_cookbook(source)
56
+
57
+ # If the file exists
58
+ Chef::Log.debug "#{@new_resource}: Checking for file existence of #{@new_resource.path}"
59
+ if ::File.exists?(@new_resource.path)
60
+ # And it matches the checksum of the raw file
61
+ @new_resource.checksum(self.checksum(raw_file.path))
62
+ Chef::Log.debug "#{@new_resource}: File exists at #{@new_resource.path}"
63
+ Chef::Log.debug "#{@new_resource}: Target checksum: #{@current_resource.checksum}"
64
+ Chef::Log.debug "#{@new_resource}: Source checksum: #{@new_resource.checksum}"
65
+ if @new_resource.checksum != @current_resource.checksum
66
+ # Updating target file, let's perform a backup!
67
+ Chef::Log.debug "#{@new_resource}: checksum changed from #{@current_resource.checksum} to #{@new_resource.checksum}"
68
+ Chef::Log.info "#{@new_resource}: Updating #{@new_resource.path}"
69
+ backup @new_resource.path
70
+ FileUtils.cp raw_file.path, @new_resource.path
71
+ @new_resource.updated = true
72
+ else
73
+ Chef::Log.debug "#{@new_resource}: Target and Source checksums are the same, taking no action"
74
+ end
75
+ else
76
+ # We're creating a new file
77
+ Chef::Log.info "#{@new_resource}: Creating #{@new_resource.path}"
78
+ FileUtils.cp raw_file.path, @new_resource.path
79
+ @new_resource.updated = true
80
+ end
81
+
82
+ # We're done with the file, so make sure to close it if it was open.
83
+ raw_file.close unless raw_file.closed?
84
+ rescue Net::HTTPRetriableError => e
85
+ if e.response.kind_of?(Net::HTTPNotModified)
86
+ Chef::Log.debug("File #{path} is unchanged")
87
+ retval = false
88
+ else
89
+ raise e
90
+ end
91
+ end
92
+ end
93
+
94
+ set_owner if @new_resource.owner
95
+ set_group if @new_resource.group
96
+ set_mode if @new_resource.mode
97
+
98
+ retval
99
+ end
100
+
101
+ def get_from_uri(source)
102
+ begin
103
+ uri = URI.parse(source)
104
+ if uri.absolute
105
+ r = Chef::REST.new(source, nil, nil)
106
+ Chef::Log.debug("Downloading from absolute URI: #{source}")
107
+ r.get_rest(source, true).open
108
+ end
109
+ rescue URI::InvalidURIError
110
+ nil
111
+ end
112
+ end
113
+
114
+ def get_from_server(source, current_checksum)
115
+ unless Chef::Config[:solo]
116
+ r = Chef::REST.new(Chef::Config[:remotefile_url])
117
+ url = generate_url(source, "files", :checksum => current_checksum)
118
+ Chef::Log.debug("Downloading from server: #{url}")
119
+ r.get_rest(url, true).open
120
+ end
121
+ end
122
+
123
+ def get_from_local_cookbook(source)
124
+ if Chef::Config[:solo]
125
+ cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
126
+ filename = find_preferred_file(
127
+ cookbook_name,
128
+ :remote_file,
129
+ source,
130
+ @node[:fqdn],
131
+ @node[:platform],
132
+ @node[:platform_version]
133
+ )
134
+ Chef::Log.debug("Using local file for remote_file:#{filename}")
135
+ ::File.open(filename)
136
+ end
137
+ end
138
+
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,118 @@
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/log'
20
+ require 'chef/mixin/command'
21
+ require 'chef/provider'
22
+ require 'erb'
23
+
24
+ class Chef
25
+ class Provider
26
+ class Route < Chef::Provider
27
+ include Chef::Mixin::Command
28
+
29
+ def load_current_resource
30
+ @current_resource = Chef::Resource::Route.new(@new_resource.name)
31
+
32
+ Chef::Log.debug("Checking routes for #{@current_resource.target}")
33
+ status = popen4("route -n") do |pid, stdin, stdout, stderr|
34
+ stdout.each do |line|
35
+ case line
36
+ # Destination Gateway Genmask Flags Metric Ref Use Iface
37
+ when /^#{@new_resource.target}\s+([\d.]+)\s+([\d.]+)\s+(.+)\s+(\d+)\s+(.+)\s+(.+)\s+(\w+)$/
38
+ @current_resource.target(@new_resource.target)
39
+ @current_resource.gateway($1)
40
+ @current_resource.netmask($2)
41
+ @current_resource.metric($4.to_i)
42
+ @current_resource.device($7)
43
+ Chef::Log.debug("Found route ip:#{@current_resource.target} gw:#{@current_resource.gateway} nm:#{@current_resource.netmask} " +
44
+ "metric:#{@current_resource.metric} dev:#{@current_resource.device}")
45
+ end
46
+ end
47
+ end
48
+
49
+ unless status.exitstatus == 0
50
+ raise Chef::Exception::Route, "route failed - #{status.inspect}!"
51
+ end
52
+
53
+ @current_resource
54
+ end
55
+
56
+ def action_add
57
+ # check to see if load_current_resource found the route
58
+ unless @current_resource.gateway
59
+ if @new_resource.route_type == :net
60
+ command = "route add -net #{@new_resource.target}"
61
+ else
62
+ command = "route add #{@new_resource.target}"
63
+ end
64
+ command << " netmask #{@new_resource.netmask}" if @new_resource.netmask
65
+ command << " gw #{@new_resource.gateway}" if @new_resource.gateway
66
+ command << " metric #{@new_resource.metric}" if @new_resource.metric
67
+ command << " dev #{@new_resource.device}" if @new_resource.device
68
+
69
+ run_command(
70
+ :command => command
71
+ )
72
+ @new_resource.updated = true
73
+ else
74
+ Chef::Log.debug("Route #{@current_resource} already exists")
75
+ end
76
+ # Write out the config files
77
+ generate_config
78
+ end
79
+
80
+ def action_delete
81
+ # check to see if load_current_resource found the route
82
+ if @current_resource.gateway
83
+ command = "route del #{@new_resource.target}"
84
+ command << " netmask #{@new_resource.netmask}" if @new_resource.netmask
85
+ command << " gw #{@new_resource.gateway}" if @new_resource.gateway
86
+ command << " metric #{@new_resource.metric}" if @new_resource.metric
87
+ command << " dev #{@new_resource.device}" if @new_resource.device
88
+
89
+ run_command(
90
+ :command => command
91
+ )
92
+ @new_resource.updated = true
93
+ else
94
+ Chef::Log.debug("Route #{@current_resource} does not exist")
95
+ end
96
+ end
97
+
98
+ def generate_config
99
+ b = binding
100
+ case node[:platform]
101
+ when ("centos" || "redhat" || "fedora")
102
+ content = %{
103
+ <% if @new_resource.networking %>NETWORKING=<%= @new_resource.networking %><% end %>
104
+ <% if @new_resource.networking_ipv6 %>NETWORKING_IPV6=<%= @new_resource.networking_ipv6 %><% end %>
105
+ <% if @new_resource.hostname %>HOSTNAME=<%= @new_resource.hostname %><% end %>
106
+ <% if @new_resource.name %>GATEWAY=<%= @new_resource.name %><% end %>
107
+ <% if @new_resource.domainname %>DOMAINNAME=<%= @new_resource.domainname %><% end %>
108
+ <% if @new_resource.domainname %>DOMAIN=<%= @new_resource.domainname %><% end %>
109
+ }
110
+ template = ::ERB.new(content)
111
+ network_file = ::File.new("/etc/sysconfig/network", "w")
112
+ network_file.puts(template.result(b))
113
+ network_file.close
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,33 @@
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
+ Chef::Log.debug(@new_resource.inspect)
25
+ true
26
+ end
27
+
28
+ def action_create
29
+ @new_resource.block.call
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,42 @@
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
+ tf = Tempfile.new("chef-script")
28
+ tf.puts(@new_resource.code)
29
+ tf.close
30
+
31
+ fr = Chef::Resource::File.new(tf.path, nil, @node)
32
+ fr.owner(@new_resource.user)
33
+ fr.group(@new_resource.group)
34
+ fr.run_action(:create)
35
+
36
+ @new_resource.command("#{@new_resource.interpreter} #{tf.path}")
37
+ super
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,135 @@
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(node, new_resource, collection=nil, definitions=nil, cookbook_loader=nil)
29
+ super(node, new_resource, collection, definitions, cookbook_loader)
30
+ @enabled = nil
31
+ end
32
+
33
+ def action_enable
34
+ unless @current_resource.enabled
35
+ Chef::Log.debug("#{@new_resource}: attempting to enable")
36
+ status = enable_service()
37
+ if status
38
+ @new_resource.updated = true
39
+ Chef::Log.info("#{@new_resource}: enabled successfully")
40
+ end
41
+ else
42
+ Chef::Log.debug("#{@new_resource}: not enabling, already enabled")
43
+ end
44
+ end
45
+
46
+ def action_disable
47
+ if @current_resource.enabled
48
+ Chef::Log.debug("#{@new_resource}: attempting to disable")
49
+ status = disable_service()
50
+ if status
51
+ @new_resource.updated = true
52
+ Chef::Log.info("#{@new_resource}: disabled successfully")
53
+ end
54
+ else
55
+ Chef::Log.debug("#{@new_resource}: not disabling, already disabled")
56
+ end
57
+ end
58
+
59
+ def action_start
60
+ unless @current_resource.running
61
+ Chef::Log.debug("#{@new_resource}: attempting to start")
62
+ status = start_service()
63
+ if status
64
+ @new_resource.updated = true
65
+ Chef::Log.info("Started service #{@new_resource} successfully")
66
+ end
67
+ else
68
+ Chef::Log.debug("#{@new_resource}: not starting, already running")
69
+ end
70
+ end
71
+
72
+ def action_stop
73
+ if @current_resource.running
74
+ Chef::Log.debug("#{@new_resource}: attempting to stop")
75
+ status = stop_service()
76
+ if status
77
+ @new_resource.updated = true
78
+ Chef::Log.info("#{@new_resource}: stopped successfully")
79
+ end
80
+ else
81
+ Chef::Log.debug("#{@new_resource}: not stopping, already stopped")
82
+ end
83
+ end
84
+
85
+ def action_restart
86
+ Chef::Log.debug("#{@new_resource}: attempting to restart")
87
+ status = restart_service()
88
+ if status
89
+ @new_resource.updated = true
90
+ Chef::Log.info("#{@new_resource}: restarted successfully")
91
+ end
92
+ end
93
+
94
+ def action_reload
95
+ unless @new_resource.supports[:reload] or @new_resource.reload_command
96
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :reload"
97
+ else
98
+ if @current_resource.running
99
+ Chef::Log.debug("#{@new_resource}: attempting to reload")
100
+ status = reload_service()
101
+ if status
102
+ @new_resource.updated = true
103
+ Chef::Log.info("#{@new_resource}: reloaded successfully")
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ def enable_service(name)
110
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :enable"
111
+ end
112
+
113
+ def disable_service(name)
114
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :disable"
115
+ end
116
+
117
+ def start_service(name)
118
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :start"
119
+ end
120
+
121
+ def stop_service(name)
122
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :stop"
123
+ end
124
+
125
+ def restart_service(name)
126
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :restart"
127
+ end
128
+
129
+ def reload_service(name)
130
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :restart"
131
+ end
132
+
133
+ end
134
+ end
135
+ end