TrueCar-chef 0.10.0.beta.3

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 (372) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +171 -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/arch/etc/conf.d/chef-client.conf +5 -0
  9. data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
  10. data/distro/arch/etc/conf.d/chef-server.conf +10 -0
  11. data/distro/arch/etc/conf.d/chef-solr-indexer.conf +8 -0
  12. data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
  13. data/distro/arch/etc/rc.d/chef-client +76 -0
  14. data/distro/arch/etc/rc.d/chef-server +78 -0
  15. data/distro/arch/etc/rc.d/chef-server-webui +78 -0
  16. data/distro/arch/etc/rc.d/chef-solr +78 -0
  17. data/distro/arch/etc/rc.d/chef-solr-indexer +78 -0
  18. data/distro/common/man/man1/chef-indexer.1 +42 -0
  19. data/distro/common/man/man1/chef-server-webui.1 +106 -0
  20. data/distro/common/man/man1/chef-server.1 +107 -0
  21. data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
  22. data/distro/common/man/man1/chef-solr.1 +55 -0
  23. data/distro/common/man/man8/chef-client.8 +63 -0
  24. data/distro/common/man/man8/chef-solo.8 +57 -0
  25. data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
  26. data/distro/common/man/man8/knife.8 +1349 -0
  27. data/distro/common/man/man8/shef.8 +45 -0
  28. data/distro/common/markdown/README +3 -0
  29. data/distro/common/markdown/knife.mkd +865 -0
  30. data/distro/debian/etc/default/chef-client +4 -0
  31. data/distro/debian/etc/default/chef-server +9 -0
  32. data/distro/debian/etc/default/chef-server-webui +9 -0
  33. data/distro/debian/etc/default/chef-solr +8 -0
  34. data/distro/debian/etc/default/chef-solr-indexer +7 -0
  35. data/distro/debian/etc/init.d/chef-client +175 -0
  36. data/distro/debian/etc/init.d/chef-server +122 -0
  37. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  38. data/distro/debian/etc/init.d/chef-solr +176 -0
  39. data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
  40. data/distro/debian/etc/init/chef-client.conf +17 -0
  41. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  42. data/distro/debian/etc/init/chef-server.conf +17 -0
  43. data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
  44. data/distro/debian/etc/init/chef-solr.conf +17 -0
  45. data/distro/redhat/etc/init.d/chef-client +106 -0
  46. data/distro/redhat/etc/init.d/chef-server +112 -0
  47. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  48. data/distro/redhat/etc/init.d/chef-solr +104 -0
  49. data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
  50. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  51. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  52. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  53. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  54. data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
  55. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  56. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  57. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  58. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  59. data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
  60. data/lib/chef.rb +40 -0
  61. data/lib/chef/api_client.rb +264 -0
  62. data/lib/chef/application.rb +137 -0
  63. data/lib/chef/application/agent.rb +18 -0
  64. data/lib/chef/application/client.rb +242 -0
  65. data/lib/chef/application/knife.rb +169 -0
  66. data/lib/chef/application/solo.rb +217 -0
  67. data/lib/chef/applications.rb +4 -0
  68. data/lib/chef/certificate.rb +194 -0
  69. data/lib/chef/checksum.rb +182 -0
  70. data/lib/chef/checksum_cache.rb +189 -0
  71. data/lib/chef/client.rb +362 -0
  72. data/lib/chef/config.rb +244 -0
  73. data/lib/chef/cookbook/chefignore.rb +66 -0
  74. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  75. data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
  76. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  77. data/lib/chef/cookbook/file_vendor.rb +48 -0
  78. data/lib/chef/cookbook/metadata.rb +592 -0
  79. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  80. data/lib/chef/cookbook/syntax_check.rb +136 -0
  81. data/lib/chef/cookbook_loader.rb +103 -0
  82. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  83. data/lib/chef/cookbook_uploader.rb +125 -0
  84. data/lib/chef/cookbook_version.rb +979 -0
  85. data/lib/chef/cookbook_version_selector.rb +163 -0
  86. data/lib/chef/couchdb.rb +247 -0
  87. data/lib/chef/daemon.rb +172 -0
  88. data/lib/chef/data_bag.rb +223 -0
  89. data/lib/chef/data_bag_item.rb +267 -0
  90. data/lib/chef/encrypted_data_bag_item.rb +126 -0
  91. data/lib/chef/environment.rb +386 -0
  92. data/lib/chef/exceptions.rb +153 -0
  93. data/lib/chef/file_access_control.rb +140 -0
  94. data/lib/chef/file_cache.rb +218 -0
  95. data/lib/chef/handler.rb +206 -0
  96. data/lib/chef/handler/json_file.rb +58 -0
  97. data/lib/chef/index_queue.rb +29 -0
  98. data/lib/chef/index_queue/amqp_client.rb +116 -0
  99. data/lib/chef/index_queue/consumer.rb +76 -0
  100. data/lib/chef/index_queue/indexable.rb +109 -0
  101. data/lib/chef/json_compat.rb +52 -0
  102. data/lib/chef/knife.rb +424 -0
  103. data/lib/chef/knife/bootstrap.rb +185 -0
  104. data/lib/chef/knife/bootstrap/archlinux-gems.erb +47 -0
  105. data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
  106. data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
  107. data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
  108. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
  109. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +46 -0
  110. data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
  111. data/lib/chef/knife/client_bulk_delete.rb +43 -0
  112. data/lib/chef/knife/client_create.rb +73 -0
  113. data/lib/chef/knife/client_delete.rb +48 -0
  114. data/lib/chef/knife/client_edit.rb +48 -0
  115. data/lib/chef/knife/client_list.rb +43 -0
  116. data/lib/chef/knife/client_reregister.rb +59 -0
  117. data/lib/chef/knife/client_show.rb +53 -0
  118. data/lib/chef/knife/configure.rb +136 -0
  119. data/lib/chef/knife/configure_client.rb +52 -0
  120. data/lib/chef/knife/cookbook_bulk_delete.rb +61 -0
  121. data/lib/chef/knife/cookbook_create.rb +274 -0
  122. data/lib/chef/knife/cookbook_delete.rb +149 -0
  123. data/lib/chef/knife/cookbook_download.rb +134 -0
  124. data/lib/chef/knife/cookbook_list.rb +50 -0
  125. data/lib/chef/knife/cookbook_metadata.rb +102 -0
  126. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  127. data/lib/chef/knife/cookbook_show.rb +101 -0
  128. data/lib/chef/knife/cookbook_site_download.rb +58 -0
  129. data/lib/chef/knife/cookbook_site_list.rb +56 -0
  130. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  131. data/lib/chef/knife/cookbook_site_share.rb +114 -0
  132. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  133. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  134. data/lib/chef/knife/cookbook_site_vendor.rb +145 -0
  135. data/lib/chef/knife/cookbook_test.rb +82 -0
  136. data/lib/chef/knife/cookbook_upload.rb +146 -0
  137. data/lib/chef/knife/data_bag_create.rb +94 -0
  138. data/lib/chef/knife/data_bag_delete.rb +51 -0
  139. data/lib/chef/knife/data_bag_edit.rb +94 -0
  140. data/lib/chef/knife/data_bag_from_file.rb +85 -0
  141. data/lib/chef/knife/data_bag_list.rb +46 -0
  142. data/lib/chef/knife/data_bag_show.rb +81 -0
  143. data/lib/chef/knife/environment_create.rb +53 -0
  144. data/lib/chef/knife/environment_delete.rb +45 -0
  145. data/lib/chef/knife/environment_edit.rb +45 -0
  146. data/lib/chef/knife/environment_from_file.rb +39 -0
  147. data/lib/chef/knife/environment_list.rb +42 -0
  148. data/lib/chef/knife/environment_show.rb +46 -0
  149. data/lib/chef/knife/exec.rb +51 -0
  150. data/lib/chef/knife/index_rebuild.rb +50 -0
  151. data/lib/chef/knife/node_bulk_delete.rb +46 -0
  152. data/lib/chef/knife/node_create.rb +50 -0
  153. data/lib/chef/knife/node_delete.rb +47 -0
  154. data/lib/chef/knife/node_edit.rb +163 -0
  155. data/lib/chef/knife/node_from_file.rb +45 -0
  156. data/lib/chef/knife/node_list.rb +46 -0
  157. data/lib/chef/knife/node_run_list_add.rb +67 -0
  158. data/lib/chef/knife/node_run_list_remove.rb +48 -0
  159. data/lib/chef/knife/node_show.rb +62 -0
  160. data/lib/chef/knife/recipe_list.rb +33 -0
  161. data/lib/chef/knife/role_bulk_delete.rb +47 -0
  162. data/lib/chef/knife/role_create.rb +55 -0
  163. data/lib/chef/knife/role_delete.rb +47 -0
  164. data/lib/chef/knife/role_edit.rb +48 -0
  165. data/lib/chef/knife/role_from_file.rb +49 -0
  166. data/lib/chef/knife/role_list.rb +43 -0
  167. data/lib/chef/knife/role_show.rb +54 -0
  168. data/lib/chef/knife/search.rb +123 -0
  169. data/lib/chef/knife/ssh.rb +318 -0
  170. data/lib/chef/knife/status.rb +90 -0
  171. data/lib/chef/knife/subcommand_loader.rb +101 -0
  172. data/lib/chef/knife/tag_create.rb +31 -0
  173. data/lib/chef/knife/tag_delete.rb +31 -0
  174. data/lib/chef/knife/tag_list.rb +29 -0
  175. data/lib/chef/knife/ui.rb +227 -0
  176. data/lib/chef/knife/windows_bootstrap.rb +157 -0
  177. data/lib/chef/log.rb +39 -0
  178. data/lib/chef/mash.rb +211 -0
  179. data/lib/chef/mixin/check_helper.rb +31 -0
  180. data/lib/chef/mixin/checksum.rb +32 -0
  181. data/lib/chef/mixin/command.rb +221 -0
  182. data/lib/chef/mixin/command/unix.rb +215 -0
  183. data/lib/chef/mixin/command/windows.rb +76 -0
  184. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  185. data/lib/chef/mixin/create_path.rb +56 -0
  186. data/lib/chef/mixin/deep_merge.rb +225 -0
  187. data/lib/chef/mixin/deprecation.rb +65 -0
  188. data/lib/chef/mixin/from_file.rb +50 -0
  189. data/lib/chef/mixin/language.rb +165 -0
  190. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  191. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  192. data/lib/chef/mixin/params_validate.rb +225 -0
  193. data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
  194. data/lib/chef/mixin/shell_out.rb +40 -0
  195. data/lib/chef/mixin/template.rb +95 -0
  196. data/lib/chef/mixin/xml_escape.rb +140 -0
  197. data/lib/chef/mixins.rb +15 -0
  198. data/lib/chef/monkey_patches/dir.rb +36 -0
  199. data/lib/chef/monkey_patches/numeric.rb +7 -0
  200. data/lib/chef/monkey_patches/regexp.rb +34 -0
  201. data/lib/chef/monkey_patches/string.rb +28 -0
  202. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  203. data/lib/chef/nil_argument.rb +3 -0
  204. data/lib/chef/node.rb +661 -0
  205. data/lib/chef/node/attribute.rb +487 -0
  206. data/lib/chef/openid_registration.rb +187 -0
  207. data/lib/chef/platform.rb +409 -0
  208. data/lib/chef/provider.rb +124 -0
  209. data/lib/chef/provider/breakpoint.rb +36 -0
  210. data/lib/chef/provider/cookbook_file.rb +101 -0
  211. data/lib/chef/provider/cron.rb +186 -0
  212. data/lib/chef/provider/cron/solaris.rb +195 -0
  213. data/lib/chef/provider/deploy.rb +320 -0
  214. data/lib/chef/provider/deploy/revision.rb +80 -0
  215. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  216. data/lib/chef/provider/directory.rb +72 -0
  217. data/lib/chef/provider/env.rb +152 -0
  218. data/lib/chef/provider/env/windows.rb +75 -0
  219. data/lib/chef/provider/erl_call.rb +100 -0
  220. data/lib/chef/provider/execute.rb +60 -0
  221. data/lib/chef/provider/file.rb +222 -0
  222. data/lib/chef/provider/git.rb +221 -0
  223. data/lib/chef/provider/group.rb +133 -0
  224. data/lib/chef/provider/group/aix.rb +70 -0
  225. data/lib/chef/provider/group/dscl.rb +121 -0
  226. data/lib/chef/provider/group/gpasswd.rb +53 -0
  227. data/lib/chef/provider/group/groupadd.rb +81 -0
  228. data/lib/chef/provider/group/pw.rb +84 -0
  229. data/lib/chef/provider/group/usermod.rb +57 -0
  230. data/lib/chef/provider/group/windows.rb +79 -0
  231. data/lib/chef/provider/http_request.rb +122 -0
  232. data/lib/chef/provider/ifconfig.rb +132 -0
  233. data/lib/chef/provider/link.rb +161 -0
  234. data/lib/chef/provider/log.rb +54 -0
  235. data/lib/chef/provider/mdadm.rb +91 -0
  236. data/lib/chef/provider/mount.rb +117 -0
  237. data/lib/chef/provider/mount/mount.rb +232 -0
  238. data/lib/chef/provider/mount/windows.rb +80 -0
  239. data/lib/chef/provider/ohai.rb +41 -0
  240. data/lib/chef/provider/package.rb +160 -0
  241. data/lib/chef/provider/package/apt.rb +110 -0
  242. data/lib/chef/provider/package/dpkg.rb +112 -0
  243. data/lib/chef/provider/package/easy_install.rb +136 -0
  244. data/lib/chef/provider/package/freebsd.rb +123 -0
  245. data/lib/chef/provider/package/macports.rb +105 -0
  246. data/lib/chef/provider/package/pacman.rb +101 -0
  247. data/lib/chef/provider/package/portage.rb +135 -0
  248. data/lib/chef/provider/package/rpm.rb +101 -0
  249. data/lib/chef/provider/package/rubygems.rb +462 -0
  250. data/lib/chef/provider/package/solaris.rb +127 -0
  251. data/lib/chef/provider/package/yum-dump.py +128 -0
  252. data/lib/chef/provider/package/yum.rb +261 -0
  253. data/lib/chef/provider/package/zypper.rb +133 -0
  254. data/lib/chef/provider/remote_directory.rb +138 -0
  255. data/lib/chef/provider/remote_file.rb +119 -0
  256. data/lib/chef/provider/route.rb +195 -0
  257. data/lib/chef/provider/ruby_block.rb +33 -0
  258. data/lib/chef/provider/script.rb +55 -0
  259. data/lib/chef/provider/service.rb +128 -0
  260. data/lib/chef/provider/service/arch.rb +109 -0
  261. data/lib/chef/provider/service/debian.rb +130 -0
  262. data/lib/chef/provider/service/freebsd.rb +156 -0
  263. data/lib/chef/provider/service/gentoo.rb +54 -0
  264. data/lib/chef/provider/service/init.rb +71 -0
  265. data/lib/chef/provider/service/insserv.rb +52 -0
  266. data/lib/chef/provider/service/redhat.rb +60 -0
  267. data/lib/chef/provider/service/simple.rb +118 -0
  268. data/lib/chef/provider/service/solaris.rb +85 -0
  269. data/lib/chef/provider/service/upstart.rb +192 -0
  270. data/lib/chef/provider/service/windows.rb +146 -0
  271. data/lib/chef/provider/subversion.rb +194 -0
  272. data/lib/chef/provider/template.rb +105 -0
  273. data/lib/chef/provider/user.rb +187 -0
  274. data/lib/chef/provider/user/dscl.rb +280 -0
  275. data/lib/chef/provider/user/pw.rb +113 -0
  276. data/lib/chef/provider/user/useradd.rb +137 -0
  277. data/lib/chef/provider/user/windows.rb +124 -0
  278. data/lib/chef/providers.rb +93 -0
  279. data/lib/chef/recipe.rb +128 -0
  280. data/lib/chef/resource.rb +530 -0
  281. data/lib/chef/resource/apt_package.rb +34 -0
  282. data/lib/chef/resource/bash.rb +33 -0
  283. data/lib/chef/resource/breakpoint.rb +35 -0
  284. data/lib/chef/resource/cookbook_file.rb +45 -0
  285. data/lib/chef/resource/cron.rb +188 -0
  286. data/lib/chef/resource/csh.rb +33 -0
  287. data/lib/chef/resource/deploy.rb +371 -0
  288. data/lib/chef/resource/deploy_revision.rb +35 -0
  289. data/lib/chef/resource/directory.rb +76 -0
  290. data/lib/chef/resource/dpkg_package.rb +34 -0
  291. data/lib/chef/resource/easy_install_package.rb +57 -0
  292. data/lib/chef/resource/env.rb +58 -0
  293. data/lib/chef/resource/erl_call.rb +83 -0
  294. data/lib/chef/resource/execute.rb +127 -0
  295. data/lib/chef/resource/file.rb +99 -0
  296. data/lib/chef/resource/freebsd_package.rb +35 -0
  297. data/lib/chef/resource/gem_package.rb +53 -0
  298. data/lib/chef/resource/git.rb +37 -0
  299. data/lib/chef/resource/group.rb +70 -0
  300. data/lib/chef/resource/http_request.rb +61 -0
  301. data/lib/chef/resource/ifconfig.rb +134 -0
  302. data/lib/chef/resource/link.rb +78 -0
  303. data/lib/chef/resource/log.rb +62 -0
  304. data/lib/chef/resource/macports_package.rb +29 -0
  305. data/lib/chef/resource/mdadm.rb +82 -0
  306. data/lib/chef/resource/mount.rb +135 -0
  307. data/lib/chef/resource/ohai.rb +40 -0
  308. data/lib/chef/resource/package.rb +80 -0
  309. data/lib/chef/resource/pacman_package.rb +33 -0
  310. data/lib/chef/resource/perl.rb +33 -0
  311. data/lib/chef/resource/portage_package.rb +33 -0
  312. data/lib/chef/resource/python.rb +33 -0
  313. data/lib/chef/resource/remote_directory.rb +109 -0
  314. data/lib/chef/resource/remote_file.rb +83 -0
  315. data/lib/chef/resource/route.rb +135 -0
  316. data/lib/chef/resource/rpm_package.rb +34 -0
  317. data/lib/chef/resource/ruby.rb +33 -0
  318. data/lib/chef/resource/ruby_block.rb +40 -0
  319. data/lib/chef/resource/scm.rb +147 -0
  320. data/lib/chef/resource/script.rb +60 -0
  321. data/lib/chef/resource/service.rb +160 -0
  322. data/lib/chef/resource/solaris_package.rb +36 -0
  323. data/lib/chef/resource/subversion.rb +36 -0
  324. data/lib/chef/resource/template.rb +69 -0
  325. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  326. data/lib/chef/resource/user.rb +130 -0
  327. data/lib/chef/resource/yum_package.rb +43 -0
  328. data/lib/chef/resource_collection.rb +217 -0
  329. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  330. data/lib/chef/resource_definition.rb +67 -0
  331. data/lib/chef/resource_definition_list.rb +38 -0
  332. data/lib/chef/resources.rb +64 -0
  333. data/lib/chef/rest.rb +386 -0
  334. data/lib/chef/rest/auth_credentials.rb +71 -0
  335. data/lib/chef/rest/cookie_jar.rb +31 -0
  336. data/lib/chef/rest/rest_request.rb +188 -0
  337. data/lib/chef/role.rb +341 -0
  338. data/lib/chef/run_context.rb +126 -0
  339. data/lib/chef/run_list.rb +165 -0
  340. data/lib/chef/run_list/run_list_expansion.rb +193 -0
  341. data/lib/chef/run_list/run_list_item.rb +92 -0
  342. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  343. data/lib/chef/run_status.rb +121 -0
  344. data/lib/chef/runner.rb +99 -0
  345. data/lib/chef/sandbox.rb +153 -0
  346. data/lib/chef/search/query.rb +65 -0
  347. data/lib/chef/shef.rb +326 -0
  348. data/lib/chef/shef/ext.rb +569 -0
  349. data/lib/chef/shef/model_wrapper.rb +120 -0
  350. data/lib/chef/shef/shef_rest.rb +28 -0
  351. data/lib/chef/shef/shef_session.rb +284 -0
  352. data/lib/chef/shell_out.rb +238 -0
  353. data/lib/chef/shell_out/unix.rb +223 -0
  354. data/lib/chef/shell_out/windows.rb +98 -0
  355. data/lib/chef/solr_query.rb +187 -0
  356. data/lib/chef/solr_query/lucene.treetop +150 -0
  357. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  358. data/lib/chef/solr_query/query_transform.rb +65 -0
  359. data/lib/chef/solr_query/solr_http_request.rb +118 -0
  360. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  361. data/lib/chef/tasks/chef_repo.rake +256 -0
  362. data/lib/chef/util/file_edit.rb +122 -0
  363. data/lib/chef/util/windows.rb +56 -0
  364. data/lib/chef/util/windows/net_group.rb +101 -0
  365. data/lib/chef/util/windows/net_use.rb +121 -0
  366. data/lib/chef/util/windows/net_user.rb +198 -0
  367. data/lib/chef/util/windows/volume.rb +59 -0
  368. data/lib/chef/version.rb +23 -0
  369. data/lib/chef/version_class.rb +70 -0
  370. data/lib/chef/version_constraint.rb +116 -0
  371. data/lib/chef/webui_user.rb +231 -0
  372. metadata +600 -0
@@ -0,0 +1,221 @@
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
+ # TODO: This is the wrong place for this responsibility.
122
+ if args.has_key?(:creates)
123
+ if File.exists?(args[:creates])
124
+ Chef::Log.debug("Skipping #{args[:command]} - creates #{args[:creates]} exists.")
125
+ return false
126
+ end
127
+ end
128
+
129
+ status, stdout, stderr = output_of_command(args[:command], args)
130
+ command_output << "STDOUT: #{stdout}"
131
+ command_output << "STDERR: #{stderr}"
132
+ handle_command_failures(status, command_output, args)
133
+
134
+ status
135
+ end
136
+
137
+ def output_of_command(command, args)
138
+ Chef::Log.debug("Executing #{command}")
139
+ stderr_string, stdout_string, status = "", "", nil
140
+
141
+ exec_processing_block = lambda do |pid, stdin, stdout, stderr|
142
+ stdout_string, stderr_string = stdout.string.chomp, stderr.string.chomp
143
+ end
144
+
145
+ args[:cwd] ||= Dir.tmpdir
146
+ unless ::File.directory?(args[:cwd])
147
+ raise Chef::Exceptions::Exec, "#{args[:cwd]} does not exist or is not a directory"
148
+ end
149
+
150
+ Dir.chdir(args[:cwd]) do
151
+ if args[:timeout]
152
+ begin
153
+ Timeout.timeout(args[:timeout]) do
154
+ status = popen4(command, args, &exec_processing_block)
155
+ end
156
+ rescue Timeout::Error => e
157
+ Chef::Log.error("#{command} exceeded timeout #{args[:timeout]}")
158
+ raise(e)
159
+ end
160
+ else
161
+ status = popen4(command, args, &exec_processing_block)
162
+ end
163
+
164
+ Chef::Log.debug("---- Begin output of #{command} ----")
165
+ Chef::Log.debug("STDOUT: #{stdout_string}")
166
+ Chef::Log.debug("STDERR: #{stderr_string}")
167
+ Chef::Log.debug("---- End output of #{command} ----")
168
+ Chef::Log.debug("Ran #{command} returned #{status.exitstatus}")
169
+ end
170
+
171
+ return status, stdout_string, stderr_string
172
+ end
173
+
174
+ def handle_command_failures(status, command_output, opts={})
175
+ unless opts[:ignore_failure]
176
+ opts[:returns] ||= 0
177
+ unless Array(opts[:returns]).include?(status.exitstatus)
178
+ # if the log level is not debug, through output of command when we fail
179
+ output = ""
180
+ if Chef::Log.level == :debug || opts[:output_on_failure]
181
+ output << "\n---- Begin output of #{opts[:command]} ----\n"
182
+ output << command_output.to_s
183
+ output << "\n---- End output of #{opts[:command]} ----\n"
184
+ end
185
+ raise Chef::Exceptions::Exec, "#{opts[:command]} returned #{status.exitstatus}, expected #{opts[:returns]}#{output}"
186
+ end
187
+ end
188
+ end
189
+
190
+ # Call #run_command but set LC_ALL to the system's current environment so it doesn't get changed to C.
191
+ #
192
+ # === Parameters
193
+ # args<Hash>: A number of required and optional arguments that will be handed out to #run_command
194
+ #
195
+ # === Returns
196
+ # Returns the result of #run_command
197
+ def run_command_with_systems_locale(args={})
198
+ args[:environment] ||= {}
199
+ args[:environment]["LC_ALL"] = ENV["LC_ALL"]
200
+ run_command args
201
+ end
202
+
203
+ # def popen4(cmd, args={}, &b)
204
+ # @@os_handler.popen4(cmd, args, &b)
205
+ # end
206
+
207
+ # module_function :popen4
208
+
209
+ def chdir_or_tmpdir(dir, &block)
210
+ dir ||= Dir.tmpdir
211
+ unless File.directory?(dir)
212
+ raise Chef::Exceptions::Exec, "#{dir} does not exist or is not a directory"
213
+ end
214
+ Dir.chdir(dir) do
215
+ block.call
216
+ end
217
+ end
218
+
219
+ end
220
+ end
221
+ 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,76 @@
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
+ if RUBY_VERSION =~ /^1\.8/
22
+ require 'win32/open3'
23
+ else
24
+ require 'open3'
25
+ end
26
+
27
+ class Chef
28
+ module Mixin
29
+ module Command
30
+ module Windows
31
+ def popen4(cmd, args={}, &b)
32
+
33
+ # By default, we are waiting before we yield the block.
34
+ args[:waitlast] ||= false
35
+
36
+ #XXX :user, :group, :environment support?
37
+
38
+ Open4.popen4(cmd) do |stdin,stdout,stderr,cid|
39
+ if b
40
+ if args[:waitlast]
41
+ b[cid, stdin, stdout, stderr]
42
+ # send EOF so that if the child process is reading from STDIN
43
+ # it will actually finish up and exit
44
+ stdin.close_write
45
+ else
46
+ o = StringIO.new
47
+ e = StringIO.new
48
+
49
+ stdin.close
50
+
51
+ stdout.sync = true
52
+ stderr.sync = true
53
+
54
+ line = stdout.gets(nil)
55
+ if line
56
+ o.write(line)
57
+ end
58
+ line = stderr.gets(nil)
59
+ if line
60
+ e.write(line)
61
+ end
62
+ o.rewind
63
+ e.rewind
64
+ b[cid, stdin, o, e]
65
+ end
66
+ else
67
+ [cid, stdin, stdout, stderr]
68
+ end
69
+ end
70
+ $?
71
+ end
72
+
73
+ end
74
+ end
75
+ end
76
+ end