naked-chef 0.9.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (363) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +172 -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 +82 -0
  15. data/distro/arch/etc/rc.d/chef-server-webui +82 -0
  16. data/distro/arch/etc/rc.d/chef-solr +82 -0
  17. data/distro/arch/etc/rc.d/chef-solr-indexer +82 -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 +127 -0
  63. data/lib/chef/application/agent.rb +18 -0
  64. data/lib/chef/application/client.rb +246 -0
  65. data/lib/chef/application/knife.rb +171 -0
  66. data/lib/chef/application/solo.rb +215 -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 +173 -0
  71. data/lib/chef/client.rb +304 -0
  72. data/lib/chef/config.rb +240 -0
  73. data/lib/chef/cookbook/cookbook_collection.rb +44 -0
  74. data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
  75. data/lib/chef/cookbook/file_vendor.rb +48 -0
  76. data/lib/chef/cookbook/metadata.rb +500 -0
  77. data/lib/chef/cookbook/metadata/version.rb +87 -0
  78. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  79. data/lib/chef/cookbook/syntax_check.rb +136 -0
  80. data/lib/chef/cookbook_loader.rb +227 -0
  81. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  82. data/lib/chef/cookbook_uploader.rb +103 -0
  83. data/lib/chef/cookbook_version.rb +934 -0
  84. data/lib/chef/couchdb.rb +239 -0
  85. data/lib/chef/daemon.rb +172 -0
  86. data/lib/chef/data_bag.rb +223 -0
  87. data/lib/chef/data_bag_item.rb +267 -0
  88. data/lib/chef/exceptions.rb +72 -0
  89. data/lib/chef/file_access_control.rb +140 -0
  90. data/lib/chef/file_cache.rb +218 -0
  91. data/lib/chef/handler.rb +206 -0
  92. data/lib/chef/handler/json_file.rb +58 -0
  93. data/lib/chef/index_queue.rb +29 -0
  94. data/lib/chef/index_queue/amqp_client.rb +113 -0
  95. data/lib/chef/index_queue/consumer.rb +76 -0
  96. data/lib/chef/index_queue/indexable.rb +75 -0
  97. data/lib/chef/json_compat.rb +52 -0
  98. data/lib/chef/knife.rb +522 -0
  99. data/lib/chef/knife/bluebox_images_list.rb +54 -0
  100. data/lib/chef/knife/bluebox_server_create.rb +157 -0
  101. data/lib/chef/knife/bluebox_server_delete.rb +63 -0
  102. data/lib/chef/knife/bluebox_server_list.rb +59 -0
  103. data/lib/chef/knife/bootstrap.rb +177 -0
  104. data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -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 +43 -0
  110. data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
  111. data/lib/chef/knife/client_bulk_delete.rb +40 -0
  112. data/lib/chef/knife/client_create.rb +70 -0
  113. data/lib/chef/knife/client_delete.rb +45 -0
  114. data/lib/chef/knife/client_edit.rb +45 -0
  115. data/lib/chef/knife/client_list.rb +40 -0
  116. data/lib/chef/knife/client_reregister.rb +56 -0
  117. data/lib/chef/knife/client_show.rb +50 -0
  118. data/lib/chef/knife/configure.rb +140 -0
  119. data/lib/chef/knife/configure_client.rb +52 -0
  120. data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
  121. data/lib/chef/knife/cookbook_create.rb +209 -0
  122. data/lib/chef/knife/cookbook_delete.rb +143 -0
  123. data/lib/chef/knife/cookbook_download.rb +130 -0
  124. data/lib/chef/knife/cookbook_list.rb +41 -0
  125. data/lib/chef/knife/cookbook_metadata.rb +82 -0
  126. data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
  127. data/lib/chef/knife/cookbook_show.rb +90 -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 +109 -0
  132. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  133. data/lib/chef/knife/cookbook_site_unshare.rb +53 -0
  134. data/lib/chef/knife/cookbook_site_vendor.rb +139 -0
  135. data/lib/chef/knife/cookbook_test.rb +82 -0
  136. data/lib/chef/knife/cookbook_upload.rb +95 -0
  137. data/lib/chef/knife/data_bag_create.rb +59 -0
  138. data/lib/chef/knife/data_bag_delete.rb +49 -0
  139. data/lib/chef/knife/data_bag_edit.rb +50 -0
  140. data/lib/chef/knife/data_bag_from_file.rb +45 -0
  141. data/lib/chef/knife/data_bag_list.rb +43 -0
  142. data/lib/chef/knife/data_bag_show.rb +41 -0
  143. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  144. data/lib/chef/knife/ec2_server_create.rb +218 -0
  145. data/lib/chef/knife/ec2_server_delete.rb +87 -0
  146. data/lib/chef/knife/ec2_server_list.rb +89 -0
  147. data/lib/chef/knife/exec.rb +52 -0
  148. data/lib/chef/knife/index_rebuild.rb +51 -0
  149. data/lib/chef/knife/node_bulk_delete.rb +43 -0
  150. data/lib/chef/knife/node_create.rb +47 -0
  151. data/lib/chef/knife/node_delete.rb +44 -0
  152. data/lib/chef/knife/node_edit.rb +44 -0
  153. data/lib/chef/knife/node_from_file.rb +42 -0
  154. data/lib/chef/knife/node_list.rb +41 -0
  155. data/lib/chef/knife/node_run_list_add.rb +64 -0
  156. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  157. data/lib/chef/knife/node_show.rb +54 -0
  158. data/lib/chef/knife/rackspace_server_create.rb +184 -0
  159. data/lib/chef/knife/rackspace_server_delete.rb +57 -0
  160. data/lib/chef/knife/rackspace_server_list.rb +59 -0
  161. data/lib/chef/knife/recipe_list.rb +32 -0
  162. data/lib/chef/knife/role_bulk_delete.rb +44 -0
  163. data/lib/chef/knife/role_create.rb +52 -0
  164. data/lib/chef/knife/role_delete.rb +44 -0
  165. data/lib/chef/knife/role_edit.rb +45 -0
  166. data/lib/chef/knife/role_from_file.rb +46 -0
  167. data/lib/chef/knife/role_list.rb +40 -0
  168. data/lib/chef/knife/role_show.rb +51 -0
  169. data/lib/chef/knife/search.rb +94 -0
  170. data/lib/chef/knife/slicehost_images_list.rb +53 -0
  171. data/lib/chef/knife/slicehost_server_create.rb +103 -0
  172. data/lib/chef/knife/slicehost_server_delete.rb +61 -0
  173. data/lib/chef/knife/slicehost_server_list.rb +64 -0
  174. data/lib/chef/knife/ssh.rb +338 -0
  175. data/lib/chef/knife/status.rb +87 -0
  176. data/lib/chef/knife/terremark_server_create.rb +152 -0
  177. data/lib/chef/knife/terremark_server_delete.rb +87 -0
  178. data/lib/chef/knife/terremark_server_list.rb +77 -0
  179. data/lib/chef/knife/windows_bootstrap.rb +154 -0
  180. data/lib/chef/log.rb +93 -0
  181. data/lib/chef/mixin/check_helper.rb +31 -0
  182. data/lib/chef/mixin/checksum.rb +32 -0
  183. data/lib/chef/mixin/command.rb +220 -0
  184. data/lib/chef/mixin/command/unix.rb +215 -0
  185. data/lib/chef/mixin/command/windows.rb +72 -0
  186. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  187. data/lib/chef/mixin/create_path.rb +56 -0
  188. data/lib/chef/mixin/deep_merge.rb +225 -0
  189. data/lib/chef/mixin/deprecation.rb +65 -0
  190. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  191. data/lib/chef/mixin/from_file.rb +50 -0
  192. data/lib/chef/mixin/language.rb +165 -0
  193. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  194. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  195. data/lib/chef/mixin/params_validate.rb +225 -0
  196. data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
  197. data/lib/chef/mixin/shell_out.rb +38 -0
  198. data/lib/chef/mixin/template.rb +95 -0
  199. data/lib/chef/mixin/xml_escape.rb +140 -0
  200. data/lib/chef/mixins.rb +16 -0
  201. data/lib/chef/monkey_patches/dir.rb +36 -0
  202. data/lib/chef/monkey_patches/numeric.rb +7 -0
  203. data/lib/chef/monkey_patches/regexp.rb +34 -0
  204. data/lib/chef/monkey_patches/string.rb +28 -0
  205. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  206. data/lib/chef/node.rb +599 -0
  207. data/lib/chef/node/attribute.rb +487 -0
  208. data/lib/chef/openid_registration.rb +187 -0
  209. data/lib/chef/platform.rb +382 -0
  210. data/lib/chef/provider.rb +124 -0
  211. data/lib/chef/provider/breakpoint.rb +36 -0
  212. data/lib/chef/provider/cookbook_file.rb +100 -0
  213. data/lib/chef/provider/cron.rb +186 -0
  214. data/lib/chef/provider/cron/solaris.rb +195 -0
  215. data/lib/chef/provider/deploy.rb +320 -0
  216. data/lib/chef/provider/deploy/revision.rb +77 -0
  217. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  218. data/lib/chef/provider/directory.rb +72 -0
  219. data/lib/chef/provider/env.rb +152 -0
  220. data/lib/chef/provider/env/windows.rb +75 -0
  221. data/lib/chef/provider/erl_call.rb +100 -0
  222. data/lib/chef/provider/execute.rb +58 -0
  223. data/lib/chef/provider/file.rb +213 -0
  224. data/lib/chef/provider/git.rb +235 -0
  225. data/lib/chef/provider/group.rb +133 -0
  226. data/lib/chef/provider/group/dscl.rb +121 -0
  227. data/lib/chef/provider/group/gpasswd.rb +53 -0
  228. data/lib/chef/provider/group/groupadd.rb +78 -0
  229. data/lib/chef/provider/group/pw.rb +84 -0
  230. data/lib/chef/provider/group/usermod.rb +57 -0
  231. data/lib/chef/provider/group/windows.rb +79 -0
  232. data/lib/chef/provider/http_request.rb +122 -0
  233. data/lib/chef/provider/ifconfig.rb +132 -0
  234. data/lib/chef/provider/link.rb +161 -0
  235. data/lib/chef/provider/log.rb +54 -0
  236. data/lib/chef/provider/mdadm.rb +91 -0
  237. data/lib/chef/provider/mount.rb +117 -0
  238. data/lib/chef/provider/mount/mount.rb +232 -0
  239. data/lib/chef/provider/mount/windows.rb +80 -0
  240. data/lib/chef/provider/ohai.rb +41 -0
  241. data/lib/chef/provider/package.rb +160 -0
  242. data/lib/chef/provider/package/apt.rb +110 -0
  243. data/lib/chef/provider/package/dpkg.rb +112 -0
  244. data/lib/chef/provider/package/easy_install.rb +136 -0
  245. data/lib/chef/provider/package/freebsd.rb +123 -0
  246. data/lib/chef/provider/package/macports.rb +105 -0
  247. data/lib/chef/provider/package/pacman.rb +101 -0
  248. data/lib/chef/provider/package/portage.rb +124 -0
  249. data/lib/chef/provider/package/rpm.rb +101 -0
  250. data/lib/chef/provider/package/rubygems.rb +462 -0
  251. data/lib/chef/provider/package/solaris.rb +127 -0
  252. data/lib/chef/provider/package/yum-dump.py +128 -0
  253. data/lib/chef/provider/package/yum.rb +261 -0
  254. data/lib/chef/provider/package/zypper.rb +133 -0
  255. data/lib/chef/provider/remote_directory.rb +140 -0
  256. data/lib/chef/provider/remote_file.rb +120 -0
  257. data/lib/chef/provider/route.rb +195 -0
  258. data/lib/chef/provider/ruby_block.rb +33 -0
  259. data/lib/chef/provider/script.rb +55 -0
  260. data/lib/chef/provider/service.rb +128 -0
  261. data/lib/chef/provider/service/arch.rb +109 -0
  262. data/lib/chef/provider/service/debian.rb +130 -0
  263. data/lib/chef/provider/service/freebsd.rb +156 -0
  264. data/lib/chef/provider/service/gentoo.rb +54 -0
  265. data/lib/chef/provider/service/init.rb +71 -0
  266. data/lib/chef/provider/service/insserv.rb +52 -0
  267. data/lib/chef/provider/service/redhat.rb +60 -0
  268. data/lib/chef/provider/service/simple.rb +118 -0
  269. data/lib/chef/provider/service/solaris.rb +85 -0
  270. data/lib/chef/provider/service/upstart.rb +192 -0
  271. data/lib/chef/provider/service/windows.rb +146 -0
  272. data/lib/chef/provider/subversion.rb +194 -0
  273. data/lib/chef/provider/template.rb +105 -0
  274. data/lib/chef/provider/user.rb +187 -0
  275. data/lib/chef/provider/user/dscl.rb +280 -0
  276. data/lib/chef/provider/user/pw.rb +113 -0
  277. data/lib/chef/provider/user/useradd.rb +137 -0
  278. data/lib/chef/provider/user/windows.rb +124 -0
  279. data/lib/chef/providers.rb +92 -0
  280. data/lib/chef/recipe.rb +130 -0
  281. data/lib/chef/resource.rb +543 -0
  282. data/lib/chef/resource/apt_package.rb +34 -0
  283. data/lib/chef/resource/bash.rb +33 -0
  284. data/lib/chef/resource/breakpoint.rb +35 -0
  285. data/lib/chef/resource/cookbook_file.rb +45 -0
  286. data/lib/chef/resource/cron.rb +188 -0
  287. data/lib/chef/resource/csh.rb +33 -0
  288. data/lib/chef/resource/deploy.rb +371 -0
  289. data/lib/chef/resource/deploy_revision.rb +35 -0
  290. data/lib/chef/resource/directory.rb +76 -0
  291. data/lib/chef/resource/dpkg_package.rb +34 -0
  292. data/lib/chef/resource/easy_install_package.rb +57 -0
  293. data/lib/chef/resource/env.rb +58 -0
  294. data/lib/chef/resource/erl_call.rb +83 -0
  295. data/lib/chef/resource/execute.rb +127 -0
  296. data/lib/chef/resource/file.rb +99 -0
  297. data/lib/chef/resource/freebsd_package.rb +35 -0
  298. data/lib/chef/resource/gem_package.rb +49 -0
  299. data/lib/chef/resource/git.rb +36 -0
  300. data/lib/chef/resource/group.rb +70 -0
  301. data/lib/chef/resource/http_request.rb +61 -0
  302. data/lib/chef/resource/ifconfig.rb +134 -0
  303. data/lib/chef/resource/link.rb +78 -0
  304. data/lib/chef/resource/log.rb +62 -0
  305. data/lib/chef/resource/macports_package.rb +29 -0
  306. data/lib/chef/resource/mdadm.rb +82 -0
  307. data/lib/chef/resource/mount.rb +135 -0
  308. data/lib/chef/resource/ohai.rb +40 -0
  309. data/lib/chef/resource/package.rb +80 -0
  310. data/lib/chef/resource/pacman_package.rb +33 -0
  311. data/lib/chef/resource/perl.rb +33 -0
  312. data/lib/chef/resource/portage_package.rb +33 -0
  313. data/lib/chef/resource/python.rb +33 -0
  314. data/lib/chef/resource/remote_directory.rb +109 -0
  315. data/lib/chef/resource/remote_file.rb +83 -0
  316. data/lib/chef/resource/route.rb +135 -0
  317. data/lib/chef/resource/rpm_package.rb +34 -0
  318. data/lib/chef/resource/ruby.rb +33 -0
  319. data/lib/chef/resource/ruby_block.rb +40 -0
  320. data/lib/chef/resource/scm.rb +146 -0
  321. data/lib/chef/resource/script.rb +60 -0
  322. data/lib/chef/resource/service.rb +160 -0
  323. data/lib/chef/resource/solaris_package.rb +37 -0
  324. data/lib/chef/resource/subversion.rb +36 -0
  325. data/lib/chef/resource/template.rb +69 -0
  326. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  327. data/lib/chef/resource/user.rb +130 -0
  328. data/lib/chef/resource/yum_package.rb +44 -0
  329. data/lib/chef/resource_collection.rb +217 -0
  330. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  331. data/lib/chef/resource_definition.rb +67 -0
  332. data/lib/chef/resource_definition_list.rb +38 -0
  333. data/lib/chef/resources.rb +64 -0
  334. data/lib/chef/rest.rb +395 -0
  335. data/lib/chef/rest/auth_credentials.rb +78 -0
  336. data/lib/chef/rest/cookie_jar.rb +31 -0
  337. data/lib/chef/rest/rest_request.rb +188 -0
  338. data/lib/chef/role.rb +287 -0
  339. data/lib/chef/run_context.rb +110 -0
  340. data/lib/chef/run_list.rb +150 -0
  341. data/lib/chef/run_list/run_list_expansion.rb +172 -0
  342. data/lib/chef/run_list/run_list_item.rb +78 -0
  343. data/lib/chef/run_status.rb +121 -0
  344. data/lib/chef/runner.rb +107 -0
  345. data/lib/chef/sandbox.rb +153 -0
  346. data/lib/chef/search/query.rb +60 -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 +279 -0
  352. data/lib/chef/shell_out.rb +418 -0
  353. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  354. data/lib/chef/tasks/chef_repo.rake +256 -0
  355. data/lib/chef/util/file_edit.rb +122 -0
  356. data/lib/chef/util/windows.rb +56 -0
  357. data/lib/chef/util/windows/net_group.rb +101 -0
  358. data/lib/chef/util/windows/net_use.rb +121 -0
  359. data/lib/chef/util/windows/net_user.rb +198 -0
  360. data/lib/chef/util/windows/volume.rb +59 -0
  361. data/lib/chef/version.rb +21 -0
  362. data/lib/chef/webui_user.rb +231 -0
  363. metadata +606 -0
@@ -0,0 +1,209 @@
1
+ #
2
+ # Author:: Nuo Yan (<nuo@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
+ require 'chef/json_compat'
21
+ require 'uri'
22
+ require 'chef/mixin/shell_out'
23
+
24
+ class Chef
25
+ class Knife
26
+ class CookbookCreate < Knife
27
+ include Chef::Mixin::ShellOut
28
+
29
+ banner "knife cookbook create COOKBOOK (options)"
30
+
31
+ option :cookbook_path,
32
+ :short => "-o PATH",
33
+ :long => "--cookbook-path PATH",
34
+ :description => "The directory where the cookbook will be created"
35
+
36
+ option :readme_format,
37
+ :short => "-r FORMAT",
38
+ :long => "--readme-format FORMAT",
39
+ :description => "Format of the README file, supported formats are 'md' (markdown) and 'rdoc' (rdoc)",
40
+ :default => "rdoc"
41
+
42
+ option :cookbook_license,
43
+ :short => "-I LICENSE",
44
+ :long => "--license LICENSE",
45
+ :description => "License for cookbook, apachev2 or none"
46
+
47
+ option :cookbook_copyright,
48
+ :short => "-C COPYRIGHT",
49
+ :long => "--copyright COPYRIGHT",
50
+ :description => "Name of Copyright holder"
51
+
52
+ option :cookbook_email,
53
+ :short => "-E EMAIL",
54
+ :long => "--email EMAIL",
55
+ :description => "Email address of cookbook maintainer"
56
+
57
+ def run
58
+ self.config = Chef::Config.merge!(config)
59
+ if @name_args.length < 1
60
+ show_usage
61
+ Chef::Log.fatal("You must specify a cookbook name")
62
+ exit 1
63
+ end
64
+
65
+ if default_cookbook_path_empty? && parameter_empty?(config[:cookbook_path])
66
+ raise ArgumentError, "Default cookbook_path is not specified in the knife.rb config file, and a value to -o is not provided. Nowhere to write the new cookbook to."
67
+ end
68
+
69
+ cookbook_path = Array(config[:cookbook_path]).first
70
+ cookbook_name = @name_args.first
71
+ copyright = config[:cookbook_copyright] || "YOUR_COMPANY_NAME"
72
+ email = config[:cookbook_email] || "YOUR_EMAIL"
73
+ license = ((config[:cookbook_license] != "false") && config[:cookbook_license]) || "none"
74
+ create_cookbook(cookbook_path,cookbook_name, copyright, license)
75
+ create_readme(cookbook_path,cookbook_name)
76
+ create_metadata(cookbook_path,cookbook_name, copyright, email, license)
77
+ end
78
+
79
+ def create_cookbook(dir, cookbook_name, copyright, license)
80
+ msg("** Creating cookbook #{cookbook_name}")
81
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "attributes")}"
82
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "recipes")}"
83
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "definitions")}"
84
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "libraries")}"
85
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "resources")}"
86
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "providers")}"
87
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "files", "default")}"
88
+ shell_out "mkdir -p #{File.join(dir, cookbook_name, "templates", "default")}"
89
+ unless File.exists?(File.join(dir, cookbook_name, "recipes", "default.rb"))
90
+ open(File.join(dir, cookbook_name, "recipes", "default.rb"), "w") do |file|
91
+ file.puts <<-EOH
92
+ #
93
+ # Cookbook Name:: #{cookbook_name}
94
+ # Recipe:: default
95
+ #
96
+ # Copyright #{Time.now.year}, #{copyright}
97
+ #
98
+ EOH
99
+ case license
100
+ when "apachev2"
101
+ file.puts <<-EOH
102
+ # Licensed under the Apache License, Version 2.0 (the "License");
103
+ # you may not use this file except in compliance with the License.
104
+ # You may obtain a copy of the License at
105
+ #
106
+ # http://www.apache.org/licenses/LICENSE-2.0
107
+ #
108
+ # Unless required by applicable law or agreed to in writing, software
109
+ # distributed under the License is distributed on an "AS IS" BASIS,
110
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
111
+ # See the License for the specific language governing permissions and
112
+ # limitations under the License.
113
+ #
114
+ EOH
115
+ when "none"
116
+ file.puts <<-EOH
117
+ # All rights reserved - Do Not Redistribute
118
+ #
119
+ EOH
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ def create_readme(dir, cookbook_name)
126
+ msg("** Creating README for cookbook: #{cookbook_name}")
127
+ unless File.exists?(File.join(dir, cookbook_name, "README.#{config[:readme_format]}"))
128
+ open(File.join(dir, cookbook_name, "README.#{config[:readme_format]}"), "w") do |file|
129
+ case config[:readme_format]
130
+ when "rdoc"
131
+ file.puts <<-EOH
132
+ = DESCRIPTION:
133
+
134
+ = REQUIREMENTS:
135
+
136
+ = ATTRIBUTES:
137
+
138
+ = USAGE:
139
+
140
+ EOH
141
+ when "md","mkd","txt"
142
+ file.puts <<-EOH
143
+ Description
144
+ ===========
145
+
146
+ Requirements
147
+ ============
148
+
149
+ Attributes
150
+ ==========
151
+
152
+ Usage
153
+ =====
154
+
155
+ EOH
156
+ else
157
+ file.puts <<-EOH
158
+ Description
159
+
160
+ Requirements
161
+
162
+ Attributes
163
+
164
+ Usage
165
+
166
+ EOH
167
+ end
168
+ end
169
+ end
170
+ end
171
+
172
+ def create_metadata(dir, cookbook_name, copyright, email, license)
173
+ msg("** Creating metadata for cookbook: #{cookbook_name}")
174
+
175
+ license_name = case license
176
+ when "apachev2"
177
+ "Apache 2.0"
178
+ when "none"
179
+ "All rights reserved"
180
+ end
181
+
182
+ unless File.exists?(File.join(dir, cookbook_name, "metadata.rb"))
183
+ open(File.join(dir, cookbook_name, "metadata.rb"), "w") do |file|
184
+ if File.exists?(File.join(dir, cookbook_name, "README.#{config[:readme_format]}"))
185
+ long_description = "long_description IO.read(File.join(File.dirname(__FILE__), 'README.#{config[:readme_format]}'))"
186
+ end
187
+ file.puts <<-EOH
188
+ maintainer "#{copyright}"
189
+ maintainer_email "#{email}"
190
+ license "#{license_name}"
191
+ description "Installs/Configures #{cookbook_name}"
192
+ #{long_description}
193
+ version "0.0.1"
194
+ EOH
195
+ end
196
+ end
197
+ end
198
+
199
+ private
200
+ def default_cookbook_path_empty?
201
+ Chef::Config[:cookbook_path].nil? || Chef::Config[:cookbook_path].empty?
202
+ end
203
+
204
+ def parameter_empty?(parameter)
205
+ parameter.nil? || parameter.empty?
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,143 @@
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 CookbookDelete < Knife
24
+
25
+ option :all, :short => '-a', :long => '--all', :boolean => true, :description => 'delete all versions'
26
+
27
+ option :purge, :short => '-p', :long => '--purge', :boolean => true, :description => 'Permanently remove files from backing data store'
28
+
29
+ banner "knife cookbook delete COOKBOOK VERSION (options)"
30
+
31
+ def run
32
+ confirm("Files that are common to multiple cookbooks are shared, so purging the files may disable other cookbooks. Are you sure you want to purge files instead of just deleting the cookbook") if config[:purge]
33
+ @cookbook_name, @version = name_args
34
+ if @cookbook_name && @version
35
+ delete_explicit_version
36
+ elsif @cookbook_name && config[:all]
37
+ delete_all_versions
38
+ elsif @cookbook_name && @version.nil?
39
+ delete_without_explicit_version
40
+ elsif @cookbook_name.nil?
41
+ show_usage
42
+ Chef::Log.fatal("You must provide the name of the cookbook to delete")
43
+ exit(1)
44
+ end
45
+ end
46
+
47
+ def delete_explicit_version
48
+ delete_object(Chef::CookbookVersion, "#{@cookbook_name} version #{@version}", "cookbook") do
49
+ delete_request("cookbooks/#{@cookbook_name}/#{@version}")
50
+ end
51
+ end
52
+
53
+ def delete_all_versions
54
+ confirm("Do you really want to delete all versions of #{@cookbook_name}")
55
+ delete_all_without_confirmation
56
+ end
57
+
58
+ def delete_all_without_confirmation
59
+ # look up the available versions again just in case the user
60
+ # got to the list of versions to delete and selected 'all'
61
+ # and also a specific version
62
+ @available_versions = nil
63
+ Array(available_versions).each do |version|
64
+ delete_version_without_confirmation(version)
65
+ end
66
+ end
67
+
68
+ def delete_without_explicit_version
69
+ if available_versions.nil?
70
+ # we already logged an error or 2 about it, so just bail
71
+ exit(1)
72
+ elsif available_versions.size == 1
73
+ @version = available_versions.first
74
+ delete_explicit_version
75
+ else
76
+ versions_to_delete = ask_which_versions_to_delete
77
+ delete_versions_without_confirmation(versions_to_delete)
78
+ end
79
+ end
80
+
81
+ def available_versions
82
+ @available_versions ||= rest.get_rest("cookbooks/#{@cookbook_name}").values.flatten
83
+ rescue Net::HTTPServerException => e
84
+ if e.to_s =~ /^404/
85
+ Chef::Log.error("Cannot find a cookbook named #{@cookbook_name} to delete")
86
+ nil
87
+ else
88
+ raise
89
+ end
90
+ end
91
+
92
+ def ask_which_versions_to_delete
93
+ question = "Which version(s) do you want to delete?\n"
94
+ valid_responses = {}
95
+ available_versions.each_with_index do |version, index|
96
+ valid_responses[(index + 1).to_s] = version
97
+ question << "#{index + 1}. #{@cookbook_name} #{version}\n"
98
+ end
99
+ valid_responses[(available_versions.size + 1).to_s] = :all
100
+ question << "#{available_versions.size + 1}. All versions\n\n"
101
+ responses = ask_question(question).split(',').map { |response| response.strip }
102
+
103
+ if responses.empty?
104
+ Chef::Log.error("No versions specified, exiting")
105
+ exit(1)
106
+ end
107
+ versions = responses.map do |response|
108
+ if version = valid_responses[response]
109
+ version
110
+ else
111
+ Chef::Log.error("#{response} is not a valid choice, skipping it")
112
+ end
113
+ end
114
+ versions.compact
115
+ end
116
+
117
+ def delete_version_without_confirmation(version)
118
+ object = delete_request("cookbooks/#{@cookbook_name}/#{version}")
119
+ output(format_for_display(object)) if config[:print_after]
120
+ Chef::Log.info("Deleted cookbook[#{@cookbook_name}][#{version}]")
121
+ end
122
+
123
+ def delete_versions_without_confirmation(versions)
124
+ versions.each do |version|
125
+ if version == :all
126
+ delete_all_without_confirmation
127
+ break
128
+ else
129
+ delete_version_without_confirmation(version)
130
+ end
131
+ end
132
+ end
133
+
134
+ private
135
+
136
+ def delete_request(path)
137
+ path += "?purge=true" if config[:purge]
138
+ rest.delete_rest(path)
139
+ end
140
+
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,130 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Copyright:: Copyright (c) 2009, 2010 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/knife'
21
+
22
+ class Chef
23
+ class Knife
24
+ class CookbookDownload < Knife
25
+
26
+ banner "knife cookbook download COOKBOOK [VERSION] (options)"
27
+
28
+ option :latest,
29
+ :short => "-N",
30
+ :long => "--latest",
31
+ :description => "The version of the cookbook to download",
32
+ :boolean => true
33
+
34
+ option :download_directory,
35
+ :short => "-d DOWNLOAD_DIRECTORY",
36
+ :long => "--dir DOWNLOAD_DIRECTORY",
37
+ :description => "The directory to download the cookbook into",
38
+ :default => Dir.pwd
39
+
40
+ option :force,
41
+ :short => "-f",
42
+ :long => "--force",
43
+ :description => "Force download over the download directory if it exists"
44
+
45
+ # TODO: tim/cw: 5-23-2010: need to implement knife-side
46
+ # specificity for downloads - need to implement --platform and
47
+ # --fqdn here
48
+ def run
49
+ @cookbook_name, @version = @name_args
50
+
51
+ if @cookbook_name.nil?
52
+ show_usage
53
+ Chef::Log.fatal("You must specify a cookbook name")
54
+ exit 1
55
+ elsif @version.nil?
56
+ determine_version
57
+ end
58
+
59
+ Chef::Log.info("Downloading #{@cookbook_name} cookbook version #{@version}")
60
+
61
+ cookbook = rest.get_rest("cookbooks/#{@cookbook_name}/#{@version}")
62
+ manifest = cookbook.manifest
63
+
64
+ basedir = File.join(config[:download_directory], "#{@cookbook_name}-#{cookbook.version}")
65
+ if File.exists?(basedir)
66
+ if config[:force]
67
+ Chef::Log.debug("Deleting #{basedir}")
68
+ FileUtils.rm_rf(basedir)
69
+ else
70
+ Chef::Log.fatal("Directory #{basedir} exists, use --force to overwrite")
71
+ exit
72
+ end
73
+ end
74
+
75
+ Chef::CookbookVersion::COOKBOOK_SEGMENTS.each do |segment|
76
+ next unless manifest.has_key?(segment)
77
+ Chef::Log.info("Downloading #{segment}")
78
+ manifest[segment].each do |segment_file|
79
+ dest = File.join(basedir, segment_file['path'].gsub('/', File::SEPARATOR))
80
+ Chef::Log.debug("Downloading #{segment_file['path']} to #{dest}")
81
+ FileUtils.mkdir_p(File.dirname(dest))
82
+ rest.sign_on_redirect = false
83
+ tempfile = rest.get_rest(segment_file['url'], true)
84
+ FileUtils.mv(tempfile.path, dest)
85
+ end
86
+ end
87
+ Chef::Log.info("Cookbook downloaded to #{basedir}")
88
+ end
89
+
90
+ def determine_version
91
+ if available_versions.size == 1
92
+ @version = available_versions.first
93
+ elsif config[:latest]
94
+ @version = available_versions.map { |v| Chef::Cookbook::Metadata::Version.new(v) }.sort.last
95
+ else
96
+ ask_which_version
97
+ end
98
+ end
99
+
100
+ def available_versions
101
+ @available_versions ||= begin
102
+ versions = Chef::CookbookVersion.available_versions(@cookbook_name).map do |version|
103
+ Chef::Cookbook::Metadata::Version.new(version)
104
+ end
105
+ versions.sort!
106
+ versions
107
+ end
108
+ #pp :available_versions => @available_versions
109
+ @available_versions
110
+ end
111
+
112
+ def ask_which_version
113
+ question = "Which version do you want to download?\n"
114
+ valid_responses = {}
115
+ available_versions.each_with_index do |version, index|
116
+ valid_responses[(index + 1).to_s] = version
117
+ question << "#{index + 1}. #{@cookbook_name} #{version}\n"
118
+ end
119
+ question += "\n"
120
+ response = ask_question(question).strip
121
+
122
+ unless @version = valid_responses[response]
123
+ Chef::Log.error("'#{response}' is not a valid value.")
124
+ exit(1)
125
+ end
126
+ end
127
+
128
+ end
129
+ end
130
+ end