mbailey-chef 0.9.12.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 (345) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +172 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +25 -0
  5. data/bin/knife +26 -0
  6. data/bin/shef +34 -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-webui.1 +106 -0
  10. data/distro/common/man/man1/chef-server.1 +107 -0
  11. data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
  12. data/distro/common/man/man1/chef-solr.1 +55 -0
  13. data/distro/common/man/man8/chef-client.8 +63 -0
  14. data/distro/common/man/man8/chef-solo.8 +57 -0
  15. data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
  16. data/distro/common/man/man8/knife.8 +1349 -0
  17. data/distro/common/man/man8/shef.8 +45 -0
  18. data/distro/common/markdown/README +3 -0
  19. data/distro/common/markdown/knife.mkd +832 -0
  20. data/distro/debian/etc/default/chef-client +4 -0
  21. data/distro/debian/etc/default/chef-server +9 -0
  22. data/distro/debian/etc/default/chef-server-webui +9 -0
  23. data/distro/debian/etc/default/chef-solr +7 -0
  24. data/distro/debian/etc/default/chef-solr-indexer +7 -0
  25. data/distro/debian/etc/init/chef-client.conf +17 -0
  26. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  27. data/distro/debian/etc/init/chef-server.conf +17 -0
  28. data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
  29. data/distro/debian/etc/init/chef-solr.conf +17 -0
  30. data/distro/debian/etc/init.d/chef-client +175 -0
  31. data/distro/debian/etc/init.d/chef-server +122 -0
  32. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  33. data/distro/debian/etc/init.d/chef-solr +177 -0
  34. data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
  35. data/distro/redhat/etc/init.d/chef-client +106 -0
  36. data/distro/redhat/etc/init.d/chef-server +112 -0
  37. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  38. data/distro/redhat/etc/init.d/chef-solr +104 -0
  39. data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
  40. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  41. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  42. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  43. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  44. data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
  45. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  46. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  47. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  48. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  49. data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
  50. data/lib/chef/api_client.rb +264 -0
  51. data/lib/chef/application/agent.rb +18 -0
  52. data/lib/chef/application/client.rb +246 -0
  53. data/lib/chef/application/knife.rb +171 -0
  54. data/lib/chef/application/solo.rb +215 -0
  55. data/lib/chef/application.rb +127 -0
  56. data/lib/chef/applications.rb +4 -0
  57. data/lib/chef/certificate.rb +194 -0
  58. data/lib/chef/checksum.rb +182 -0
  59. data/lib/chef/checksum_cache.rb +173 -0
  60. data/lib/chef/client.rb +304 -0
  61. data/lib/chef/config.rb +240 -0
  62. data/lib/chef/cookbook/cookbook_collection.rb +44 -0
  63. data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
  64. data/lib/chef/cookbook/file_vendor.rb +48 -0
  65. data/lib/chef/cookbook/metadata/version.rb +87 -0
  66. data/lib/chef/cookbook/metadata.rb +500 -0
  67. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  68. data/lib/chef/cookbook/syntax_check.rb +136 -0
  69. data/lib/chef/cookbook_loader.rb +227 -0
  70. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  71. data/lib/chef/cookbook_uploader.rb +103 -0
  72. data/lib/chef/cookbook_version.rb +930 -0
  73. data/lib/chef/couchdb.rb +239 -0
  74. data/lib/chef/daemon.rb +172 -0
  75. data/lib/chef/data_bag.rb +215 -0
  76. data/lib/chef/data_bag_item.rb +228 -0
  77. data/lib/chef/exceptions.rb +66 -0
  78. data/lib/chef/file_access_control.rb +140 -0
  79. data/lib/chef/file_cache.rb +218 -0
  80. data/lib/chef/handler/json_file.rb +58 -0
  81. data/lib/chef/handler.rb +206 -0
  82. data/lib/chef/index_queue/amqp_client.rb +113 -0
  83. data/lib/chef/index_queue/consumer.rb +76 -0
  84. data/lib/chef/index_queue/indexable.rb +76 -0
  85. data/lib/chef/index_queue.rb +29 -0
  86. data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
  87. data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
  88. data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
  89. data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
  90. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
  91. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
  92. data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
  93. data/lib/chef/knife/bootstrap.rb +181 -0
  94. data/lib/chef/knife/client_bulk_delete.rb +40 -0
  95. data/lib/chef/knife/client_create.rb +70 -0
  96. data/lib/chef/knife/client_delete.rb +45 -0
  97. data/lib/chef/knife/client_edit.rb +45 -0
  98. data/lib/chef/knife/client_list.rb +40 -0
  99. data/lib/chef/knife/client_reregister.rb +56 -0
  100. data/lib/chef/knife/client_show.rb +50 -0
  101. data/lib/chef/knife/configure.rb +140 -0
  102. data/lib/chef/knife/configure_client.rb +52 -0
  103. data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
  104. data/lib/chef/knife/cookbook_create.rb +209 -0
  105. data/lib/chef/knife/cookbook_delete.rb +143 -0
  106. data/lib/chef/knife/cookbook_download.rb +130 -0
  107. data/lib/chef/knife/cookbook_list.rb +41 -0
  108. data/lib/chef/knife/cookbook_metadata.rb +82 -0
  109. data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
  110. data/lib/chef/knife/cookbook_show.rb +98 -0
  111. data/lib/chef/knife/cookbook_site_download.rb +58 -0
  112. data/lib/chef/knife/cookbook_site_list.rb +56 -0
  113. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  114. data/lib/chef/knife/cookbook_site_share.rb +109 -0
  115. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  116. data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
  117. data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
  118. data/lib/chef/knife/cookbook_test.rb +82 -0
  119. data/lib/chef/knife/cookbook_upload.rb +95 -0
  120. data/lib/chef/knife/data_bag_create.rb +59 -0
  121. data/lib/chef/knife/data_bag_delete.rb +48 -0
  122. data/lib/chef/knife/data_bag_edit.rb +50 -0
  123. data/lib/chef/knife/data_bag_from_file.rb +44 -0
  124. data/lib/chef/knife/data_bag_list.rb +43 -0
  125. data/lib/chef/knife/data_bag_show.rb +41 -0
  126. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  127. data/lib/chef/knife/ec2_server_create.rb +216 -0
  128. data/lib/chef/knife/ec2_server_delete.rb +90 -0
  129. data/lib/chef/knife/ec2_server_list.rb +88 -0
  130. data/lib/chef/knife/exec.rb +52 -0
  131. data/lib/chef/knife/index_rebuild.rb +51 -0
  132. data/lib/chef/knife/node_bulk_delete.rb +43 -0
  133. data/lib/chef/knife/node_create.rb +47 -0
  134. data/lib/chef/knife/node_delete.rb +44 -0
  135. data/lib/chef/knife/node_edit.rb +44 -0
  136. data/lib/chef/knife/node_from_file.rb +42 -0
  137. data/lib/chef/knife/node_list.rb +41 -0
  138. data/lib/chef/knife/node_run_list_add.rb +64 -0
  139. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  140. data/lib/chef/knife/node_show.rb +54 -0
  141. data/lib/chef/knife/rackspace_server_create.rb +156 -0
  142. data/lib/chef/knife/rackspace_server_delete.rb +57 -0
  143. data/lib/chef/knife/rackspace_server_list.rb +59 -0
  144. data/lib/chef/knife/recipe_list.rb +32 -0
  145. data/lib/chef/knife/role_bulk_delete.rb +44 -0
  146. data/lib/chef/knife/role_create.rb +52 -0
  147. data/lib/chef/knife/role_delete.rb +44 -0
  148. data/lib/chef/knife/role_edit.rb +45 -0
  149. data/lib/chef/knife/role_from_file.rb +46 -0
  150. data/lib/chef/knife/role_list.rb +40 -0
  151. data/lib/chef/knife/role_show.rb +51 -0
  152. data/lib/chef/knife/search.rb +94 -0
  153. data/lib/chef/knife/slicehost_images_list.rb +53 -0
  154. data/lib/chef/knife/slicehost_server_create.rb +103 -0
  155. data/lib/chef/knife/slicehost_server_delete.rb +61 -0
  156. data/lib/chef/knife/slicehost_server_list.rb +64 -0
  157. data/lib/chef/knife/ssh.rb +328 -0
  158. data/lib/chef/knife/status.rb +87 -0
  159. data/lib/chef/knife/terremark_server_create.rb +152 -0
  160. data/lib/chef/knife/terremark_server_delete.rb +87 -0
  161. data/lib/chef/knife/terremark_server_list.rb +77 -0
  162. data/lib/chef/knife/windows_bootstrap.rb +154 -0
  163. data/lib/chef/knife.rb +522 -0
  164. data/lib/chef/log.rb +61 -0
  165. data/lib/chef/mixin/check_helper.rb +31 -0
  166. data/lib/chef/mixin/checksum.rb +32 -0
  167. data/lib/chef/mixin/command/unix.rb +215 -0
  168. data/lib/chef/mixin/command/windows.rb +72 -0
  169. data/lib/chef/mixin/command.rb +220 -0
  170. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  171. data/lib/chef/mixin/create_path.rb +56 -0
  172. data/lib/chef/mixin/deep_merge.rb +225 -0
  173. data/lib/chef/mixin/deprecation.rb +65 -0
  174. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  175. data/lib/chef/mixin/from_file.rb +50 -0
  176. data/lib/chef/mixin/language.rb +156 -0
  177. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  178. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  179. data/lib/chef/mixin/params_validate.rb +225 -0
  180. data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
  181. data/lib/chef/mixin/shell_out.rb +38 -0
  182. data/lib/chef/mixin/template.rb +95 -0
  183. data/lib/chef/mixin/xml_escape.rb +140 -0
  184. data/lib/chef/mixins.rb +16 -0
  185. data/lib/chef/monkey_patches/dir.rb +36 -0
  186. data/lib/chef/monkey_patches/string.rb +28 -0
  187. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  188. data/lib/chef/node/attribute.rb +465 -0
  189. data/lib/chef/node.rb +601 -0
  190. data/lib/chef/openid_registration.rb +187 -0
  191. data/lib/chef/platform.rb +371 -0
  192. data/lib/chef/provider/breakpoint.rb +36 -0
  193. data/lib/chef/provider/cookbook_file.rb +100 -0
  194. data/lib/chef/provider/cron/solaris.rb +195 -0
  195. data/lib/chef/provider/cron.rb +186 -0
  196. data/lib/chef/provider/deploy/revision.rb +73 -0
  197. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  198. data/lib/chef/provider/deploy.rb +319 -0
  199. data/lib/chef/provider/directory.rb +72 -0
  200. data/lib/chef/provider/env/windows.rb +75 -0
  201. data/lib/chef/provider/env.rb +152 -0
  202. data/lib/chef/provider/erl_call.rb +72 -0
  203. data/lib/chef/provider/execute.rb +58 -0
  204. data/lib/chef/provider/file.rb +213 -0
  205. data/lib/chef/provider/git.rb +211 -0
  206. data/lib/chef/provider/group/dscl.rb +121 -0
  207. data/lib/chef/provider/group/gpasswd.rb +53 -0
  208. data/lib/chef/provider/group/groupadd.rb +78 -0
  209. data/lib/chef/provider/group/pw.rb +84 -0
  210. data/lib/chef/provider/group/usermod.rb +57 -0
  211. data/lib/chef/provider/group/windows.rb +79 -0
  212. data/lib/chef/provider/group.rb +133 -0
  213. data/lib/chef/provider/http_request.rb +122 -0
  214. data/lib/chef/provider/ifconfig.rb +132 -0
  215. data/lib/chef/provider/link.rb +161 -0
  216. data/lib/chef/provider/log.rb +54 -0
  217. data/lib/chef/provider/mdadm.rb +91 -0
  218. data/lib/chef/provider/mount/mount.rb +232 -0
  219. data/lib/chef/provider/mount/windows.rb +80 -0
  220. data/lib/chef/provider/mount.rb +117 -0
  221. data/lib/chef/provider/ohai.rb +41 -0
  222. data/lib/chef/provider/package/apt.rb +110 -0
  223. data/lib/chef/provider/package/dpkg.rb +112 -0
  224. data/lib/chef/provider/package/easy_install.rb +114 -0
  225. data/lib/chef/provider/package/freebsd.rb +123 -0
  226. data/lib/chef/provider/package/macports.rb +105 -0
  227. data/lib/chef/provider/package/pacman.rb +101 -0
  228. data/lib/chef/provider/package/portage.rb +124 -0
  229. data/lib/chef/provider/package/rpm.rb +101 -0
  230. data/lib/chef/provider/package/rubygems.rb +462 -0
  231. data/lib/chef/provider/package/solaris.rb +127 -0
  232. data/lib/chef/provider/package/yum-dump.py +128 -0
  233. data/lib/chef/provider/package/yum.rb +222 -0
  234. data/lib/chef/provider/package/zypper.rb +133 -0
  235. data/lib/chef/provider/package.rb +160 -0
  236. data/lib/chef/provider/remote_directory.rb +140 -0
  237. data/lib/chef/provider/remote_file.rb +120 -0
  238. data/lib/chef/provider/route.rb +195 -0
  239. data/lib/chef/provider/ruby_block.rb +33 -0
  240. data/lib/chef/provider/script.rb +55 -0
  241. data/lib/chef/provider/service/arch.rb +109 -0
  242. data/lib/chef/provider/service/debian.rb +105 -0
  243. data/lib/chef/provider/service/freebsd.rb +156 -0
  244. data/lib/chef/provider/service/gentoo.rb +54 -0
  245. data/lib/chef/provider/service/init.rb +71 -0
  246. data/lib/chef/provider/service/redhat.rb +60 -0
  247. data/lib/chef/provider/service/simple.rb +118 -0
  248. data/lib/chef/provider/service/solaris.rb +85 -0
  249. data/lib/chef/provider/service/upstart.rb +192 -0
  250. data/lib/chef/provider/service/windows.rb +129 -0
  251. data/lib/chef/provider/service.rb +128 -0
  252. data/lib/chef/provider/subversion.rb +159 -0
  253. data/lib/chef/provider/template.rb +105 -0
  254. data/lib/chef/provider/user/dscl.rb +280 -0
  255. data/lib/chef/provider/user/pw.rb +113 -0
  256. data/lib/chef/provider/user/useradd.rb +137 -0
  257. data/lib/chef/provider/user/windows.rb +124 -0
  258. data/lib/chef/provider/user.rb +187 -0
  259. data/lib/chef/provider.rb +124 -0
  260. data/lib/chef/providers.rb +91 -0
  261. data/lib/chef/recipe.rb +130 -0
  262. data/lib/chef/resource/apt_package.rb +34 -0
  263. data/lib/chef/resource/bash.rb +33 -0
  264. data/lib/chef/resource/breakpoint.rb +35 -0
  265. data/lib/chef/resource/cookbook_file.rb +45 -0
  266. data/lib/chef/resource/cron.rb +188 -0
  267. data/lib/chef/resource/csh.rb +33 -0
  268. data/lib/chef/resource/deploy.rb +371 -0
  269. data/lib/chef/resource/deploy_revision.rb +35 -0
  270. data/lib/chef/resource/directory.rb +76 -0
  271. data/lib/chef/resource/dpkg_package.rb +34 -0
  272. data/lib/chef/resource/easy_install_package.rb +41 -0
  273. data/lib/chef/resource/env.rb +58 -0
  274. data/lib/chef/resource/erl_call.rb +83 -0
  275. data/lib/chef/resource/execute.rb +127 -0
  276. data/lib/chef/resource/file.rb +92 -0
  277. data/lib/chef/resource/freebsd_package.rb +35 -0
  278. data/lib/chef/resource/gem_package.rb +49 -0
  279. data/lib/chef/resource/git.rb +36 -0
  280. data/lib/chef/resource/group.rb +70 -0
  281. data/lib/chef/resource/http_request.rb +61 -0
  282. data/lib/chef/resource/ifconfig.rb +134 -0
  283. data/lib/chef/resource/link.rb +78 -0
  284. data/lib/chef/resource/log.rb +62 -0
  285. data/lib/chef/resource/macports_package.rb +29 -0
  286. data/lib/chef/resource/mdadm.rb +82 -0
  287. data/lib/chef/resource/mount.rb +135 -0
  288. data/lib/chef/resource/ohai.rb +40 -0
  289. data/lib/chef/resource/package.rb +80 -0
  290. data/lib/chef/resource/pacman_package.rb +33 -0
  291. data/lib/chef/resource/perl.rb +33 -0
  292. data/lib/chef/resource/portage_package.rb +33 -0
  293. data/lib/chef/resource/python.rb +33 -0
  294. data/lib/chef/resource/remote_directory.rb +109 -0
  295. data/lib/chef/resource/remote_file.rb +83 -0
  296. data/lib/chef/resource/route.rb +135 -0
  297. data/lib/chef/resource/rpm_package.rb +34 -0
  298. data/lib/chef/resource/ruby.rb +33 -0
  299. data/lib/chef/resource/ruby_block.rb +40 -0
  300. data/lib/chef/resource/scm.rb +146 -0
  301. data/lib/chef/resource/script.rb +60 -0
  302. data/lib/chef/resource/service.rb +160 -0
  303. data/lib/chef/resource/solaris_package.rb +36 -0
  304. data/lib/chef/resource/subversion.rb +36 -0
  305. data/lib/chef/resource/template.rb +69 -0
  306. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  307. data/lib/chef/resource/user.rb +130 -0
  308. data/lib/chef/resource/yum_package.rb +43 -0
  309. data/lib/chef/resource.rb +523 -0
  310. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  311. data/lib/chef/resource_collection.rb +217 -0
  312. data/lib/chef/resource_definition.rb +67 -0
  313. data/lib/chef/resource_definition_list.rb +38 -0
  314. data/lib/chef/resources.rb +64 -0
  315. data/lib/chef/rest/auth_credentials.rb +78 -0
  316. data/lib/chef/rest/cookie_jar.rb +31 -0
  317. data/lib/chef/rest/rest_request.rb +188 -0
  318. data/lib/chef/rest.rb +394 -0
  319. data/lib/chef/role.rb +287 -0
  320. data/lib/chef/run_context.rb +110 -0
  321. data/lib/chef/run_list/run_list_expansion.rb +172 -0
  322. data/lib/chef/run_list/run_list_item.rb +78 -0
  323. data/lib/chef/run_list.rb +150 -0
  324. data/lib/chef/run_status.rb +121 -0
  325. data/lib/chef/runner.rb +107 -0
  326. data/lib/chef/sandbox.rb +153 -0
  327. data/lib/chef/search/query.rb +60 -0
  328. data/lib/chef/shef/ext.rb +568 -0
  329. data/lib/chef/shef/model_wrapper.rb +120 -0
  330. data/lib/chef/shef/shef_rest.rb +28 -0
  331. data/lib/chef/shef/shef_session.rb +271 -0
  332. data/lib/chef/shef.rb +325 -0
  333. data/lib/chef/shell_out.rb +413 -0
  334. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  335. data/lib/chef/tasks/chef_repo.rake +256 -0
  336. data/lib/chef/util/file_edit.rb +122 -0
  337. data/lib/chef/util/windows/net_group.rb +101 -0
  338. data/lib/chef/util/windows/net_use.rb +121 -0
  339. data/lib/chef/util/windows/net_user.rb +198 -0
  340. data/lib/chef/util/windows/volume.rb +59 -0
  341. data/lib/chef/util/windows.rb +56 -0
  342. data/lib/chef/version.rb +21 -0
  343. data/lib/chef/webui_user.rb +231 -0
  344. data/lib/chef.rb +39 -0
  345. metadata +533 -0
data/lib/chef/log.rb ADDED
@@ -0,0 +1,61 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: AJ Christensen (<@aj@opscode.com>)
4
+ # Author:: Christopher Brown (<cb@opscode.com>)
5
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require 'logger'
21
+ require 'mixlib/log'
22
+
23
+ class Chef
24
+ class Log
25
+ extend Mixlib::Log
26
+
27
+ class << self
28
+ attr_accessor :verbose
29
+ attr_reader :verbose_logger
30
+ protected :verbose_logger
31
+
32
+ def verbose
33
+ !(@verbose_logger.nil?)
34
+ end
35
+
36
+ def verbose=(value)
37
+ if value
38
+ @verbose_logger ||= Logger.new(STDOUT)
39
+ @verbose_logger.level = self.logger.level
40
+ @verbose_logger.formatter = self.logger.formatter
41
+ else
42
+ @verbose_logger = nil
43
+ end
44
+ self.verbose
45
+ end
46
+
47
+ def method_missing(method_symbol, *args)
48
+ self.verbose_logger.send(method_symbol, *args) if self.verbose
49
+ logger.send(method_symbol, *args)
50
+ end
51
+ end
52
+
53
+ class Formatter
54
+ def self.show_time=(*args)
55
+ Mixlib::Log::Formatter.show_time = *args
56
+ end
57
+ end
58
+
59
+ end
60
+ end
61
+
@@ -0,0 +1,31 @@
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
+ class Chef
19
+ module Mixin
20
+ module CheckHelper
21
+ def set_if_args(thing, arguments)
22
+ raise ArgumentError, "Must call set_if_args with a block!" unless Kernel.block_given?
23
+ if arguments != nil
24
+ yield(arguments)
25
+ else
26
+ thing
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,32 @@
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 'digest/sha2'
20
+ require 'chef/checksum_cache'
21
+
22
+ class Chef
23
+ module Mixin
24
+ module Checksum
25
+
26
+ def checksum(file)
27
+ Chef::ChecksumCache.checksum_for_file(file)
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,215 @@
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
+ class Chef
20
+ module Mixin
21
+ module Command
22
+ module Unix
23
+ # This is taken directly from Ara T Howard's Open4 library, and then
24
+ # modified to suit the needs of Chef. Any bugs here are most likely
25
+ # my own, and not Ara's.
26
+ #
27
+ # The original appears in external/open4.rb in its unmodified form.
28
+ #
29
+ # Thanks Ara!
30
+ def popen4(cmd, args={}, &b)
31
+
32
+ # Waitlast - this is magic.
33
+ #
34
+ # Do we wait for the child process to die before we yield
35
+ # to the block, or after? That is the magic of waitlast.
36
+ #
37
+ # By default, we are waiting before we yield the block.
38
+ args[:waitlast] ||= false
39
+
40
+ args[:user] ||= nil
41
+ unless args[:user].kind_of?(Integer)
42
+ args[:user] = Etc.getpwnam(args[:user]).uid if args[:user]
43
+ end
44
+ args[:group] ||= nil
45
+ unless args[:group].kind_of?(Integer)
46
+ args[:group] = Etc.getgrnam(args[:group]).gid if args[:group]
47
+ end
48
+ args[:environment] ||= {}
49
+
50
+ # Default on C locale so parsing commands output can be done
51
+ # independently of the node's default locale.
52
+ # "LC_ALL" could be set to nil, in which case we also must ignore it.
53
+ unless args[:environment].has_key?("LC_ALL")
54
+ args[:environment]["LC_ALL"] = "C"
55
+ end
56
+
57
+ pw, pr, pe, ps = IO.pipe, IO.pipe, IO.pipe, IO.pipe
58
+
59
+ verbose = $VERBOSE
60
+ begin
61
+ $VERBOSE = nil
62
+ ps.last.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
63
+
64
+ cid = fork {
65
+ pw.last.close
66
+ STDIN.reopen pw.first
67
+ pw.first.close
68
+
69
+ pr.first.close
70
+ STDOUT.reopen pr.last
71
+ pr.last.close
72
+
73
+ pe.first.close
74
+ STDERR.reopen pe.last
75
+ pe.last.close
76
+
77
+ STDOUT.sync = STDERR.sync = true
78
+
79
+ if args[:group]
80
+ Process.egid = args[:group]
81
+ Process.gid = args[:group]
82
+ end
83
+
84
+ if args[:user]
85
+ Process.euid = args[:user]
86
+ Process.uid = args[:user]
87
+ end
88
+
89
+ args[:environment].each do |key,value|
90
+ ENV[key] = value
91
+ end
92
+
93
+ if args[:umask]
94
+ umask = ((args[:umask].respond_to?(:oct) ? args[:umask].oct : args[:umask].to_i) & 007777)
95
+ File.umask(umask)
96
+ end
97
+
98
+ begin
99
+ if cmd.kind_of?(Array)
100
+ exec(*cmd)
101
+ else
102
+ exec(cmd)
103
+ end
104
+ raise 'forty-two'
105
+ rescue Exception => e
106
+ Marshal.dump(e, ps.last)
107
+ ps.last.flush
108
+ end
109
+ ps.last.close unless (ps.last.closed?)
110
+ exit!
111
+ }
112
+ ensure
113
+ $VERBOSE = verbose
114
+ end
115
+
116
+ [pw.first, pr.last, pe.last, ps.last].each{|fd| fd.close}
117
+
118
+ begin
119
+ e = Marshal.load ps.first
120
+ raise(Exception === e ? e : "unknown failure!")
121
+ rescue EOFError # If we get an EOF error, then the exec was successful
122
+ 42
123
+ ensure
124
+ ps.first.close
125
+ end
126
+
127
+ pw.last.sync = true
128
+
129
+ pi = [pw.last, pr.first, pe.first]
130
+
131
+ if b
132
+ begin
133
+ if args[:waitlast]
134
+ b[cid, *pi]
135
+ # send EOF so that if the child process is reading from STDIN
136
+ # it will actually finish up and exit
137
+ pi[0].close_write
138
+ Process.waitpid2(cid).last
139
+ else
140
+ # This took some doing.
141
+ # The trick here is to close STDIN
142
+ # Then set our end of the childs pipes to be O_NONBLOCK
143
+ # Then wait for the child to die, which means any IO it
144
+ # wants to do must be done - it's dead. If it isn't,
145
+ # it's because something totally skanky is happening,
146
+ # and we don't care.
147
+ o = StringIO.new
148
+ e = StringIO.new
149
+
150
+ pi[0].close
151
+
152
+ stdout = pi[1]
153
+ stderr = pi[2]
154
+
155
+ stdout.sync = true
156
+ stderr.sync = true
157
+
158
+ stdout.fcntl(Fcntl::F_SETFL, pi[1].fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK)
159
+ stderr.fcntl(Fcntl::F_SETFL, pi[2].fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK)
160
+
161
+ stdout_finished = false
162
+ stderr_finished = false
163
+
164
+ results = nil
165
+
166
+ while !stdout_finished || !stderr_finished
167
+ begin
168
+ channels_to_watch = []
169
+ channels_to_watch << stdout if !stdout_finished
170
+ channels_to_watch << stderr if !stderr_finished
171
+ ready = IO.select(channels_to_watch, nil, nil, 1.0)
172
+ rescue Errno::EAGAIN
173
+ ensure
174
+ results = Process.waitpid2(cid, Process::WNOHANG)
175
+ if results
176
+ stdout_finished = true
177
+ stderr_finished = true
178
+ end
179
+ end
180
+
181
+ if ready && ready.first.include?(stdout)
182
+ line = results ? stdout.gets(nil) : stdout.gets
183
+ if line
184
+ o.write(line)
185
+ else
186
+ stdout_finished = true
187
+ end
188
+ end
189
+ if ready && ready.first.include?(stderr)
190
+ line = results ? stderr.gets(nil) : stderr.gets
191
+ if line
192
+ e.write(line)
193
+ else
194
+ stderr_finished = true
195
+ end
196
+ end
197
+ end
198
+ results = Process.waitpid2(cid) unless results
199
+ o.rewind
200
+ e.rewind
201
+ b[cid, pi[0], o, e]
202
+ results.last
203
+ end
204
+ ensure
205
+ pi.each{|fd| fd.close unless fd.closed?}
206
+ end
207
+ else
208
+ [cid, pw.last, pr.first, pe.first]
209
+ end
210
+ end
211
+
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,72 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # Author:: Doug MacEachern (<dougm@vmware.com>)
5
+ # Copyright:: Copyright (c) 2010 VMware, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require 'win32/open3'
22
+
23
+ class Chef
24
+ module Mixin
25
+ module Command
26
+ module Windows
27
+ def popen4(cmd, args={}, &b)
28
+
29
+ # By default, we are waiting before we yield the block.
30
+ args[:waitlast] ||= false
31
+
32
+ #XXX :user, :group, :environment support?
33
+
34
+ Open4.popen4(cmd) do |stdin,stdout,stderr,cid|
35
+ if b
36
+ if args[:waitlast]
37
+ b[cid, stdin, stdout, stderr]
38
+ # send EOF so that if the child process is reading from STDIN
39
+ # it will actually finish up and exit
40
+ stdin.close_write
41
+ else
42
+ o = StringIO.new
43
+ e = StringIO.new
44
+
45
+ stdin.close
46
+
47
+ stdout.sync = true
48
+ stderr.sync = true
49
+
50
+ line = stdout.gets(nil)
51
+ if line
52
+ o.write(line)
53
+ end
54
+ line = stderr.gets(nil)
55
+ if line
56
+ e.write(line)
57
+ end
58
+ o.rewind
59
+ e.rewind
60
+ b[cid, stdin, o, e]
61
+ end
62
+ else
63
+ [cid, stdin, stdout, stderr]
64
+ end
65
+ end
66
+ $?
67
+ end
68
+
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,220 @@
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/log'
20
+ require 'chef/exceptions'
21
+ require 'tmpdir'
22
+ require 'fcntl'
23
+ require 'etc'
24
+
25
+ class Chef
26
+ module Mixin
27
+ module Command
28
+ extend self
29
+
30
+
31
+ if RUBY_PLATFORM =~ /mswin|mingw32|windows/
32
+ require 'chef/mixin/command/windows'
33
+ include ::Chef::Mixin::Command::Windows
34
+ extend ::Chef::Mixin::Command::Windows
35
+ else
36
+ require 'chef/mixin/command/unix'
37
+ include ::Chef::Mixin::Command::Unix
38
+ extend ::Chef::Mixin::Command::Unix
39
+ end
40
+
41
+ # If command is a block, returns true if the block returns true, false if it returns false.
42
+ # ("Only run this resource if the block is true")
43
+ #
44
+ # If the command is not a block, executes the command. If it returns any status other than
45
+ # 0, it returns false (clearly, a 0 status code is true)
46
+ #
47
+ # === Parameters
48
+ # command<Block>, <String>:: A block to check, or a string to execute
49
+ #
50
+ # === Returns
51
+ # true:: Returns true if the block is true, or if the command returns 0
52
+ # false:: Returns false if the block is false, or if the command returns a non-zero exit code.
53
+ def only_if(command, args = {})
54
+ if command.kind_of?(Proc)
55
+ chdir_or_tmpdir(args[:cwd]) do
56
+ res = command.call
57
+ unless res
58
+ return false
59
+ end
60
+ end
61
+ else
62
+ status = run_command({:command => command, :ignore_failure => true}.merge(args))
63
+ if status.exitstatus != 0
64
+ return false
65
+ end
66
+ end
67
+ true
68
+ end
69
+
70
+ # If command is a block, returns false if the block returns true, true if it returns false.
71
+ # ("Do not run this resource if the block is true")
72
+ #
73
+ # If the command is not a block, executes the command. If it returns a 0 exitstatus, returns false.
74
+ # ("Do not run this resource if the command returns 0")
75
+ #
76
+ # === Parameters
77
+ # command<Block>, <String>:: A block to check, or a string to execute
78
+ #
79
+ # === Returns
80
+ # true:: Returns true if the block is false, or if the command returns a non-zero exit status.
81
+ # false:: Returns false if the block is true, or if the command returns a 0 exit status.
82
+ def not_if(command, args = {})
83
+ if command.kind_of?(Proc)
84
+ chdir_or_tmpdir(args[:cwd]) do
85
+ res = command.call
86
+ if res
87
+ return false
88
+ end
89
+ end
90
+ else
91
+ status = run_command({:command => command, :ignore_failure => true}.merge(args))
92
+ if status.exitstatus == 0
93
+ return false
94
+ end
95
+ end
96
+ true
97
+ end
98
+
99
+ # === Parameters
100
+ # args<Hash>: A number of required and optional arguments
101
+ # command<String>, <Array>: A complete command with options to execute or a command and options as an Array
102
+ # creates<String>: The absolute path to a file that prevents the command from running if it exists
103
+ # cwd<String>: Working directory to execute command in, defaults to Dir.tmpdir
104
+ # timeout<String>: How many seconds to wait for the command to execute before timing out
105
+ # returns<String>: The single exit value command is expected to return, otherwise causes an exception
106
+ # ignore_failure<Boolean>: Whether to raise an exception on failure, or just return the status
107
+ # output_on_failure<Boolean>: Return output in raised exception regardless of Log.level
108
+ #
109
+ # user<String>: The UID or user name of the user to execute the command as
110
+ # group<String>: The GID or group name of the group to execute the command as
111
+ # environment<Hash>: Pairs of environment variable names and their values to set before execution
112
+ #
113
+ # === Returns
114
+ # Returns the exit status of args[:command]
115
+ def run_command(args={})
116
+ command_output = ""
117
+
118
+ args[:ignore_failure] ||= false
119
+ args[:output_on_failure] ||= false
120
+
121
+ if args.has_key?(:creates)
122
+ if File.exists?(args[:creates])
123
+ Chef::Log.debug("Skipping #{args[:command]} - creates #{args[:creates]} exists.")
124
+ return false
125
+ end
126
+ end
127
+
128
+ status, stdout, stderr = output_of_command(args[:command], args)
129
+ command_output << "STDOUT: #{stdout}"
130
+ command_output << "STDERR: #{stderr}"
131
+ handle_command_failures(status, command_output, args)
132
+
133
+ status
134
+ end
135
+
136
+ def output_of_command(command, args)
137
+ Chef::Log.debug("Executing #{command}")
138
+ stderr_string, stdout_string, status = "", "", nil
139
+
140
+ exec_processing_block = lambda do |pid, stdin, stdout, stderr|
141
+ stdout_string, stderr_string = stdout.string.chomp, stderr.string.chomp
142
+ end
143
+
144
+ args[:cwd] ||= Dir.tmpdir
145
+ unless File.directory?(args[:cwd])
146
+ raise Chef::Exceptions::Exec, "#{args[:cwd]} does not exist or is not a directory"
147
+ end
148
+
149
+ Dir.chdir(args[:cwd]) do
150
+ if args[:timeout]
151
+ begin
152
+ Timeout.timeout(args[:timeout]) do
153
+ status = popen4(command, args, &exec_processing_block)
154
+ end
155
+ rescue Timeout::Error => e
156
+ Chef::Log.error("#{command} exceeded timeout #{args[:timeout]}")
157
+ raise(e)
158
+ end
159
+ else
160
+ status = popen4(command, args, &exec_processing_block)
161
+ end
162
+
163
+ Chef::Log.debug("---- Begin output of #{command} ----")
164
+ Chef::Log.debug("STDOUT: #{stdout_string}")
165
+ Chef::Log.debug("STDERR: #{stderr_string}")
166
+ Chef::Log.debug("---- End output of #{command} ----")
167
+ Chef::Log.debug("Ran #{command} returned #{status.exitstatus}")
168
+ end
169
+
170
+ return status, stdout_string, stderr_string
171
+ end
172
+
173
+ def handle_command_failures(status, command_output, opts={})
174
+ unless opts[:ignore_failure]
175
+ opts[:returns] ||= 0
176
+ unless Array(opts[:returns]).include?(status.exitstatus)
177
+ # if the log level is not debug, through output of command when we fail
178
+ output = ""
179
+ if Chef::Log.level == :debug || opts[:output_on_failure]
180
+ output << "\n---- Begin output of #{opts[:command]} ----\n"
181
+ output << command_output.to_s
182
+ output << "\n---- End output of #{opts[:command]} ----\n"
183
+ end
184
+ raise Chef::Exceptions::Exec, "#{opts[:command]} returned #{status.exitstatus}, expected #{opts[:returns]}#{output}"
185
+ end
186
+ end
187
+ end
188
+
189
+ # Call #run_command but set LC_ALL to the system's current environment so it doesn't get changed to C.
190
+ #
191
+ # === Parameters
192
+ # args<Hash>: A number of required and optional arguments that will be handed out to #run_command
193
+ #
194
+ # === Returns
195
+ # Returns the result of #run_command
196
+ def run_command_with_systems_locale(args={})
197
+ args[:environment] ||= {}
198
+ args[:environment]["LC_ALL"] = ENV["LC_ALL"]
199
+ run_command args
200
+ end
201
+
202
+ # def popen4(cmd, args={}, &b)
203
+ # @@os_handler.popen4(cmd, args, &b)
204
+ # end
205
+
206
+ # module_function :popen4
207
+
208
+ def chdir_or_tmpdir(dir, &block)
209
+ dir ||= Dir.tmpdir
210
+ unless File.directory?(dir)
211
+ raise Chef::Exceptions::Exec, "#{dir} does not exist or is not a directory"
212
+ end
213
+ Dir.chdir(dir) do
214
+ block.call
215
+ end
216
+ end
217
+
218
+ end
219
+ end
220
+ end