TrueCar-chef 0.10.0.beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +171 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +25 -0
  5. data/bin/knife +26 -0
  6. data/bin/shef +34 -0
  7. data/distro/README +2 -0
  8. data/distro/arch/etc/conf.d/chef-client.conf +5 -0
  9. data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
  10. data/distro/arch/etc/conf.d/chef-server.conf +10 -0
  11. data/distro/arch/etc/conf.d/chef-solr-indexer.conf +8 -0
  12. data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
  13. data/distro/arch/etc/rc.d/chef-client +76 -0
  14. data/distro/arch/etc/rc.d/chef-server +78 -0
  15. data/distro/arch/etc/rc.d/chef-server-webui +78 -0
  16. data/distro/arch/etc/rc.d/chef-solr +78 -0
  17. data/distro/arch/etc/rc.d/chef-solr-indexer +78 -0
  18. data/distro/common/man/man1/chef-indexer.1 +42 -0
  19. data/distro/common/man/man1/chef-server-webui.1 +106 -0
  20. data/distro/common/man/man1/chef-server.1 +107 -0
  21. data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
  22. data/distro/common/man/man1/chef-solr.1 +55 -0
  23. data/distro/common/man/man8/chef-client.8 +63 -0
  24. data/distro/common/man/man8/chef-solo.8 +57 -0
  25. data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
  26. data/distro/common/man/man8/knife.8 +1349 -0
  27. data/distro/common/man/man8/shef.8 +45 -0
  28. data/distro/common/markdown/README +3 -0
  29. data/distro/common/markdown/knife.mkd +865 -0
  30. data/distro/debian/etc/default/chef-client +4 -0
  31. data/distro/debian/etc/default/chef-server +9 -0
  32. data/distro/debian/etc/default/chef-server-webui +9 -0
  33. data/distro/debian/etc/default/chef-solr +8 -0
  34. data/distro/debian/etc/default/chef-solr-indexer +7 -0
  35. data/distro/debian/etc/init.d/chef-client +175 -0
  36. data/distro/debian/etc/init.d/chef-server +122 -0
  37. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  38. data/distro/debian/etc/init.d/chef-solr +176 -0
  39. data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
  40. data/distro/debian/etc/init/chef-client.conf +17 -0
  41. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  42. data/distro/debian/etc/init/chef-server.conf +17 -0
  43. data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
  44. data/distro/debian/etc/init/chef-solr.conf +17 -0
  45. data/distro/redhat/etc/init.d/chef-client +106 -0
  46. data/distro/redhat/etc/init.d/chef-server +112 -0
  47. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  48. data/distro/redhat/etc/init.d/chef-solr +104 -0
  49. data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
  50. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  51. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  52. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  53. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  54. data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
  55. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  56. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  57. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  58. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  59. data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
  60. data/lib/chef.rb +40 -0
  61. data/lib/chef/api_client.rb +264 -0
  62. data/lib/chef/application.rb +137 -0
  63. data/lib/chef/application/agent.rb +18 -0
  64. data/lib/chef/application/client.rb +242 -0
  65. data/lib/chef/application/knife.rb +169 -0
  66. data/lib/chef/application/solo.rb +217 -0
  67. data/lib/chef/applications.rb +4 -0
  68. data/lib/chef/certificate.rb +194 -0
  69. data/lib/chef/checksum.rb +182 -0
  70. data/lib/chef/checksum_cache.rb +189 -0
  71. data/lib/chef/client.rb +362 -0
  72. data/lib/chef/config.rb +244 -0
  73. data/lib/chef/cookbook/chefignore.rb +66 -0
  74. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  75. data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
  76. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  77. data/lib/chef/cookbook/file_vendor.rb +48 -0
  78. data/lib/chef/cookbook/metadata.rb +592 -0
  79. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  80. data/lib/chef/cookbook/syntax_check.rb +136 -0
  81. data/lib/chef/cookbook_loader.rb +103 -0
  82. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  83. data/lib/chef/cookbook_uploader.rb +125 -0
  84. data/lib/chef/cookbook_version.rb +979 -0
  85. data/lib/chef/cookbook_version_selector.rb +163 -0
  86. data/lib/chef/couchdb.rb +247 -0
  87. data/lib/chef/daemon.rb +172 -0
  88. data/lib/chef/data_bag.rb +223 -0
  89. data/lib/chef/data_bag_item.rb +267 -0
  90. data/lib/chef/encrypted_data_bag_item.rb +126 -0
  91. data/lib/chef/environment.rb +386 -0
  92. data/lib/chef/exceptions.rb +153 -0
  93. data/lib/chef/file_access_control.rb +140 -0
  94. data/lib/chef/file_cache.rb +218 -0
  95. data/lib/chef/handler.rb +206 -0
  96. data/lib/chef/handler/json_file.rb +58 -0
  97. data/lib/chef/index_queue.rb +29 -0
  98. data/lib/chef/index_queue/amqp_client.rb +116 -0
  99. data/lib/chef/index_queue/consumer.rb +76 -0
  100. data/lib/chef/index_queue/indexable.rb +109 -0
  101. data/lib/chef/json_compat.rb +52 -0
  102. data/lib/chef/knife.rb +424 -0
  103. data/lib/chef/knife/bootstrap.rb +185 -0
  104. data/lib/chef/knife/bootstrap/archlinux-gems.erb +47 -0
  105. data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
  106. data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
  107. data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
  108. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
  109. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +46 -0
  110. data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
  111. data/lib/chef/knife/client_bulk_delete.rb +43 -0
  112. data/lib/chef/knife/client_create.rb +73 -0
  113. data/lib/chef/knife/client_delete.rb +48 -0
  114. data/lib/chef/knife/client_edit.rb +48 -0
  115. data/lib/chef/knife/client_list.rb +43 -0
  116. data/lib/chef/knife/client_reregister.rb +59 -0
  117. data/lib/chef/knife/client_show.rb +53 -0
  118. data/lib/chef/knife/configure.rb +136 -0
  119. data/lib/chef/knife/configure_client.rb +52 -0
  120. data/lib/chef/knife/cookbook_bulk_delete.rb +61 -0
  121. data/lib/chef/knife/cookbook_create.rb +274 -0
  122. data/lib/chef/knife/cookbook_delete.rb +149 -0
  123. data/lib/chef/knife/cookbook_download.rb +134 -0
  124. data/lib/chef/knife/cookbook_list.rb +50 -0
  125. data/lib/chef/knife/cookbook_metadata.rb +102 -0
  126. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  127. data/lib/chef/knife/cookbook_show.rb +101 -0
  128. data/lib/chef/knife/cookbook_site_download.rb +58 -0
  129. data/lib/chef/knife/cookbook_site_list.rb +56 -0
  130. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  131. data/lib/chef/knife/cookbook_site_share.rb +114 -0
  132. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  133. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  134. data/lib/chef/knife/cookbook_site_vendor.rb +145 -0
  135. data/lib/chef/knife/cookbook_test.rb +82 -0
  136. data/lib/chef/knife/cookbook_upload.rb +146 -0
  137. data/lib/chef/knife/data_bag_create.rb +94 -0
  138. data/lib/chef/knife/data_bag_delete.rb +51 -0
  139. data/lib/chef/knife/data_bag_edit.rb +94 -0
  140. data/lib/chef/knife/data_bag_from_file.rb +85 -0
  141. data/lib/chef/knife/data_bag_list.rb +46 -0
  142. data/lib/chef/knife/data_bag_show.rb +81 -0
  143. data/lib/chef/knife/environment_create.rb +53 -0
  144. data/lib/chef/knife/environment_delete.rb +45 -0
  145. data/lib/chef/knife/environment_edit.rb +45 -0
  146. data/lib/chef/knife/environment_from_file.rb +39 -0
  147. data/lib/chef/knife/environment_list.rb +42 -0
  148. data/lib/chef/knife/environment_show.rb +46 -0
  149. data/lib/chef/knife/exec.rb +51 -0
  150. data/lib/chef/knife/index_rebuild.rb +50 -0
  151. data/lib/chef/knife/node_bulk_delete.rb +46 -0
  152. data/lib/chef/knife/node_create.rb +50 -0
  153. data/lib/chef/knife/node_delete.rb +47 -0
  154. data/lib/chef/knife/node_edit.rb +163 -0
  155. data/lib/chef/knife/node_from_file.rb +45 -0
  156. data/lib/chef/knife/node_list.rb +46 -0
  157. data/lib/chef/knife/node_run_list_add.rb +67 -0
  158. data/lib/chef/knife/node_run_list_remove.rb +48 -0
  159. data/lib/chef/knife/node_show.rb +62 -0
  160. data/lib/chef/knife/recipe_list.rb +33 -0
  161. data/lib/chef/knife/role_bulk_delete.rb +47 -0
  162. data/lib/chef/knife/role_create.rb +55 -0
  163. data/lib/chef/knife/role_delete.rb +47 -0
  164. data/lib/chef/knife/role_edit.rb +48 -0
  165. data/lib/chef/knife/role_from_file.rb +49 -0
  166. data/lib/chef/knife/role_list.rb +43 -0
  167. data/lib/chef/knife/role_show.rb +54 -0
  168. data/lib/chef/knife/search.rb +123 -0
  169. data/lib/chef/knife/ssh.rb +318 -0
  170. data/lib/chef/knife/status.rb +90 -0
  171. data/lib/chef/knife/subcommand_loader.rb +101 -0
  172. data/lib/chef/knife/tag_create.rb +31 -0
  173. data/lib/chef/knife/tag_delete.rb +31 -0
  174. data/lib/chef/knife/tag_list.rb +29 -0
  175. data/lib/chef/knife/ui.rb +227 -0
  176. data/lib/chef/knife/windows_bootstrap.rb +157 -0
  177. data/lib/chef/log.rb +39 -0
  178. data/lib/chef/mash.rb +211 -0
  179. data/lib/chef/mixin/check_helper.rb +31 -0
  180. data/lib/chef/mixin/checksum.rb +32 -0
  181. data/lib/chef/mixin/command.rb +221 -0
  182. data/lib/chef/mixin/command/unix.rb +215 -0
  183. data/lib/chef/mixin/command/windows.rb +76 -0
  184. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  185. data/lib/chef/mixin/create_path.rb +56 -0
  186. data/lib/chef/mixin/deep_merge.rb +225 -0
  187. data/lib/chef/mixin/deprecation.rb +65 -0
  188. data/lib/chef/mixin/from_file.rb +50 -0
  189. data/lib/chef/mixin/language.rb +165 -0
  190. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  191. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  192. data/lib/chef/mixin/params_validate.rb +225 -0
  193. data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
  194. data/lib/chef/mixin/shell_out.rb +40 -0
  195. data/lib/chef/mixin/template.rb +95 -0
  196. data/lib/chef/mixin/xml_escape.rb +140 -0
  197. data/lib/chef/mixins.rb +15 -0
  198. data/lib/chef/monkey_patches/dir.rb +36 -0
  199. data/lib/chef/monkey_patches/numeric.rb +7 -0
  200. data/lib/chef/monkey_patches/regexp.rb +34 -0
  201. data/lib/chef/monkey_patches/string.rb +28 -0
  202. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  203. data/lib/chef/nil_argument.rb +3 -0
  204. data/lib/chef/node.rb +661 -0
  205. data/lib/chef/node/attribute.rb +487 -0
  206. data/lib/chef/openid_registration.rb +187 -0
  207. data/lib/chef/platform.rb +409 -0
  208. data/lib/chef/provider.rb +124 -0
  209. data/lib/chef/provider/breakpoint.rb +36 -0
  210. data/lib/chef/provider/cookbook_file.rb +101 -0
  211. data/lib/chef/provider/cron.rb +186 -0
  212. data/lib/chef/provider/cron/solaris.rb +195 -0
  213. data/lib/chef/provider/deploy.rb +320 -0
  214. data/lib/chef/provider/deploy/revision.rb +80 -0
  215. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  216. data/lib/chef/provider/directory.rb +72 -0
  217. data/lib/chef/provider/env.rb +152 -0
  218. data/lib/chef/provider/env/windows.rb +75 -0
  219. data/lib/chef/provider/erl_call.rb +100 -0
  220. data/lib/chef/provider/execute.rb +60 -0
  221. data/lib/chef/provider/file.rb +222 -0
  222. data/lib/chef/provider/git.rb +221 -0
  223. data/lib/chef/provider/group.rb +133 -0
  224. data/lib/chef/provider/group/aix.rb +70 -0
  225. data/lib/chef/provider/group/dscl.rb +121 -0
  226. data/lib/chef/provider/group/gpasswd.rb +53 -0
  227. data/lib/chef/provider/group/groupadd.rb +81 -0
  228. data/lib/chef/provider/group/pw.rb +84 -0
  229. data/lib/chef/provider/group/usermod.rb +57 -0
  230. data/lib/chef/provider/group/windows.rb +79 -0
  231. data/lib/chef/provider/http_request.rb +122 -0
  232. data/lib/chef/provider/ifconfig.rb +132 -0
  233. data/lib/chef/provider/link.rb +161 -0
  234. data/lib/chef/provider/log.rb +54 -0
  235. data/lib/chef/provider/mdadm.rb +91 -0
  236. data/lib/chef/provider/mount.rb +117 -0
  237. data/lib/chef/provider/mount/mount.rb +232 -0
  238. data/lib/chef/provider/mount/windows.rb +80 -0
  239. data/lib/chef/provider/ohai.rb +41 -0
  240. data/lib/chef/provider/package.rb +160 -0
  241. data/lib/chef/provider/package/apt.rb +110 -0
  242. data/lib/chef/provider/package/dpkg.rb +112 -0
  243. data/lib/chef/provider/package/easy_install.rb +136 -0
  244. data/lib/chef/provider/package/freebsd.rb +123 -0
  245. data/lib/chef/provider/package/macports.rb +105 -0
  246. data/lib/chef/provider/package/pacman.rb +101 -0
  247. data/lib/chef/provider/package/portage.rb +135 -0
  248. data/lib/chef/provider/package/rpm.rb +101 -0
  249. data/lib/chef/provider/package/rubygems.rb +462 -0
  250. data/lib/chef/provider/package/solaris.rb +127 -0
  251. data/lib/chef/provider/package/yum-dump.py +128 -0
  252. data/lib/chef/provider/package/yum.rb +261 -0
  253. data/lib/chef/provider/package/zypper.rb +133 -0
  254. data/lib/chef/provider/remote_directory.rb +138 -0
  255. data/lib/chef/provider/remote_file.rb +119 -0
  256. data/lib/chef/provider/route.rb +195 -0
  257. data/lib/chef/provider/ruby_block.rb +33 -0
  258. data/lib/chef/provider/script.rb +55 -0
  259. data/lib/chef/provider/service.rb +128 -0
  260. data/lib/chef/provider/service/arch.rb +109 -0
  261. data/lib/chef/provider/service/debian.rb +130 -0
  262. data/lib/chef/provider/service/freebsd.rb +156 -0
  263. data/lib/chef/provider/service/gentoo.rb +54 -0
  264. data/lib/chef/provider/service/init.rb +71 -0
  265. data/lib/chef/provider/service/insserv.rb +52 -0
  266. data/lib/chef/provider/service/redhat.rb +60 -0
  267. data/lib/chef/provider/service/simple.rb +118 -0
  268. data/lib/chef/provider/service/solaris.rb +85 -0
  269. data/lib/chef/provider/service/upstart.rb +192 -0
  270. data/lib/chef/provider/service/windows.rb +146 -0
  271. data/lib/chef/provider/subversion.rb +194 -0
  272. data/lib/chef/provider/template.rb +105 -0
  273. data/lib/chef/provider/user.rb +187 -0
  274. data/lib/chef/provider/user/dscl.rb +280 -0
  275. data/lib/chef/provider/user/pw.rb +113 -0
  276. data/lib/chef/provider/user/useradd.rb +137 -0
  277. data/lib/chef/provider/user/windows.rb +124 -0
  278. data/lib/chef/providers.rb +93 -0
  279. data/lib/chef/recipe.rb +128 -0
  280. data/lib/chef/resource.rb +530 -0
  281. data/lib/chef/resource/apt_package.rb +34 -0
  282. data/lib/chef/resource/bash.rb +33 -0
  283. data/lib/chef/resource/breakpoint.rb +35 -0
  284. data/lib/chef/resource/cookbook_file.rb +45 -0
  285. data/lib/chef/resource/cron.rb +188 -0
  286. data/lib/chef/resource/csh.rb +33 -0
  287. data/lib/chef/resource/deploy.rb +371 -0
  288. data/lib/chef/resource/deploy_revision.rb +35 -0
  289. data/lib/chef/resource/directory.rb +76 -0
  290. data/lib/chef/resource/dpkg_package.rb +34 -0
  291. data/lib/chef/resource/easy_install_package.rb +57 -0
  292. data/lib/chef/resource/env.rb +58 -0
  293. data/lib/chef/resource/erl_call.rb +83 -0
  294. data/lib/chef/resource/execute.rb +127 -0
  295. data/lib/chef/resource/file.rb +99 -0
  296. data/lib/chef/resource/freebsd_package.rb +35 -0
  297. data/lib/chef/resource/gem_package.rb +53 -0
  298. data/lib/chef/resource/git.rb +37 -0
  299. data/lib/chef/resource/group.rb +70 -0
  300. data/lib/chef/resource/http_request.rb +61 -0
  301. data/lib/chef/resource/ifconfig.rb +134 -0
  302. data/lib/chef/resource/link.rb +78 -0
  303. data/lib/chef/resource/log.rb +62 -0
  304. data/lib/chef/resource/macports_package.rb +29 -0
  305. data/lib/chef/resource/mdadm.rb +82 -0
  306. data/lib/chef/resource/mount.rb +135 -0
  307. data/lib/chef/resource/ohai.rb +40 -0
  308. data/lib/chef/resource/package.rb +80 -0
  309. data/lib/chef/resource/pacman_package.rb +33 -0
  310. data/lib/chef/resource/perl.rb +33 -0
  311. data/lib/chef/resource/portage_package.rb +33 -0
  312. data/lib/chef/resource/python.rb +33 -0
  313. data/lib/chef/resource/remote_directory.rb +109 -0
  314. data/lib/chef/resource/remote_file.rb +83 -0
  315. data/lib/chef/resource/route.rb +135 -0
  316. data/lib/chef/resource/rpm_package.rb +34 -0
  317. data/lib/chef/resource/ruby.rb +33 -0
  318. data/lib/chef/resource/ruby_block.rb +40 -0
  319. data/lib/chef/resource/scm.rb +147 -0
  320. data/lib/chef/resource/script.rb +60 -0
  321. data/lib/chef/resource/service.rb +160 -0
  322. data/lib/chef/resource/solaris_package.rb +36 -0
  323. data/lib/chef/resource/subversion.rb +36 -0
  324. data/lib/chef/resource/template.rb +69 -0
  325. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  326. data/lib/chef/resource/user.rb +130 -0
  327. data/lib/chef/resource/yum_package.rb +43 -0
  328. data/lib/chef/resource_collection.rb +217 -0
  329. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  330. data/lib/chef/resource_definition.rb +67 -0
  331. data/lib/chef/resource_definition_list.rb +38 -0
  332. data/lib/chef/resources.rb +64 -0
  333. data/lib/chef/rest.rb +386 -0
  334. data/lib/chef/rest/auth_credentials.rb +71 -0
  335. data/lib/chef/rest/cookie_jar.rb +31 -0
  336. data/lib/chef/rest/rest_request.rb +188 -0
  337. data/lib/chef/role.rb +341 -0
  338. data/lib/chef/run_context.rb +126 -0
  339. data/lib/chef/run_list.rb +165 -0
  340. data/lib/chef/run_list/run_list_expansion.rb +193 -0
  341. data/lib/chef/run_list/run_list_item.rb +92 -0
  342. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  343. data/lib/chef/run_status.rb +121 -0
  344. data/lib/chef/runner.rb +99 -0
  345. data/lib/chef/sandbox.rb +153 -0
  346. data/lib/chef/search/query.rb +65 -0
  347. data/lib/chef/shef.rb +326 -0
  348. data/lib/chef/shef/ext.rb +569 -0
  349. data/lib/chef/shef/model_wrapper.rb +120 -0
  350. data/lib/chef/shef/shef_rest.rb +28 -0
  351. data/lib/chef/shef/shef_session.rb +284 -0
  352. data/lib/chef/shell_out.rb +238 -0
  353. data/lib/chef/shell_out/unix.rb +223 -0
  354. data/lib/chef/shell_out/windows.rb +98 -0
  355. data/lib/chef/solr_query.rb +187 -0
  356. data/lib/chef/solr_query/lucene.treetop +150 -0
  357. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  358. data/lib/chef/solr_query/query_transform.rb +65 -0
  359. data/lib/chef/solr_query/solr_http_request.rb +118 -0
  360. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  361. data/lib/chef/tasks/chef_repo.rake +256 -0
  362. data/lib/chef/util/file_edit.rb +122 -0
  363. data/lib/chef/util/windows.rb +56 -0
  364. data/lib/chef/util/windows/net_group.rb +101 -0
  365. data/lib/chef/util/windows/net_use.rb +121 -0
  366. data/lib/chef/util/windows/net_user.rb +198 -0
  367. data/lib/chef/util/windows/volume.rb +59 -0
  368. data/lib/chef/version.rb +23 -0
  369. data/lib/chef/version_class.rb +70 -0
  370. data/lib/chef/version_constraint.rb +116 -0
  371. data/lib/chef/webui_user.rb +231 -0
  372. metadata +600 -0
@@ -0,0 +1,223 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Nuo Yan (<nuo@opscode.com>)
4
+ # Author:: Christopher Brown (<cb@opscode.com>)
5
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require 'chef/config'
22
+ require 'chef/mixin/params_validate'
23
+ require 'chef/mixin/from_file'
24
+ require 'chef/couchdb'
25
+ require 'chef/data_bag_item'
26
+ require 'chef/index_queue'
27
+ require 'chef/mash'
28
+ require 'chef/json_compat'
29
+
30
+ class Chef
31
+ class DataBag
32
+
33
+ include Chef::Mixin::FromFile
34
+ include Chef::Mixin::ParamsValidate
35
+ include Chef::IndexQueue::Indexable
36
+
37
+ VALID_NAME = /^[\-[:alnum:]_]+$/
38
+
39
+ DESIGN_DOCUMENT = {
40
+ "version" => 2,
41
+ "language" => "javascript",
42
+ "views" => {
43
+ "all" => {
44
+ "map" => <<-EOJS
45
+ function(doc) {
46
+ if (doc.chef_type == "data_bag") {
47
+ emit(doc.name, doc);
48
+ }
49
+ }
50
+ EOJS
51
+ },
52
+ "all_id" => {
53
+ "map" => <<-EOJS
54
+ function(doc) {
55
+ if (doc.chef_type == "data_bag") {
56
+ emit(doc.name, doc.name);
57
+ }
58
+ }
59
+ EOJS
60
+ },
61
+ "entries" => {
62
+ "map" => <<-EOJS
63
+ function(doc) {
64
+ if (doc.chef_type == "data_bag_item") {
65
+ emit(doc.data_bag, doc.raw_data.id);
66
+ }
67
+ }
68
+ EOJS
69
+ }
70
+ }
71
+ }
72
+
73
+ def self.validate_name!(name)
74
+ unless name =~ VALID_NAME
75
+ raise Exceptions::InvalidDataBagName, "DataBags must have a name matching #{VALID_NAME.inspect}, you gave #{name.inspect}"
76
+ end
77
+ end
78
+
79
+ attr_accessor :couchdb_rev, :couchdb_id, :couchdb
80
+
81
+ # Create a new Chef::DataBag
82
+ def initialize(couchdb=nil)
83
+ @name = ''
84
+ @couchdb_rev = nil
85
+ @couchdb_id = nil
86
+ @couchdb = (couchdb || Chef::CouchDB.new)
87
+ end
88
+
89
+ def name(arg=nil)
90
+ set_or_return(
91
+ :name,
92
+ arg,
93
+ :regex => VALID_NAME
94
+ )
95
+ end
96
+
97
+ def to_hash
98
+ result = {
99
+ "name" => @name,
100
+ 'json_class' => self.class.name,
101
+ "chef_type" => "data_bag",
102
+ }
103
+ result["_rev"] = @couchdb_rev if @couchdb_rev
104
+ result
105
+ end
106
+
107
+ # Serialize this object as a hash
108
+ def to_json(*a)
109
+ to_hash.to_json(*a)
110
+ end
111
+
112
+ def chef_server_rest
113
+ Chef::REST.new(Chef::Config[:chef_server_url])
114
+ end
115
+
116
+ def self.chef_server_rest
117
+ Chef::REST.new(Chef::Config[:chef_server_url])
118
+ end
119
+
120
+ # Create a Chef::Role from JSON
121
+ def self.json_create(o)
122
+ bag = new
123
+ bag.name(o["name"])
124
+ bag.couchdb_rev = o["_rev"] if o.has_key?("_rev")
125
+ bag.couchdb_id = o["_id"] if o.has_key?("_id")
126
+ bag.index_id = bag.couchdb_id
127
+ bag
128
+ end
129
+
130
+ # List all the Chef::DataBag objects in the CouchDB. If inflate is set to true, you will get
131
+ # the full list of all Roles, fully inflated.
132
+ def self.cdb_list(inflate=false, couchdb=nil)
133
+ rs = (couchdb || Chef::CouchDB.new).list("data_bags", inflate)
134
+ lookup = (inflate ? "value" : "key")
135
+ rs["rows"].collect { |r| r[lookup] }
136
+ end
137
+
138
+ def self.list(inflate=false)
139
+ if inflate
140
+ # Can't search for all data bags like other objects, fall back to N+1 :(
141
+ list(false).inject({}) do |response, bag_and_uri|
142
+ response[bag_and_uri.first] = load(bag_and_uri.first)
143
+ response
144
+ end
145
+ else
146
+ Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data")
147
+ end
148
+ end
149
+
150
+ # Load a Data Bag by name from CouchDB
151
+ def self.cdb_load(name, couchdb=nil)
152
+ (couchdb || Chef::CouchDB.new).load("data_bag", name)
153
+ end
154
+
155
+ # Load a Data Bag by name via the RESTful API
156
+ def self.load(name)
157
+ Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{name}")
158
+ end
159
+
160
+ # Remove this Data Bag from CouchDB
161
+ def cdb_destroy
162
+ removed = @couchdb.delete("data_bag", @name, @couchdb_rev)
163
+ rs = @couchdb.get_view("data_bags", "entries", :include_docs => true, :startkey => @name, :endkey => @name)
164
+ rs["rows"].each do |row|
165
+ row["doc"].couchdb = couchdb
166
+ row["doc"].cdb_destroy
167
+ end
168
+ removed
169
+ end
170
+
171
+ def destroy
172
+ chef_server_rest.delete_rest("data/#{@name}")
173
+ end
174
+
175
+ # Save this Data Bag to the CouchDB
176
+ def cdb_save
177
+ results = @couchdb.store("data_bag", @name, self)
178
+ @couchdb_rev = results["rev"]
179
+ end
180
+
181
+ # Save the Data Bag via RESTful API
182
+ def save
183
+ begin
184
+ chef_server_rest.put_rest("data/#{@name}", self)
185
+ rescue Net::HTTPServerException => e
186
+ raise e unless e.response.code == "404"
187
+ chef_server_rest.post_rest("data", self)
188
+ end
189
+ self
190
+ end
191
+
192
+ #create a data bag via RESTful API
193
+ def create
194
+ chef_server_rest.post_rest("data", self)
195
+ self
196
+ end
197
+
198
+ # List all the items in this Bag from CouchDB
199
+ # The self.load method does this through the REST API
200
+ def list(inflate=false)
201
+ rs = nil
202
+ if inflate
203
+ rs = @couchdb.get_view("data_bags", "entries", :include_docs => true, :startkey => @name, :endkey => @name)
204
+ rs["rows"].collect { |r| r["doc"] }
205
+ else
206
+ rs = @couchdb.get_view("data_bags", "entries", :startkey => @name, :endkey => @name)
207
+ rs["rows"].collect { |r| r["value"] }
208
+ end
209
+ end
210
+
211
+ # Set up our CouchDB design document
212
+ def self.create_design_document(couchdb=nil)
213
+ (couchdb || Chef::CouchDB.new).create_design_document("data_bags", DESIGN_DOCUMENT)
214
+ end
215
+
216
+ # As a string
217
+ def to_s
218
+ "data_bag[#{@name}]"
219
+ end
220
+
221
+ end
222
+ end
223
+
@@ -0,0 +1,267 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Nuo Yan (<nuo@opscode.com>)
4
+ # Author:: Christopher Brown (<cb@opscode.com>)
5
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require 'forwardable'
22
+
23
+ require 'chef/config'
24
+ require 'chef/mixin/params_validate'
25
+ require 'chef/mixin/from_file'
26
+ require 'chef/couchdb'
27
+ require 'chef/index_queue'
28
+ require 'chef/data_bag'
29
+ require 'chef/mash'
30
+ require 'chef/json_compat'
31
+
32
+ class Chef
33
+ class DataBagItem
34
+
35
+ extend Forwardable
36
+
37
+ include Chef::Mixin::FromFile
38
+ include Chef::Mixin::ParamsValidate
39
+ include Chef::IndexQueue::Indexable
40
+
41
+ VALID_ID = /^[\-[:alnum:]_]+$/
42
+
43
+ DESIGN_DOCUMENT = {
44
+ "version" => 1,
45
+ "language" => "javascript",
46
+ "views" => {
47
+ "all" => {
48
+ "map" => <<-EOJS
49
+ function(doc) {
50
+ if (doc.chef_type == "data_bag_item") {
51
+ emit(doc.name, doc);
52
+ }
53
+ }
54
+ EOJS
55
+ },
56
+ "all_id" => {
57
+ "map" => <<-EOJS
58
+ function(doc) {
59
+ if (doc.chef_type == "data_bag_item") {
60
+ emit(doc.name, doc.name);
61
+ }
62
+ }
63
+ EOJS
64
+ }
65
+ }
66
+ }
67
+
68
+ def self.validate_id!(id_str)
69
+ if id_str.nil? || ( id_str !~ VALID_ID )
70
+ raise Exceptions::InvalidDataBagItemID, "Data Bag items must have an id matching #{VALID_ID.inspect}, you gave: #{id_str.inspect}"
71
+ end
72
+ end
73
+
74
+ # Define all Hash's instance methods as delegating to @raw_data
75
+ def_delegators(:@raw_data, *(Hash.instance_methods - Object.instance_methods))
76
+
77
+ attr_accessor :couchdb_rev, :couchdb_id, :couchdb
78
+ attr_reader :raw_data
79
+
80
+ # Create a new Chef::DataBagItem
81
+ def initialize(couchdb=nil)
82
+ @couchdb_rev = nil
83
+ @couchdb_id = nil
84
+ @data_bag = nil
85
+ @raw_data = Mash.new
86
+ @couchdb = couchdb || Chef::CouchDB.new
87
+ end
88
+
89
+ def chef_server_rest
90
+ Chef::REST.new(Chef::Config[:chef_server_url])
91
+ end
92
+
93
+ def self.chef_server_rest
94
+ Chef::REST.new(Chef::Config[:chef_server_url])
95
+ end
96
+
97
+ def raw_data
98
+ @raw_data
99
+ end
100
+
101
+ def validate_id!(id_str)
102
+ self.class.validate_id!(id_str)
103
+ end
104
+
105
+ def raw_data=(new_data)
106
+ unless new_data.respond_to?(:[]) && new_data.respond_to?(:keys)
107
+ raise Exceptions::ValidationFailed, "Data Bag Items must contain a Hash or Mash!"
108
+ end
109
+ validate_id!(new_data["id"])
110
+ @raw_data = new_data
111
+ end
112
+
113
+ def data_bag(arg=nil)
114
+ set_or_return(
115
+ :data_bag,
116
+ arg,
117
+ :regex => /^[\-[:alnum:]_]+$/
118
+ )
119
+ end
120
+
121
+ def name
122
+ object_name
123
+ end
124
+
125
+ def object_name
126
+ raise Exceptions::ValidationFailed, "You must have an 'id' or :id key in the raw data" unless raw_data.has_key?('id')
127
+ raise Exceptions::ValidationFailed, "You must have declared what bag this item belongs to!" unless data_bag
128
+
129
+ id = raw_data['id']
130
+ "data_bag_item_#{data_bag}_#{id}"
131
+ end
132
+
133
+ def self.object_name(data_bag_name, id)
134
+ "data_bag_item_#{data_bag_name}_#{id}"
135
+ end
136
+
137
+ def to_hash
138
+ result = self.raw_data
139
+ result["chef_type"] = "data_bag_item"
140
+ result["data_bag"] = self.data_bag
141
+ result["_rev"] = @couchdb_rev if @couchdb_rev
142
+ result
143
+ end
144
+
145
+ # Serialize this object as a hash
146
+ def to_json(*a)
147
+ result = {
148
+ "name" => self.object_name,
149
+ "json_class" => self.class.name,
150
+ "chef_type" => "data_bag_item",
151
+ "data_bag" => self.data_bag,
152
+ "raw_data" => self.raw_data
153
+ }
154
+ result["_rev"] = @couchdb_rev if @couchdb_rev
155
+ result.to_json(*a)
156
+ end
157
+
158
+ def self.from_hash(h)
159
+ item = new
160
+ item.raw_data = h
161
+ item
162
+ end
163
+
164
+ # Create a Chef::DataBagItem from JSON
165
+ def self.json_create(o)
166
+ bag_item = new
167
+ bag_item.data_bag(o["data_bag"])
168
+ o.delete("data_bag")
169
+ o.delete("chef_type")
170
+ o.delete("json_class")
171
+ o.delete("name")
172
+ if o.has_key?("_rev")
173
+ bag_item.couchdb_rev = o["_rev"]
174
+ o.delete("_rev")
175
+ end
176
+ if o.has_key?("_id")
177
+ bag_item.couchdb_id = o["_id"]
178
+ bag_item.index_id = bag_item.couchdb_id
179
+ o.delete("_id")
180
+ end
181
+ bag_item.raw_data = Mash.new(o["raw_data"])
182
+ bag_item
183
+ end
184
+
185
+ # Load a Data Bag Item by name from CouchDB
186
+ def self.cdb_load(data_bag, name, couchdb=nil)
187
+ (couchdb || Chef::CouchDB.new).load("data_bag_item", object_name(data_bag, name))
188
+ end
189
+
190
+ # Load a Data Bag Item by name via RESTful API
191
+ def self.load(data_bag, name)
192
+ item = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{data_bag}/#{name}")
193
+ if item.kind_of?(DataBagItem)
194
+ item
195
+ else
196
+ item = from_hash(item)
197
+ item.data_bag(data_bag)
198
+ item
199
+ end
200
+ end
201
+
202
+ # Remove this Data Bag Item from CouchDB
203
+ def cdb_destroy
204
+ Chef::Log.debug "destroying data bag item: #{self.inspect}"
205
+ @couchdb.delete("data_bag_item", object_name, @couchdb_rev)
206
+ end
207
+
208
+ def destroy(data_bag=data_bag, databag_item=name)
209
+ chef_server_rest.delete_rest("data/#{data_bag}/#{databag_item}")
210
+ end
211
+
212
+ # Save this Data Bag Item to CouchDB
213
+ def cdb_save
214
+ @couchdb_rev = @couchdb.store("data_bag_item", object_name, self)["rev"]
215
+ end
216
+
217
+ # Save this Data Bag Item via RESTful API
218
+ def save(item_id=@raw_data['id'])
219
+ r = chef_server_rest
220
+ begin
221
+ r.put_rest("data/#{data_bag}/#{item_id}", @raw_data)
222
+ rescue Net::HTTPServerException => e
223
+ raise e unless e.response.code == "404"
224
+ r.post_rest("data/#{data_bag}", @raw_data)
225
+ end
226
+ self
227
+ end
228
+
229
+ # Create this Data Bag Item via RESTful API
230
+ def create
231
+ chef_server_rest.post_rest("data/#{data_bag}", @raw_data)
232
+ self
233
+ end
234
+
235
+ # Set up our CouchDB design document
236
+ def self.create_design_document(couchdb=nil)
237
+ (couchdb || Chef::CouchDB.new).create_design_document("data_bag_items", DESIGN_DOCUMENT)
238
+ end
239
+
240
+ def ==(other)
241
+ other.respond_to?(:to_hash) &&
242
+ other.respond_to?(:data_bag) &&
243
+ (other.to_hash == to_hash) &&
244
+ (other.data_bag.to_s == data_bag.to_s)
245
+ end
246
+
247
+ # As a string
248
+ def to_s
249
+ "data_bag_item[#{id}]"
250
+ end
251
+
252
+ def inspect
253
+ "data_bag_item[#{data_bag.inspect}, #{raw_data['id'].inspect}, #{raw_data.inspect}]"
254
+ end
255
+
256
+ def pretty_print(pretty_printer)
257
+ pretty_printer.pp({"data_bag_item('#{data_bag}', '#{id}')" => self.to_hash})
258
+ end
259
+
260
+ def id
261
+ @raw_data['id']
262
+ end
263
+
264
+ end
265
+ end
266
+
267
+