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,60 @@
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
+
19
+ require 'chef/mixin/shell_out'
20
+ require 'chef/log'
21
+ require 'chef/provider'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Execute < Chef::Provider
26
+
27
+ include Chef::Mixin::ShellOut
28
+
29
+ def load_current_resource
30
+ true
31
+ end
32
+
33
+ def action_run
34
+ opts = {}
35
+
36
+ if sentinel_file = @new_resource.creates
37
+ if File.exists?(sentinel_file)
38
+ Chef::Log.info("Skipping #{self} - sentinel file #{sentinel_file} exists.")
39
+ return false
40
+ end
41
+ end
42
+
43
+ # original implementation did not specify a timeout, but ShellOut
44
+ # *always* times out. So, set a very long default timeout
45
+ opts[:timeout] = @new_resource.timeout || 3600
46
+ opts[:returns] = @new_resource.returns if @new_resource.returns
47
+ opts[:environment] = @new_resource.environment if @new_resource.environment
48
+ opts[:user] = @new_resource.user if @new_resource.user
49
+ opts[:group] = @new_resource.group if @new_resource.group
50
+ opts[:cwd] = @new_resource.cwd if @new_resource.cwd
51
+ opts[:umask] = @new_resource.umask if @new_resource.umask
52
+
53
+ result = shell_out!(@new_resource.command, opts)
54
+ @new_resource.updated_by_last_action(true)
55
+ Chef::Log.info("Ran #{@new_resource} successfully")
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,222 @@
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
+
19
+ require 'chef/config'
20
+ require 'chef/log'
21
+ require 'chef/resource/file'
22
+ require 'chef/mixin/checksum'
23
+ require 'chef/provider'
24
+ require 'etc'
25
+ require 'fileutils'
26
+
27
+ class Chef
28
+ class Provider
29
+ class File < Chef::Provider
30
+ include Chef::Mixin::Checksum
31
+
32
+ def negative_complement(big)
33
+ if big > 1073741823 # Fixnum max
34
+ big -= (2**32) # diminished radix wrap to negative
35
+ end
36
+ big
37
+ end
38
+
39
+ def octal_mode(mode)
40
+ ((mode.respond_to?(:oct) ? mode.oct : mode.to_i) & 007777)
41
+ end
42
+
43
+ private :negative_complement, :octal_mode
44
+
45
+ def load_current_resource
46
+ @current_resource = Chef::Resource::File.new(@new_resource.name)
47
+ @new_resource.path.gsub!(/\\/, "/") # for Windows
48
+ @current_resource.path(@new_resource.path)
49
+ if ::File.exist?(@current_resource.path) && ::File.readable?(@current_resource.path)
50
+ cstats = ::File.stat(@current_resource.path)
51
+ @current_resource.owner(cstats.uid)
52
+ @current_resource.group(cstats.gid)
53
+ @current_resource.mode(octal_mode(cstats.mode))
54
+ end
55
+ @current_resource
56
+ end
57
+
58
+ # Compare the content of a file. Returns true if they are the same, false if they are not.
59
+ def compare_content
60
+ checksum(@current_resource.path) == new_resource_content_checksum
61
+ end
62
+
63
+ # Set the content of the file, assuming it is not set correctly already.
64
+ def set_content
65
+ unless compare_content
66
+ Chef::Log.info("Setting content for #{@new_resource}")
67
+ backup @new_resource.path if ::File.exists?(@new_resource.path)
68
+ ::File.open(@new_resource.path, "w") {|f| f.write @new_resource.content }
69
+ @new_resource.updated_by_last_action(true)
70
+ end
71
+ end
72
+
73
+ # Compare the ownership of a file. Returns true if they are the same, false if they are not.
74
+ def compare_owner
75
+ return false if @new_resource.owner.nil?
76
+
77
+ @set_user_id = case @new_resource.owner
78
+ when /^\d+$/, Integer
79
+ @new_resource.owner.to_i
80
+ else
81
+ # This raises an ArgumentError if you can't find the user
82
+ Etc.getpwnam(@new_resource.owner).uid
83
+ end
84
+
85
+ @set_user_id == @current_resource.owner
86
+ end
87
+
88
+ # Set the ownership on the file, assuming it is not set correctly already.
89
+ def set_owner
90
+ unless compare_owner
91
+ Chef::Log.info("Setting owner to #{@set_user_id} for #{@new_resource}")
92
+ @set_user_id = negative_complement(@set_user_id)
93
+ ::File.chown(@set_user_id, nil, @new_resource.path)
94
+ @new_resource.updated_by_last_action(true)
95
+ end
96
+ end
97
+
98
+ # Compares the group of a file. Returns true if they are the same, false if they are not.
99
+ def compare_group
100
+ return false if @new_resource.group.nil?
101
+
102
+ @set_group_id = case @new_resource.group
103
+ when /^\d+$/, Integer
104
+ @new_resource.group.to_i
105
+ else
106
+ Etc.getgrnam(@new_resource.group).gid
107
+ end
108
+
109
+ @set_group_id == @current_resource.group
110
+ end
111
+
112
+ def set_group
113
+ unless compare_group
114
+ Chef::Log.info("Setting group to #{@set_group_id} for #{@new_resource}")
115
+ @set_group_id = negative_complement(@set_group_id)
116
+ ::File.chown(nil, @set_group_id, @new_resource.path)
117
+ @new_resource.updated_by_last_action(true)
118
+ end
119
+ end
120
+
121
+ def compare_mode
122
+ case @new_resource.mode
123
+ when /^\d+$/, Integer
124
+ octal_mode(@new_resource.mode) == octal_mode(@current_resource.mode)
125
+ else
126
+ false
127
+ end
128
+ end
129
+
130
+ def set_mode
131
+ unless compare_mode && @new_resource.mode != nil
132
+ Chef::Log.info("Setting mode to #{sprintf("%o" % octal_mode(@new_resource.mode))} for #{@new_resource}")
133
+ # CHEF-174, bad mojo around treating integers as octal. If a string is passed, we try to do the "right" thing
134
+ ::File.chmod(octal_mode(@new_resource.mode), @new_resource.path)
135
+ @new_resource.updated_by_last_action(true)
136
+ end
137
+ end
138
+
139
+ def action_create
140
+ assert_enclosing_directory_exists!
141
+ unless ::File.exists?(@new_resource.path)
142
+ Chef::Log.info("Creating #{@new_resource} at #{@new_resource.path}")
143
+ ::File.open(@new_resource.path, "w+") {|f| f.write @new_resource.content }
144
+ @new_resource.updated_by_last_action(true)
145
+ else
146
+ set_content unless @new_resource.content.nil?
147
+ end
148
+ set_owner unless @new_resource.owner.nil?
149
+ set_group unless @new_resource.group.nil?
150
+ set_mode unless @new_resource.mode.nil?
151
+ end
152
+
153
+ def action_create_if_missing
154
+ action_create
155
+ end
156
+
157
+ def action_delete
158
+ if ::File.exists?(@new_resource.path)
159
+ if ::File.writable?(@new_resource.path)
160
+ backup unless ::File.symlink?(@new_resource.path)
161
+ Chef::Log.info("Deleting #{@new_resource} at #{@new_resource.path}")
162
+ ::File.delete(@new_resource.path)
163
+ @new_resource.updated_by_last_action(true)
164
+ else
165
+ raise "Cannot delete #{@new_resource} at #{@new_resource_path}!"
166
+ end
167
+ end
168
+ end
169
+
170
+ def action_touch
171
+ action_create
172
+ time = Time.now
173
+ Chef::Log.info("Updating #{@new_resource} with new atime/mtime of #{time}")
174
+ ::File.utime(time, time, @new_resource.path)
175
+ @new_resource.updated_by_last_action(true)
176
+ end
177
+
178
+ def backup(file=nil)
179
+ file ||= @new_resource.path
180
+ if @new_resource.backup != false && @new_resource.backup > 0 && ::File.exist?(file)
181
+ time = Time.now
182
+ savetime = time.strftime("%Y%m%d%H%M%S")
183
+ backup_filename = "#{@new_resource.path}.chef-#{savetime}"
184
+ backup_filename = backup_filename.sub(/^([A-Za-z]:)/, "") #strip drive letter on Windows
185
+ # if :file_backup_path is nil, we fallback to the old behavior of
186
+ # keeping the backup in the same directory. We also need to to_s it
187
+ # so we don't get a type error around implicit to_str conversions.
188
+ prefix = Chef::Config[:file_backup_path].to_s
189
+ backup_path = ::File.join(prefix, backup_filename)
190
+ FileUtils.mkdir_p(::File.dirname(backup_path)) if Chef::Config[:file_backup_path]
191
+ Chef::Log.info("Backing up #{@new_resource} to #{backup_path}")
192
+ FileUtils.cp(file, backup_path, :preserve => true)
193
+
194
+ # Clean up after the number of backups
195
+ slice_number = @new_resource.backup
196
+ backup_files = Dir[::File.join(prefix, ".#{@new_resource.path}.chef-*")].sort { |a,b| b <=> a }
197
+ if backup_files.length >= @new_resource.backup
198
+ remainder = backup_files.slice(slice_number..-1)
199
+ remainder.each do |backup_to_delete|
200
+ Chef::Log.info("Removing backup of #{@new_resource} at #{backup_to_delete}")
201
+ FileUtils.rm(backup_to_delete)
202
+ end
203
+ end
204
+ end
205
+ end
206
+
207
+ private
208
+
209
+ def assert_enclosing_directory_exists!
210
+ enclosing_dir = ::File.dirname(@new_resource.path)
211
+ unless ::File.directory?(enclosing_dir)
212
+ msg = "Cannot create a file at #{@new_resource.path} because the enclosing directory (#{enclosing_dir}) does not exist"
213
+ raise Chef::Exceptions::EnclosingDirectoryDoesNotExist, msg
214
+ end
215
+ end
216
+
217
+ def new_resource_content_checksum
218
+ @new_resource.content && Digest::SHA2.hexdigest(@new_resource.content)
219
+ end
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,221 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@kallistec.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
+
19
+
20
+ require 'chef/log'
21
+ require 'chef/provider'
22
+ require 'chef/mixin/shell_out'
23
+ require 'fileutils'
24
+
25
+ class Chef
26
+ class Provider
27
+ class Git < Chef::Provider
28
+
29
+ include Chef::Mixin::ShellOut
30
+
31
+ def load_current_resource
32
+ @current_resource = Chef::Resource::Git.new(@new_resource.name)
33
+ if current_revision = find_current_revision
34
+ @current_resource.revision current_revision
35
+ end
36
+ end
37
+
38
+ def action_checkout
39
+ assert_target_directory_valid!
40
+
41
+ if target_dir_non_existant_or_empty?
42
+ clone
43
+ checkout
44
+ enable_submodules
45
+ @new_resource.updated_by_last_action(true)
46
+ else
47
+ Chef::Log.info "Taking no action, checkout destination #{@new_resource.destination} already exists or is a non-empty directory"
48
+ end
49
+ end
50
+
51
+ def action_export
52
+ action_checkout
53
+ FileUtils.rm_rf(::File.join(@new_resource.destination,".git"))
54
+ @new_resource.updated_by_last_action(true)
55
+ end
56
+
57
+ def action_sync
58
+ assert_target_directory_valid!
59
+
60
+ if existing_git_clone?
61
+ current_rev = find_current_revision
62
+ Chef::Log.debug "#{@new_resource} current revision: #{current_rev} target revision: #{target_revision}"
63
+ unless current_revision_matches_target_revision?
64
+ fetch_updates
65
+ enable_submodules
66
+ Chef::Log.info "#{@new_resource} updated to revision: #{target_revision}"
67
+ @new_resource.updated_by_last_action(true)
68
+ end
69
+
70
+ else
71
+ action_checkout
72
+ @new_resource.updated_by_last_action(true)
73
+ end
74
+ end
75
+
76
+ def assert_target_directory_valid!
77
+ target_parent_directory = ::File.dirname(@new_resource.destination)
78
+ unless ::File.directory?(target_parent_directory)
79
+ msg = "Cannot clone #{@new_resource} to #{@new_resource.destination}, the enclosing directory #{target_parent_directory} does not exist"
80
+ raise Chef::Exceptions::MissingParentDirectory, msg
81
+ end
82
+ end
83
+
84
+ def existing_git_clone?
85
+ ::File.exist?(::File.join(@new_resource.destination, ".git"))
86
+ end
87
+
88
+ def target_dir_non_existant_or_empty?
89
+ !::File.exist?(@new_resource.destination) || Dir.entries(@new_resource.destination).sort == ['.','..']
90
+ end
91
+
92
+ def find_current_revision
93
+ if ::File.exist?(::File.join(cwd, ".git"))
94
+ # 128 is returned when we're not in a git repo. this is fine
95
+ result = shell_out!('git rev-parse HEAD', :cwd => cwd, :returns => [0,128]).stdout.strip
96
+ end
97
+ sha_hash?(result) ? result : nil
98
+ end
99
+
100
+ def clone
101
+ remote = @new_resource.remote
102
+
103
+ args = []
104
+ args << "-o #{remote}" unless remote == 'origin'
105
+ args << "--depth #{@new_resource.depth}" if @new_resource.depth
106
+
107
+ Chef::Log.info "Cloning repo #{@new_resource.repository} to #{@new_resource.destination}"
108
+
109
+ clone_cmd = "git clone #{args.join(' ')} #{@new_resource.repository} #{@new_resource.destination}"
110
+ shell_out!(clone_cmd, run_options)
111
+ end
112
+
113
+ def checkout
114
+ sha_ref = target_revision
115
+ Chef::Log.info "Checking out branch: #{@new_resource.revision} reference: #{sha_ref}"
116
+ # checkout into a local branch rather than a detached HEAD
117
+ shell_out!("git checkout -b deploy #{sha_ref}", run_options(:cwd => @new_resource.destination))
118
+ end
119
+
120
+ def enable_submodules
121
+ if @new_resource.enable_submodules
122
+ Chef::Log.info "Enabling git submodules"
123
+ command = "git submodule init && git submodule update"
124
+ shell_out!(command, run_options(:cwd => @new_resource.destination))
125
+ end
126
+ end
127
+
128
+ def fetch_updates
129
+ setup_remote_tracking_branches if @new_resource.remote != 'origin'
130
+
131
+ # since we're in a local branch already, just reset to specified revision rather than merge
132
+ fetch_command = "git fetch #{@new_resource.remote} && git fetch #{@new_resource.remote} --tags && git reset --hard #{target_revision}"
133
+ Chef::Log.debug "Fetching updates from #{new_resource.remote} and resetting to revison #{target_revision}"
134
+ shell_out!(fetch_command, run_options(:cwd => @new_resource.destination))
135
+ end
136
+
137
+ # Use git-config to setup a remote tracking branches. Could use
138
+ # git-remote but it complains when a remote of the same name already
139
+ # exists, git-config will just silenty overwrite the setting every
140
+ # time. This could cause wierd-ness in the remote cache if the url
141
+ # changes between calls, but as long as the repositories are all
142
+ # based from each other it should still work fine.
143
+ def setup_remote_tracking_branches
144
+ command = []
145
+
146
+ Chef::Log.info "Configuring remote tracking branches for repository #{@new_resource.repository} "+
147
+ "at remote #{@new_resource.remote}"
148
+ command << "git config remote.#{@new_resource.remote}.url #{@new_resource.repository}"
149
+ command << "git config remote.#{@new_resource.remote}.fetch +refs/heads/*:refs/remotes/#{@new_resource.remote}/*"
150
+ shell_out!(command.join(" && "), run_options(:cwd => @new_resource.destination))
151
+ end
152
+
153
+ def current_revision_matches_target_revision?
154
+ (!@current_resource.revision.nil?) && (target_revision.strip.to_i(16) == @current_resource.revision.strip.to_i(16))
155
+ end
156
+
157
+ def target_revision
158
+ @target_revision ||= begin
159
+ assert_revision_not_remote
160
+
161
+ if sha_hash?(@new_resource.revision)
162
+ @target_revision = @new_resource.revision
163
+ else
164
+ resolved_reference = remote_resolve_reference
165
+ @target_revision = extract_revision(resolved_reference)
166
+ end
167
+ end
168
+ end
169
+
170
+ alias :revision_slug :target_revision
171
+
172
+ def remote_resolve_reference
173
+ command = git('ls-remote', @new_resource.repository, @new_resource.revision)
174
+ shell_out!(command, run_options).stdout
175
+ end
176
+
177
+ private
178
+
179
+ def run_options(run_opts={})
180
+ run_opts[:user] = @new_resource.user if @new_resource.user
181
+ run_opts[:group] = @new_resource.group if @new_resource.group
182
+ run_opts[:environment] = {"GIT_SSH" => @new_resource.ssh_wrapper} if @new_resource.ssh_wrapper
183
+ run_opts
184
+ end
185
+
186
+ def cwd
187
+ @new_resource.destination
188
+ end
189
+
190
+ def git(*args)
191
+ ["git", *args].compact.join(" ")
192
+ end
193
+
194
+ def sha_hash?(string)
195
+ string =~ /^[0-9a-f]{40}$/
196
+ end
197
+
198
+ def assert_revision_not_remote
199
+ if @new_resource.revision =~ /^origin\//
200
+ reference = @new_resource.revision
201
+ error_text = "Deploying remote branches is not supported. " +
202
+ "Specify the remote branch as a local branch for " +
203
+ "the git repository you're deploying from " +
204
+ "(ie: '#{reference.gsub('origin/', '')}' rather than '#{reference}')."
205
+ raise RuntimeError, error_text
206
+ end
207
+ end
208
+
209
+ def extract_revision(resolved_reference)
210
+ unless resolved_reference =~ /^([0-9a-f]{40})\s+(\S+)/
211
+ msg = "Unable to parse SHA reference for '#{@new_resource.revision}' in repository '#{@new_resource.repository}'. "
212
+ msg << "Verify your (case-sensitive) repository URL and revision.\n"
213
+ msg << "`git ls-remote` output: #{resolved_reference}"
214
+ raise Chef::Exceptions::UnresolvableGitReference, msg
215
+ end
216
+ $1
217
+ end
218
+
219
+ end
220
+ end
221
+ end