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,92 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 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
+ class RunList
20
+ class RunListItem
21
+ QUALIFIED_RECIPE = %r{^recipe\[([^\]@]+)(@([0-9]+(\.[0-9]+){1,2}))?\]$}
22
+ QUALIFIED_ROLE = %r{^role\[([^\]]+)\]$}
23
+ VERSIONED_UNQUALIFIED_RECIPE = %r{^([^@]+)(@([0-9]+(\.[0-9]+){1,2}))$}
24
+
25
+ attr_reader :name, :type, :version
26
+
27
+
28
+ def initialize(item)
29
+ @version = nil
30
+ case item
31
+ when Hash
32
+ assert_hash_is_valid_run_list_item!(item)
33
+ @type = (item['type'] || item[:type]).to_sym
34
+ @name = item['name'] || item[:name]
35
+ if (item.has_key?('version') || item.has_key?(:version))
36
+ @version = item['version'] || item[:version]
37
+ end
38
+ when String
39
+ if match = QUALIFIED_RECIPE.match(item)
40
+ # recipe[recipe_name]
41
+ # recipe[recipe_name@1.0.0]
42
+ @type = :recipe
43
+ @name = match[1]
44
+ @version = match[3] if match[3]
45
+ elsif match = QUALIFIED_ROLE.match(item)
46
+ # role[role_name]
47
+ @type = :role
48
+ @name = match[1]
49
+ elsif match = VERSIONED_UNQUALIFIED_RECIPE.match(item)
50
+ # recipe_name@1.0.0
51
+ @type = :recipe
52
+ @name = match[1]
53
+ @version = match[3] if match[3]
54
+ else
55
+ # recipe_name
56
+ @type = :recipe
57
+ @name = item
58
+ end
59
+ else
60
+ raise ArgumentError, "Unable to create #{self.class} from #{item.class}:#{item.inspect}: must be a Hash or String"
61
+ end
62
+ end
63
+
64
+ def to_s
65
+ "#{@type}[#{@name}#{@version ? "@#{@version}" :""}]"
66
+ end
67
+
68
+ def role?
69
+ @type == :role
70
+ end
71
+
72
+ def recipe?
73
+ @type == :recipe
74
+ end
75
+
76
+ def ==(other)
77
+ if other.kind_of?(String)
78
+ self.to_s == other.to_s
79
+ else
80
+ other.respond_to?(:type) && other.respond_to?(:name) && other.respond_to?(:version) && other.type == @type && other.name == @name && other.version == @version
81
+ end
82
+ end
83
+
84
+ def assert_hash_is_valid_run_list_item!(item)
85
+ unless (item.key?('type')|| item.key?(:type)) && (item.key?('name') || item.key?(:name))
86
+ raise ArgumentError, "Initializing a #{self.class} from a hash requires that it have a 'type' and 'name' key"
87
+ end
88
+ end
89
+
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,68 @@
1
+ #
2
+ # Author:: Stephen Delano (<stephen@opscode.com>)
3
+ # Author:: Seth Falcon (<seth@opscode.com>)
4
+ # Copyright:: Copyright 2010 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ require 'chef/version_class'
19
+ require 'chef/version_constraint'
20
+
21
+ # Why does this class exist?
22
+ # Why did we not just modify RunList/RunListItem?
23
+ class Chef
24
+ class RunList
25
+ class VersionedRecipeList < Array
26
+
27
+ def initialize
28
+ super
29
+ @versions = Hash.new
30
+ end
31
+
32
+ def add_recipe(name, version=nil)
33
+ if version && @versions.has_key?(name)
34
+ unless Chef::Version.new(@versions[name]) == Chef::Version.new(version)
35
+ raise Chef::Exceptions::CookbookVersionConflict, "Run list requires #{name} at versions #{@versions[name]} and #{version}"
36
+ end
37
+ end
38
+ @versions[name] = version if version
39
+ self << name unless self.include?(name)
40
+ end
41
+
42
+ def with_versions
43
+ self.map {|recipe_name| {:name => recipe_name, :version => @versions[recipe_name]}}
44
+ end
45
+
46
+ # Return an Array of Hashes, each of the form:
47
+ # {:name => RECIPE_NAME, :version_constraint => Chef::VersionConstraint }
48
+ def with_version_constraints
49
+ self.map do |recipe_name|
50
+ constraint = Chef::VersionConstraint.new(@versions[recipe_name])
51
+ { :name => recipe_name, :version_constraint => constraint }
52
+ end
53
+ end
54
+
55
+ # Return an Array of Strings, each of the form:
56
+ # "NAME@VERSION"
57
+ def with_version_constraints_strings
58
+ self.map do |recipe_name|
59
+ if @versions[recipe_name]
60
+ "#{recipe_name}@#{@versions[recipe_name]}"
61
+ else
62
+ recipe_name
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,121 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 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
+ # == Chef::RunStatus
20
+ # Tracks various aspects of a Chef run, including the Node and RunContext,
21
+ # start and end time, and any Exception that stops the run. RunStatus objects
22
+ # are passed to any notification or exception handlers at the completion of a
23
+ # Chef run.
24
+ class Chef::RunStatus
25
+
26
+ attr_reader :run_context
27
+
28
+ attr_writer :run_context
29
+
30
+ attr_reader :start_time
31
+
32
+ attr_reader :end_time
33
+
34
+ attr_reader :exception
35
+
36
+ attr_writer :exception
37
+
38
+ def initialize(node)
39
+ @node = node
40
+ end
41
+
42
+ def node
43
+ @node
44
+ end
45
+
46
+ # sets +start_time+ to the current time.
47
+ def start_clock
48
+ @start_time = Time.now
49
+ end
50
+
51
+ # sets +end_time+ to the current time
52
+ def stop_clock
53
+ @end_time = Time.now
54
+ end
55
+
56
+ # The elapsed time between +start_time+ and +end_time+. Returns +nil+ if
57
+ # either value is not set.
58
+ def elapsed_time
59
+ if @start_time && @end_time
60
+ @end_time - @start_time
61
+ else
62
+ nil
63
+ end
64
+ end
65
+
66
+ # The list of all resources in the current run context's +resource_collection+
67
+ def all_resources
68
+ @run_context && @run_context.resource_collection.all_resources
69
+ end
70
+
71
+ # The list of all resources in the current run context's +resource_collection+
72
+ # that are marked as updated
73
+ def updated_resources
74
+ @run_context && @run_context.resource_collection.select { |r| r.updated }
75
+ end
76
+
77
+ # The backtrace from +exception+, if any
78
+ def backtrace
79
+ @exception && @exception.backtrace
80
+ end
81
+
82
+ # Did the Chef run fail?
83
+ def failed?
84
+ !success?
85
+ end
86
+
87
+ # Did the chef run succeed? returns +true+ if no exception has been set.
88
+ def success?
89
+ @exception.nil?
90
+ end
91
+
92
+ # A Hash representation of the RunStatus, with the following (Symbol) keys:
93
+ # * :node
94
+ # * :success
95
+ # * :start_time
96
+ # * :end_time
97
+ # * :elapsed_time
98
+ # * :all_resources
99
+ # * :updated_resources
100
+ # * :exception
101
+ # * :backtrace
102
+ def to_hash
103
+ # use a flat hash here so we can't errors from intermediate values being nil
104
+ { :node => node,
105
+ :success => success?,
106
+ :start_time => start_time,
107
+ :end_time => end_time,
108
+ :elapsed_time => elapsed_time,
109
+ :all_resources => all_resources,
110
+ :updated_resources => updated_resources,
111
+ :exception => formatted_exception,
112
+ :backtrace => backtrace}
113
+ end
114
+
115
+ # Returns a string of the format "ExceptionClass: message" or +nil+ if no
116
+ # +exception+ is set.
117
+ def formatted_exception
118
+ @exception && "#{@exception.class.name}: #{@exception.message}"
119
+ end
120
+
121
+ end
@@ -0,0 +1,99 @@
1
+ #--
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
5
+ # Copyright:: Copyright (c) 2008, 2010 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/params_validate'
22
+ require 'chef/node'
23
+ require 'chef/resource_collection'
24
+ require 'chef/platform'
25
+
26
+ class Chef
27
+ # == Chef::Runner
28
+ # This class is responsible for executing the steps in a Chef run.
29
+ class Runner
30
+
31
+ attr_reader :run_context
32
+
33
+ attr_reader :delayed_actions
34
+
35
+ include Chef::Mixin::ParamsValidate
36
+
37
+ def initialize(run_context)
38
+ @run_context = run_context
39
+ @delayed_actions = []
40
+ end
41
+
42
+ # Determine the appropriate provider for the given resource, then
43
+ # execute it.
44
+ def run_action(resource, action)
45
+ resource.run_action(action)
46
+
47
+ # Execute any immediate and queue up any delayed notifications
48
+ # associated with the resource, but only if it was updated *this time*
49
+ # we ran an action on it.
50
+ if resource.updated_by_last_action?
51
+ resource.immediate_notifications.each do |notification|
52
+ Chef::Log.info("#{resource} sending #{notification.action} action to #{notification.resource} (immediate)")
53
+ run_action(notification.resource, notification.action)
54
+ end
55
+
56
+ resource.delayed_notifications.each do |notification|
57
+ if delayed_actions.any? { |existing_notification| existing_notification.duplicates?(notification) }
58
+ Chef::Log.info( "#{resource} not queuing delayed action #{notification.action} on #{notification.resource}"\
59
+ " (delayed), as it's already been queued")
60
+ else
61
+ delayed_actions << notification
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ # Iterates over the +resource_collection+ in the +run_context+ calling
68
+ # +run_action+ for each resource in turn.
69
+ def converge
70
+ # Resolve all lazy/forward references in notifications
71
+ run_context.resource_collection.each do |resource|
72
+ resource.resolve_notification_references
73
+ end
74
+
75
+ # Execute each resource.
76
+ run_context.resource_collection.execute_each_resource do |resource|
77
+ begin
78
+ Chef::Log.debug("Processing #{resource} on #{run_context.node.name}")
79
+
80
+ # Execute each of this resource's actions.
81
+ Array(resource.action).each {|action| run_action(resource, action)}
82
+ rescue => e
83
+ Chef::Log.error("#{resource} (#{resource.source_line}) had an error:\n#{e}\n#{e.backtrace.join("\n")}")
84
+ raise e unless resource.ignore_failure
85
+ end
86
+ end
87
+
88
+ # Run all our :delayed actions
89
+ delayed_actions.each do |notification|
90
+ Chef::Log.info( "#{notification.notifying_resource} sending #{notification.action}"\
91
+ " action to #{notification.resource} (delayed)")
92
+ # Struct of resource/action to call
93
+ run_action(notification.resource, notification.action)
94
+ end
95
+
96
+ true
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,153 @@
1
+ #
2
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 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
+ require 'chef/log'
19
+ require 'uuidtools'
20
+
21
+ class Chef
22
+ class Sandbox
23
+ attr_accessor :is_completed, :create_time
24
+ alias_method :is_completed?, :is_completed
25
+ attr_reader :guid
26
+
27
+ alias :name :guid
28
+
29
+ attr_accessor :couchdb, :couchdb_id, :couchdb_rev
30
+
31
+ # list of checksum ids
32
+ attr_accessor :checksums
33
+
34
+ DESIGN_DOCUMENT = {
35
+ "version" => 1,
36
+ "language" => "javascript",
37
+ "views" => {
38
+ "all" => {
39
+ "map" => <<-EOJS
40
+ function(doc) {
41
+ if (doc.chef_type == "sandbox") {
42
+ emit(doc.guid, doc);
43
+ }
44
+ }
45
+ EOJS
46
+ },
47
+ "all_id" => {
48
+ "map" => <<-EOJS
49
+ function(doc) {
50
+ if (doc.chef_type == "sandbox") {
51
+ emit(doc.guid, doc.guid);
52
+ }
53
+ }
54
+ EOJS
55
+ },
56
+ "all_incomplete" => {
57
+ "map" => <<-EOJS
58
+ function(doc) {
59
+ if (doc.chef_type == "sandbox" && !doc.is_completed) {
60
+ emit(doc.guid, doc.guid);
61
+ }
62
+ }
63
+ EOJS
64
+ },
65
+ "all_completed" => {
66
+ "map" => <<-EOJS
67
+ function(doc) {
68
+ if (doc.chef_type == "sandbox" && doc.is_completed) {
69
+ emit(doc.guid, doc.guid);
70
+ }
71
+ }
72
+ EOJS
73
+ },
74
+ }
75
+ }
76
+
77
+ # Creates a new Chef::Sandbox object.
78
+ #
79
+ # === Returns
80
+ # object<Chef::Sandbox>:: Duh. :)
81
+ def initialize(guid=nil, couchdb=nil)
82
+ @guid = guid || UUIDTools::UUID.random_create.to_s.gsub(/\-/,'').downcase
83
+ @is_completed = false
84
+ @create_time = Time.now.iso8601
85
+ @checksums = Array.new
86
+ end
87
+
88
+ def include?(checksum)
89
+ @checksums.include?(checksum)
90
+ end
91
+
92
+ alias :member? :include?
93
+
94
+ def to_json(*a)
95
+ result = {
96
+ :guid => guid,
97
+ :name => name, # same as guid, used for id_map
98
+ :checksums => checksums,
99
+ :create_time => create_time,
100
+ :is_completed => is_completed,
101
+ :json_class => self.class.name,
102
+ :chef_type => 'sandbox'
103
+ }
104
+ result["_rev"] = @couchdb_rev if @couchdb_rev
105
+ result.to_json(*a)
106
+ end
107
+
108
+ def self.json_create(o)
109
+ sandbox = new(o['guid'])
110
+ sandbox.checksums = o['checksums']
111
+ sandbox.create_time = o['create_time']
112
+ sandbox.is_completed = o['is_completed']
113
+ if o.has_key?('_rev')
114
+ sandbox.couchdb_rev = o["_rev"]
115
+ o.delete("_rev")
116
+ end
117
+ if o.has_key?("_id")
118
+ sandbox.couchdb_id = o["_id"]
119
+ #sandbox.index_id = sandbox.couchdb_id
120
+ o.delete("_id")
121
+ end
122
+ sandbox
123
+ end
124
+
125
+ ##
126
+ # Couchdb
127
+ ##
128
+
129
+ def self.create_design_document(couchdb=nil)
130
+ (couchdb || Chef::CouchDB.new).create_design_document("sandboxes", DESIGN_DOCUMENT)
131
+ end
132
+
133
+ def self.cdb_list(inflate=false, couchdb=nil)
134
+ rs = (couchdb || Chef::CouchDB.new).list("sandboxes", inflate)
135
+ lookup = (inflate ? "value" : "key")
136
+ rs["rows"].collect { |r| r[lookup] }
137
+ end
138
+
139
+ def self.cdb_load(guid, couchdb=nil)
140
+ # Probably want to look for a view here at some point
141
+ (couchdb || Chef::CouchDB.new).load("sandbox", guid)
142
+ end
143
+
144
+ def cdb_destroy
145
+ (couchdb || Chef::CouchDB.new).delete("sandbox", guid, @couchdb_rev)
146
+ end
147
+
148
+ def cdb_save(couchdb=nil)
149
+ @couchdb_rev = (couchdb || Chef::CouchDB.new).store("sandbox", guid, self)["rev"]
150
+ end
151
+
152
+ end
153
+ end