mbailey-chef 0.9.12.1

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 (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,46 @@
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
+ require 'json'
21
+
22
+ class Chef
23
+ class Knife
24
+ class Ec2InstanceData < Knife
25
+
26
+ banner "knife ec2 instance data [RUN LIST...] (options)"
27
+
28
+ option :edit,
29
+ :short => "-e",
30
+ :long => "--edit",
31
+ :description => "Edit the instance data"
32
+
33
+ def run
34
+ data = {
35
+ "chef_server" => Chef::Config[:chef_server_url],
36
+ "validation_client_name" => Chef::Config[:validation_client_name],
37
+ "validation_key" => IO.read(Chef::Config[:validation_key]),
38
+ "attributes" => { "run_list" => @name_args }
39
+ }
40
+ data = edit_data(data) if config[:edit]
41
+ output(data)
42
+ end
43
+ end
44
+ end
45
+ end
46
+
@@ -0,0 +1,216 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 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 'socket'
20
+ require 'chef/knife'
21
+ require 'json'
22
+
23
+ class Chef
24
+ class Knife
25
+ class Ec2ServerCreate < Knife
26
+
27
+ banner "knife ec2 server create [RUN LIST...] (options)"
28
+
29
+ attr_accessor :initial_sleep_delay
30
+
31
+ option :flavor,
32
+ :short => "-f FLAVOR",
33
+ :long => "--flavor FLAVOR",
34
+ :description => "The flavor of server (m1.small, m1.medium, etc)",
35
+ :default => "m1.small"
36
+
37
+ option :image,
38
+ :short => "-i IMAGE",
39
+ :long => "--image IMAGE",
40
+ :description => "The AMI for the server"
41
+
42
+ option :security_groups,
43
+ :short => "-G X,Y,Z",
44
+ :long => "--groups X,Y,Z",
45
+ :description => "The security groups for this server",
46
+ :default => ["default"],
47
+ :proc => Proc.new { |groups| groups.split(',') }
48
+
49
+ option :availability_zone,
50
+ :short => "-Z ZONE",
51
+ :long => "--availability-zone ZONE",
52
+ :description => "The Availability Zone",
53
+ :default => "us-east-1b"
54
+
55
+ option :chef_node_name,
56
+ :short => "-N NAME",
57
+ :long => "--node-name NAME",
58
+ :description => "The Chef node name for your new node"
59
+
60
+ option :ssh_key_name,
61
+ :short => "-S KEY",
62
+ :long => "--ssh-key KEY",
63
+ :description => "The AWS SSH key id",
64
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_ssh_key_id] = key }
65
+
66
+ option :ssh_user,
67
+ :short => "-x USERNAME",
68
+ :long => "--ssh-user USERNAME",
69
+ :description => "The ssh username",
70
+ :default => "root"
71
+
72
+ option :ssh_password,
73
+ :short => "-P PASSWORD",
74
+ :long => "--ssh-password PASSWORD",
75
+ :description => "The ssh password"
76
+
77
+ option :identity_file,
78
+ :short => "-I IDENTITY_FILE",
79
+ :long => "--identity-file IDENTITY_FILE",
80
+ :description => "The SSH identity file used for authentication"
81
+
82
+ option :aws_access_key_id,
83
+ :short => "-A ID",
84
+ :long => "--aws-access-key-id KEY",
85
+ :description => "Your AWS Access Key ID",
86
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
87
+
88
+ option :aws_secret_access_key,
89
+ :short => "-K SECRET",
90
+ :long => "--aws-secret-access-key SECRET",
91
+ :description => "Your AWS API Secret Access Key",
92
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
93
+
94
+ option :prerelease,
95
+ :long => "--prerelease",
96
+ :description => "Install the pre-release chef gems"
97
+
98
+ option :region,
99
+ :long => "--region REGION",
100
+ :description => "Your AWS region",
101
+ :default => "us-east-1"
102
+
103
+ option :distro,
104
+ :short => "-d DISTRO",
105
+ :long => "--distro DISTRO",
106
+ :description => "Bootstrap a distro using a template",
107
+ :default => "ubuntu10.04-gems"
108
+
109
+ option :template_file,
110
+ :long => "--template-file TEMPLATE",
111
+ :description => "Full path to location of template to use",
112
+ :default => false
113
+
114
+ def h
115
+ @highline ||= HighLine.new
116
+ end
117
+
118
+ def tcp_test_ssh(hostname)
119
+ tcp_socket = TCPSocket.new(hostname, 22)
120
+ readable = IO.select([tcp_socket], nil, nil, 5)
121
+ if readable
122
+ Chef::Log.debug("sshd accepting connections on #{hostname}, banner is #{tcp_socket.gets}")
123
+ yield
124
+ true
125
+ else
126
+ false
127
+ end
128
+ rescue Errno::ETIMEDOUT
129
+ false
130
+ rescue Errno::ECONNREFUSED
131
+ sleep 2
132
+ false
133
+ ensure
134
+ tcp_socket && tcp_socket.close
135
+ end
136
+
137
+ def run
138
+ require 'fog'
139
+ require 'highline'
140
+ require 'net/ssh/multi'
141
+ require 'readline'
142
+
143
+ $stdout.sync = true
144
+
145
+ connection = Fog::AWS::EC2.new(
146
+ :aws_access_key_id => Chef::Config[:knife][:aws_access_key_id],
147
+ :aws_secret_access_key => Chef::Config[:knife][:aws_secret_access_key],
148
+ :region => config[:region]
149
+ )
150
+
151
+ server = connection.servers.create(
152
+ :image_id => config[:image],
153
+ :groups => config[:security_groups],
154
+ :flavor_id => config[:flavor],
155
+ :key_name => Chef::Config[:knife][:aws_ssh_key_id],
156
+ :availability_zone => config[:availability_zone]
157
+ )
158
+
159
+ puts "#{h.color("Instance ID", :cyan)}: #{server.id}"
160
+ puts "#{h.color("Flavor", :cyan)}: #{server.flavor_id}"
161
+ puts "#{h.color("Image", :cyan)}: #{server.image_id}"
162
+ puts "#{h.color("Availability Zone", :cyan)}: #{server.availability_zone}"
163
+ puts "#{h.color("Security Groups", :cyan)}: #{server.groups.join(", ")}"
164
+ puts "#{h.color("SSH Key", :cyan)}: #{server.key_name}"
165
+
166
+ print "\n#{h.color("Waiting for server", :magenta)}"
167
+
168
+ # wait for it to be ready to do stuff
169
+ server.wait_for { print "."; ready? }
170
+
171
+ puts("\n")
172
+
173
+
174
+ puts "#{h.color("Public DNS Name", :cyan)}: #{server.dns_name}"
175
+ puts "#{h.color("Public IP Address", :cyan)}: #{server.ip_address}"
176
+ puts "#{h.color("Private DNS Name", :cyan)}: #{server.private_dns_name}"
177
+ puts "#{h.color("Private IP Address", :cyan)}: #{server.private_ip_address}"
178
+
179
+ print "\n#{h.color("Waiting for sshd", :magenta)}"
180
+
181
+ print(".") until tcp_test_ssh(server.dns_name) { sleep @initial_sleep_delay ||= 10; puts("done") }
182
+
183
+
184
+ bootstrap_for_node(server).run
185
+
186
+ puts "\n"
187
+ puts "#{h.color("Instance ID", :cyan)}: #{server.id}"
188
+ puts "#{h.color("Flavor", :cyan)}: #{server.flavor_id}"
189
+ puts "#{h.color("Image", :cyan)}: #{server.image_id}"
190
+ puts "#{h.color("Availability Zone", :cyan)}: #{server.availability_zone}"
191
+ puts "#{h.color("Security Groups", :cyan)}: #{server.groups.join(", ")}"
192
+ puts "#{h.color("SSH Key", :cyan)}: #{server.key_name}"
193
+ puts "#{h.color("Public DNS Name", :cyan)}: #{server.dns_name}"
194
+ puts "#{h.color("Public IP Address", :cyan)}: #{server.ip_address}"
195
+ puts "#{h.color("Private DNS Name", :cyan)}: #{server.private_dns_name}"
196
+ puts "#{h.color("Private IP Address", :cyan)}: #{server.private_ip_address}"
197
+ puts "#{h.color("Run List", :cyan)}: #{@name_args.join(', ')}"
198
+ end
199
+
200
+ def bootstrap_for_node(server)
201
+ bootstrap = Chef::Knife::Bootstrap.new
202
+ bootstrap.name_args = [server.dns_name]
203
+ bootstrap.config[:run_list] = @name_args
204
+ bootstrap.config[:ssh_user] = config[:ssh_user]
205
+ bootstrap.config[:identity_file] = config[:identity_file]
206
+ bootstrap.config[:chef_node_name] = config[:chef_node_name] || server.id
207
+ bootstrap.config[:prerelease] = config[:prerelease]
208
+ bootstrap.config[:distro] = config[:distro]
209
+ bootstrap.config[:use_sudo] = true
210
+ bootstrap.config[:template_file] = config[:template_file]
211
+ bootstrap
212
+ end
213
+
214
+ end
215
+ end
216
+ end
@@ -0,0 +1,90 @@
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
+ require 'json'
21
+
22
+ class Chef
23
+ class Knife
24
+ class Ec2ServerDelete < Knife
25
+
26
+ banner "knife ec2 server delete SERVER [SERVER] (options)"
27
+
28
+ option :aws_access_key_id,
29
+ :short => "-A ID",
30
+ :long => "--aws-access-key-id KEY",
31
+ :description => "Your AWS Access Key ID",
32
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
33
+
34
+ option :aws_secret_access_key,
35
+ :short => "-K SECRET",
36
+ :long => "--aws-secret-access-key SECRET",
37
+ :description => "Your AWS API Secret Access Key",
38
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
39
+
40
+ option :region,
41
+ :long => "--region REGION",
42
+ :description => "Your AWS region",
43
+ :default => "us-east-1"
44
+
45
+ def h
46
+ @highline ||= HighLine.new
47
+ end
48
+
49
+ def run
50
+ require 'fog'
51
+ require 'highline'
52
+ require 'net/ssh/multi'
53
+ require 'readline'
54
+
55
+ connection = Fog::AWS::EC2.new(
56
+ :aws_access_key_id => Chef::Config[:knife][:aws_access_key_id],
57
+ :aws_secret_access_key => Chef::Config[:knife][:aws_secret_access_key],
58
+ :region => config[:region]
59
+ )
60
+
61
+ @name_args.each do |instance_id|
62
+ server = connection.servers.get(instance_id)
63
+
64
+ puts "#{h.color("Instance ID", :cyan)}: #{server.id}"
65
+ puts "#{h.color("Flavor", :cyan)}: #{server.flavor_id}"
66
+ puts "#{h.color("Image", :cyan)}: #{server.image_id}"
67
+ puts "#{h.color("Availability Zone", :cyan)}: #{server.availability_zone}"
68
+ puts "#{h.color("Security Groups", :cyan)}: #{server.groups.join(", ")}"
69
+ puts "#{h.color("SSH Key", :cyan)}: #{server.key_name}"
70
+ puts "#{h.color("Public DNS Name", :cyan)}: #{server.dns_name}"
71
+ puts "#{h.color("Public IP Address", :cyan)}: #{server.ip_address}"
72
+ puts "#{h.color("Private DNS Name", :cyan)}: #{server.private_dns_name}"
73
+ puts "#{h.color("Private IP Address", :cyan)}: #{server.private_ip_address}"
74
+
75
+ puts "\n"
76
+ confirm("Do you really want to delete this server")
77
+
78
+ server.destroy
79
+
80
+ Chef::Log.warn("Deleted server #{server.id}")
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+
88
+
89
+
90
+
@@ -0,0 +1,88 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 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
+
22
+ class Chef
23
+ class Knife
24
+ class Ec2ServerList < Knife
25
+
26
+ banner "knife ec2 server list [RUN LIST...] (options)"
27
+
28
+ option :aws_access_key_id,
29
+ :short => "-A ID",
30
+ :long => "--aws-access-key-id KEY",
31
+ :description => "Your AWS Access Key ID",
32
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
33
+
34
+ option :aws_secret_access_key,
35
+ :short => "-K SECRET",
36
+ :long => "--aws-secret-access-key SECRET",
37
+ :description => "Your AWS API Secret Access Key",
38
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
39
+
40
+ option :region,
41
+ :long => "--region REGION",
42
+ :description => "Your AWS region",
43
+ :default => "us-east-1"
44
+
45
+ def h
46
+ @highline ||= HighLine.new
47
+ end
48
+
49
+ def run
50
+ require 'fog'
51
+ require 'highline'
52
+ require 'net/ssh/multi'
53
+ require 'readline'
54
+
55
+ $stdout.sync = true
56
+
57
+ connection = Fog::AWS::EC2.new(
58
+ :aws_access_key_id => Chef::Config[:knife][:aws_access_key_id],
59
+ :aws_secret_access_key => Chef::Config[:knife][:aws_secret_access_key],
60
+ :region => config[:region]
61
+ )
62
+
63
+ server_list = [
64
+ h.color('Instance ID', :bold),
65
+ h.color('Public IP', :bold),
66
+ h.color('Private IP', :bold),
67
+ h.color('Flavor', :bold),
68
+ h.color('Image', :bold),
69
+ h.color('Security Groups', :bold),
70
+ h.color('State', :bold)
71
+ ]
72
+ connection.servers.all.each do |server|
73
+ server_list << server.id.to_s
74
+ server_list << (server.ip_address == nil ? "" : server.ip_address)
75
+ server_list << (server.private_ip_address == nil ? "" : server.private_ip_address)
76
+ server_list << (server.flavor_id == nil ? "" : server.flavor_id)
77
+ server_list << (server.image_id == nil ? "" : server.image_id)
78
+ server_list << server.groups.join(", ")
79
+ server_list << server.state
80
+ end
81
+ puts h.list(server_list, :columns_across, 7)
82
+
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+
@@ -0,0 +1,52 @@
1
+ #--
2
+ # Author:: Daniel DeLeo (<dan@opscode.com)
3
+ # Copyright:: Copyright (c) 2010 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::Knife::Exec < Chef::Knife
22
+
23
+ banner "knife exec [SCRIPT] (options)"
24
+
25
+ option :exec,
26
+ :short => "-E CODE",
27
+ :long => "--exec CODE",
28
+ :description => "a string of Chef code to execute"
29
+
30
+ def late_load_deps
31
+ require 'chef/shef/ext'
32
+ end
33
+
34
+ def run
35
+ late_load_deps
36
+ scripts = Array(name_args)
37
+ context = Object.new
38
+ Shef::Extensions.extend_context_object(context)
39
+ if config[:exec]
40
+ context.instance_eval(config[:exec], "-E Argument", 0)
41
+ elsif !scripts.empty?
42
+ scripts.each do |script|
43
+ file = File.expand_path(script)
44
+ context.instance_eval(IO.read(file), file, 0)
45
+ end
46
+ else
47
+ script = STDIN.read
48
+ context.instance_eval(script, "STDIN", 0)
49
+ end
50
+ end
51
+
52
+ end