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,63 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008, 2009 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
+
20
+ class Chef
21
+ module Mixin
22
+ module ConvertToClassName
23
+ extend self
24
+
25
+ def convert_to_class_name(str)
26
+ rname = nil
27
+ regexp = %r{^(.+?)(_(.+))?$}
28
+
29
+ mn = str.match(regexp)
30
+ if mn
31
+ rname = mn[1].capitalize
32
+
33
+ while mn && mn[3]
34
+ mn = mn[3].match(regexp)
35
+ rname << mn[1].capitalize if mn
36
+ end
37
+ end
38
+
39
+ rname
40
+ end
41
+
42
+ def convert_to_snake_case(str, namespace=nil)
43
+ str = str.dup
44
+ str.sub!(/^#{namespace}(\:\:)?/, '') if namespace
45
+ str.gsub!(/[A-Z]/) {|s| "_" + s}
46
+ str.downcase!
47
+ str.sub!(/^\_/, "")
48
+ str
49
+ end
50
+
51
+ def snake_case_basename(str)
52
+ with_namespace = convert_to_snake_case(str)
53
+ with_namespace.split("::").last.sub(/^_/, '')
54
+ end
55
+
56
+ def filename_to_qualified_string(base, filename)
57
+ file_base = File.basename(filename, ".rb")
58
+ base.to_s + (file_base == 'default' ? '' : "_#{file_base}")
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,56 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ class Chef
19
+ module Mixin
20
+ module CreatePath
21
+
22
+ # Creates a given path, including all directories that lead up to it.
23
+ # Like mkdir_p, but without the leaking.
24
+ #
25
+ # === Parameters
26
+ # file_path<String, Array>:: A string that represents the path to create,
27
+ # or an Array with the path-parts.
28
+ #
29
+ # === Returns
30
+ # The created file_path.
31
+ def create_path(file_path)
32
+ unless file_path.kind_of?(String) || file_path.kind_of?(Array)
33
+ raise ArgumentError, "file_path must be a string or an array!"
34
+ end
35
+
36
+ if file_path.kind_of?(String)
37
+ file_path = File.expand_path(file_path).split(File::SEPARATOR)
38
+ file_path.shift if file_path[0] = ''
39
+ unless file_path[0].match("^#{File::SEPARATOR}")
40
+ file_path[0] = "#{File::SEPARATOR}#{file_path[0]}"
41
+ end
42
+ end
43
+
44
+ file_path.each_index do |i|
45
+ create_path = File.join(file_path[0, i + 1])
46
+ unless File.directory?(create_path)
47
+ Chef::Log.debug("Creating directory #{create_path}")
48
+ Dir.mkdir(create_path)
49
+ end
50
+ end
51
+ File.expand_path(File.join(file_path))
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,225 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Steve Midgley (http://www.misuse.org/science)
4
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
5
+ # Copyright:: Copyright (c) 2008 Steve Midgley
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
+ class Chef
21
+ module Mixin
22
+ # == Chef::Mixin::DeepMerge
23
+ # Implements a deep merging algorithm for nested data structures.
24
+ # ==== Notice:
25
+ # This code is imported from deep_merge by Steve Midgley. deep_merge is
26
+ # available under the MIT license from
27
+ # http://trac.misuse.org/science/wiki/DeepMerge
28
+ module DeepMerge
29
+ def self.merge(first, second)
30
+ first = Mash.new(first) unless first.kind_of?(Mash)
31
+ second = Mash.new(second) unless second.kind_of?(Mash)
32
+
33
+ DeepMerge.deep_merge!(second, first, {:knockout_prefix => "!merge:", :preserve_unmergeables => false})
34
+ end
35
+
36
+ class InvalidParameter < StandardError; end
37
+
38
+ DEFAULT_FIELD_KNOCKOUT_PREFIX = '--' unless defined?(DEFAULT_FIELD_KNOCKOUT_PREFIX)
39
+
40
+ # Deep Merge core documentation.
41
+ # deep_merge! method permits merging of arbitrary child elements. The two top level
42
+ # elements must be hashes. These hashes can contain unlimited (to stack limit) levels
43
+ # of child elements. These child elements to not have to be of the same types.
44
+ # Where child elements are of the same type, deep_merge will attempt to merge them together.
45
+ # Where child elements are not of the same type, deep_merge will skip or optionally overwrite
46
+ # the destination element with the contents of the source element at that level.
47
+ # So if you have two hashes like this:
48
+ # source = {:x => [1,2,3], :y => 2}
49
+ # dest = {:x => [4,5,'6'], :y => [7,8,9]}
50
+ # dest.deep_merge!(source)
51
+ # Results: {:x => [1,2,3,4,5,'6'], :y => 2}
52
+ # By default, "deep_merge!" will overwrite any unmergeables and merge everything else.
53
+ # To avoid this, use "deep_merge" (no bang/exclamation mark)
54
+ #
55
+ # Options:
56
+ # Options are specified in the last parameter passed, which should be in hash format:
57
+ # hash.deep_merge!({:x => [1,2]}, {:knockout_prefix => '--'})
58
+ # :preserve_unmergeables DEFAULT: false
59
+ # Set to true to skip any unmergeable elements from source
60
+ # :knockout_prefix DEFAULT: nil
61
+ # Set to string value to signify prefix which deletes elements from existing element
62
+ # :sort_merged_arrays DEFAULT: false
63
+ # Set to true to sort all arrays that are merged together
64
+ # :unpack_arrays DEFAULT: nil
65
+ # Set to string value to run "Array::join" then "String::split" against all arrays
66
+ # :merge_debug DEFAULT: false
67
+ # Set to true to get console output of merge process for debugging
68
+ #
69
+ # Selected Options Details:
70
+ # :knockout_prefix => The purpose of this is to provide a way to remove elements
71
+ # from existing Hash by specifying them in a special way in incoming hash
72
+ # source = {:x => ['--1', '2']}
73
+ # dest = {:x => ['1', '3']}
74
+ # dest.ko_deep_merge!(source)
75
+ # Results: {:x => ['2','3']}
76
+ # Additionally, if the knockout_prefix is passed alone as a string, it will cause
77
+ # the entire element to be removed:
78
+ # source = {:x => '--'}
79
+ # dest = {:x => [1,2,3]}
80
+ # dest.ko_deep_merge!(source)
81
+ # Results: {:x => ""}
82
+ # :unpack_arrays => The purpose of this is to permit compound elements to be passed
83
+ # in as strings and to be converted into discrete array elements
84
+ # irsource = {:x => ['1,2,3', '4']}
85
+ # dest = {:x => ['5','6','7,8']}
86
+ # dest.deep_merge!(source, {:unpack_arrays => ','})
87
+ # Results: {:x => ['1','2','3','4','5','6','7','8'}
88
+ # Why: If receiving data from an HTML form, this makes it easy for a checkbox
89
+ # to pass multiple values from within a single HTML element
90
+ #
91
+ # There are many tests for this library - and you can learn more about the features
92
+ # and usages of deep_merge! by just browsing the test examples
93
+ def self.deep_merge!(source, dest, options = {})
94
+ # turn on this line for stdout debugging text
95
+ merge_debug = options[:merge_debug] || false
96
+ overwrite_unmergeable = !options[:preserve_unmergeables]
97
+ knockout_prefix = options[:knockout_prefix] || nil
98
+ raise InvalidParameter, "knockout_prefix cannot be an empty string in deep_merge!" if knockout_prefix == ""
99
+ raise InvalidParameter, "overwrite_unmergeable must be true if knockout_prefix is specified in deep_merge!" if knockout_prefix && !overwrite_unmergeable
100
+ # if present: we will split and join arrays on this char before merging
101
+ array_split_char = options[:unpack_arrays] || false
102
+ # request that we sort together any arrays when they are merged
103
+ sort_merged_arrays = options[:sort_merged_arrays] || false
104
+ di = options[:debug_indent] || ''
105
+ # do nothing if source is nil
106
+ return dest if source.nil?
107
+ # if dest doesn't exist, then simply copy source to it
108
+ if dest.nil? && overwrite_unmergeable
109
+ dest = source; return dest
110
+ end
111
+
112
+ puts "#{di}Source class: #{source.class.inspect} :: Dest class: #{dest.class.inspect}" if merge_debug
113
+ if source.kind_of?(Hash)
114
+ puts "#{di}Hashes: #{source.inspect} :: #{dest.inspect}" if merge_debug
115
+ source.each do |src_key, src_value|
116
+ if dest.kind_of?(Hash)
117
+ puts "#{di} looping: #{src_key.inspect} => #{src_value.inspect} :: #{dest.inspect}" if merge_debug
118
+ if dest[src_key]
119
+ puts "#{di} ==>merging: #{src_key.inspect} => #{src_value.inspect} :: #{dest[src_key].inspect}" if merge_debug
120
+ dest[src_key] = deep_merge!(src_value, dest[src_key], options.merge(:debug_indent => di + ' '))
121
+ else # dest[src_key] doesn't exist so we want to create and overwrite it (but we do this via deep_merge!)
122
+ puts "#{di} ==>merging over: #{src_key.inspect} => #{src_value.inspect}" if merge_debug
123
+ # note: we rescue here b/c some classes respond to "dup" but don't implement it (Numeric, TrueClass, FalseClass, NilClass among maybe others)
124
+ begin
125
+ src_dup = src_value.dup # we dup src_value if possible because we're going to merge into it (since dest is empty)
126
+ rescue TypeError
127
+ src_dup = src_value
128
+ end
129
+ dest[src_key] = deep_merge!(src_value, src_dup, options.merge(:debug_indent => di + ' '))
130
+ end
131
+ else # dest isn't a hash, so we overwrite it completely (if permitted)
132
+ if overwrite_unmergeable
133
+ puts "#{di} overwriting dest: #{src_key.inspect} => #{src_value.inspect} -over-> #{dest.inspect}" if merge_debug
134
+ dest = overwrite_unmergeables(source, dest, options)
135
+ end
136
+ end
137
+ end
138
+ elsif source.kind_of?(Array)
139
+ puts "#{di}Arrays: #{source.inspect} :: #{dest.inspect}" if merge_debug
140
+ # if we are instructed, join/split any source arrays before processing
141
+ if array_split_char
142
+ puts "#{di} split/join on source: #{source.inspect}" if merge_debug
143
+ source = source.join(array_split_char).split(array_split_char)
144
+ if dest.kind_of?(Array)
145
+ dest = dest.join(array_split_char).split(array_split_char)
146
+ end
147
+ end
148
+ # if there's a naked knockout_prefix in source, that means we are to truncate dest
149
+ if source.index(knockout_prefix)
150
+ dest = clear_or_nil(dest); source.delete(knockout_prefix)
151
+ end
152
+ if dest.kind_of?(Array)
153
+ if knockout_prefix
154
+ print "#{di} knocking out: " if merge_debug
155
+ # remove knockout prefix items from both source and dest
156
+ source.delete_if do |ko_item|
157
+ retval = false
158
+ item = ko_item.respond_to?(:gsub) ? ko_item.gsub(%r{^#{knockout_prefix}}, "") : ko_item
159
+ if item != ko_item
160
+ print "#{ko_item} - " if merge_debug
161
+ dest.delete(item)
162
+ dest.delete(ko_item)
163
+ retval = true
164
+ end
165
+ retval
166
+ end
167
+ puts if merge_debug
168
+ end
169
+ puts "#{di} merging arrays: #{source.inspect} :: #{dest.inspect}" if merge_debug
170
+ dest = dest | source
171
+ dest.sort! if sort_merged_arrays
172
+ elsif overwrite_unmergeable
173
+ puts "#{di} overwriting dest: #{source.inspect} -over-> #{dest.inspect}" if merge_debug
174
+ dest = overwrite_unmergeables(source, dest, options)
175
+ end
176
+ else # src_hash is not an array or hash, so we'll have to overwrite dest
177
+ puts "#{di}Others: #{source.inspect} :: #{dest.inspect}" if merge_debug
178
+ dest = overwrite_unmergeables(source, dest, options)
179
+ end
180
+ puts "#{di}Returning #{dest.inspect}" if merge_debug
181
+ dest
182
+ end # deep_merge!
183
+
184
+ # allows deep_merge! to uniformly handle overwriting of unmergeable entities
185
+ def self.overwrite_unmergeables(source, dest, options)
186
+ merge_debug = options[:merge_debug] || false
187
+ overwrite_unmergeable = !options[:preserve_unmergeables]
188
+ knockout_prefix = options[:knockout_prefix] || false
189
+ di = options[:debug_indent] || ''
190
+ if knockout_prefix && overwrite_unmergeable
191
+ if source.kind_of?(String) # remove knockout string from source before overwriting dest
192
+ src_tmp = source.gsub(%r{^#{knockout_prefix}},"")
193
+ elsif source.kind_of?(Array) # remove all knockout elements before overwriting dest
194
+ src_tmp = source.delete_if {|ko_item| ko_item.kind_of?(String) && ko_item.match(%r{^#{knockout_prefix}}) }
195
+ else
196
+ src_tmp = source
197
+ end
198
+ if src_tmp == source # if we didn't find a knockout_prefix then we just overwrite dest
199
+ puts "#{di}#{src_tmp.inspect} -over-> #{dest.inspect}" if merge_debug
200
+ dest = src_tmp
201
+ else # if we do find a knockout_prefix, then we just delete dest
202
+ puts "#{di}\"\" -over-> #{dest.inspect}" if merge_debug
203
+ dest = ""
204
+ end
205
+ elsif overwrite_unmergeable
206
+ dest = source
207
+ end
208
+ dest
209
+ end
210
+
211
+ def self.clear_or_nil(obj)
212
+ if obj.respond_to?(:clear)
213
+ obj.clear
214
+ else
215
+ obj = nil
216
+ end
217
+ obj
218
+ end
219
+
220
+ end
221
+
222
+ end
223
+ end
224
+
225
+
@@ -0,0 +1,65 @@
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
+ class Chef
20
+ module Mixin
21
+ module Deprecation
22
+ class DeprecatedObjectProxyBase
23
+ KEEPERS = %w{__id__ __send__ instance_eval == equal? initialize object_id}
24
+ instance_methods.each { |method_name| undef_method(method_name) unless KEEPERS.include?(method_name.to_s)}
25
+ end
26
+
27
+ class DeprecatedInstanceVariable < DeprecatedObjectProxyBase
28
+ def initialize(target, ivar_name, level=nil)
29
+ @target, @ivar_name = target, ivar_name
30
+ @level ||= :warn
31
+ end
32
+
33
+ def method_missing(method_name, *args, &block)
34
+ log_deprecation_msg(caller[0..3])
35
+ @target.send(method_name, *args, &block)
36
+ end
37
+
38
+ def inspect
39
+ @target.inspect
40
+ end
41
+
42
+ private
43
+
44
+ def log_deprecation_msg(*called_from)
45
+ called_from = called_from.flatten
46
+ log("Accessing #{@ivar_name} by the variable @#{@ivar_name} is deprecated. Support will be removed in a future release.")
47
+ log("Please update your cookbooks to use #{@ivar_name} in place of @#{@ivar_name}. Accessed from:")
48
+ called_from.each {|l| log(l)}
49
+ end
50
+
51
+ def log(msg)
52
+ # WTF: I don't get the log prefix (i.e., "[timestamp] LEVEL:") if I
53
+ # send to Chef::Log. No one but me should use method_missing, ever.
54
+ Chef::Log.logger.send(@level, msg)
55
+ end
56
+
57
+ end
58
+
59
+ def deprecated_ivar(obj, name, level=nil)
60
+ DeprecatedInstanceVariable.new(obj, name, level)
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008 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
+
20
+ class Chef
21
+ module Mixin
22
+ module FromFile
23
+
24
+ # Loads a given ruby file, and runs instance_eval against it in the context of the current
25
+ # object.
26
+ #
27
+ # Raises an IOError if the file cannot be found, or is not readable.
28
+ def from_file(filename)
29
+ if File.exists?(filename) && File.readable?(filename)
30
+ self.instance_eval(IO.read(filename), filename, 1)
31
+ else
32
+ raise IOError, "Cannot open or read #{filename}!"
33
+ end
34
+ end
35
+
36
+ # Loads a given ruby file, and runs class_eval against it in the context of the current
37
+ # object.
38
+ #
39
+ # Raises an IOError if the file cannot be found, or is not readable.
40
+ def class_from_file(filename)
41
+ if File.exists?(filename) && File.readable?(filename)
42
+ self.class_eval(IO.read(filename), filename, 1)
43
+ else
44
+ raise IOError, "Cannot open or read #{filename}!"
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+ end