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,223 @@
1
+ class Chef
2
+ class ShellOut
3
+ module Unix
4
+
5
+ # Run the command, writing the command's standard out and standard error
6
+ # to +stdout+ and +stderr+, and saving its exit status object to +status+
7
+ # === Returns
8
+ # returns +self+; +stdout+, +stderr+, +status+, and +exitstatus+ will be
9
+ # populated with results of the command
10
+ # === Raises
11
+ # * Errno::EACCES when you are not privileged to execute the command
12
+ # * Errno::ENOENT when the command is not available on the system (or not
13
+ # in the current $PATH)
14
+ # * Chef::Exceptions::CommandTimeout when the command does not complete
15
+ # within +timeout+ seconds (default: 60s)
16
+ def run_command
17
+ @child_pid = fork_subprocess
18
+
19
+ configure_parent_process_file_descriptors
20
+ propagate_pre_exec_failure
21
+
22
+ @result = nil
23
+ @execution_time = 0
24
+
25
+ # Ruby 1.8.7 and 1.8.6 from mid 2009 try to allocate objects during GC
26
+ # when calling IO.select and IO#read. Some OS Vendors are not interested
27
+ # in updating their ruby packages (Apple, *cough*) and we *have to*
28
+ # make it work. So I give you this epic hack:
29
+ GC.disable
30
+ until @status
31
+ ready = IO.select(open_pipes, nil, nil, READ_WAIT_TIME)
32
+ unless ready
33
+ @execution_time += READ_WAIT_TIME
34
+ if @execution_time >= timeout && !@result
35
+ raise Chef::Exceptions::CommandTimeout, "command timed out:\n#{format_for_exception}"
36
+ end
37
+ end
38
+
39
+ if ready && ready.first.include?(child_stdout)
40
+ read_stdout_to_buffer
41
+ end
42
+ if ready && ready.first.include?(child_stderr)
43
+ read_stderr_to_buffer
44
+ end
45
+
46
+ unless @status
47
+ # make one more pass to get the last of the output after the
48
+ # child process dies
49
+ if results = Process.waitpid2(@child_pid, Process::WNOHANG)
50
+ @status = results.last
51
+ redo
52
+ end
53
+ end
54
+ end
55
+ self
56
+ rescue Exception
57
+ # do our best to kill zombies
58
+ Process.waitpid2(@child_pid, Process::WNOHANG) rescue nil
59
+ raise
60
+ ensure
61
+ # no matter what happens, turn the GC back on, and hope whatever busted
62
+ # version of ruby we're on doesn't allocate some objects during the next
63
+ # GC run.
64
+ GC.enable
65
+ close_all_pipes
66
+ end
67
+
68
+ private
69
+
70
+ def set_user
71
+ if user
72
+ Process.euid = uid
73
+ Process.uid = uid
74
+ end
75
+ end
76
+
77
+ def set_group
78
+ if group
79
+ Process.egid = gid
80
+ Process.gid = gid
81
+ end
82
+ end
83
+
84
+ def set_environment
85
+ environment.each do |env_var,value|
86
+ ENV[env_var] = value
87
+ end
88
+ end
89
+
90
+ def set_umask
91
+ File.umask(umask) if umask
92
+ end
93
+
94
+ def set_cwd
95
+ Dir.chdir(cwd) if cwd
96
+ end
97
+
98
+ def initialize_ipc
99
+ @stdout_pipe, @stderr_pipe, @process_status_pipe = IO.pipe, IO.pipe, IO.pipe
100
+ @process_status_pipe.last.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
101
+ end
102
+
103
+ def child_stdout
104
+ @stdout_pipe[0]
105
+ end
106
+
107
+ def child_stderr
108
+ @stderr_pipe[0]
109
+ end
110
+
111
+ def child_process_status
112
+ @process_status_pipe[0]
113
+ end
114
+
115
+ def close_all_pipes
116
+ child_stdout.close unless child_stdout.closed?
117
+ child_stderr.close unless child_stderr.closed?
118
+ child_process_status.close unless child_process_status.closed?
119
+ end
120
+
121
+ # replace stdout, and stderr with pipes to the parent, and close the
122
+ # reader side of the error marshaling side channel. Close STDIN so when we
123
+ # exec, the new program will know it's never getting input ever.
124
+ def configure_subprocess_file_descriptors
125
+ process_status_pipe.first.close
126
+
127
+ # HACK: for some reason, just STDIN.close isn't good enough when running
128
+ # under ruby 1.9.2, so make it good enough:
129
+ stdin_reader, stdin_writer = IO.pipe
130
+ stdin_writer.close
131
+ STDIN.reopen stdin_reader
132
+ stdin_reader.close
133
+
134
+ stdout_pipe.first.close
135
+ STDOUT.reopen stdout_pipe.last
136
+ stdout_pipe.last.close
137
+
138
+ stderr_pipe.first.close
139
+ STDERR.reopen stderr_pipe.last
140
+ stderr_pipe.last.close
141
+
142
+ STDOUT.sync = STDERR.sync = true
143
+ end
144
+
145
+ def configure_parent_process_file_descriptors
146
+ # Close the sides of the pipes we don't care about
147
+ stdout_pipe.last.close
148
+ stderr_pipe.last.close
149
+ process_status_pipe.last.close
150
+ # Get output as it happens rather than buffered
151
+ child_stdout.sync = true
152
+ child_stderr.sync = true
153
+
154
+ true
155
+ end
156
+
157
+ # Some patch levels of ruby in wide use (in particular the ruby 1.8.6 on OSX)
158
+ # segfault when you IO.select a pipe that's reached eof. Weak sauce.
159
+ def open_pipes
160
+ @open_pipes ||= [child_stdout, child_stderr]
161
+ end
162
+
163
+ def read_stdout_to_buffer
164
+ while chunk = child_stdout.read_nonblock(READ_SIZE)
165
+ @stdout << chunk
166
+ @live_stream << chunk if @live_stream
167
+ end
168
+ rescue Errno::EAGAIN
169
+ rescue EOFError
170
+ open_pipes.delete_at(0)
171
+ end
172
+
173
+ def read_stderr_to_buffer
174
+ while chunk = child_stderr.read_nonblock(READ_SIZE)
175
+ @stderr << chunk
176
+ end
177
+ rescue Errno::EAGAIN
178
+ rescue EOFError
179
+ open_pipes.delete_at(1)
180
+ end
181
+
182
+ def fork_subprocess
183
+ initialize_ipc
184
+
185
+ fork do
186
+ configure_subprocess_file_descriptors
187
+
188
+ set_user
189
+ set_group
190
+ set_environment
191
+ set_umask
192
+ set_cwd
193
+
194
+ begin
195
+ command.kind_of?(Array) ? exec(*command) : exec(command)
196
+
197
+ raise 'forty-two' # Should never get here
198
+ rescue Exception => e
199
+ Marshal.dump(e, process_status_pipe.last)
200
+ process_status_pipe.last.flush
201
+ end
202
+ process_status_pipe.last.close unless (process_status_pipe.last.closed?)
203
+ exit!
204
+ end
205
+ end
206
+
207
+ # Attempt to get a Marshaled error from the side-channel.
208
+ # If it's there, un-marshal it and raise. If it's not there,
209
+ # assume everything went well.
210
+ def propagate_pre_exec_failure
211
+ begin
212
+ e = Marshal.load child_process_status
213
+ raise(Exception === e ? e : "unknown failure: #{e.inspect}")
214
+ rescue EOFError # If we get an EOF error, then the exec was successful
215
+ true
216
+ ensure
217
+ child_process_status.close
218
+ end
219
+ end
220
+
221
+ end
222
+ end
223
+ end
@@ -0,0 +1,98 @@
1
+ #--
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2011 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'timeout'
20
+ if RUBY_VERSION =~ /^1\.8/
21
+ require 'win32/open3'
22
+ else
23
+ require 'open3'
24
+ end
25
+
26
+ class Chef
27
+ class ShellOut
28
+ module Windows
29
+
30
+ #--
31
+ # Missing lots of features from the UNIX version, such as
32
+ # environment, cwd, etc.
33
+ def run_command
34
+ # win32 open4 is really just open3.
35
+ Open3.popen3(@command) do |stdin,stdout,stderr|
36
+ @finished_stdout = false
37
+ @finished_stderr = false
38
+ stdin.close
39
+ stdout.sync = true
40
+ stderr.sync = true
41
+
42
+ # TBH, I really don't know what this will do when it times out.
43
+ # However, I'm powerless to make windows have non-blocking IO, so
44
+ # thread party it is.
45
+ Timeout.timeout(timeout) do
46
+ out_reader = Thread.new do
47
+ loop do
48
+ read_stdout(stdout)
49
+ break if @finished_stdout
50
+ end
51
+ end
52
+ err_reader = Thread.new do
53
+ loop do
54
+ read_stderr(stderr)
55
+ break if @finished_stderr
56
+ end
57
+ end
58
+
59
+ out_reader.join
60
+ err_reader.join
61
+
62
+ @status = $?
63
+ end
64
+ end
65
+
66
+ self
67
+
68
+ rescue Timeout::Error
69
+ raise Chef::Exceptions::CommandTimeout, "command timed out:\n#{format_for_exception}"
70
+ end
71
+
72
+ def read_stdout(stdout)
73
+ return nil if @finished_stdout
74
+ if chunk = stdout.sysread(8096)
75
+ @stdout << chunk
76
+ else
77
+ @finished_stdout = true
78
+ end
79
+ rescue EOFError
80
+ @finished_stdout = true
81
+ rescue Errno::EAGAIN
82
+ end
83
+
84
+ def read_stderr(stderr)
85
+ return nil if @finished_stderr
86
+ if chunk = stderr.sysread(8096)
87
+ @stderr << chunk
88
+ else
89
+ @finished_stderr = true
90
+ end
91
+ rescue EOFError
92
+ @finished_stderr = true
93
+ rescue Errno::EAGAIN
94
+ end
95
+
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,187 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
4
+ # Author:: Seth Falcon (<seth@opscode.com>)
5
+ # Copyright:: Copyright (c) 2009-2011 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
+
21
+ require 'chef/mixin/xml_escape'
22
+ require 'chef/log'
23
+ require 'chef/config'
24
+ require 'chef/couchdb'
25
+ require 'chef/solr_query/solr_http_request'
26
+ require 'chef/solr_query/query_transform'
27
+
28
+ class Chef
29
+ class SolrQuery
30
+
31
+ ID_KEY = "X_CHEF_id_CHEF_X"
32
+ DEFAULT_PARAMS = Mash.new(:start => 0, :rows => 1000, :sort => "#{ID_KEY} asc", :wt => 'json', :indent => 'off').freeze
33
+ FILTER_PARAM_MAP = {:database => 'X_CHEF_database_CHEF_X', :type => "X_CHEF_type_CHEF_X", :data_bag => 'data_bag'}
34
+ VALID_PARAMS = [:start,:rows,:sort,:q,:type]
35
+ BUILTIN_SEARCH_TYPES = ["role","node","client","environment"]
36
+ DATA_BAG_ITEM = 'data_bag_item'
37
+
38
+ include Chef::Mixin::XMLEscape
39
+
40
+ attr_accessor :query
41
+ attr_accessor :params
42
+
43
+ # Create a new Query object - takes the solr_url and optional
44
+ # Chef::CouchDB object to inflate objects into.
45
+ def initialize(couchdb = nil)
46
+ @filter_query = {}
47
+ @params = {}
48
+
49
+ if couchdb.nil?
50
+ @database = Chef::Config[:couchdb_database]
51
+ @couchdb = Chef::CouchDB.new(nil, Chef::Config[:couchdb_database])
52
+ else
53
+ unless couchdb.kind_of?(Chef::CouchDB)
54
+ Chef::Log.warn("Passing the database name to Chef::Solr::Query initialization is deprecated. Please pass in the Chef::CouchDB object instead.")
55
+ @database = couchdb
56
+ @couchdb = Chef::CouchDB.new(nil, couchdb)
57
+ else
58
+ @database = couchdb.couchdb_database
59
+ @couchdb = couchdb
60
+ end
61
+ end
62
+ end
63
+
64
+ def self.from_params(params, couchdb=nil)
65
+ query = new(couchdb)
66
+ query.params = VALID_PARAMS.inject({}) do |p, param_name|
67
+ p[param_name] = params[param_name] if params.key?(param_name)
68
+ p
69
+ end
70
+ query.update_filter_query_from_params
71
+ query.update_query_from_params
72
+ query
73
+ end
74
+
75
+ def filter_by(filter_query_params)
76
+ filter_query_params.each do |key, value|
77
+ @filter_query[FILTER_PARAM_MAP[key]] = value
78
+ end
79
+ end
80
+
81
+ def filter_query
82
+ @filter_query.map { |param, value| "+#{param}:#{value}" }.join(' ')
83
+ end
84
+
85
+ def filter_by_type(type)
86
+ case type
87
+ when *BUILTIN_SEARCH_TYPES
88
+ filter_by(:type => type)
89
+ else
90
+ filter_by(:type => DATA_BAG_ITEM, :data_bag => type)
91
+ end
92
+ end
93
+
94
+ def update_filter_query_from_params
95
+ filter_by(:database => @database)
96
+ filter_by_type(params.delete(:type))
97
+ end
98
+
99
+ def update_query_from_params
100
+ original_query = URI.decode(params.delete(:q) || "*:*")
101
+ @query = Chef::SolrQuery::QueryTransform.transform(original_query)
102
+ end
103
+
104
+ def objects
105
+ if !object_ids.empty?
106
+ @bulk_objects ||= @couchdb.bulk_get(object_ids)
107
+ Chef::Log.debug { "bulk get of objects: #{@bulk_objects.inspect}" }
108
+ @bulk_objects
109
+ else
110
+ []
111
+ end
112
+ end
113
+
114
+ def object_ids
115
+ @object_ids ||= results["response"]["docs"].map { |d| d[ID_KEY] }
116
+ end
117
+
118
+ def results
119
+ @results ||= SolrHTTPRequest.select(self.to_hash)
120
+ end
121
+
122
+ # Search Solr for objects of a given type, for a given query.
123
+ def search
124
+ { "rows" => objects, "start" => results["response"]["start"],
125
+ "total" => results["response"]["numFound"] }
126
+ end
127
+
128
+ def to_hash
129
+ options = DEFAULT_PARAMS.merge(params)
130
+ options[:fq] = filter_query
131
+ options[:q] = @query
132
+ options
133
+ end
134
+
135
+ START_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".freeze
136
+ START_DELETE_BY_QUERY = "<delete><query>".freeze
137
+ END_DELETE_BY_QUERY = "</query></delete>\n".freeze
138
+ COMMIT = "<commit/>\n".freeze
139
+
140
+ def commit(opts={})
141
+ SolrHTTPRequest.update("#{START_XML}#{COMMIT}")
142
+ end
143
+
144
+ def delete_database(db)
145
+ query_data = xml_escape("X_CHEF_database_CHEF_X:#{db}")
146
+ xml = "#{START_XML}#{START_DELETE_BY_QUERY}#{query_data}#{END_DELETE_BY_QUERY}"
147
+ SolrHTTPRequest.update(xml)
148
+ commit
149
+ end
150
+
151
+ def rebuild_index(db=Chef::Config[:couchdb_database])
152
+ delete_database(db)
153
+
154
+ results = {}
155
+ [Chef::ApiClient, Chef::Node, Chef::Role].each do |klass|
156
+ results[klass.name] = reindex_all(klass) ? "success" : "failed"
157
+ end
158
+ databags = Chef::DataBag.cdb_list(true)
159
+ Chef::Log.info("Reloading #{databags.size.to_s} #{Chef::DataBag} objects into the indexer")
160
+ databags.each { |i| i.add_to_index; i.list(true).each { |x| x.add_to_index } }
161
+ results[Chef::DataBag.name] = "success"
162
+ results
163
+ end
164
+
165
+ def reindex_all(klass, metadata={})
166
+ begin
167
+ items = klass.cdb_list(true)
168
+ Chef::Log.info("Reloading #{items.size.to_s} #{klass.name} objects into the indexer")
169
+ items.each { |i| i.add_to_index }
170
+ rescue Net::HTTPServerException => e
171
+ # 404s are okay, there might not be any of that kind of object...
172
+ if e.message =~ /Not Found/
173
+ Chef::Log.warn("Could not load #{klass.name} objects from couch for re-indexing (this is ok if you don't have any of these)")
174
+ return false
175
+ else
176
+ raise e
177
+ end
178
+ rescue Exception => e
179
+ Chef::Log.fatal("Chef encountered an error while attempting to load #{klass.name} objects back into the index")
180
+ raise e
181
+ end
182
+ true
183
+ end
184
+
185
+
186
+ end
187
+ end