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,304 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Author:: Christopher Brown (<cb@opscode.com>)
5
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
6
+ # Copyright:: Copyright (c) 2008-2010 Opscode, Inc.
7
+ # License:: Apache License, Version 2.0
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+
21
+ require 'chef/config'
22
+ require 'chef/mixin/params_validate'
23
+ require 'chef/log'
24
+ require 'chef/rest'
25
+ require 'chef/platform'
26
+ require 'chef/node'
27
+ require 'chef/role'
28
+ require 'chef/file_cache'
29
+ require 'chef/run_context'
30
+ require 'chef/runner'
31
+ require 'chef/cookbook/cookbook_collection'
32
+ require 'chef/cookbook/file_vendor'
33
+ require 'chef/cookbook/file_system_file_vendor'
34
+ require 'chef/cookbook/remote_file_vendor'
35
+ require 'chef/version'
36
+ require 'ohai'
37
+
38
+ class Chef
39
+ # == Chef::Client
40
+ # The main object in a Chef run. Preps a Chef::Node and Chef::RunContext,
41
+ # syncs cookbooks if necessary, and triggers convergence.
42
+ class Client
43
+
44
+ # Clears all notifications for client run status events.
45
+ # Primarily for testing purposes.
46
+ def self.clear_notifications
47
+ @run_start_notifications = nil
48
+ @run_completed_successfully_notifications = nil
49
+ @run_failed_notifications = nil
50
+ end
51
+
52
+ # The list of notifications to be run when the client run starts.
53
+ def self.run_start_notifications
54
+ @run_start_notifications ||= []
55
+ end
56
+
57
+ # The list of notifications to be run when the client run completes
58
+ # successfully.
59
+ def self.run_completed_successfully_notifications
60
+ @run_completed_successfully_notifications ||= []
61
+ end
62
+
63
+ # The list of notifications to be run when the client run fails.
64
+ def self.run_failed_notifications
65
+ @run_failed_notifications ||= []
66
+ end
67
+
68
+ # Add a notification for the 'client run started' event. The notification
69
+ # is provided as a block. The current Chef::RunStatus object will be passed
70
+ # to the notification_block when the event is triggered.
71
+ def self.when_run_starts(&notification_block)
72
+ run_start_notifications << notification_block
73
+ end
74
+
75
+ # Add a notification for the 'client run success' event. The notification
76
+ # is provided as a block. The current Chef::RunStatus object will be passed
77
+ # to the notification_block when the event is triggered.
78
+ def self.when_run_completes_successfully(&notification_block)
79
+ run_completed_successfully_notifications << notification_block
80
+ end
81
+
82
+ # Add a notification for the 'client run failed' event. The notification
83
+ # is provided as a block. The current Chef::RunStatus is passed to the
84
+ # notification_block when the event is triggered.
85
+ def self.when_run_fails(&notification_block)
86
+ run_failed_notifications << notification_block
87
+ end
88
+
89
+ # Callback to fire notifications that the Chef run is starting
90
+ def run_started
91
+ self.class.run_start_notifications.each do |notification|
92
+ notification.call(run_status)
93
+ end
94
+ end
95
+
96
+ # Callback to fire notifications that the run completed successfully
97
+ def run_completed_successfully
98
+ self.class.run_completed_successfully_notifications.each do |notification|
99
+ notification.call(run_status)
100
+ end
101
+ end
102
+
103
+ # Callback to fire notifications that the Chef run failed
104
+ def run_failed
105
+ self.class.run_failed_notifications.each do |notification|
106
+ notification.call(run_status)
107
+ end
108
+ end
109
+
110
+ attr_accessor :node
111
+ attr_accessor :ohai
112
+ attr_accessor :rest
113
+ attr_accessor :runner
114
+
115
+ #--
116
+ # TODO: timh/cw: 5-19-2010: json_attribs should be moved to RunContext?
117
+ attr_reader :json_attribs
118
+
119
+ attr_reader :run_status
120
+
121
+ # Creates a new Chef::Client.
122
+ def initialize(json_attribs=nil)
123
+ @json_attribs = json_attribs
124
+ @node = nil
125
+ @run_status = nil
126
+ @runner = nil
127
+ @ohai = Ohai::System.new
128
+ end
129
+
130
+ # Do a full run for this Chef::Client. Calls:
131
+ #
132
+ # * run_ohai - Collect information about the system
133
+ # * build_node - Get the last known state, merge with local changes
134
+ # * register - If not in solo mode, make sure the server knows about this client
135
+ # * sync_cookbooks - If not in solo mode, populate the local cache with the node's cookbooks
136
+ # * converge - Bring this system up to date
137
+ #
138
+ # === Returns
139
+ # true:: Always returns true.
140
+ def run
141
+ run_context = nil
142
+
143
+ run_ohai
144
+ register unless Chef::Config[:solo]
145
+ build_node
146
+
147
+ begin
148
+
149
+ run_status.start_clock
150
+ Chef::Log.info("Starting Chef Run (Version #{Chef::VERSION})")
151
+ run_started
152
+
153
+ if Chef::Config[:solo]
154
+ Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest) }
155
+ run_context = Chef::RunContext.new(node, Chef::CookbookCollection.new(Chef::CookbookLoader.new))
156
+ run_status.run_context = run_context
157
+ assert_cookbook_path_not_empty(run_context)
158
+ converge(run_context)
159
+ else
160
+ # Sync_cookbooks eagerly loads all files except files and templates.
161
+ # It returns the cookbook_hash -- the return result from
162
+ # /nodes/#{nodename}/cookbooks -- which we will use for our
163
+ # run_context.
164
+ Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::RemoteFileVendor.new(manifest, rest) }
165
+ cookbook_hash = sync_cookbooks
166
+ run_context = Chef::RunContext.new(node, Chef::CookbookCollection.new(cookbook_hash))
167
+ run_status.run_context = run_context
168
+
169
+ assert_cookbook_path_not_empty(run_context)
170
+
171
+ converge(run_context)
172
+ Chef::Log.debug("Saving the current state of node #{node_name}")
173
+ @node.save
174
+ end
175
+
176
+ run_status.stop_clock
177
+ Chef::Log.info("Chef Run complete in #{run_status.elapsed_time} seconds")
178
+ run_completed_successfully
179
+ true
180
+ rescue Exception => e
181
+ run_status.stop_clock
182
+ run_status.exception = e
183
+ run_failed
184
+ Chef::Log.debug("Re-raising exception: #{e.class} - #{e.message}\n#{e.backtrace.join("\n ")}")
185
+ raise
186
+ ensure
187
+ run_status = nil
188
+ end
189
+ end
190
+
191
+ def run_ohai
192
+ ohai.all_plugins
193
+ end
194
+
195
+ def node_name
196
+ name = Chef::Config[:node_name] || ohai[:fqdn] || ohai[:hostname]
197
+ Chef::Config[:node_name] = name
198
+
199
+ unless name
200
+ msg = "Unable to determine node name: configure node_name or configure the system's hostname and fqdn"
201
+ raise Chef::Exceptions::CannotDetermineNodeName, msg
202
+ end
203
+
204
+ name
205
+ end
206
+
207
+ # Builds a new node object for this client. Starts with querying for the FQDN of the current
208
+ # host (unless it is supplied), then merges in the facts from Ohai.
209
+ #
210
+ # === Returns
211
+ # node<Chef::Node>:: Returns the created node object, also stored in @node
212
+ def build_node
213
+ Chef::Log.debug("Building node object for #{@node_name}")
214
+
215
+ if Chef::Config[:solo]
216
+ @node = Chef::Node.build(node_name)
217
+ else
218
+ @node = Chef::Node.find_or_create(node_name)
219
+ end
220
+
221
+
222
+ @node.consume_external_attrs(ohai.data, @json_attribs)
223
+ @node.expand!
224
+ @node.save unless Chef::Config[:solo]
225
+ @node.reset_defaults_and_overrides
226
+
227
+ @run_status = Chef::RunStatus.new(@node)
228
+
229
+ @node
230
+ end
231
+
232
+ #
233
+ # === Returns
234
+ # rest<Chef::REST>:: returns Chef::REST connection object
235
+ def register
236
+ if File.exists?(Chef::Config[:client_key])
237
+ Chef::Log.debug("Client key #{Chef::Config[:client_key]} is present - skipping registration")
238
+ else
239
+ Chef::Log.info("Client key #{Chef::Config[:client_key]} is not present - registering")
240
+ Chef::REST.new(Chef::Config[:client_url], Chef::Config[:validation_client_name], Chef::Config[:validation_key]).register(node_name, Chef::Config[:client_key])
241
+ end
242
+ # We now have the client key, and should use it from now on.
243
+ self.rest = Chef::REST.new(Chef::Config[:chef_server_url], node_name, Chef::Config[:client_key])
244
+ end
245
+
246
+ # Synchronizes all the cookbooks from the chef-server.
247
+ #
248
+ # === Returns
249
+ # true:: Always returns true
250
+ def sync_cookbooks
251
+ Chef::Log.debug("Synchronizing cookbooks")
252
+ cookbook_hash = rest.get_rest("nodes/#{node_name}/cookbooks")
253
+ Chef::CookbookVersion.sync_cookbooks(cookbook_hash)
254
+
255
+ # register the file cache path in the cookbook path so that CookbookLoader actually picks up the synced cookbooks
256
+ Chef::Config[:cookbook_path] = File.join(Chef::Config[:file_cache_path], "cookbooks")
257
+
258
+ cookbook_hash
259
+ end
260
+
261
+ # Converges the node.
262
+ #
263
+ # === Returns
264
+ # true:: Always returns true
265
+ def converge(run_context)
266
+ Chef::Log.debug("Converging node #{node_name}")
267
+ @runner = Chef::Runner.new(run_context)
268
+ runner.converge
269
+ true
270
+ end
271
+
272
+ private
273
+
274
+ def directory_not_empty?(path)
275
+ File.exists?(path) && (Dir.entries(path).size > 2)
276
+ end
277
+
278
+ def is_last_element?(index, object)
279
+ object.kind_of?(Array) ? index == object.size - 1 : true
280
+ end
281
+
282
+ def assert_cookbook_path_not_empty(run_context)
283
+ if Chef::Config[:solo]
284
+ # Check for cookbooks in the path given
285
+ # Chef::Config[:cookbook_path] can be a string or an array
286
+ # if it's an array, go through it and check each one, raise error at the last one if no files are found
287
+ Chef::Log.debug "loading from cookbook_path: #{Array(Chef::Config[:cookbook_path]).map { |path| File.expand_path(path) }.join(', ')}"
288
+ Array(Chef::Config[:cookbook_path]).each_with_index do |cookbook_path, index|
289
+ if directory_not_empty?(cookbook_path)
290
+ break
291
+ else
292
+ msg = "No cookbook found in #{Chef::Config[:cookbook_path].inspect}, make sure cookbook_path is set correctly."
293
+ Chef::Log.fatal(msg)
294
+ raise Chef::Exceptions::CookbookNotFound, msg if is_last_element?(index, Chef::Config[:cookbook_path])
295
+ end
296
+ end
297
+ else
298
+ Chef::Log.warn("Node #{node_name} has an empty run list.") if run_context.node.run_list.empty?
299
+ end
300
+
301
+ end
302
+ end
303
+ end
304
+
@@ -0,0 +1,240 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Brown (<cb@opscode.com>)
4
+ # Author:: AJ Christensen (<aj@opscode.com>)
5
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require 'chef/log'
21
+ require 'mixlib/config'
22
+
23
+ class Chef
24
+ class Config
25
+
26
+ extend Mixlib::Config
27
+
28
+ # Manages the chef secret session key
29
+ # === Returns
30
+ # <newkey>:: A new or retrieved session key
31
+ #
32
+ def self.manage_secret_key
33
+ newkey = nil
34
+ if Chef::FileCache.has_key?("chef_server_cookie_id")
35
+ newkey = Chef::FileCache.load("chef_server_cookie_id")
36
+ else
37
+ chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
38
+ newkey = ""
39
+ 40.times { |i| newkey << chars[rand(chars.size-1)] }
40
+ Chef::FileCache.store("chef_server_cookie_id", newkey)
41
+ end
42
+ newkey
43
+ end
44
+
45
+ def self.inspect
46
+ configuration.inspect
47
+ end
48
+
49
+ # Override the config dispatch to set the value of multiple server options simultaneously
50
+ #
51
+ # === Parameters
52
+ # url<String>:: String to be set for all of the chef-server-api URL's
53
+ #
54
+ config_attr_writer :chef_server_url do |url|
55
+ configure do |c|
56
+ [ :registration_url,
57
+ :template_url,
58
+ :remotefile_url,
59
+ :search_url,
60
+ :chef_server_url,
61
+ :role_url ].each do |u|
62
+ c[u] = url
63
+ end
64
+ end
65
+ url
66
+ end
67
+
68
+ # When you are using ActiveSupport, they monkey-patch 'daemonize' into Kernel.
69
+ # So while this is basically identical to what method_missing would do, we pull
70
+ # it up here and get a real method written so that things get dispatched
71
+ # properly.
72
+ config_attr_writer :daemonize do |v|
73
+ configure do |c|
74
+ c[:daemonize] = v
75
+ end
76
+ end
77
+
78
+ # Override the config dispatch to set the value of log_location configuration option
79
+ #
80
+ # === Parameters
81
+ # location<IO||String>:: Logging location as either an IO stream or string representing log file path
82
+ #
83
+ config_attr_writer :log_location do |location|
84
+ if location.respond_to? :sync=
85
+ location
86
+ elsif location.respond_to? :to_str
87
+ f = File.new(location.to_str, "a")
88
+ f.sync = true
89
+ f
90
+ end
91
+ end
92
+
93
+ # Override the config dispatch to set the value of authorized_openid_providers when openid_providers (deprecated) is used
94
+ #
95
+ # === Parameters
96
+ # providers<Array>:: An array of openid providers that are authorized to login to the chef server
97
+ #
98
+ config_attr_writer :openid_providers do |providers|
99
+ configure { |c| c[:authorized_openid_providers] = providers }
100
+ providers
101
+ end
102
+
103
+ # Used when OpenID authentication is enabled in the Web UI
104
+ authorized_openid_identifiers nil
105
+ authorized_openid_providers nil
106
+ openid_cstore_couchdb false
107
+ openid_cstore_path "/var/chef/openid/cstore"
108
+
109
+ # The number of times the client should retry when registering with the server
110
+ client_registration_retries 5
111
+
112
+ # Where the cookbooks are located. Meaning is somewhat context dependent between
113
+ # knife, chef-client, and chef-solo.
114
+ cookbook_path [ "/var/chef/cookbooks", "/var/chef/site-cookbooks" ]
115
+
116
+ # Where files are stored temporarily during uploads
117
+ sandbox_path "/var/chef/sandboxes"
118
+
119
+ # Where cookbook files are stored on the server (by content checksum)
120
+ checksum_path "/var/chef/checksums"
121
+
122
+ # CouchDB database name to use
123
+ couchdb_database "chef"
124
+
125
+ couchdb_url "http://localhost:5984"
126
+
127
+ # Where chef's cache files should be stored
128
+ file_cache_path "/var/chef/cache"
129
+
130
+ # Where backups of chef-managed files should go
131
+ file_backup_path "/var/chef/backup"
132
+
133
+ ## Daemonization Settings ##
134
+ # What user should Chef run as?
135
+ user nil
136
+ # What group should the chef-server, -solr, -solr-indexer run as
137
+ group nil
138
+ umask 0022
139
+
140
+ http_retry_count 5
141
+ http_retry_delay 5
142
+ interval nil
143
+ json_attribs nil
144
+ log_level :info
145
+ log_location STDOUT
146
+ verbose_logging nil
147
+ node_name nil
148
+ node_path "/var/chef/node"
149
+
150
+ pid_file nil
151
+
152
+ chef_server_url "http://localhost:4000"
153
+ registration_url "http://localhost:4000"
154
+ template_url "http://localhost:4000"
155
+ role_url "http://localhost:4000"
156
+ remotefile_url "http://localhost:4000"
157
+ search_url "http://localhost:4000"
158
+
159
+ client_url "http://localhost:4042"
160
+
161
+ rest_timeout 300
162
+ run_command_stderr_timeout 120
163
+ run_command_stdout_timeout 120
164
+ solo false
165
+ splay nil
166
+
167
+ # Set these to enable SSL authentication / mutual-authentication
168
+ # with the server
169
+ ssl_client_cert nil
170
+ ssl_client_key nil
171
+ ssl_verify_mode :verify_none
172
+ ssl_ca_path nil
173
+ ssl_ca_file nil
174
+
175
+
176
+ # Where should chef-solo look for role files?
177
+ role_path "/var/chef/roles"
178
+
179
+ # Where should chef-solo download recipes from?
180
+ recipe_url nil
181
+
182
+ solr_url "http://localhost:8983"
183
+ solr_jetty_path "/var/chef/solr-jetty"
184
+ solr_data_path "/var/chef/solr/data"
185
+ solr_home_path "/var/chef/solr"
186
+ solr_heap_size "256M"
187
+ solr_java_opts nil
188
+
189
+ # Parameters for connecting to RabbitMQ
190
+ amqp_host '0.0.0.0'
191
+ amqp_port '5672'
192
+ amqp_user 'chef'
193
+ amqp_pass 'testing'
194
+ amqp_vhost '/chef'
195
+ # Setting this to a UUID string also makes the queue durable
196
+ # (persist across rabbitmq restarts)
197
+ amqp_consumer_id "default"
198
+
199
+ client_key "/etc/chef/client.pem"
200
+ validation_key "/etc/chef/validation.pem"
201
+ validation_client_name "chef-validator"
202
+ web_ui_client_name "chef-webui"
203
+ web_ui_key "/etc/chef/webui.pem"
204
+ web_ui_admin_user_name "admin"
205
+ web_ui_admin_default_password "p@ssw0rd1"
206
+
207
+ # Server Signing CA
208
+ #
209
+ # In truth, these don't even have to change
210
+ signing_ca_cert "/var/chef/ca/cert.pem"
211
+ signing_ca_key "/var/chef/ca/key.pem"
212
+ signing_ca_user nil
213
+ signing_ca_group nil
214
+ signing_ca_country "US"
215
+ signing_ca_state "Washington"
216
+ signing_ca_location "Seattle"
217
+ signing_ca_org "Chef User"
218
+ signing_ca_domain "opensource.opscode.com"
219
+ signing_ca_email "opensource-cert@opscode.com"
220
+
221
+ # Report Handlers
222
+ report_handlers []
223
+
224
+ # Exception Handlers
225
+ exception_handlers []
226
+
227
+ # Checksum Cache
228
+ # Uses Moneta on the back-end
229
+ cache_type "BasicFile"
230
+ cache_options({ :path => "/var/chef/cache/checksums", :skip_expires => true })
231
+
232
+ # Arbitrary knife configuration data
233
+ knife Hash.new
234
+
235
+ # Those lists of regular expressions define what chef considers a
236
+ # valid user and group name
237
+ user_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
238
+ group_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
239
+ end
240
+ end