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,152 @@
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
+ require 'tempfile'
22
+
23
+ class Chef
24
+ class Knife
25
+ class TerremarkServerCreate < Knife
26
+
27
+ banner "knife terremark server create NAME [RUN LIST...] (options)"
28
+
29
+ option :terremark_password,
30
+ :short => "-K PASSWORD",
31
+ :long => "--terremark-password PASSWORD",
32
+ :description => "Your terremark password",
33
+ :proc => Proc.new { |key| Chef::Config[:knife][:terremark_password] = key }
34
+
35
+ option :terremark_username,
36
+ :short => "-A USERNAME",
37
+ :long => "--terremark-username USERNAME",
38
+ :description => "Your terremark username",
39
+ :proc => Proc.new { |username| Chef::Config[:knife][:terremark_username] = username }
40
+
41
+ option :terremark_service,
42
+ :short => "-S SERVICE",
43
+ :long => "--terremark-service SERVICE",
44
+ :description => "Your terremark service name",
45
+ :proc => Proc.new { |service| Chef::Config[:knife][:terremark_service] = service }
46
+
47
+ def h
48
+ @highline ||= HighLine.new
49
+ end
50
+
51
+ def run
52
+ require 'fog'
53
+ require 'highline'
54
+ require 'net/ssh/multi'
55
+ require 'readline'
56
+ require 'net/scp'
57
+
58
+ server_name = @name_args[0]
59
+
60
+ terremark = Fog::Terremark.new(
61
+ :terremark_username => Chef::Config[:knife][:terremark_username],
62
+ :terremark_password => Chef::Config[:knife][:terremark_password],
63
+ :terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
64
+ )
65
+
66
+ $stdout.sync = true
67
+
68
+ puts "Instantiating vApp #{h.color(server_name, :bold)}"
69
+ vapp_id = terremark.instantiate_vapp_template(server_name).body['href'].split('/').last
70
+
71
+ deploy_task_id = terremark.deploy_vapp(vapp_id).body['href'].split('/').last
72
+ print "Waiting for deploy task [#{h.color(deploy_task_id, :bold)}]"
73
+ terremark.tasks.get(deploy_task_id).wait_for { print "."; ready? }
74
+ print "\n"
75
+
76
+ power_on_task_id = terremark.power_on(vapp_id).body['href'].split('/').last
77
+ print "Waiting for power on task [#{h.color(power_on_task_id, :bold)}]"
78
+ terremark.tasks.get(power_on_task_id).wait_for { print "."; ready? }
79
+ print "\n"
80
+
81
+ private_ip = terremark.get_vapp(vapp_id).body['IpAddress']
82
+ ssh_internet_service = terremark.create_internet_service(terremark.default_vdc_id, 'SSH', 'TCP', 22).body
83
+ ssh_internet_service_id = ssh_internet_service['Id']
84
+ public_ip = ssh_internet_service['PublicIpAddress']['Name']
85
+ public_ip_id = ssh_internet_service['PublicIpAddress']['Id']
86
+ ssh_node_service_id = terremark.add_node_service(ssh_internet_service_id, private_ip, 'SSH', 22).body['Id']
87
+
88
+ puts "\nBootstrapping #{h.color(server_name, :bold)}..."
89
+ password = terremark.get_vapp_template(12).body['Description'].scan(/\npassword: (.*)\n/).first.first
90
+
91
+ command = <<EOH
92
+ bash -c '
93
+ echo nameserver 208.67.222.222 > /etc/resolv.conf
94
+ echo nameserver 208.67.220.220 >> /etc/resolv.conf
95
+
96
+ if [ ! -f /usr/bin/chef-client ]; then
97
+ apt-get update
98
+ apt-get install -y ruby ruby1.8-dev build-essential wget libruby-extras libruby1.8-extras
99
+ cd /tmp
100
+ wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz
101
+ tar xvf rubygems-1.3.6.tgz
102
+ cd rubygems-1.3.6
103
+ ruby setup.rb
104
+ cp /usr/bin/gem1.8 /usr/bin/gem
105
+ gem install chef ohai --no-rdoc --no-ri --verbose
106
+ fi
107
+
108
+ mkdir -p /etc/chef
109
+
110
+ (
111
+ cat <<'EOP'
112
+ #{IO.read(Chef::Config[:validation_key])}
113
+ EOP
114
+ ) > /etc/chef/validation.pem
115
+
116
+ (
117
+ cat <<'EOP'
118
+ log_level :info
119
+ log_location STDOUT
120
+ chef_server_url "#{Chef::Config[:chef_server_url]}"
121
+ validation_client_name "#{Chef::Config[:validation_client_name]}"
122
+ EOP
123
+ ) > /etc/chef/client.rb
124
+
125
+ (
126
+ cat <<'EOP'
127
+ #{{ "run_list" => @name_args[1..-1] }.to_json}
128
+ EOP
129
+ ) > /etc/chef/first-boot.json
130
+
131
+ /usr/bin/chef-client -j /etc/chef/first-boot.json'
132
+ EOH
133
+
134
+ begin
135
+ ssh = Chef::Knife::Ssh.new
136
+ ssh.name_args = [ public_ip, "sudo #{command}" ]
137
+ ssh.config[:ssh_user] = "vcloud"
138
+ ssh.config[:manual] = true
139
+ ssh.config[:password] = password
140
+ ssh.password = password
141
+ ssh.run
142
+ rescue Errno::ETIMEDOUT
143
+ puts "Timed out on bootstrap, re-trying. Hit CTRL-C to abort."
144
+ puts "You probably need to log in to Terremark and powercycle #{h.color(@name_args[0], :bold)}"
145
+ retry
146
+ end
147
+
148
+ end
149
+ end
150
+ end
151
+ end
152
+
@@ -0,0 +1,87 @@
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 TerremarkServerDelete < Knife
25
+
26
+ banner "knife terremark server delete SERVER (options)"
27
+
28
+ def h
29
+ @highline ||= HighLine.new
30
+ end
31
+
32
+ def run
33
+ require 'fog'
34
+ require 'highline'
35
+
36
+ terremark = Fog::Terremark.new(
37
+ :terremark_username => Chef::Config[:knife][:terremark_username],
38
+ :terremark_password => Chef::Config[:knife][:terremark_password],
39
+ :terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
40
+ )
41
+
42
+ $stdout.sync = true
43
+
44
+ vapp_id = terremark.servers.detect {|server| server.name == @name_args[0]}.id
45
+ confirm("Do you really want to delete server ID #{vapp_id} named #{@name_args[0]}")
46
+
47
+ puts "Cleaning up internet services..."
48
+ private_ip = terremark.servers.get(vapp_id).ip_address
49
+ internet_services = terremark.get_internet_services(terremark.default_vdc_id).body['InternetServices']
50
+ public_ip_usage = {}
51
+ internet_services.each do |internet_service|
52
+ public_ip_address = internet_service['PublicIpAddress']['Name']
53
+ public_ip_usage[public_ip_address] ||= []
54
+ public_ip_usage[public_ip_address] << internet_service['Id']
55
+ end
56
+ internet_services.each do |internet_service|
57
+ node_services = terremark.get_node_services(internet_service['Id']).body['NodeServices']
58
+ node_services.delete_if do |node_service|
59
+ if node_service['IpAddress'] == private_ip
60
+ terremark.delete_node_service(node_service['Id'])
61
+ end
62
+ end
63
+ if node_services.empty?
64
+ terremark.delete_internet_service(internet_service['Id'])
65
+ public_ip_usage.each_value {|internet_services| internet_services.delete(internet_service['Id'])}
66
+ if public_ip_usage[internet_service['PublicIpAddress']['Name']].empty?
67
+ terremark.delete_public_ip(internet_service['PublicIpAddress']['Id'])
68
+ end
69
+ end
70
+ end
71
+
72
+ power_off_task_id = terremark.power_off(vapp_id).body['href'].split('/').last
73
+ print "Waiting for power off task [#{h.color(power_off_task_id, :bold)}]"
74
+ terremark.tasks.get(power_off_task_id).wait_for { print '.'; ready? }
75
+ print "\n"
76
+
77
+ print "Deleting vApp #{h.color(vapp_id, :bold)}"
78
+ delete_vapp_task_id = terremark.delete_vapp(vapp_id).headers['Location'].split('/').last
79
+ terremark.tasks.get(delete_vapp_task_id).wait_for { print '.'; ready? }
80
+ print "\n"
81
+
82
+ Chef::Log.warn("Deleted server #{@name_args[0]}")
83
+ end
84
+ end
85
+ end
86
+ end
87
+
@@ -0,0 +1,77 @@
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
+ require 'tempfile'
22
+
23
+ class Chef
24
+ class Knife
25
+ class TerremarkServerList < Knife
26
+
27
+ banner "knife terremark server list (options)"
28
+
29
+ option :terremark_password,
30
+ :short => "-K PASSWORD",
31
+ :long => "--terremark-password PASSWORD",
32
+ :description => "Your terremark password",
33
+ :proc => Proc.new { |key| Chef::Config[:knife][:terremark_password] = key }
34
+
35
+ option :terremark_username,
36
+ :short => "-A USERNAME",
37
+ :long => "--terremark-username USERNAME",
38
+ :description => "Your terremark username",
39
+ :proc => Proc.new { |username| Chef::Config[:knife][:terremark_username] = username }
40
+
41
+ option :terremark_service,
42
+ :short => "-S SERVICE",
43
+ :long => "--terremark-service SERVICE",
44
+ :description => "Your terremark service name",
45
+ :proc => Proc.new { |service| Chef::Config[:knife][:terremark_service] = service }
46
+
47
+ def h
48
+ @highline ||= HighLine.new
49
+ end
50
+
51
+ def run
52
+ require 'fog'
53
+ require 'highline'
54
+
55
+ server_name = @name_args[0]
56
+
57
+ terremark = Fog::Terremark.new(
58
+ :terremark_username => Chef::Config[:knife][:terremark_username],
59
+ :terremark_password => Chef::Config[:knife][:terremark_password],
60
+ :terremark_service => Chef::Config[:knife][:terremark_service] || :vcloud
61
+ )
62
+
63
+ $stdout.sync = true
64
+
65
+ server_list = [ h.color('ID', :bold), h.color('Name', :bold) ]
66
+ terremark.servers.all.each do |server|
67
+ server_list << server.id.to_s
68
+ server_list << server.name
69
+ end
70
+ puts h.list(server_list, :columns_across, 2)
71
+
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+
@@ -0,0 +1,154 @@
1
+ #
2
+ # Author:: Doug MacEachern <dougm@vmware.com>
3
+ # Copyright:: Copyright (c) 2010 VMware, 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 'fileutils'
20
+ require 'chef/knife/bootstrap.rb'
21
+
22
+ class Chef
23
+ class Knife
24
+ class WindowsBootstrap < Chef::Knife::Bootstrap
25
+
26
+ banner "knife windows bootstrap FQDN [RUN LIST...] (options)"
27
+
28
+ option :user,
29
+ :short => "-x USERNAME",
30
+ :long => "--user USERNAME",
31
+ :description => "The Windows username"
32
+
33
+ option :password,
34
+ :short => "-P PASSWORD",
35
+ :long => "--password PASSWORD",
36
+ :description => "The Windows password"
37
+
38
+ option :chef_node_name,
39
+ :short => "-N NAME",
40
+ :long => "--node-name NAME",
41
+ :description => "The Chef node name for your new node"
42
+
43
+ option :distro,
44
+ :short => "-d DISTRO",
45
+ :long => "--distro DISTRO",
46
+ :description => "Bootstrap a distro using a template",
47
+ :default => "windows-gems"
48
+
49
+ option :template_file,
50
+ :long => "--template-file TEMPLATE",
51
+ :description => "Full path to location of template to use",
52
+ :default => false
53
+
54
+ option :run_list,
55
+ :short => "-r RUN_LIST",
56
+ :long => "--run-list RUN_LIST",
57
+ :description => "Comma separated list of roles/recipes to apply",
58
+ :proc => lambda { |o| o.split(",") },
59
+ :default => []
60
+
61
+ def is_mounted
62
+ @net_use ||= Chef::Util::Windows::NetUse.new(@admin_share)
63
+ begin
64
+ @net_use.get_info
65
+ return true
66
+ rescue
67
+ return false
68
+ end
69
+ end
70
+
71
+ def mount_admin_share
72
+ if @add_mount && !is_mounted
73
+ use = {
74
+ :remote => @admin_share, :local => '',
75
+ :username => config[:user], :password => config[:password]
76
+ }
77
+ @net_use.add(use)
78
+ if is_mounted
79
+ Chef::Log.info("Mounted #{@admin_share} for copying files")
80
+ else
81
+ Chef::Log.fatal("Failed to mount #{@admin_share}")
82
+ exit 1
83
+ end
84
+ end
85
+ end
86
+
87
+ def unmount_admin_share
88
+ if @add_mount && is_mounted
89
+ Chef::Log.debug("Unmounting #{@admin_share}")
90
+ @net_use.delete
91
+ end
92
+ end
93
+
94
+ def psexec(args)
95
+ cmd = ['psexec', @unc_path, "-h", "-w", 'c:\chef\tmp']
96
+ if config[:user]
97
+ cmd << "-u" << config[:user]
98
+ end
99
+ if config[:password]
100
+ cmd << "-p" << config[:password]
101
+ end
102
+ cmd << args
103
+ cmd = cmd.join(' ')
104
+ Chef::Log.debug("system #{cmd}")
105
+ system(cmd)
106
+ end
107
+
108
+ def run
109
+ require 'chef/util/windows/net_use'
110
+
111
+ if @name_args.first == nil
112
+ Chef::Log.error("Must pass a node name/ip to windows bootstrap")
113
+ exit 1
114
+ end
115
+
116
+ config[:server_name] = @name_args.first
117
+ if Chef::Config[:http_proxy]
118
+ uri = URI.parse(Chef::Config[:http_proxy])
119
+ config[:proxy] = "#{uri.host}:#{uri.port}"
120
+ end
121
+
122
+ @unc_path = "\\\\#{config[:server_name]}"
123
+ @admin_share = "#{@unc_path}\\c$"
124
+ path = "#{@admin_share}\\chef"
125
+ etc = "#{path}\\etc"
126
+ tmp = "#{path}\\tmp"
127
+
128
+ $stdout.sync = true
129
+
130
+ command = render_template(load_template(config[:bootstrap_template]))
131
+
132
+ Chef::Log.info("Bootstrapping Chef on #{config[:server_name]}")
133
+
134
+ @add_mount = config[:user] != nil && !is_mounted
135
+ mount_admin_share
136
+
137
+ begin
138
+ [etc, tmp, "#{path}\\log"].each do |dir|
139
+ unless File.exists?(dir)
140
+ Chef::Log.debug("mkdir_p #{dir}")
141
+ FileUtils.mkdir_p(dir)
142
+ end
143
+ end
144
+ File.open("#{tmp}\\bootstrap.bat", 'w') {|f| f.write(command) }
145
+ FileUtils.cp(File.join(File.dirname(__FILE__), 'bootstrap', 'client-install.vbs'), tmp)
146
+ FileUtils.cp(Chef::Config[:validation_key], etc)
147
+ psexec("cmd.exe /c bootstrap.bat")
148
+ ensure
149
+ unmount_admin_share
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end