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,49 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class RoleFromFile < Knife
24
+
25
+ deps do
26
+ require 'chef/role'
27
+ require 'chef/json_compat'
28
+ end
29
+
30
+ banner "knife role from file FILE (options)"
31
+
32
+ def run
33
+ updated = load_from_file(Chef::Role, @name_args[0])
34
+
35
+ updated.save
36
+
37
+ output(format_for_display(updated)) if config[:print_after]
38
+
39
+ ui.info("Updated Role #{updated.name}!")
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+
46
+
47
+
48
+
49
+
@@ -0,0 +1,43 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class RoleList < Knife
24
+
25
+ deps do
26
+ require 'chef/node'
27
+ require 'chef/json_compat'
28
+ end
29
+
30
+ banner "knife role list (options)"
31
+
32
+ option :with_uri,
33
+ :short => "-w",
34
+ :long => "--with-uri",
35
+ :description => "Show corresponding URIs"
36
+
37
+ def run
38
+ output(format_list_for_display(Chef::Role.list))
39
+ end
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,54 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class RoleShow < Knife
24
+
25
+ deps do
26
+ require 'chef/node'
27
+ require 'chef/json_compat'
28
+ end
29
+
30
+ banner "knife role show ROLE (options)"
31
+
32
+ option :attribute,
33
+ :short => "-a ATTR",
34
+ :long => "--attribute ATTR",
35
+ :description => "Show only one attribute"
36
+
37
+ def run
38
+ @role_name = @name_args[0]
39
+
40
+ if @role_name.nil?
41
+ show_usage
42
+ ui.fatal("You must specify a role name")
43
+ exit 1
44
+ end
45
+
46
+ role = Chef::Role.load(@role_name)
47
+ output(format_for_display(config[:environment] ? role.environment(config[:environment]) : role))
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+
54
+
@@ -0,0 +1,123 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class Search < Knife
24
+
25
+ deps do
26
+ require 'chef/search/query'
27
+ end
28
+
29
+ banner "knife search INDEX QUERY (options)"
30
+
31
+ option :sort,
32
+ :short => "-o SORT",
33
+ :long => "--sort SORT",
34
+ :description => "The order to sort the results in",
35
+ :default => nil
36
+
37
+ option :start,
38
+ :short => "-b ROW",
39
+ :long => "--start ROW",
40
+ :description => "The row to start returning results at",
41
+ :default => 0,
42
+ :proc => lambda { |i| i.to_i }
43
+
44
+ option :rows,
45
+ :short => "-R INT",
46
+ :long => "--rows INT",
47
+ :description => "The number of rows to return",
48
+ :default => 20,
49
+ :proc => lambda { |i| i.to_i }
50
+
51
+ option :attribute,
52
+ :short => "-a ATTR",
53
+ :long => "--attribute ATTR",
54
+ :description => "Show only one attribute"
55
+
56
+ option :run_list,
57
+ :short => "-r",
58
+ :long => "--run-list",
59
+ :description => "Show only the run list"
60
+
61
+ option :id_only,
62
+ :short => "-i",
63
+ :long => "--id-only",
64
+ :description => "Show only the ID of matching objects"
65
+
66
+ option :query,
67
+ :short => "-q QUERY",
68
+ :long => "--query QUERY",
69
+ :description => "The search query; useful to protect queries starting with -"
70
+
71
+ def run
72
+ if config[:query] && @name_args[1]
73
+ puts "please specify query as an argument or an option via -q, not both"
74
+ puts opt_parser
75
+ exit 1
76
+ end
77
+ raw_query = config[:query] || @name_args[1]
78
+ if !raw_query || raw_query.empty?
79
+ puts "no query specified"
80
+ puts opt_parser
81
+ exit 1
82
+ end
83
+
84
+ q = Chef::Search::Query.new
85
+ display = { :total => 0, :start => config[:start] ? config[:start] : 0, :rows => [ ] }
86
+ query = URI.escape(raw_query,
87
+ Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
88
+ rows = config[:rows] ? config[:rows] : 20
89
+ start = config[:start] ? config[:start] : 0
90
+ begin
91
+ q.search(@name_args[0], query, config[:sort], start, rows) do |item|
92
+ formatted_item = format_for_display(item)
93
+ if formatted_item.respond_to?(:has_key?) && !formatted_item.has_key?('id')
94
+ formatted_item['id'] = item.has_key?('id') ? item['id'] : item.name
95
+ end
96
+ display[:rows] << formatted_item
97
+ display[:total] += 1
98
+ end
99
+ rescue Net::HTTPServerException => e
100
+ msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
101
+ ui.msg("knife search failed: #{msg}")
102
+ exit 1
103
+ end
104
+
105
+ if config[:id_only]
106
+ if config[:attribute]
107
+ display[:rows].each do |row|
108
+ puts row[config[:attribute]] if row.has_key?(config[:attribute]) && !row[config[:attribute]].nil?
109
+ end
110
+ else
111
+ puts display[:rows].join("\n")
112
+ end
113
+ else
114
+ output(display)
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+
121
+
122
+
123
+
@@ -0,0 +1,318 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 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/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class Ssh < Knife
24
+
25
+ deps do
26
+ require 'net/ssh'
27
+ require 'net/ssh/multi'
28
+ require 'chef/search/query'
29
+ end
30
+
31
+ attr_writer :password
32
+
33
+ banner "knife ssh QUERY COMMAND (options)"
34
+
35
+ option :concurrency,
36
+ :short => "-C NUM",
37
+ :long => "--concurrency NUM",
38
+ :description => "The number of concurrent connections",
39
+ :default => nil,
40
+ :proc => lambda { |o| o.to_i }
41
+
42
+ option :attribute,
43
+ :short => "-a ATTR",
44
+ :long => "--attribute ATTR",
45
+ :description => "The attribute to use for opening the connection - default is fqdn",
46
+ :default => "fqdn"
47
+
48
+ option :manual,
49
+ :short => "-m",
50
+ :long => "--manual-list",
51
+ :boolean => true,
52
+ :description => "QUERY is a space separated list of servers",
53
+ :default => false
54
+
55
+ option :ssh_user,
56
+ :short => "-x USERNAME",
57
+ :long => "--ssh-user USERNAME",
58
+ :description => "The ssh username"
59
+
60
+ option :ssh_password,
61
+ :short => "-P PASSWORD",
62
+ :long => "--ssh-password PASSWORD",
63
+ :description => "The ssh password"
64
+
65
+ option :identity_file,
66
+ :short => "-i IDENTITY_FILE",
67
+ :long => "--identity-file IDENTITY_FILE",
68
+ :description => "The SSH identity file used for authentication"
69
+
70
+ option :no_host_key_verify,
71
+ :long => "--no-host-key-verify",
72
+ :description => "Disable host key verification",
73
+ :boolean => true,
74
+ :default => false
75
+
76
+ def session
77
+ ssh_error_handler = Proc.new do |server|
78
+ if config[:manual]
79
+ node_name = server.host
80
+ else
81
+ @action_nodes.each do |n|
82
+ node_name = n if format_for_display(n)[config[:attribute]] == server.host
83
+ end
84
+ end
85
+ ui.warn "Failed to connect to #{node_name} -- #{$!.class.name}: #{$!.message}"
86
+ $!.backtrace.each { |l| Chef::Log.debug(l) }
87
+ end
88
+
89
+ @session ||= Net::SSH::Multi.start(:concurrent_connections => config[:concurrency], :on_error => ssh_error_handler)
90
+ end
91
+
92
+ def configure_session
93
+ list = case config[:manual]
94
+ when true
95
+ @name_args[0].split(" ")
96
+ when false
97
+ r = Array.new
98
+ q = Chef::Search::Query.new
99
+ @action_nodes = q.search(:node, @name_args[0])[0]
100
+ @action_nodes.each do |item|
101
+ i = format_for_display(item)[config[:attribute]]
102
+ r.push(i) unless i.nil?
103
+ end
104
+ r
105
+ end
106
+ (ui.fatal("No nodes returned from search!"); exit 10) if list.length == 0
107
+ session_from_list(list)
108
+ end
109
+
110
+ def session_from_list(list)
111
+ list.each do |item|
112
+ Chef::Log.debug("Adding #{item}")
113
+
114
+ hostspec = config[:ssh_user] ? "#{config[:ssh_user]}@#{item}" : item
115
+ session_opts = {}
116
+ session_opts[:keys] = File.expand_path(config[:identity_file]) if config[:identity_file]
117
+ session_opts[:password] = config[:ssh_password] if config[:ssh_password]
118
+ session_opts[:logger] = Chef::Log.logger if Chef::Log.level == :debug
119
+
120
+ if config[:no_host_key_verify]
121
+ session_opts[:paranoid] = false
122
+ session_opts[:user_known_hosts_file] = "/dev/null"
123
+ end
124
+
125
+ session.use(hostspec, session_opts)
126
+
127
+ @longest = item.length if item.length > @longest
128
+ end
129
+
130
+ session
131
+ end
132
+
133
+ def fixup_sudo(command)
134
+ command.sub(/^sudo/, 'sudo -p \'knife sudo password: \'')
135
+ end
136
+
137
+ def print_data(host, data)
138
+ if data =~ /\n/
139
+ data.split(/\n/).each { |d| print_data(host, d) }
140
+ else
141
+ padding = @longest - host.length
142
+ print ui.color(host, :cyan)
143
+ padding.downto(0) { print " " }
144
+ puts data
145
+ end
146
+ end
147
+
148
+ def ssh_command(command, subsession=nil)
149
+ subsession ||= session
150
+ command = fixup_sudo(command)
151
+ subsession.open_channel do |ch|
152
+ ch.request_pty
153
+ ch.exec command do |ch, success|
154
+ raise ArgumentError, "Cannot execute #{command}" unless success
155
+ ch.on_data do |ichannel, data|
156
+ print_data(ichannel[:host], data)
157
+ if data =~ /^knife sudo password: /
158
+ ichannel.send_data("#{get_password}\n")
159
+ end
160
+ end
161
+ end
162
+ end
163
+ session.loop
164
+ end
165
+
166
+ def get_password
167
+ @password ||= ui.ask("Enter your password: ") { |q| q.echo = false }
168
+ end
169
+
170
+ # Present the prompt and read a single line from the console. It also
171
+ # detects ^D and returns "exit" in that case. Adds the input to the
172
+ # history, unless the input is empty. Loops repeatedly until a non-empty
173
+ # line is input.
174
+ def read_line
175
+ loop do
176
+ command = reader.readline("#{ui.color('knife-ssh>', :bold)} ", true)
177
+
178
+ if command.nil?
179
+ command = "exit"
180
+ puts(command)
181
+ else
182
+ command.strip!
183
+ end
184
+
185
+ unless command.empty?
186
+ return command
187
+ end
188
+ end
189
+ end
190
+
191
+ def reader
192
+ Readline
193
+ end
194
+
195
+ def interactive
196
+ puts "Connected to #{ui.list(session.servers_for.collect { |s| ui.color(s.host, :cyan) }, :inline, " and ")}"
197
+ puts
198
+ puts "To run a command on a list of servers, do:"
199
+ puts " on SERVER1 SERVER2 SERVER3; COMMAND"
200
+ puts " Example: on latte foamy; echo foobar"
201
+ puts
202
+ puts "To exit interactive mode, use 'quit!'"
203
+ puts
204
+ while 1
205
+ command = read_line
206
+ case command
207
+ when 'quit!'
208
+ puts 'Bye!'
209
+ break
210
+ when /^on (.+?); (.+)$/
211
+ raw_list = $1.split(" ")
212
+ server_list = Array.new
213
+ session.servers.each do |session_server|
214
+ server_list << session_server if raw_list.include?(session_server.host)
215
+ end
216
+ command = $2
217
+ ssh_command(command, session.on(*server_list))
218
+ else
219
+ ssh_command(command)
220
+ end
221
+ end
222
+ end
223
+
224
+ def screen
225
+ tf = Tempfile.new("knife-ssh-screen")
226
+ if File.exist? "#{ENV["HOME"]}/.screenrc"
227
+ tf.puts("source #{ENV["HOME"]}/.screenrc")
228
+ end
229
+ tf.puts("caption always '%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<'")
230
+ tf.puts("hardstatus alwayslastline 'knife ssh #{@name_args[0]}'")
231
+ window = 0
232
+ session.servers_for.each do |server|
233
+ tf.print("screen -t \"#{server.host}\" #{window} ssh ")
234
+ server.user ? tf.puts("#{server.user}@#{server.host}") : tf.puts(server.host)
235
+ window += 1
236
+ end
237
+ tf.close
238
+ exec("screen -c #{tf.path}")
239
+ end
240
+
241
+ def tmux
242
+ ssh_dest = lambda do |server|
243
+ prefix = server.user ? "#{server.user}@" : ""
244
+ "'ssh #{prefix}#{server.host}'"
245
+ end
246
+
247
+ new_window_cmds = lambda do
248
+ if session.servers_for.size > 1
249
+ [""] + session.servers_for[1..-1].map do |server|
250
+ "new-window -a -n '#{server.host}' #{ssh_dest.call(server)}"
251
+ end
252
+ else
253
+ []
254
+ end.join(" \\; ")
255
+ end
256
+
257
+ tmux_name = "'knife ssh #{@name_args[0]}'"
258
+ begin
259
+ server = session.servers_for.first
260
+ cmd = ["tmux new-session -d -s #{tmux_name}",
261
+ "-n '#{server.host}'", ssh_dest.call(server),
262
+ new_window_cmds.call].join(" ")
263
+ Chef::Mixin::Command.run_command(:command => cmd)
264
+ exec("tmux attach-session -t #{tmux_name}")
265
+ rescue Chef::Exceptions::Exec
266
+ end
267
+ end
268
+
269
+ def macterm
270
+ begin
271
+ require 'appscript'
272
+ rescue LoadError
273
+ STDERR.puts "you need the rb-appscript gem to use knife ssh macterm. `(sudo) gem install rb-appscript` to install"
274
+ raise
275
+ end
276
+
277
+ Appscript.app("/Applications/Utilities/Terminal.app").windows.first.activate
278
+ Appscript.app("System Events").application_processes["Terminal.app"].keystroke("n", :using=>:command_down)
279
+ term = Appscript.app('Terminal')
280
+ window = term.windows.first.get
281
+
282
+ (session.servers_for.size - 1).times do |i|
283
+ window.activate
284
+ Appscript.app("System Events").application_processes["Terminal.app"].keystroke("t", :using=>:command_down)
285
+ end
286
+
287
+ session.servers_for.each_with_index do |server, tab_number|
288
+ cmd = "unset PROMPT_COMMAND; echo -e \"\\033]0;#{server.host}\\007\"; ssh #{server.user ? "#{server.user}@#{server.host}" : server.host}"
289
+ Appscript.app('Terminal').do_script(cmd, :in => window.tabs[tab_number + 1].get)
290
+ end
291
+ end
292
+
293
+ def run
294
+
295
+ @longest = 0
296
+
297
+ configure_session
298
+
299
+ case @name_args[1]
300
+ when "interactive"
301
+ interactive
302
+ when "screen"
303
+ screen
304
+ when "tmux"
305
+ tmux
306
+ when "macterm"
307
+ macterm
308
+ else
309
+ ssh_command(@name_args[1..-1].join(" "))
310
+ end
311
+
312
+ session.close
313
+ end
314
+
315
+ end
316
+ end
317
+ end
318
+