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,126 @@
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
+ require 'chef/resource_collection'
21
+ require 'chef/node'
22
+ require 'chef/role'
23
+ require 'chef/log'
24
+ require 'chef/mixin/language_include_recipe'
25
+
26
+ class Chef
27
+ # == Chef::RunContext
28
+ # Value object that loads and tracks the context of a Chef run
29
+ class RunContext
30
+
31
+ # Used to load the node's recipes after expanding its run list
32
+ include Chef::Mixin::LanguageIncludeRecipe
33
+
34
+ attr_reader :node, :cookbook_collection, :definitions
35
+
36
+ # Needs to be settable so deploy can run a resource_collection independent
37
+ # of any cookbooks.
38
+ attr_accessor :resource_collection
39
+
40
+ # Creates a new Chef::RunContext object and populates its fields. This object gets
41
+ # used by the Chef Server to generate a fully compiled recipe list for a node.
42
+ #
43
+ # === Returns
44
+ # object<Chef::RunContext>:: Duh. :)
45
+ def initialize(node, cookbook_collection)
46
+ @node = node
47
+ @cookbook_collection = cookbook_collection
48
+ @resource_collection = Chef::ResourceCollection.new
49
+ @definitions = Hash.new
50
+
51
+ # TODO: 5/18/2010 cw/timh - See note on Chef::Node's
52
+ # cookbook_collection attr_accessor
53
+ node.cookbook_collection = cookbook_collection
54
+ end
55
+
56
+ def load(run_list_expansion)
57
+ load_libraries
58
+ load_lwrp_providers
59
+ load_lwrp_resources
60
+ load_attributes
61
+ load_resource_definitions
62
+
63
+ # Precendence rules state that roles' attributes come after
64
+ # cookbooks. Now we've loaded attributes from cookbooks with
65
+ # load_attributes, apply the expansion attributes (loaded from
66
+ # roles) to the node.
67
+ @node.apply_expansion_attributes(run_list_expansion)
68
+
69
+ run_list_expansion.recipes.each do |recipe|
70
+ # TODO: timh/cw, 5-14-2010: It's distasteful to be including
71
+ # the DSL in a class outside the context of the DSL
72
+ include_recipe(recipe)
73
+ end
74
+ end
75
+
76
+
77
+ private
78
+
79
+ def load_libraries
80
+ foreach_cookbook_load_segment(:libraries) do |cookbook_name, filename|
81
+ Chef::Log.debug("Loading cookbook #{cookbook_name}'s library file: #{filename}")
82
+ require filename
83
+ end
84
+ end
85
+
86
+ def load_lwrp_providers
87
+ foreach_cookbook_load_segment(:providers) do |cookbook_name, filename|
88
+ Chef::Log.debug("Loading cookbook #{cookbook_name}'s providers from #{filename}")
89
+ Chef::Provider.build_from_file(cookbook_name, filename)
90
+ end
91
+ end
92
+
93
+ def load_lwrp_resources
94
+ foreach_cookbook_load_segment(:resources) do |cookbook_name, filename|
95
+ Chef::Log.debug("Loading cookbook #{cookbook_name}'s resources from #{filename}")
96
+ Chef::Resource.build_from_file(cookbook_name, filename)
97
+ end
98
+ end
99
+
100
+ def load_attributes
101
+ node.load_attributes
102
+ end
103
+
104
+ def load_resource_definitions
105
+ foreach_cookbook_load_segment(:definitions) do |cookbook_name, filename|
106
+ Chef::Log.debug("Loading cookbook #{cookbook_name}'s definitions from #{filename}")
107
+ resourcelist = Chef::ResourceDefinitionList.new
108
+ resourcelist.from_file(filename)
109
+ definitions.merge!(resourcelist.defines) do |key, oldval, newval|
110
+ Chef::Log.info("Overriding duplicate definition #{key}, new found in #{filename}")
111
+ newval
112
+ end
113
+ end
114
+ end
115
+
116
+ def foreach_cookbook_load_segment(segment, &block)
117
+ cookbook_collection.each do |cookbook_name, cookbook|
118
+ segment_filenames = cookbook.segment_filenames(segment)
119
+ segment_filenames.each do |segment_filename|
120
+ block.call(cookbook_name, segment_filename)
121
+ end
122
+ end
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,165 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Nuo Yan (<nuoyan@opscode.com>)
4
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
5
+ # Author:: Christopher Walters (<cw@opscode.com>)
6
+ # Author:: Seth Falcon (<seth@opscode.com>)
7
+ # Copyright:: Copyright (c) 2008-2011 Opscode, Inc.
8
+ # License:: Apache License, Version 2.0
9
+ #
10
+ # Licensed under the Apache License, Version 2.0 (the "License");
11
+ # you may not use this file except in compliance with the License.
12
+ # You may obtain a copy of the License at
13
+ #
14
+ # http://www.apache.org/licenses/LICENSE-2.0
15
+ #
16
+ # Unless required by applicable law or agreed to in writing, software
17
+ # distributed under the License is distributed on an "AS IS" BASIS,
18
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ # See the License for the specific language governing permissions and
20
+ # limitations under the License.
21
+
22
+ require 'chef/run_list/run_list_item'
23
+ require 'chef/run_list/run_list_expansion'
24
+ require 'chef/run_list/versioned_recipe_list'
25
+ require 'chef/mixin/params_validate'
26
+
27
+ class Chef
28
+ class RunList
29
+ include Enumerable
30
+ include Chef::Mixin::ParamsValidate
31
+
32
+ # @run_list_items is an array of RunListItems that describe the items to
33
+ # execute in order. RunListItems can load from and convert to the string
34
+ # forms users set on roles and nodes.
35
+ # For example:
36
+ # @run_list_items = ['recipe[foo::bar]', 'role[webserver]']
37
+ # Thus,
38
+ # self.role_names would return ['webserver']
39
+ # self.recipe_names would return ['foo::bar']
40
+ attr_reader :run_list_items
41
+
42
+ # For backwards compat
43
+ alias :run_list :run_list_items
44
+
45
+ def initialize(*run_list_items)
46
+ @run_list_items = run_list_items.map { |i| coerce_to_run_list_item(i) }
47
+ end
48
+
49
+ def role_names
50
+ @run_list_items.inject([]){|memo, run_list_item| memo << run_list_item.name if run_list_item.role? ; memo}
51
+ end
52
+
53
+ alias :roles :role_names
54
+
55
+ def recipe_names
56
+ @run_list_items.inject([]){|memo, run_list_item| memo << run_list_item.name if run_list_item.recipe? ; memo}
57
+ end
58
+
59
+ alias :recipes :recipe_names
60
+
61
+ # Add an item of the form "recipe[foo::bar]" or "role[webserver]";
62
+ # takes a String or a RunListItem
63
+ def <<(run_list_item)
64
+ run_list_item = coerce_to_run_list_item(run_list_item)
65
+ @run_list_items << run_list_item unless @run_list_items.include?(run_list_item)
66
+ self
67
+ end
68
+
69
+ alias :push :<<
70
+
71
+ def ==(other)
72
+ if other.kind_of?(Chef::RunList)
73
+ other.run_list_items == @run_list_items
74
+ else
75
+ return false unless other.respond_to?(:size) && (other.size == @run_list_items.size)
76
+ other_run_list_items = other.dup
77
+
78
+ other_run_list_items.map! { |item| coerce_to_run_list_item(item) }
79
+ other_run_list_items == @run_list_items
80
+ end
81
+ end
82
+
83
+ def to_s
84
+ @run_list_items.join(", ")
85
+ end
86
+
87
+ def to_json(*args)
88
+ to_a.to_json(*args)
89
+ end
90
+
91
+ def empty?
92
+ @run_list_items.length == 0 ? true : false
93
+ end
94
+
95
+ def [](pos)
96
+ @run_list_items[pos]
97
+ end
98
+
99
+ def []=(pos, item)
100
+ @run_list_items[pos] = parse_entry(item)
101
+ end
102
+
103
+ def each(&block)
104
+ @run_list_items.each { |i| block.call(i) }
105
+ end
106
+
107
+ def each_index(&block)
108
+ @run_list_items.each_index { |i| block.call(i) }
109
+ end
110
+
111
+ def include?(item)
112
+ @run_list_items.include?(parse_entry(item))
113
+ end
114
+
115
+ def reset!(*args)
116
+ @run_list_items.clear
117
+ args.flatten.each do |item|
118
+ if item.kind_of?(Chef::RunList)
119
+ item.each { |r| self << r }
120
+ else
121
+ self << item
122
+ end
123
+ end
124
+ self
125
+ end
126
+
127
+ def remove(item)
128
+ @run_list_items.delete_if{|i| i == item}
129
+ self
130
+ end
131
+ alias :delete :remove
132
+
133
+ # Expands this run_list: recursively expand roles into their included
134
+ # recipes.
135
+ # Returns a RunListExpansion object.
136
+ def expand(environment, data_source='server', expansion_opts={})
137
+ expansion = expansion_for_data_source(environment, data_source, expansion_opts)
138
+ expansion.expand
139
+ expansion
140
+ end
141
+
142
+ # Converts a string run list entry to a RunListItem object.
143
+ def parse_entry(entry)
144
+ RunListItem.new(entry)
145
+ end
146
+
147
+ def coerce_to_run_list_item(item)
148
+ item.kind_of?(RunListItem) ? item : parse_entry(item)
149
+ end
150
+
151
+ def expansion_for_data_source(environment, data_source, opts={})
152
+ case data_source.to_s
153
+ when 'disk'
154
+ RunListExpansionFromDisk.new(environment, @run_list_items)
155
+ when 'server'
156
+ RunListExpansionFromAPI.new(environment, @run_list_items, opts[:rest])
157
+ when 'couchdb'
158
+ RunListExpansionFromCouchDB.new(environment, @run_list_items, opts[:couchdb])
159
+ end
160
+ end
161
+
162
+
163
+ end
164
+ end
165
+
@@ -0,0 +1,193 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
4
+ # Copyright:: Copyright (c) 2010, 2011 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
+
19
+ require 'chef/mash'
20
+
21
+ require 'chef/mixin/deep_merge'
22
+
23
+ require 'chef/role'
24
+ require 'chef/couchdb'
25
+ require 'chef/rest'
26
+
27
+ class Chef
28
+ class RunList
29
+ # Abstract Base class for expanding a run list. Subclasses must handle
30
+ # fetching roles from a data source by defining +fetch_role+
31
+ class RunListExpansion
32
+
33
+ attr_reader :run_list_items
34
+
35
+ # A VersionedRecipeList of recipes. Populated only after #expand
36
+ # is called.
37
+ attr_reader :recipes
38
+
39
+ attr_reader :default_attrs
40
+
41
+ attr_reader :override_attrs
42
+
43
+ attr_reader :errors
44
+
45
+ attr_reader :environment
46
+
47
+ # The data source passed to the constructor. Not used in this class.
48
+ # In subclasses, this is a couchdb or Chef::REST object pre-configured
49
+ # to fetch roles from their correct location.
50
+ attr_reader :source
51
+
52
+ def initialize(environment, run_list_items, source=nil)
53
+ @environment = environment
54
+ @errors = Array.new
55
+
56
+ @run_list_items = run_list_items.dup
57
+ @source = source
58
+
59
+ @default_attrs = Mash.new
60
+ @override_attrs = Mash.new
61
+
62
+ @recipes = Chef::RunList::VersionedRecipeList.new
63
+
64
+ @applied_roles = {}
65
+ end
66
+
67
+ # Did we find any errors (expanding roles)?
68
+ def errors?
69
+ @errors.length > 0
70
+ end
71
+
72
+ alias :invalid? :errors?
73
+
74
+ # Recurses over the run list items, expanding roles. After this,
75
+ # +recipes+ will contain the fully expanded recipe list
76
+ def expand
77
+ # Sure do miss function arity when being recursive
78
+ expand_run_list_items(@run_list_items)
79
+ end
80
+
81
+ # Fetches and inflates a role
82
+ # === Returns
83
+ # Chef::Role in most cases
84
+ # false if the role has already been applied
85
+ # nil if the role does not exist
86
+ def inflate_role(role_name)
87
+ return false if applied_role?(role_name) # Prevent infinite loops
88
+ applied_role(role_name)
89
+ fetch_role(role_name)
90
+ end
91
+
92
+ def apply_role_attributes(role)
93
+ @default_attrs = Chef::Mixin::DeepMerge.merge(@default_attrs, role.default_attributes)
94
+ @override_attrs = Chef::Mixin::DeepMerge.merge(@override_attrs, role.override_attributes)
95
+ end
96
+
97
+ def applied_role?(role_name)
98
+ @applied_roles.has_key?(role_name)
99
+ end
100
+
101
+ # Returns an array of role names that were expanded; this
102
+ # includes any roles that were in the original, pre-expansion
103
+ # run_list as well as roles processed during
104
+ # expansion. Populated only after #expand is called.
105
+ def roles
106
+ @applied_roles.keys
107
+ end
108
+
109
+ # In subclasses, this method will fetch the role from the data source.
110
+ def fetch_role(name)
111
+ raise NotImplementedError
112
+ end
113
+
114
+ # When a role is not found, an error message is logged, but no
115
+ # exception is raised. We do add an entry in the errors collection.
116
+ # === Returns
117
+ # nil
118
+ def role_not_found(name)
119
+ Chef::Log.error("Role #{name} is in the runlist but does not exist. Skipping expand.")
120
+ @errors << name
121
+ nil
122
+ end
123
+
124
+ private
125
+
126
+ # these methods modifies internal state based on arguments, so hide it.
127
+
128
+ def applied_role(role_name)
129
+ @applied_roles[role_name] = true
130
+ end
131
+
132
+ def expand_run_list_items(items)
133
+ if entry = items.shift
134
+ case entry.type
135
+ when :recipe
136
+ recipes.add_recipe(entry.name, entry.version)
137
+ when :role
138
+ if role = inflate_role(entry.name)
139
+ expand_run_list_items(role.run_list_for(@environment).run_list_items)
140
+ apply_role_attributes(role)
141
+ end
142
+ end
143
+ expand_run_list_items(items)
144
+ end
145
+ end
146
+
147
+ end
148
+
149
+ # Expand a run list from disk. Suitable for chef-solo
150
+ class RunListExpansionFromDisk < RunListExpansion
151
+
152
+ def fetch_role(name)
153
+ Chef::Role.from_disk(name)
154
+ rescue Chef::Exceptions::RoleNotFound
155
+ role_not_found(name)
156
+ end
157
+
158
+ end
159
+
160
+ # Expand a run list from the chef-server API.
161
+ class RunListExpansionFromAPI < RunListExpansion
162
+
163
+ def rest
164
+ @rest ||= (source || Chef::REST.new(Chef::Config[:role_url]))
165
+ end
166
+
167
+ def fetch_role(name)
168
+ rest.get_rest("roles/#{name}")
169
+ rescue Net::HTTPServerException => e
170
+ if e.message == '404 "Not Found"'
171
+ role_not_found(name)
172
+ else
173
+ raise
174
+ end
175
+ end
176
+ end
177
+
178
+ # Expand a run list from couchdb. Used in chef-server-api
179
+ class RunListExpansionFromCouchDB < RunListExpansion
180
+
181
+ def couchdb
182
+ source
183
+ end
184
+
185
+ def fetch_role(name)
186
+ Chef::Role.cdb_load(name, couchdb)
187
+ rescue Chef::Exceptions::CouchDBNotFound
188
+ role_not_found(name)
189
+ end
190
+
191
+ end
192
+ end
193
+ end