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,362 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Author:: Christopher Brown (<cb@opscode.com>)
5
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
6
+ # Copyright:: Copyright (c) 2008-2011 Opscode, Inc.
7
+ # License:: Apache License, Version 2.0
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+
21
+ require 'chef/config'
22
+ require 'chef/mixin/params_validate'
23
+ require 'chef/log'
24
+ require 'chef/rest'
25
+ require 'chef/platform'
26
+ require 'chef/node'
27
+ require 'chef/role'
28
+ require 'chef/file_cache'
29
+ require 'chef/run_context'
30
+ require 'chef/runner'
31
+ require 'chef/run_status'
32
+ require 'chef/cookbook/cookbook_collection'
33
+ require 'chef/cookbook/file_vendor'
34
+ require 'chef/cookbook/file_system_file_vendor'
35
+ require 'chef/cookbook/remote_file_vendor'
36
+ require 'chef/version'
37
+ require 'ohai'
38
+
39
+ class Chef
40
+ # == Chef::Client
41
+ # The main object in a Chef run. Preps a Chef::Node and Chef::RunContext,
42
+ # syncs cookbooks if necessary, and triggers convergence.
43
+ class Client
44
+
45
+ SANE_PATHS = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin]
46
+
47
+ # Clears all notifications for client run status events.
48
+ # Primarily for testing purposes.
49
+ def self.clear_notifications
50
+ @run_start_notifications = nil
51
+ @run_completed_successfully_notifications = nil
52
+ @run_failed_notifications = nil
53
+ end
54
+
55
+ # The list of notifications to be run when the client run starts.
56
+ def self.run_start_notifications
57
+ @run_start_notifications ||= []
58
+ end
59
+
60
+ # The list of notifications to be run when the client run completes
61
+ # successfully.
62
+ def self.run_completed_successfully_notifications
63
+ @run_completed_successfully_notifications ||= []
64
+ end
65
+
66
+ # The list of notifications to be run when the client run fails.
67
+ def self.run_failed_notifications
68
+ @run_failed_notifications ||= []
69
+ end
70
+
71
+ # Add a notification for the 'client run started' event. The notification
72
+ # is provided as a block. The current Chef::RunStatus object will be passed
73
+ # to the notification_block when the event is triggered.
74
+ def self.when_run_starts(&notification_block)
75
+ run_start_notifications << notification_block
76
+ end
77
+
78
+ # Add a notification for the 'client run success' event. The notification
79
+ # is provided as a block. The current Chef::RunStatus object will be passed
80
+ # to the notification_block when the event is triggered.
81
+ def self.when_run_completes_successfully(&notification_block)
82
+ run_completed_successfully_notifications << notification_block
83
+ end
84
+
85
+ # Add a notification for the 'client run failed' event. The notification
86
+ # is provided as a block. The current Chef::RunStatus is passed to the
87
+ # notification_block when the event is triggered.
88
+ def self.when_run_fails(&notification_block)
89
+ run_failed_notifications << notification_block
90
+ end
91
+
92
+ # Callback to fire notifications that the Chef run is starting
93
+ def run_started
94
+ self.class.run_start_notifications.each do |notification|
95
+ notification.call(run_status)
96
+ end
97
+ end
98
+
99
+ # Callback to fire notifications that the run completed successfully
100
+ def run_completed_successfully
101
+ self.class.run_completed_successfully_notifications.each do |notification|
102
+ notification.call(run_status)
103
+ end
104
+ end
105
+
106
+ # Callback to fire notifications that the Chef run failed
107
+ def run_failed
108
+ self.class.run_failed_notifications.each do |notification|
109
+ notification.call(run_status)
110
+ end
111
+ end
112
+
113
+ attr_accessor :node
114
+ attr_accessor :ohai
115
+ attr_accessor :rest
116
+ attr_accessor :runner
117
+
118
+ #--
119
+ # TODO: timh/cw: 5-19-2010: json_attribs should be moved to RunContext?
120
+ attr_reader :json_attribs
121
+
122
+ attr_reader :run_status
123
+
124
+ # Creates a new Chef::Client.
125
+ def initialize(json_attribs=nil)
126
+ @json_attribs = json_attribs
127
+ @node = nil
128
+ @run_status = nil
129
+ @runner = nil
130
+ @ohai = Ohai::System.new
131
+ end
132
+
133
+ # Do a full run for this Chef::Client. Calls:
134
+ #
135
+ # * run_ohai - Collect information about the system
136
+ # * build_node - Get the last known state, merge with local changes
137
+ # * register - If not in solo mode, make sure the server knows about this client
138
+ # * sync_cookbooks - If not in solo mode, populate the local cache with the node's cookbooks
139
+ # * converge - Bring this system up to date
140
+ #
141
+ # === Returns
142
+ # true:: Always returns true.
143
+ def run
144
+ run_context = nil
145
+
146
+ enforce_path_sanity
147
+ run_ohai
148
+ register unless Chef::Config[:solo]
149
+ build_node
150
+
151
+ begin
152
+
153
+ run_status.start_clock
154
+ Chef::Log.info("Starting Chef Run (Version #{Chef::VERSION})")
155
+ run_started
156
+
157
+ run_context = setup_run_context
158
+ converge(run_context)
159
+ save_updated_node
160
+
161
+ run_status.stop_clock
162
+ Chef::Log.info("Chef Run complete in #{run_status.elapsed_time} seconds")
163
+ run_completed_successfully
164
+ true
165
+ rescue Exception => e
166
+ run_status.stop_clock
167
+ run_status.exception = e
168
+ run_failed
169
+ Chef::Log.debug("Re-raising exception: #{e.class} - #{e.message}\n#{e.backtrace.join("\n ")}")
170
+ raise
171
+ ensure
172
+ run_status = nil
173
+ end
174
+ true
175
+ end
176
+
177
+
178
+ # Configures the Chef::Cookbook::FileVendor class to fetch file from the
179
+ # server or disk as appropriate, creates the run context for this run, and
180
+ # sanity checks the cookbook collection.
181
+ #===Returns
182
+ # Chef::RunContext:: the run context for this run.
183
+ def setup_run_context
184
+ if Chef::Config[:solo]
185
+ Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, Chef::Config[:cookbook_path]) }
186
+ run_context = Chef::RunContext.new(node, Chef::CookbookCollection.new(Chef::CookbookLoader.new(Chef::Config[:cookbook_path])))
187
+ else
188
+ Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::RemoteFileVendor.new(manifest, rest) }
189
+ cookbook_hash = sync_cookbooks
190
+ run_context = Chef::RunContext.new(node, Chef::CookbookCollection.new(cookbook_hash))
191
+ end
192
+ run_status.run_context = run_context
193
+ run_context.load(@run_list_expansion)
194
+ assert_cookbook_path_not_empty(run_context)
195
+ run_context
196
+ end
197
+
198
+ def save_updated_node
199
+ unless Chef::Config[:solo]
200
+ Chef::Log.debug("Saving the current state of node #{node_name}")
201
+ @node.save
202
+ end
203
+ end
204
+
205
+ def run_ohai
206
+ ohai.all_plugins
207
+ end
208
+
209
+ def node_name
210
+ name = Chef::Config[:node_name] || ohai[:fqdn] || ohai[:hostname]
211
+ Chef::Config[:node_name] = name
212
+
213
+ unless name
214
+ msg = "Unable to determine node name: configure node_name or configure the system's hostname and fqdn"
215
+ raise Chef::Exceptions::CannotDetermineNodeName, msg
216
+ end
217
+
218
+ name
219
+ end
220
+
221
+ # Builds a new node object for this client. Starts with querying for the FQDN of the current
222
+ # host (unless it is supplied), then merges in the facts from Ohai.
223
+ #
224
+ # === Returns
225
+ # node<Chef::Node>:: Returns the created node object, also stored in @node
226
+ def build_node
227
+ Chef::Log.debug("Building node object for #{node_name}")
228
+
229
+ if Chef::Config[:solo]
230
+ @node = Chef::Node.build(node_name)
231
+ else
232
+ @node = Chef::Node.find_or_create(node_name)
233
+ end
234
+
235
+ # Allow user to override the environment of a node by specifying
236
+ # a config parameter.
237
+ if Chef::Config[:environment] && !Chef::Config[:environment].chop.empty?
238
+ @node.chef_environment(Chef::Config[:environment])
239
+ end
240
+
241
+ # consume_external_attrs may add items to the run_list. Save the
242
+ # expanded run_list, which we will pass to the server later to
243
+ # determine which versions of cookbooks to use.
244
+ @node.reset_defaults_and_overrides
245
+ @node.consume_external_attrs(ohai.data, @json_attribs)
246
+ if Chef::Config[:solo]
247
+ @run_list_expansion = @node.expand!('disk')
248
+ else
249
+ @run_list_expansion = @node.expand!('server')
250
+ end
251
+
252
+ # @run_list_expansion is a RunListExpansion.
253
+ #
254
+ # Convert @expanded_run_list, which is an
255
+ # Array of Hashes of the form
256
+ # {:name => NAME, :version_constraint => Chef::VersionConstraint },
257
+ # into @expanded_run_list_with_versions, an
258
+ # Array of Strings of the form
259
+ # "#{NAME}@#{VERSION}"
260
+ @expanded_run_list_with_versions = @run_list_expansion.recipes.with_version_constraints_strings
261
+
262
+ Chef::Log.info("Run List is [#{@node.run_list}]")
263
+ Chef::Log.info("Run List expands (with versions) to [#{@expanded_run_list_with_versions.join(', ')}]")
264
+
265
+ @run_status = Chef::RunStatus.new(@node)
266
+
267
+ @node
268
+ end
269
+
270
+ #
271
+ # === Returns
272
+ # rest<Chef::REST>:: returns Chef::REST connection object
273
+ def register(client_name=node_name, config=Chef::Config)
274
+ if File.exists?(config[:client_key])
275
+ Chef::Log.debug("Client key #{config[:client_key]} is present - skipping registration")
276
+ else
277
+ Chef::Log.info("Client key #{config[:client_key]} is not present - registering")
278
+ Chef::REST.new(config[:client_url], config[:validation_client_name], config[:validation_key]).register(client_name, config[:client_key])
279
+ end
280
+ # We now have the client key, and should use it from now on.
281
+ self.rest = Chef::REST.new(config[:chef_server_url], client_name, config[:client_key])
282
+ end
283
+
284
+ # Sync_cookbooks eagerly loads all files except files and
285
+ # templates. It returns the cookbook_hash -- the return result
286
+ # from /environments/#{node.chef_environment}/cookbook_versions,
287
+ # which we will use for our run_context.
288
+ #
289
+ # === Returns
290
+ # Hash:: The hash of cookbooks with download URLs as given by the server
291
+ def sync_cookbooks
292
+ Chef::Log.debug("Synchronizing cookbooks")
293
+ cookbook_hash = rest.post_rest("environments/#{@node.chef_environment}/cookbook_versions",
294
+ {:run_list => @expanded_run_list_with_versions})
295
+ Chef::CookbookVersion.sync_cookbooks(cookbook_hash)
296
+
297
+ # register the file cache path in the cookbook path so that CookbookLoader actually picks up the synced cookbooks
298
+ Chef::Config[:cookbook_path] = File.join(Chef::Config[:file_cache_path], "cookbooks")
299
+
300
+ cookbook_hash
301
+ end
302
+
303
+ # Converges the node.
304
+ #
305
+ # === Returns
306
+ # true:: Always returns true
307
+ def converge(run_context)
308
+ Chef::Log.debug("Converging node #{node_name}")
309
+ @runner = Chef::Runner.new(run_context)
310
+ runner.converge
311
+ true
312
+ end
313
+
314
+ def enforce_path_sanity(env=ENV)
315
+ if Chef::Config[:enforce_path_sanity] && RUBY_PLATFORM !~ /mswin|mingw32|windows/
316
+ existing_paths = env["PATH"].split(':')
317
+ SANE_PATHS.each do |sane_path|
318
+ unless existing_paths.include?(sane_path)
319
+ env["PATH"] << ':' unless env["PATH"].empty?
320
+ env["PATH"] << sane_path
321
+ end
322
+ end
323
+ end
324
+ end
325
+
326
+ private
327
+
328
+ def directory_not_empty?(path)
329
+ File.exists?(path) && (Dir.entries(path).size > 2)
330
+ end
331
+
332
+ def is_last_element?(index, object)
333
+ object.kind_of?(Array) ? index == object.size - 1 : true
334
+ end
335
+
336
+ def assert_cookbook_path_not_empty(run_context)
337
+ if Chef::Config[:solo]
338
+ # Check for cookbooks in the path given
339
+ # Chef::Config[:cookbook_path] can be a string or an array
340
+ # if it's an array, go through it and check each one, raise error at the last one if no files are found
341
+ Chef::Log.debug "loading from cookbook_path: #{Array(Chef::Config[:cookbook_path]).map { |path| File.expand_path(path) }.join(', ')}"
342
+ Array(Chef::Config[:cookbook_path]).each_with_index do |cookbook_path, index|
343
+ if directory_not_empty?(cookbook_path)
344
+ break
345
+ else
346
+ msg = "No cookbook found in #{Chef::Config[:cookbook_path].inspect}, make sure cookbook_path is set correctly."
347
+ Chef::Log.fatal(msg)
348
+ raise Chef::Exceptions::CookbookNotFound, msg if is_last_element?(index, Chef::Config[:cookbook_path])
349
+ end
350
+ end
351
+ else
352
+ Chef::Log.warn("Node #{node_name} has an empty run list.") if run_context.node.run_list.empty?
353
+ end
354
+
355
+ end
356
+ end
357
+ end
358
+
359
+ # HACK cannot load this first, but it must be loaded.
360
+ require 'chef/cookbook_loader'
361
+ require 'chef/cookbook_version'
362
+
@@ -0,0 +1,244 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Brown (<cb@opscode.com>)
4
+ # Author:: AJ Christensen (<aj@opscode.com>)
5
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require 'chef/log'
21
+ require 'mixlib/config'
22
+
23
+ class Chef
24
+ class Config
25
+
26
+ extend Mixlib::Config
27
+
28
+ # Manages the chef secret session key
29
+ # === Returns
30
+ # <newkey>:: A new or retrieved session key
31
+ #
32
+ def self.manage_secret_key
33
+ newkey = nil
34
+ if Chef::FileCache.has_key?("chef_server_cookie_id")
35
+ newkey = Chef::FileCache.load("chef_server_cookie_id")
36
+ else
37
+ chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
38
+ newkey = ""
39
+ 40.times { |i| newkey << chars[rand(chars.size-1)] }
40
+ Chef::FileCache.store("chef_server_cookie_id", newkey)
41
+ end
42
+ newkey
43
+ end
44
+
45
+ def self.inspect
46
+ configuration.inspect
47
+ end
48
+
49
+ # Override the config dispatch to set the value of multiple server options simultaneously
50
+ #
51
+ # === Parameters
52
+ # url<String>:: String to be set for all of the chef-server-api URL's
53
+ #
54
+ config_attr_writer :chef_server_url do |url|
55
+ configure do |c|
56
+ [ :registration_url,
57
+ :template_url,
58
+ :remotefile_url,
59
+ :search_url,
60
+ :chef_server_url,
61
+ :role_url ].each do |u|
62
+ c[u] = url
63
+ end
64
+ end
65
+ url
66
+ end
67
+
68
+ # When you are using ActiveSupport, they monkey-patch 'daemonize' into Kernel.
69
+ # So while this is basically identical to what method_missing would do, we pull
70
+ # it up here and get a real method written so that things get dispatched
71
+ # properly.
72
+ config_attr_writer :daemonize do |v|
73
+ configure do |c|
74
+ c[:daemonize] = v
75
+ end
76
+ end
77
+
78
+ # Override the config dispatch to set the value of log_location configuration option
79
+ #
80
+ # === Parameters
81
+ # location<IO||String>:: Logging location as either an IO stream or string representing log file path
82
+ #
83
+ config_attr_writer :log_location do |location|
84
+ if location.respond_to? :sync=
85
+ location.sync = true
86
+ location
87
+ elsif location.respond_to? :to_str
88
+ f = File.new(location.to_str, "a")
89
+ f.sync = true
90
+ f
91
+ end
92
+ end
93
+
94
+ # Override the config dispatch to set the value of authorized_openid_providers when openid_providers (deprecated) is used
95
+ #
96
+ # === Parameters
97
+ # providers<Array>:: An array of openid providers that are authorized to login to the chef server
98
+ #
99
+ config_attr_writer :openid_providers do |providers|
100
+ configure { |c| c[:authorized_openid_providers] = providers }
101
+ providers
102
+ end
103
+
104
+ # Turn on "path sanity" by default. See also: http://wiki.opscode.com/display/chef/User+Environment+PATH+Sanity
105
+ enforce_path_sanity(true)
106
+
107
+ # Used when OpenID authentication is enabled in the Web UI
108
+ authorized_openid_identifiers nil
109
+ authorized_openid_providers nil
110
+ openid_cstore_couchdb false
111
+ openid_cstore_path "/var/chef/openid/cstore"
112
+
113
+ # The number of times the client should retry when registering with the server
114
+ client_registration_retries 5
115
+
116
+ # Where the cookbooks are located. Meaning is somewhat context dependent between
117
+ # knife, chef-client, and chef-solo.
118
+ cookbook_path [ "/var/chef/cookbooks", "/var/chef/site-cookbooks" ]
119
+
120
+ # Where files are stored temporarily during uploads
121
+ sandbox_path "/var/chef/sandboxes"
122
+
123
+ # Where cookbook files are stored on the server (by content checksum)
124
+ checksum_path "/var/chef/checksums"
125
+
126
+ # CouchDB database name to use
127
+ couchdb_database "chef"
128
+
129
+ couchdb_url "http://localhost:5984"
130
+
131
+ # Where chef's cache files should be stored
132
+ file_cache_path "/var/chef/cache"
133
+
134
+ # Where backups of chef-managed files should go
135
+ file_backup_path "/var/chef/backup"
136
+
137
+ ## Daemonization Settings ##
138
+ # What user should Chef run as?
139
+ user nil
140
+ # What group should the chef-server, -solr, -solr-indexer run as
141
+ group nil
142
+ umask 0022
143
+
144
+ http_retry_count 5
145
+ http_retry_delay 5
146
+ interval nil
147
+ json_attribs nil
148
+ log_level :info
149
+ log_location STDOUT
150
+ verbose_logging nil
151
+ node_name nil
152
+ node_path "/var/chef/node"
153
+
154
+ pid_file nil
155
+
156
+ chef_server_url "http://localhost:4000"
157
+ registration_url "http://localhost:4000"
158
+ template_url "http://localhost:4000"
159
+ role_url "http://localhost:4000"
160
+ remotefile_url "http://localhost:4000"
161
+ search_url "http://localhost:4000"
162
+
163
+ client_url "http://localhost:4042"
164
+
165
+ rest_timeout 300
166
+ run_command_stderr_timeout 120
167
+ run_command_stdout_timeout 120
168
+ solo false
169
+ splay nil
170
+
171
+ # Set these to enable SSL authentication / mutual-authentication
172
+ # with the server
173
+ ssl_client_cert nil
174
+ ssl_client_key nil
175
+ ssl_verify_mode :verify_none
176
+ ssl_ca_path nil
177
+ ssl_ca_file nil
178
+
179
+
180
+ # Where should chef-solo look for role files?
181
+ role_path "/var/chef/roles"
182
+
183
+ # Where should chef-solo download recipes from?
184
+ recipe_url nil
185
+
186
+ solr_url "http://localhost:8983"
187
+ solr_jetty_path "/var/chef/solr-jetty"
188
+ solr_data_path "/var/chef/solr/data"
189
+ solr_home_path "/var/chef/solr"
190
+ solr_heap_size "256M"
191
+ solr_java_opts nil
192
+
193
+ # Parameters for connecting to RabbitMQ
194
+ amqp_host '0.0.0.0'
195
+ amqp_port '5672'
196
+ amqp_user 'chef'
197
+ amqp_pass 'testing'
198
+ amqp_vhost '/chef'
199
+ # Setting this to a UUID string also makes the queue durable
200
+ # (persist across rabbitmq restarts)
201
+ amqp_consumer_id "default"
202
+
203
+ client_key "/etc/chef/client.pem"
204
+ validation_key "/etc/chef/validation.pem"
205
+ validation_client_name "chef-validator"
206
+ web_ui_client_name "chef-webui"
207
+ web_ui_key "/etc/chef/webui.pem"
208
+ web_ui_admin_user_name "admin"
209
+ web_ui_admin_default_password "p@ssw0rd1"
210
+
211
+ # Server Signing CA
212
+ #
213
+ # In truth, these don't even have to change
214
+ signing_ca_cert "/var/chef/ca/cert.pem"
215
+ signing_ca_key "/var/chef/ca/key.pem"
216
+ signing_ca_user nil
217
+ signing_ca_group nil
218
+ signing_ca_country "US"
219
+ signing_ca_state "Washington"
220
+ signing_ca_location "Seattle"
221
+ signing_ca_org "Chef User"
222
+ signing_ca_domain "opensource.opscode.com"
223
+ signing_ca_email "opensource-cert@opscode.com"
224
+
225
+ # Report Handlers
226
+ report_handlers []
227
+
228
+ # Exception Handlers
229
+ exception_handlers []
230
+
231
+ # Checksum Cache
232
+ # Uses Moneta on the back-end
233
+ cache_type "BasicFile"
234
+ cache_options({ :path => "/var/chef/cache/checksums", :skip_expires => true })
235
+
236
+ # Arbitrary knife configuration data
237
+ knife Hash.new
238
+
239
+ # Those lists of regular expressions define what chef considers a
240
+ # valid user and group name
241
+ user_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
242
+ group_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
243
+ end
244
+ end