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,171 @@
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
+ require 'chef/knife'
19
+ require 'chef/application'
20
+ require 'chef/client'
21
+ require 'chef/config'
22
+ require 'chef/log'
23
+ require 'chef/node'
24
+ require 'chef/role'
25
+ require 'chef/data_bag'
26
+ require 'chef/data_bag_item'
27
+ require 'chef/rest'
28
+ require 'chef/search/query'
29
+ require 'tmpdir'
30
+ require 'uri'
31
+
32
+ class Chef::Application::Knife < Chef::Application
33
+
34
+ NO_COMMAND_GIVEN = "You need to pass a sub-command (e.g., knife SUB-COMMAND)\n"
35
+
36
+ banner "Usage: #{$0} sub-command (options)"
37
+
38
+ option :config_file,
39
+ :short => "-c CONFIG",
40
+ :long => "--config CONFIG",
41
+ :description => "The configuration file to use"
42
+
43
+ option :log_level,
44
+ :short => "-l LEVEL",
45
+ :long => "--log_level LEVEL",
46
+ :description => "Set the log level (debug, info, warn, error, fatal)",
47
+ :proc => lambda { |l| l.to_sym }
48
+
49
+ option :log_location,
50
+ :short => "-L LOGLOCATION",
51
+ :long => "--logfile LOGLOCATION",
52
+ :description => "Set the log file location, defaults to STDOUT",
53
+ :proc => nil
54
+
55
+ option :editor,
56
+ :short => "-e EDITOR",
57
+ :long => "--editor EDITOR",
58
+ :description => "Set the editor to use for interactive commands",
59
+ :default => ENV['EDITOR']
60
+
61
+ option :no_editor,
62
+ :short => "-n",
63
+ :long => "--no-editor",
64
+ :description => "Do not open EDITOR, just accept the data as is",
65
+ :boolean => true
66
+
67
+ option :help,
68
+ :short => "-h",
69
+ :long => "--help",
70
+ :description => "Show this message",
71
+ :on => :tail,
72
+ :boolean => true
73
+
74
+ option :node_name,
75
+ :short => "-u USER",
76
+ :long => "--user USER",
77
+ :description => "API Client Username"
78
+
79
+ option :client_key,
80
+ :short => "-k KEY",
81
+ :long => "--key KEY",
82
+ :description => "API Client Key"
83
+
84
+ option :chef_server_url,
85
+ :short => "-s URL",
86
+ :long => "--server-url URL",
87
+ :description => "Chef Server URL"
88
+
89
+ option :yes,
90
+ :short => "-y",
91
+ :long => "--yes",
92
+ :description => "Say yes to all prompts for confirmation"
93
+
94
+ option :defaults,
95
+ :long => "--defaults",
96
+ :description => "Accept default values for all questions"
97
+
98
+ option :print_after,
99
+ :short => "-p",
100
+ :long => "--print-after",
101
+ :description => "Show the data after a destructive operation"
102
+
103
+ option :format,
104
+ :short => "-F FORMAT",
105
+ :long => "--format FORMAT",
106
+ :description => "Which format to use for output",
107
+ :default => "json"
108
+
109
+ option :version,
110
+ :short => "-v",
111
+ :long => "--version",
112
+ :description => "Show chef version",
113
+ :boolean => true,
114
+ :proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
115
+ :exit => 0
116
+
117
+ # Run knife
118
+ def run
119
+ Mixlib::Log::Formatter.show_time = false
120
+ validate_and_parse_options
121
+ Chef::Knife.run(ARGV, options)
122
+ exit 0
123
+ end
124
+
125
+ private
126
+
127
+ def validate_and_parse_options
128
+ # Checking ARGV validity *before* parse_options because parse_options
129
+ # mangles ARGV in some situations
130
+ if no_command_given?
131
+ print_help_and_exit(1, NO_COMMAND_GIVEN)
132
+ elsif no_subcommand_given?
133
+ if (want_help? || want_version?)
134
+ print_help_and_exit
135
+ else
136
+ print_help_and_exit(2, NO_COMMAND_GIVEN)
137
+ end
138
+ end
139
+ end
140
+
141
+ def no_subcommand_given?
142
+ ARGV[0] =~ /^-/
143
+ end
144
+
145
+ def no_command_given?
146
+ ARGV.empty?
147
+ end
148
+
149
+ def want_help?
150
+ ARGV[0] =~ /^(--help|-h)$/
151
+ end
152
+
153
+ def want_version?
154
+ ARGV[0] =~ /^(--version|-v)$/
155
+ end
156
+
157
+ def print_help_and_exit(exitcode=1, fatal_message=nil)
158
+ Chef::Log.error(fatal_message) if fatal_message
159
+
160
+ begin
161
+ self.parse_options
162
+ rescue OptionParser::InvalidOption => e
163
+ puts "#{e}\n"
164
+ end
165
+ puts self.opt_parser
166
+ puts
167
+ Chef::Knife.list_commands
168
+ exit exitcode
169
+ end
170
+
171
+ end
@@ -0,0 +1,215 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 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
+ require 'chef'
19
+ require 'chef/application'
20
+ require 'chef/client'
21
+ require 'chef/config'
22
+ require 'chef/daemon'
23
+ require 'chef/log'
24
+ require 'chef/rest'
25
+ require 'open-uri'
26
+ require 'fileutils'
27
+
28
+ class Chef::Application::Solo < Chef::Application
29
+
30
+ option :config_file,
31
+ :short => "-c CONFIG",
32
+ :long => "--config CONFIG",
33
+ :default => "/etc/chef/solo.rb",
34
+ :description => "The configuration file to use"
35
+
36
+ option :log_level,
37
+ :short => "-l LEVEL",
38
+ :long => "--log_level LEVEL",
39
+ :description => "Set the log level (debug, info, warn, error, fatal)",
40
+ :proc => lambda { |l| l.to_sym }
41
+
42
+ option :log_location,
43
+ :short => "-L LOGLOCATION",
44
+ :long => "--logfile LOGLOCATION",
45
+ :description => "Set the log file location, defaults to STDOUT",
46
+ :proc => nil
47
+
48
+ option :help,
49
+ :short => "-h",
50
+ :long => "--help",
51
+ :description => "Show this message",
52
+ :on => :tail,
53
+ :boolean => true,
54
+ :show_options => true,
55
+ :exit => 0
56
+
57
+ option :user,
58
+ :short => "-u USER",
59
+ :long => "--user USER",
60
+ :description => "User to set privilege to",
61
+ :proc => nil
62
+
63
+ option :group,
64
+ :short => "-g GROUP",
65
+ :long => "--group GROUP",
66
+ :description => "Group to set privilege to",
67
+ :proc => nil
68
+
69
+ option :daemonize,
70
+ :short => "-d",
71
+ :long => "--daemonize",
72
+ :description => "Daemonize the process",
73
+ :proc => lambda { |p| true }
74
+
75
+ option :interval,
76
+ :short => "-i SECONDS",
77
+ :long => "--interval SECONDS",
78
+ :description => "Run chef-client periodically, in seconds",
79
+ :proc => lambda { |s| s.to_i }
80
+
81
+ option :json_attribs,
82
+ :short => "-j JSON_ATTRIBS",
83
+ :long => "--json-attributes JSON_ATTRIBS",
84
+ :description => "Load attributes from a JSON file or URL",
85
+ :proc => nil
86
+
87
+ option :node_name,
88
+ :short => "-N NODE_NAME",
89
+ :long => "--node-name NODE_NAME",
90
+ :description => "The node name for this client",
91
+ :proc => nil
92
+
93
+ option :splay,
94
+ :short => "-s SECONDS",
95
+ :long => "--splay SECONDS",
96
+ :description => "The splay time for running at intervals, in seconds",
97
+ :proc => lambda { |s| s.to_i }
98
+
99
+ option :recipe_url,
100
+ :short => "-r RECIPE_URL",
101
+ :long => "--recipe-url RECIPE_URL",
102
+ :description => "Pull down a remote gzipped tarball of recipes and untar it to the cookbook cache.",
103
+ :proc => nil
104
+
105
+ option :version,
106
+ :short => "-v",
107
+ :long => "--version",
108
+ :description => "Show chef version",
109
+ :boolean => true,
110
+ :proc => lambda {|v| puts "Chef: #{::Chef::VERSION}"},
111
+ :exit => 0
112
+
113
+ def initialize
114
+ super
115
+ @chef_solo = nil
116
+ @chef_solo_json = nil
117
+ end
118
+
119
+ def reconfigure
120
+ super
121
+
122
+ Chef::Config[:solo] = true
123
+
124
+ if Chef::Config[:daemonize]
125
+ Chef::Config[:interval] ||= 1800
126
+ end
127
+
128
+ if Chef::Config[:json_attribs]
129
+ begin
130
+ json_io = case Chef::Config[:json_attribs]
131
+ when /^(http|https):\/\//
132
+ @rest = Chef::REST.new(Chef::Config[:json_attribs], nil, nil)
133
+ @rest.get_rest(Chef::Config[:json_attribs], true).open
134
+ else
135
+ open(Chef::Config[:json_attribs])
136
+ end
137
+ rescue SocketError => error
138
+ Chef::Application.fatal!("I cannot connect to #{Chef::Config[:json_attribs]}", 2)
139
+ rescue Errno::ENOENT => error
140
+ Chef::Application.fatal!("I cannot find #{Chef::Config[:json_attribs]}", 2)
141
+ rescue Errno::EACCES => error
142
+ Chef::Application.fatal!("Permissions are incorrect on #{Chef::Config[:json_attribs]}. Please chmod a+r #{Chef::Config[:json_attribs]}", 2)
143
+ rescue Exception => error
144
+ Chef::Application.fatal!("Got an unexpected error reading #{Chef::Config[:json_attribs]}: #{error.message}", 2)
145
+ end
146
+
147
+ begin
148
+ @chef_solo_json = JSON.parse(json_io.read)
149
+ json_io.close unless json_io.closed?
150
+ rescue JSON::ParserError => error
151
+ Chef::Application.fatal!("Could not parse the provided JSON file (#{Chef::Config[:json_attribs]})!: " + error.message, 2)
152
+ end
153
+ end
154
+
155
+ if Chef::Config[:recipe_url]
156
+ cookbooks_path = Array(Chef::Config[:cookbook_path]).detect{|e| e =~ /\/cookbooks\/*$/ }
157
+ recipes_path = File.expand_path(File.join(cookbooks_path, '..'))
158
+ target_file = File.join(recipes_path, 'recipes.tgz')
159
+
160
+ Chef::Log.debug "Creating path #{recipes_path} to extract recipes into"
161
+ FileUtils.mkdir_p recipes_path
162
+ path = File.join(recipes_path, 'recipes.tgz')
163
+ File.open(path, 'wb') do |f|
164
+ open(Chef::Config[:recipe_url]) do |r|
165
+ f.write(r.read)
166
+ end
167
+ end
168
+ Chef::Mixin::Command.run_command(:command => "tar zxvfC #{path} #{recipes_path}")
169
+ end
170
+ end
171
+
172
+ def setup_application
173
+ Chef::Daemon.change_privilege
174
+ end
175
+
176
+ def run_application
177
+ if Chef::Config[:daemonize]
178
+ Chef::Daemon.daemonize("chef-client")
179
+ end
180
+
181
+ loop do
182
+ begin
183
+ if Chef::Config[:splay]
184
+ splay = rand Chef::Config[:splay]
185
+ Chef::Log.debug("Splay sleep #{splay} seconds")
186
+ sleep splay
187
+ end
188
+
189
+ @chef_solo = Chef::Client.new(@chef_solo_json)
190
+ @chef_solo.run
191
+ @chef_solo = nil
192
+ if Chef::Config[:interval]
193
+ Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
194
+ sleep Chef::Config[:interval]
195
+ else
196
+ Chef::Application.exit! "Exiting", 0
197
+ end
198
+ rescue SystemExit => e
199
+ raise
200
+ rescue Exception => e
201
+ if Chef::Config[:interval]
202
+ Chef::Log.error("#{e.class}")
203
+ Chef::Log.fatal("#{e}\n#{e.backtrace.join("\n")}")
204
+ Chef::Log.fatal("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
205
+ sleep Chef::Config[:interval]
206
+ retry
207
+ else
208
+ raise
209
+ end
210
+ ensure
211
+ GC.start
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,127 @@
1
+ #
2
+ # Author:: AJ Christensen (<aj@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 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
+ require 'chef/config'
19
+ require 'chef/exceptions'
20
+ require 'chef/log'
21
+ require 'mixlib/cli'
22
+
23
+ class Chef::Application
24
+ include Mixlib::CLI
25
+
26
+ def initialize
27
+ super
28
+
29
+ trap("TERM") do
30
+ Chef::Application.fatal!("SIGTERM received, stopping", 1)
31
+ end
32
+
33
+ trap("INT") do
34
+ Chef::Application.fatal!("SIGINT received, stopping", 2)
35
+ end
36
+
37
+ unless RUBY_PLATFORM =~ /mswin|mingw32|windows/
38
+ trap("HUP") do
39
+ Chef::Log.info("SIGHUP received, reconfiguring")
40
+ reconfigure
41
+ end
42
+ end
43
+
44
+ at_exit do
45
+ # tear down the logger
46
+ end
47
+
48
+ # Always switch to a readable directory. Keeps subsequent Dir.chdir() {}
49
+ # from failing due to permissions when launched as a less privileged user.
50
+ end
51
+
52
+ # Reconfigure the application. You'll want to override and super this method.
53
+ def reconfigure
54
+ configure_chef
55
+ configure_logging
56
+ end
57
+
58
+ # Get this party started
59
+ def run
60
+ reconfigure
61
+ setup_application
62
+ run_application
63
+ end
64
+
65
+ # Parse the configuration file
66
+ def configure_chef
67
+ parse_options
68
+
69
+ begin
70
+ case config[:config_file]
71
+ when /^(http|https):\/\//
72
+ Chef::REST.new("", nil, nil).fetch(config[:config_file]) { |f| apply_config(f.path) }
73
+ else
74
+ ::File::open(config[:config_file]) { |f| apply_config(f.path) }
75
+ end
76
+ rescue SocketError => error
77
+ Chef::Application.fatal!("Error getting config file #{Chef::Config[:config_file]}", 2)
78
+ rescue Exception => error
79
+ Chef::Log.warn("*****************************************")
80
+ Chef::Log.warn("Can not find config file: #{config[:config_file]}, using defaults.")
81
+ Chef::Log.warn("#{error.message}")
82
+ Chef::Log.warn("*****************************************")
83
+
84
+ Chef::Config.merge!(config)
85
+ end
86
+
87
+ end
88
+
89
+ # Initialize and configure the logger
90
+ def configure_logging
91
+ Chef::Log.init(Chef::Config[:log_location])
92
+ Chef::Log.level = Chef::Config[:log_level]
93
+ end
94
+
95
+ # Called prior to starting the application, by the run method
96
+ def setup_application
97
+ raise Chef::Exceptions::Application, "#{self.to_s}: you must override setup_application"
98
+ end
99
+
100
+ # Actually run the application
101
+ def run_application
102
+ raise Chef::Exceptions::Application, "#{self.to_s}: you must override run_application"
103
+ end
104
+
105
+ private
106
+
107
+ def apply_config(config_file_path)
108
+ Chef::Config.from_file(config_file_path)
109
+ Chef::Config.merge!(config)
110
+ end
111
+
112
+
113
+ class << self
114
+ # Log a fatal error message to both STDERR and the Logger, exit the application
115
+ def fatal!(msg, err = -1)
116
+ STDERR.puts("FATAL: #{msg}")
117
+ Chef::Log.fatal(msg)
118
+ Process.exit err
119
+ end
120
+
121
+ def exit!(msg, err = -1)
122
+ Chef::Log.debug(msg)
123
+ Process.exit err
124
+ end
125
+ end
126
+
127
+ end