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,59 @@
1
+ #
2
+ # Author:: Doug MacEachern (<dougm@vmware.com>)
3
+ # Copyright:: Copyright (c) 2010 VMware, 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
+ #simple wrapper around Volume APIs. might be possible with WMI, but possibly more complex.
20
+
21
+ require 'chef/util/windows'
22
+ require 'windows/volume'
23
+
24
+ class Chef::Util::Windows::Volume < Chef::Util::Windows
25
+
26
+ private
27
+ include Windows::Volume
28
+ #XXX not defined in the current windows-pr release
29
+ DeleteVolumeMountPoint =
30
+ Windows::API.new('DeleteVolumeMountPoint', 'S', 'B') unless defined? DeleteVolumeMountPoint
31
+
32
+ public
33
+
34
+ def initialize(name)
35
+ name += "\\" unless name =~ /\\$/ #trailing slash required
36
+ @name = name
37
+ end
38
+
39
+ def device
40
+ buffer = 0.chr * 256
41
+ if GetVolumeNameForVolumeMountPoint(@name, buffer, buffer.size)
42
+ return buffer[0,buffer.size].unpack("Z*")[0]
43
+ else
44
+ raise ArgumentError, get_last_error
45
+ end
46
+ end
47
+
48
+ def delete
49
+ unless DeleteVolumeMountPoint.call(@name)
50
+ raise ArgumentError, get_last_error
51
+ end
52
+ end
53
+
54
+ def add(device)
55
+ unless SetVolumeMountPoint(@name, device)
56
+ raise ArgumentError, get_last_error
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,23 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010-2011 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
+ CHEF_ROOT = File.dirname(File.expand_path(File.dirname(__FILE__)))
20
+ VERSION = '0.10.0.beta.3'
21
+ end
22
+
23
+ # NOTE: the Chef::Version class is defined in version_class.rb
@@ -0,0 +1,70 @@
1
+ # Author:: Seth Falcon (<seth@opscode.com>)
2
+ # Author:: Christopher Walters (<cw@opscode.com>)
3
+ # Copyright:: Copyright 2010-2011 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ class Chef
19
+ class Version
20
+ include Comparable
21
+ attr_reader :major, :minor, :patch
22
+
23
+ def initialize(str="")
24
+ @major, @minor, @patch = parse(str)
25
+ end
26
+
27
+ def inspect
28
+ "#{@major}.#{@minor}.#{@patch}"
29
+ end
30
+
31
+ def to_s
32
+ "#{@major}.#{@minor}.#{@patch}"
33
+ end
34
+
35
+ def <=>(v)
36
+ [:major, :minor, :patch].each do |method|
37
+ ans = (self.send(method) <=> v.send(method))
38
+ return ans if ans != 0
39
+ end
40
+ 0
41
+ end
42
+
43
+ def hash
44
+ # Didn't put any thought or research into this, probably can be
45
+ # done better
46
+ to_s.hash
47
+ end
48
+
49
+ # For hash
50
+ def eql?(other)
51
+ other.is_a?(Version) && self == other
52
+ end
53
+
54
+ private
55
+
56
+ def parse(str="")
57
+ @major, @minor, @patch =
58
+ case str.to_s
59
+ when /^(\d+)\.(\d+)\.(\d+)$/
60
+ [ $1.to_i, $2.to_i, $3.to_i ]
61
+ when /^(\d+)\.(\d+)$/
62
+ [ $1.to_i, $2.to_i, 0 ]
63
+ else
64
+ msg = "'#{str.to_s}' does not match 'x.y.z' or 'x.y'"
65
+ raise Chef::Exceptions::InvalidCookbookVersion.new msg
66
+ end
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,116 @@
1
+ # Author:: Seth Falcon (<seth@opscode.com>)
2
+ # Author:: Christopher Walters (<cw@opscode.com>)
3
+ # Copyright:: Copyright 2010-2011 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
+ require 'chef/version_class'
18
+
19
+ class Chef
20
+ class VersionConstraint
21
+ DEFAULT_CONSTRAINT = ">= 0.0.0"
22
+ STANDARD_OPS = %w(< > <= >=)
23
+ OPS = %w(< > = <= >= ~>)
24
+ PATTERN = /^(#{OPS.join('|')}) (.+)$/
25
+
26
+ attr_reader :op, :version
27
+
28
+ def initialize(constraint_spec=DEFAULT_CONSTRAINT)
29
+ case constraint_spec
30
+ when nil
31
+ parse(DEFAULT_CONSTRAINT)
32
+ when Array
33
+ parse_from_array(constraint_spec)
34
+ when String
35
+ parse(constraint_spec)
36
+ else
37
+ msg = "VersionConstraint should be created from a String. You gave: #{constraint_spec.inspect}"
38
+ raise Chef::Exceptions::InvalidVersionConstraint, msg
39
+ end
40
+ end
41
+
42
+ def include?(v)
43
+ version = if v.respond_to? :version # a CookbookVersion-like object
44
+ Chef::Version.new(v.version.to_s)
45
+ else
46
+ Chef::Version.new(v.to_s)
47
+ end
48
+ do_op(version)
49
+ end
50
+
51
+ def inspect
52
+ "(#{@op} #{@version})"
53
+ end
54
+
55
+ def to_s
56
+ "#{@op} #{@version}"
57
+ end
58
+
59
+ def eql?(o)
60
+ o.class == self.class && @op == o.op && @version == o.version
61
+ end
62
+ alias_method :==, :eql?
63
+
64
+ private
65
+
66
+ def do_op(other_version)
67
+ if STANDARD_OPS.include? @op
68
+ other_version.send(@op.to_sym, @version)
69
+ elsif @op == '='
70
+ other_version == @version
71
+ elsif @op == '~>'
72
+ if @missing_patch_level
73
+ (other_version.major == @version.major &&
74
+ other_version.minor >= @version.minor)
75
+ else
76
+ (other_version.major == @version.major &&
77
+ other_version.minor == @version.minor &&
78
+ other_version.patch >= @version.patch)
79
+ end
80
+ else # should never happen
81
+ raise "bad op #{@op}"
82
+ end
83
+ end
84
+
85
+ def parse_from_array(constraint_spec)
86
+ if constraint_spec.empty?
87
+ parse(DEFAULT_CONSTRAINT)
88
+ elsif constraint_spec.size == 1
89
+ parse(constraint_spec.first)
90
+ else
91
+ msg = "only one version constraint operation is supported, but you gave #{constraint_spec.size} "
92
+ msg << "['#{constraint_spec.join(', ')}']"
93
+ raise Chef::Exceptions::InvalidVersionConstraint, msg
94
+ end
95
+ end
96
+
97
+ def parse(str)
98
+ @missing_patch_level = false
99
+ if str.index(" ").nil? && str =~ /^[0-9]/
100
+ # try for lone version, implied '='
101
+ @version = Chef::Version.new(str)
102
+ @op = "="
103
+ elsif PATTERN.match str
104
+ @op = $1
105
+ raw_version = $2
106
+ @version = Chef::Version.new(raw_version)
107
+ if raw_version.split('.').size == 2
108
+ @missing_patch_level = true
109
+ end
110
+ else
111
+ raise Chef::Exceptions::InvalidVersionConstraint, "'#{str}'"
112
+ end
113
+ end
114
+
115
+ end
116
+ end
@@ -0,0 +1,231 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Nuo Yan (<nuo@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
+ require 'chef/config'
21
+ require 'chef/mixin/params_validate'
22
+ require 'chef/couchdb'
23
+ require 'chef/index_queue'
24
+ require 'digest/sha1'
25
+ require 'chef/json_compat'
26
+
27
+
28
+ class Chef
29
+ class WebUIUser
30
+
31
+ attr_accessor :name, :validated, :admin, :openid, :couchdb
32
+ attr_reader :password, :salt, :couchdb_id, :couchdb_rev
33
+
34
+ include Chef::Mixin::ParamsValidate
35
+
36
+ DESIGN_DOCUMENT = {
37
+ "version" => 3,
38
+ "language" => "javascript",
39
+ "views" => {
40
+ "all" => {
41
+ "map" => <<-EOJS
42
+ function(doc) {
43
+ if (doc.chef_type == "webui_user") {
44
+ emit(doc.name, doc);
45
+ }
46
+ }
47
+ EOJS
48
+ },
49
+ "all_id" => {
50
+ "map" => <<-EOJS
51
+ function(doc) {
52
+ if (doc.chef_type == "webui_user") {
53
+ emit(doc.name, doc.name);
54
+ }
55
+ }
56
+ EOJS
57
+ },
58
+ },
59
+ }
60
+
61
+ # Create a new Chef::WebUIUser object.
62
+ def initialize(opts={})
63
+ @name, @salt, @password = opts['name'], opts['salt'], opts['password']
64
+ @openid, @couchdb_rev, @couchdb_id = opts['openid'], opts['_rev'], opts['_id']
65
+ @admin = false
66
+ @couchdb = Chef::CouchDB.new
67
+ end
68
+
69
+ def name=(n)
70
+ @name = n.gsub(/\./, '_')
71
+ end
72
+
73
+ def admin?
74
+ admin
75
+ end
76
+
77
+ # Set the password for this object.
78
+ def set_password(password, confirm_password=password)
79
+ raise ArgumentError, "Passwords do not match" unless password == confirm_password
80
+ raise ArgumentError, "Password cannot be blank" if (password.nil? || password.length==0)
81
+ raise ArgumentError, "Password must be a minimum of 6 characters" if password.length < 6
82
+ generate_salt
83
+ @password = encrypt_password(password)
84
+ end
85
+
86
+ def set_openid(given_openid)
87
+ @openid = given_openid
88
+ end
89
+
90
+ def verify_password(given_password)
91
+ encrypt_password(given_password) == @password
92
+ end
93
+
94
+ # Serialize this object as a hash
95
+ def to_json(*a)
96
+ attributes = Hash.new
97
+ recipes = Array.new
98
+ result = {
99
+ 'name' => name,
100
+ 'json_class' => self.class.name,
101
+ 'salt' => salt,
102
+ 'password' => password,
103
+ 'openid' => openid,
104
+ 'admin' => admin,
105
+ 'chef_type' => 'webui_user',
106
+ }
107
+ result["_id"] = @couchdb_id if @couchdb_id
108
+ result["_rev"] = @couchdb_rev if @couchdb_rev
109
+ result.to_json(*a)
110
+ end
111
+
112
+ # Create a Chef::WebUIUser from JSON
113
+ def self.json_create(o)
114
+ me = new(o)
115
+ me.admin = o["admin"]
116
+ me
117
+ end
118
+
119
+ # List all the Chef::WebUIUser objects in the CouchDB. If inflate is set to true, you will get
120
+ # the full list of all registration objects. Otherwise, you'll just get the IDs
121
+ def self.cdb_list(inflate=false)
122
+ rs = Chef::CouchDB.new.list("users", inflate)
123
+ if inflate
124
+ rs["rows"].collect { |r| r["value"] }
125
+ else
126
+ rs["rows"].collect { |r| r["key"] }
127
+ end
128
+ end
129
+
130
+ def self.list(inflate=false)
131
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
132
+ if inflate
133
+ response = Hash.new
134
+ Chef::Search::Query.new.search(:user) do |n|
135
+ response[n.name] = n unless n.nil?
136
+ end
137
+ response
138
+ else
139
+ r.get_rest("users")
140
+ end
141
+ end
142
+
143
+ # Load an WebUIUser by name from CouchDB
144
+ def self.cdb_load(name)
145
+ Chef::CouchDB.new.load("webui_user", name)
146
+ end
147
+
148
+ # Load a User by name
149
+ def self.load(name)
150
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
151
+ r.get_rest("users/#{name}")
152
+ end
153
+
154
+
155
+ # Whether or not there is an WebUIUser with this key.
156
+ def self.has_key?(name)
157
+ Chef::CouchDB.new.has_key?("webui_user", name)
158
+ end
159
+
160
+ # Remove this WebUIUser from the CouchDB
161
+ def cdb_destroy
162
+ couchdb.delete("webui_user", @name, @couchdb_rev)
163
+ end
164
+
165
+ # Remove this WebUIUser via the REST API
166
+ def destroy
167
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
168
+ r.delete_rest("users/#{@name}")
169
+ end
170
+
171
+ # Save this WebUIUser to the CouchDB
172
+ def cdb_save
173
+ results = couchdb.store("webui_user", @name, self)
174
+ @couchdb_rev = results["rev"]
175
+ end
176
+
177
+ # Save this WebUIUser via the REST API
178
+ def save
179
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
180
+ begin
181
+ r.put_rest("users/#{@name}", self)
182
+ rescue Net::HTTPServerException => e
183
+ if e.response.code == "404"
184
+ r.post_rest("users", self)
185
+ else
186
+ raise e
187
+ end
188
+ end
189
+ self
190
+ end
191
+
192
+ # Create the WebUIUser via the REST API
193
+ def create
194
+ r = Chef::REST.new(Chef::Config[:chef_server_url])
195
+ r.post_rest("users", self)
196
+ self
197
+ end
198
+
199
+ # Set up our CouchDB design document
200
+ def self.create_design_document(couchdb=nil)
201
+ couchdb ||= Chef::CouchDB.new
202
+ couchdb.create_design_document("users", DESIGN_DOCUMENT)
203
+ end
204
+
205
+ #return true if an admin user exists. this is pretty expensive (O(n)), should think of a better way (nuo)
206
+ def self.admin_exist
207
+ users = self.cdb_list
208
+ users.each do |u|
209
+ user = self.cdb_load(u)
210
+ if user.admin
211
+ return user.name
212
+ end
213
+ end
214
+ nil
215
+ end
216
+
217
+ protected
218
+
219
+ def generate_salt
220
+ @salt = Time.now.to_s
221
+ chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
222
+ 1.upto(30) { |i| @salt << chars[rand(chars.size-1)] }
223
+ @salt
224
+ end
225
+
226
+ def encrypt_password(password)
227
+ Digest::SHA1.hexdigest("--#{salt}--#{password}--")
228
+ end
229
+
230
+ end
231
+ end