mbailey-chef 0.9.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (345) 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/common/man/man1/chef-indexer.1 +42 -0
  9. data/distro/common/man/man1/chef-server-webui.1 +106 -0
  10. data/distro/common/man/man1/chef-server.1 +107 -0
  11. data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
  12. data/distro/common/man/man1/chef-solr.1 +55 -0
  13. data/distro/common/man/man8/chef-client.8 +63 -0
  14. data/distro/common/man/man8/chef-solo.8 +57 -0
  15. data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
  16. data/distro/common/man/man8/knife.8 +1349 -0
  17. data/distro/common/man/man8/shef.8 +45 -0
  18. data/distro/common/markdown/README +3 -0
  19. data/distro/common/markdown/knife.mkd +832 -0
  20. data/distro/debian/etc/default/chef-client +4 -0
  21. data/distro/debian/etc/default/chef-server +9 -0
  22. data/distro/debian/etc/default/chef-server-webui +9 -0
  23. data/distro/debian/etc/default/chef-solr +7 -0
  24. data/distro/debian/etc/default/chef-solr-indexer +7 -0
  25. data/distro/debian/etc/init/chef-client.conf +17 -0
  26. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  27. data/distro/debian/etc/init/chef-server.conf +17 -0
  28. data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
  29. data/distro/debian/etc/init/chef-solr.conf +17 -0
  30. data/distro/debian/etc/init.d/chef-client +175 -0
  31. data/distro/debian/etc/init.d/chef-server +122 -0
  32. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  33. data/distro/debian/etc/init.d/chef-solr +177 -0
  34. data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
  35. data/distro/redhat/etc/init.d/chef-client +106 -0
  36. data/distro/redhat/etc/init.d/chef-server +112 -0
  37. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  38. data/distro/redhat/etc/init.d/chef-solr +104 -0
  39. data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
  40. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  41. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  42. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  43. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  44. data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
  45. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  46. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  47. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  48. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  49. data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
  50. data/lib/chef/api_client.rb +264 -0
  51. data/lib/chef/application/agent.rb +18 -0
  52. data/lib/chef/application/client.rb +246 -0
  53. data/lib/chef/application/knife.rb +171 -0
  54. data/lib/chef/application/solo.rb +215 -0
  55. data/lib/chef/application.rb +127 -0
  56. data/lib/chef/applications.rb +4 -0
  57. data/lib/chef/certificate.rb +194 -0
  58. data/lib/chef/checksum.rb +182 -0
  59. data/lib/chef/checksum_cache.rb +173 -0
  60. data/lib/chef/client.rb +304 -0
  61. data/lib/chef/config.rb +240 -0
  62. data/lib/chef/cookbook/cookbook_collection.rb +44 -0
  63. data/lib/chef/cookbook/file_system_file_vendor.rb +54 -0
  64. data/lib/chef/cookbook/file_vendor.rb +48 -0
  65. data/lib/chef/cookbook/metadata/version.rb +87 -0
  66. data/lib/chef/cookbook/metadata.rb +500 -0
  67. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  68. data/lib/chef/cookbook/syntax_check.rb +136 -0
  69. data/lib/chef/cookbook_loader.rb +227 -0
  70. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  71. data/lib/chef/cookbook_uploader.rb +103 -0
  72. data/lib/chef/cookbook_version.rb +930 -0
  73. data/lib/chef/couchdb.rb +239 -0
  74. data/lib/chef/daemon.rb +172 -0
  75. data/lib/chef/data_bag.rb +215 -0
  76. data/lib/chef/data_bag_item.rb +228 -0
  77. data/lib/chef/exceptions.rb +66 -0
  78. data/lib/chef/file_access_control.rb +140 -0
  79. data/lib/chef/file_cache.rb +218 -0
  80. data/lib/chef/handler/json_file.rb +58 -0
  81. data/lib/chef/handler.rb +206 -0
  82. data/lib/chef/index_queue/amqp_client.rb +113 -0
  83. data/lib/chef/index_queue/consumer.rb +76 -0
  84. data/lib/chef/index_queue/indexable.rb +76 -0
  85. data/lib/chef/index_queue.rb +29 -0
  86. data/lib/chef/knife/bootstrap/archlinux-gems.erb +44 -0
  87. data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
  88. data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
  89. data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
  90. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
  91. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +43 -0
  92. data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
  93. data/lib/chef/knife/bootstrap.rb +181 -0
  94. data/lib/chef/knife/client_bulk_delete.rb +40 -0
  95. data/lib/chef/knife/client_create.rb +70 -0
  96. data/lib/chef/knife/client_delete.rb +45 -0
  97. data/lib/chef/knife/client_edit.rb +45 -0
  98. data/lib/chef/knife/client_list.rb +40 -0
  99. data/lib/chef/knife/client_reregister.rb +56 -0
  100. data/lib/chef/knife/client_show.rb +50 -0
  101. data/lib/chef/knife/configure.rb +140 -0
  102. data/lib/chef/knife/configure_client.rb +52 -0
  103. data/lib/chef/knife/cookbook_bulk_delete.rb +58 -0
  104. data/lib/chef/knife/cookbook_create.rb +209 -0
  105. data/lib/chef/knife/cookbook_delete.rb +143 -0
  106. data/lib/chef/knife/cookbook_download.rb +130 -0
  107. data/lib/chef/knife/cookbook_list.rb +41 -0
  108. data/lib/chef/knife/cookbook_metadata.rb +82 -0
  109. data/lib/chef/knife/cookbook_metadata_from_file.rb +40 -0
  110. data/lib/chef/knife/cookbook_show.rb +98 -0
  111. data/lib/chef/knife/cookbook_site_download.rb +58 -0
  112. data/lib/chef/knife/cookbook_site_list.rb +56 -0
  113. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  114. data/lib/chef/knife/cookbook_site_share.rb +109 -0
  115. data/lib/chef/knife/cookbook_site_show.rb +57 -0
  116. data/lib/chef/knife/cookbook_site_unshare.rb +52 -0
  117. data/lib/chef/knife/cookbook_site_vendor.rb +133 -0
  118. data/lib/chef/knife/cookbook_test.rb +82 -0
  119. data/lib/chef/knife/cookbook_upload.rb +95 -0
  120. data/lib/chef/knife/data_bag_create.rb +59 -0
  121. data/lib/chef/knife/data_bag_delete.rb +48 -0
  122. data/lib/chef/knife/data_bag_edit.rb +50 -0
  123. data/lib/chef/knife/data_bag_from_file.rb +44 -0
  124. data/lib/chef/knife/data_bag_list.rb +43 -0
  125. data/lib/chef/knife/data_bag_show.rb +41 -0
  126. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  127. data/lib/chef/knife/ec2_server_create.rb +216 -0
  128. data/lib/chef/knife/ec2_server_delete.rb +90 -0
  129. data/lib/chef/knife/ec2_server_list.rb +88 -0
  130. data/lib/chef/knife/exec.rb +52 -0
  131. data/lib/chef/knife/index_rebuild.rb +51 -0
  132. data/lib/chef/knife/node_bulk_delete.rb +43 -0
  133. data/lib/chef/knife/node_create.rb +47 -0
  134. data/lib/chef/knife/node_delete.rb +44 -0
  135. data/lib/chef/knife/node_edit.rb +44 -0
  136. data/lib/chef/knife/node_from_file.rb +42 -0
  137. data/lib/chef/knife/node_list.rb +41 -0
  138. data/lib/chef/knife/node_run_list_add.rb +64 -0
  139. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  140. data/lib/chef/knife/node_show.rb +54 -0
  141. data/lib/chef/knife/rackspace_server_create.rb +156 -0
  142. data/lib/chef/knife/rackspace_server_delete.rb +57 -0
  143. data/lib/chef/knife/rackspace_server_list.rb +59 -0
  144. data/lib/chef/knife/recipe_list.rb +32 -0
  145. data/lib/chef/knife/role_bulk_delete.rb +44 -0
  146. data/lib/chef/knife/role_create.rb +52 -0
  147. data/lib/chef/knife/role_delete.rb +44 -0
  148. data/lib/chef/knife/role_edit.rb +45 -0
  149. data/lib/chef/knife/role_from_file.rb +46 -0
  150. data/lib/chef/knife/role_list.rb +40 -0
  151. data/lib/chef/knife/role_show.rb +51 -0
  152. data/lib/chef/knife/search.rb +94 -0
  153. data/lib/chef/knife/slicehost_images_list.rb +53 -0
  154. data/lib/chef/knife/slicehost_server_create.rb +103 -0
  155. data/lib/chef/knife/slicehost_server_delete.rb +61 -0
  156. data/lib/chef/knife/slicehost_server_list.rb +64 -0
  157. data/lib/chef/knife/ssh.rb +328 -0
  158. data/lib/chef/knife/status.rb +87 -0
  159. data/lib/chef/knife/terremark_server_create.rb +152 -0
  160. data/lib/chef/knife/terremark_server_delete.rb +87 -0
  161. data/lib/chef/knife/terremark_server_list.rb +77 -0
  162. data/lib/chef/knife/windows_bootstrap.rb +154 -0
  163. data/lib/chef/knife.rb +522 -0
  164. data/lib/chef/log.rb +61 -0
  165. data/lib/chef/mixin/check_helper.rb +31 -0
  166. data/lib/chef/mixin/checksum.rb +32 -0
  167. data/lib/chef/mixin/command/unix.rb +215 -0
  168. data/lib/chef/mixin/command/windows.rb +72 -0
  169. data/lib/chef/mixin/command.rb +220 -0
  170. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  171. data/lib/chef/mixin/create_path.rb +56 -0
  172. data/lib/chef/mixin/deep_merge.rb +225 -0
  173. data/lib/chef/mixin/deprecation.rb +65 -0
  174. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  175. data/lib/chef/mixin/from_file.rb +50 -0
  176. data/lib/chef/mixin/language.rb +156 -0
  177. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  178. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  179. data/lib/chef/mixin/params_validate.rb +225 -0
  180. data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
  181. data/lib/chef/mixin/shell_out.rb +38 -0
  182. data/lib/chef/mixin/template.rb +95 -0
  183. data/lib/chef/mixin/xml_escape.rb +140 -0
  184. data/lib/chef/mixins.rb +16 -0
  185. data/lib/chef/monkey_patches/dir.rb +36 -0
  186. data/lib/chef/monkey_patches/string.rb +28 -0
  187. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  188. data/lib/chef/node/attribute.rb +465 -0
  189. data/lib/chef/node.rb +601 -0
  190. data/lib/chef/openid_registration.rb +187 -0
  191. data/lib/chef/platform.rb +371 -0
  192. data/lib/chef/provider/breakpoint.rb +36 -0
  193. data/lib/chef/provider/cookbook_file.rb +100 -0
  194. data/lib/chef/provider/cron/solaris.rb +195 -0
  195. data/lib/chef/provider/cron.rb +186 -0
  196. data/lib/chef/provider/deploy/revision.rb +73 -0
  197. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  198. data/lib/chef/provider/deploy.rb +319 -0
  199. data/lib/chef/provider/directory.rb +72 -0
  200. data/lib/chef/provider/env/windows.rb +75 -0
  201. data/lib/chef/provider/env.rb +152 -0
  202. data/lib/chef/provider/erl_call.rb +72 -0
  203. data/lib/chef/provider/execute.rb +58 -0
  204. data/lib/chef/provider/file.rb +213 -0
  205. data/lib/chef/provider/git.rb +211 -0
  206. data/lib/chef/provider/group/dscl.rb +121 -0
  207. data/lib/chef/provider/group/gpasswd.rb +53 -0
  208. data/lib/chef/provider/group/groupadd.rb +78 -0
  209. data/lib/chef/provider/group/pw.rb +84 -0
  210. data/lib/chef/provider/group/usermod.rb +57 -0
  211. data/lib/chef/provider/group/windows.rb +79 -0
  212. data/lib/chef/provider/group.rb +133 -0
  213. data/lib/chef/provider/http_request.rb +122 -0
  214. data/lib/chef/provider/ifconfig.rb +132 -0
  215. data/lib/chef/provider/link.rb +161 -0
  216. data/lib/chef/provider/log.rb +54 -0
  217. data/lib/chef/provider/mdadm.rb +91 -0
  218. data/lib/chef/provider/mount/mount.rb +232 -0
  219. data/lib/chef/provider/mount/windows.rb +80 -0
  220. data/lib/chef/provider/mount.rb +117 -0
  221. data/lib/chef/provider/ohai.rb +41 -0
  222. data/lib/chef/provider/package/apt.rb +110 -0
  223. data/lib/chef/provider/package/dpkg.rb +112 -0
  224. data/lib/chef/provider/package/easy_install.rb +114 -0
  225. data/lib/chef/provider/package/freebsd.rb +123 -0
  226. data/lib/chef/provider/package/macports.rb +105 -0
  227. data/lib/chef/provider/package/pacman.rb +101 -0
  228. data/lib/chef/provider/package/portage.rb +124 -0
  229. data/lib/chef/provider/package/rpm.rb +101 -0
  230. data/lib/chef/provider/package/rubygems.rb +462 -0
  231. data/lib/chef/provider/package/solaris.rb +127 -0
  232. data/lib/chef/provider/package/yum-dump.py +128 -0
  233. data/lib/chef/provider/package/yum.rb +222 -0
  234. data/lib/chef/provider/package/zypper.rb +133 -0
  235. data/lib/chef/provider/package.rb +160 -0
  236. data/lib/chef/provider/remote_directory.rb +140 -0
  237. data/lib/chef/provider/remote_file.rb +120 -0
  238. data/lib/chef/provider/route.rb +195 -0
  239. data/lib/chef/provider/ruby_block.rb +33 -0
  240. data/lib/chef/provider/script.rb +55 -0
  241. data/lib/chef/provider/service/arch.rb +109 -0
  242. data/lib/chef/provider/service/debian.rb +105 -0
  243. data/lib/chef/provider/service/freebsd.rb +156 -0
  244. data/lib/chef/provider/service/gentoo.rb +54 -0
  245. data/lib/chef/provider/service/init.rb +71 -0
  246. data/lib/chef/provider/service/redhat.rb +60 -0
  247. data/lib/chef/provider/service/simple.rb +118 -0
  248. data/lib/chef/provider/service/solaris.rb +85 -0
  249. data/lib/chef/provider/service/upstart.rb +192 -0
  250. data/lib/chef/provider/service/windows.rb +129 -0
  251. data/lib/chef/provider/service.rb +128 -0
  252. data/lib/chef/provider/subversion.rb +159 -0
  253. data/lib/chef/provider/template.rb +105 -0
  254. data/lib/chef/provider/user/dscl.rb +280 -0
  255. data/lib/chef/provider/user/pw.rb +113 -0
  256. data/lib/chef/provider/user/useradd.rb +137 -0
  257. data/lib/chef/provider/user/windows.rb +124 -0
  258. data/lib/chef/provider/user.rb +187 -0
  259. data/lib/chef/provider.rb +124 -0
  260. data/lib/chef/providers.rb +91 -0
  261. data/lib/chef/recipe.rb +130 -0
  262. data/lib/chef/resource/apt_package.rb +34 -0
  263. data/lib/chef/resource/bash.rb +33 -0
  264. data/lib/chef/resource/breakpoint.rb +35 -0
  265. data/lib/chef/resource/cookbook_file.rb +45 -0
  266. data/lib/chef/resource/cron.rb +188 -0
  267. data/lib/chef/resource/csh.rb +33 -0
  268. data/lib/chef/resource/deploy.rb +371 -0
  269. data/lib/chef/resource/deploy_revision.rb +35 -0
  270. data/lib/chef/resource/directory.rb +76 -0
  271. data/lib/chef/resource/dpkg_package.rb +34 -0
  272. data/lib/chef/resource/easy_install_package.rb +41 -0
  273. data/lib/chef/resource/env.rb +58 -0
  274. data/lib/chef/resource/erl_call.rb +83 -0
  275. data/lib/chef/resource/execute.rb +127 -0
  276. data/lib/chef/resource/file.rb +92 -0
  277. data/lib/chef/resource/freebsd_package.rb +35 -0
  278. data/lib/chef/resource/gem_package.rb +49 -0
  279. data/lib/chef/resource/git.rb +36 -0
  280. data/lib/chef/resource/group.rb +70 -0
  281. data/lib/chef/resource/http_request.rb +61 -0
  282. data/lib/chef/resource/ifconfig.rb +134 -0
  283. data/lib/chef/resource/link.rb +78 -0
  284. data/lib/chef/resource/log.rb +62 -0
  285. data/lib/chef/resource/macports_package.rb +29 -0
  286. data/lib/chef/resource/mdadm.rb +82 -0
  287. data/lib/chef/resource/mount.rb +135 -0
  288. data/lib/chef/resource/ohai.rb +40 -0
  289. data/lib/chef/resource/package.rb +80 -0
  290. data/lib/chef/resource/pacman_package.rb +33 -0
  291. data/lib/chef/resource/perl.rb +33 -0
  292. data/lib/chef/resource/portage_package.rb +33 -0
  293. data/lib/chef/resource/python.rb +33 -0
  294. data/lib/chef/resource/remote_directory.rb +109 -0
  295. data/lib/chef/resource/remote_file.rb +83 -0
  296. data/lib/chef/resource/route.rb +135 -0
  297. data/lib/chef/resource/rpm_package.rb +34 -0
  298. data/lib/chef/resource/ruby.rb +33 -0
  299. data/lib/chef/resource/ruby_block.rb +40 -0
  300. data/lib/chef/resource/scm.rb +146 -0
  301. data/lib/chef/resource/script.rb +60 -0
  302. data/lib/chef/resource/service.rb +160 -0
  303. data/lib/chef/resource/solaris_package.rb +36 -0
  304. data/lib/chef/resource/subversion.rb +36 -0
  305. data/lib/chef/resource/template.rb +69 -0
  306. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  307. data/lib/chef/resource/user.rb +130 -0
  308. data/lib/chef/resource/yum_package.rb +43 -0
  309. data/lib/chef/resource.rb +523 -0
  310. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  311. data/lib/chef/resource_collection.rb +217 -0
  312. data/lib/chef/resource_definition.rb +67 -0
  313. data/lib/chef/resource_definition_list.rb +38 -0
  314. data/lib/chef/resources.rb +64 -0
  315. data/lib/chef/rest/auth_credentials.rb +78 -0
  316. data/lib/chef/rest/cookie_jar.rb +31 -0
  317. data/lib/chef/rest/rest_request.rb +188 -0
  318. data/lib/chef/rest.rb +394 -0
  319. data/lib/chef/role.rb +287 -0
  320. data/lib/chef/run_context.rb +110 -0
  321. data/lib/chef/run_list/run_list_expansion.rb +172 -0
  322. data/lib/chef/run_list/run_list_item.rb +78 -0
  323. data/lib/chef/run_list.rb +150 -0
  324. data/lib/chef/run_status.rb +121 -0
  325. data/lib/chef/runner.rb +107 -0
  326. data/lib/chef/sandbox.rb +153 -0
  327. data/lib/chef/search/query.rb +60 -0
  328. data/lib/chef/shef/ext.rb +568 -0
  329. data/lib/chef/shef/model_wrapper.rb +120 -0
  330. data/lib/chef/shef/shef_rest.rb +28 -0
  331. data/lib/chef/shef/shef_session.rb +271 -0
  332. data/lib/chef/shef.rb +325 -0
  333. data/lib/chef/shell_out.rb +413 -0
  334. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  335. data/lib/chef/tasks/chef_repo.rake +256 -0
  336. data/lib/chef/util/file_edit.rb +122 -0
  337. data/lib/chef/util/windows/net_group.rb +101 -0
  338. data/lib/chef/util/windows/net_use.rb +121 -0
  339. data/lib/chef/util/windows/net_user.rb +198 -0
  340. data/lib/chef/util/windows/volume.rb +59 -0
  341. data/lib/chef/util/windows.rb +56 -0
  342. data/lib/chef/version.rb +21 -0
  343. data/lib/chef/webui_user.rb +231 -0
  344. data/lib/chef.rb +39 -0
  345. metadata +533 -0
@@ -0,0 +1,52 @@
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 ConfigureClient < Knife
24
+ banner "knife configure client DIRECTORY"
25
+
26
+ def run
27
+ unless @config_dir = @name_args[0]
28
+ Chef::Log.fatal "You must provide the directory to put the files in"
29
+ show_usage
30
+ exit(1)
31
+ end
32
+
33
+ Chef::Log.info("Creating client configuration")
34
+ FileUtils.mkdir_p(@config_dir)
35
+ Chef::Log.info("Writing client.rb")
36
+ File.open(File.join(@config_dir, "client.rb"), "w") do |file|
37
+ file.puts('log_level :info')
38
+ file.puts('log_location STDOUT')
39
+ file.puts("chef_server_url '#{Chef::Config[:chef_server_url]}'")
40
+ file.puts("validation_client_name '#{Chef::Config[:validation_client_name]}'")
41
+ end
42
+ Chef::Log.info("Writing validation.pem")
43
+ File.open(File.join(@config_dir, 'validation.pem'), "w") do |validation|
44
+ validation.puts(IO.read(Chef::Config[:validation_key]))
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+ end
51
+
52
+
@@ -0,0 +1,58 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Daniel DeLeo (<dan@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
+ require 'chef/knife/cookbook_delete'
22
+
23
+ class Chef
24
+ class Knife
25
+ class CookbookBulkDelete < Knife
26
+
27
+ option :purge, :short => '-p', :long => '--purge', :boolean => true, :description => 'Permanently remove files from backing data store'
28
+
29
+ banner "knife cookbook bulk delete REGEX (options)"
30
+
31
+ def run
32
+ unless regex_str = @name_args.first
33
+ Chef::Log.fatal("You must supply a regular expression to match the results against")
34
+ exit 42
35
+ end
36
+
37
+ regex = Regexp.new(regex_str)
38
+
39
+ all_cookbooks = Chef::CookbookVersion.list
40
+ cookbooks_names = all_cookbooks.keys.grep(regex)
41
+ cookbooks_to_delete = cookbooks_names.inject({}) { |hash, name| hash[name] = all_cookbooks[name];hash }
42
+ output(format_list_for_display(cookbooks_to_delete))
43
+
44
+ confirm("Do you really want to delete these cookbooks? All versions will be deleted. (Y/N) ", false)
45
+
46
+ 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 cookbooks") if config[:purge]
47
+
48
+ cookbooks_names.each do |cookbook_name|
49
+ versions = rest.get_rest("cookbooks/#{cookbook_name}").values.flatten
50
+ versions.each do |version|
51
+ object = rest.delete_rest("cookbooks/#{cookbook_name}/#{version}#{config[:purge] ? "?purge=true" : ""}")
52
+ Chef::Log.info("Deleted cookbook #{cookbook_name.ljust(25)} [#{version}]")
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -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 'json'
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