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,228 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Nuo Yan (<nuo@opscode.com>)
4
+ # Author:: Christopher Brown (<cb@opscode.com>)
5
+ # Copyright:: Copyright (c) 2009 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
+
21
+ require 'chef/config'
22
+ require 'chef/mixin/params_validate'
23
+ require 'chef/mixin/from_file'
24
+ require 'chef/couchdb'
25
+ require 'chef/index_queue'
26
+ require 'chef/data_bag'
27
+ require 'extlib'
28
+ require 'json'
29
+
30
+ class Chef
31
+ class DataBagItem
32
+
33
+ include Chef::Mixin::FromFile
34
+ include Chef::Mixin::ParamsValidate
35
+ include Chef::IndexQueue::Indexable
36
+
37
+ DESIGN_DOCUMENT = {
38
+ "version" => 1,
39
+ "language" => "javascript",
40
+ "views" => {
41
+ "all" => {
42
+ "map" => <<-EOJS
43
+ function(doc) {
44
+ if (doc.chef_type == "data_bag_item") {
45
+ emit(doc.name, doc);
46
+ }
47
+ }
48
+ EOJS
49
+ },
50
+ "all_id" => {
51
+ "map" => <<-EOJS
52
+ function(doc) {
53
+ if (doc.chef_type == "data_bag_item") {
54
+ emit(doc.name, doc.name);
55
+ }
56
+ }
57
+ EOJS
58
+ }
59
+ }
60
+ }
61
+
62
+ attr_accessor :couchdb_rev, :couchdb_id, :couchdb
63
+ attr_reader :raw_data
64
+
65
+ # Create a new Chef::DataBagItem
66
+ def initialize(couchdb=nil)
67
+ @couchdb_rev = nil
68
+ @couchdb_id = nil
69
+ @data_bag = nil
70
+ @raw_data = Mash.new
71
+ @couchdb = couchdb || Chef::CouchDB.new
72
+ end
73
+
74
+ def chef_server_rest
75
+ Chef::REST.new(Chef::Config[:chef_server_url])
76
+ end
77
+
78
+ def self.chef_server_rest
79
+ Chef::REST.new(Chef::Config[:chef_server_url])
80
+ end
81
+
82
+ def raw_data
83
+ @raw_data
84
+ end
85
+
86
+ def raw_data=(new_data)
87
+ raise Exceptions::ValidationFailed, "Data Bag Items must contain a Hash or Mash!" unless new_data.kind_of?(Hash) || new_data.kind_of?(Mash)
88
+ raise Exceptions::ValidationFailed, "Data Bag Items must have an id key in the hash! #{new_data.inspect}" unless new_data.has_key?("id")
89
+ raise Exceptions::ValidationFailed, "Data Bag Item id does not match alphanumeric/-/_!" unless new_data["id"] =~ /^[\-[:alnum:]_]+$/
90
+ @raw_data = new_data
91
+ end
92
+
93
+ def data_bag(arg=nil)
94
+ set_or_return(
95
+ :data_bag,
96
+ arg,
97
+ :regex => /^[\-[:alnum:]_]+$/
98
+ )
99
+ end
100
+
101
+ def name
102
+ object_name
103
+ end
104
+
105
+ def object_name
106
+ raise Exceptions::ValidationFailed, "You must have an 'id' or :id key in the raw data" unless raw_data.has_key?('id')
107
+ raise Exceptions::ValidationFailed, "You must have declared what bag this item belongs to!" unless data_bag
108
+
109
+ id = raw_data['id']
110
+ "data_bag_item_#{data_bag}_#{id}"
111
+ end
112
+
113
+ def self.object_name(data_bag_name, id)
114
+ "data_bag_item_#{data_bag_name}_#{id}"
115
+ end
116
+
117
+ def to_hash
118
+ result = self.raw_data
119
+ result["chef_type"] = "data_bag_item"
120
+ result["data_bag"] = self.data_bag
121
+ result["_rev"] = @couchdb_rev if @couchdb_rev
122
+ result
123
+ end
124
+
125
+ # Serialize this object as a hash
126
+ def to_json(*a)
127
+ result = {
128
+ "name" => self.object_name,
129
+ "json_class" => self.class.name,
130
+ "chef_type" => "data_bag_item",
131
+ "data_bag" => self.data_bag,
132
+ "raw_data" => self.raw_data
133
+ }
134
+ result["_rev"] = @couchdb_rev if @couchdb_rev
135
+ result.to_json(*a)
136
+ end
137
+
138
+ # Create a Chef::DataBagItem from JSON
139
+ def self.json_create(o)
140
+ bag_item = new
141
+ bag_item.data_bag(o["data_bag"])
142
+ o.delete("data_bag")
143
+ o.delete("chef_type")
144
+ o.delete("json_class")
145
+ o.delete("name")
146
+ if o.has_key?("_rev")
147
+ bag_item.couchdb_rev = o["_rev"]
148
+ o.delete("_rev")
149
+ end
150
+ if o.has_key?("_id")
151
+ bag_item.couchdb_id = o["_id"]
152
+ bag_item.index_id = bag_item.couchdb_id
153
+ o.delete("_id")
154
+ end
155
+ bag_item.raw_data = Mash.new(o["raw_data"])
156
+ bag_item
157
+ end
158
+
159
+ # The Data Bag Item behaves like a hash - we pass all that stuff along to @raw_data.
160
+ def method_missing(method_symbol, *args, &block)
161
+ self.raw_data.send(method_symbol, *args, &block)
162
+ end
163
+
164
+ # Load a Data Bag Item by name from CouchDB
165
+ def self.cdb_load(data_bag, name, couchdb=nil)
166
+ (couchdb || Chef::CouchDB.new).load("data_bag_item", object_name(data_bag, name))
167
+ end
168
+
169
+ # Load a Data Bag Item by name via RESTful API
170
+ def self.load(data_bag, name)
171
+ Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{data_bag}/#{name}")
172
+ end
173
+
174
+ # Remove this Data Bag Item from CouchDB
175
+ def cdb_destroy
176
+ Chef::Log.debug "destroying data bag item: #{self.inspect}"
177
+ @couchdb.delete("data_bag_item", object_name, @couchdb_rev)
178
+ end
179
+
180
+ def destroy(data_bag=data_bag, databag_item=name)
181
+ chef_server_rest.delete_rest("data/#{data_bag}/#{databag_item}")
182
+ end
183
+
184
+ # Save this Data Bag Item to CouchDB
185
+ def cdb_save
186
+ @couchdb_rev = @couchdb.store("data_bag_item", object_name, self)["rev"]
187
+ end
188
+
189
+ # Save this Data Bag Item via RESTful API
190
+ def save(item_id=@raw_data['id'])
191
+ r = chef_server_rest
192
+ begin
193
+ r.put_rest("data/#{data_bag}/#{item_id}", @raw_data)
194
+ rescue Net::HTTPServerException => e
195
+ raise e unless e.response.code == "404"
196
+ r.post_rest("data/#{data_bag}", @raw_data)
197
+ end
198
+ self
199
+ end
200
+
201
+ # Create this Data Bag Item via RESTful API
202
+ def create
203
+ chef_server_rest.post_rest("data/#{data_bag}", @raw_data)
204
+ self
205
+ end
206
+
207
+ # Set up our CouchDB design document
208
+ def self.create_design_document(couchdb=nil)
209
+ (couchdb || Chef::CouchDB.new).create_design_document("data_bag_items", DESIGN_DOCUMENT)
210
+ end
211
+
212
+ # As a string
213
+ def to_s
214
+ "data_bag_item[#{id}]"
215
+ end
216
+
217
+ def pretty_print(pretty_printer)
218
+ pretty_printer.pp({"data_bag_item('#{data_bag}', '#{id}')" => self.to_hash})
219
+ end
220
+
221
+ def id
222
+ @raw_data['id']
223
+ end
224
+
225
+ end
226
+ end
227
+
228
+
@@ -0,0 +1,66 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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
+ class Chef
19
+ # == Chef::Exceptions
20
+ # Chef's custom exceptions are all contained within the Chef::Exceptions
21
+ # namespace.
22
+ class Exceptions
23
+ class Application < RuntimeError; end
24
+ class Cron < RuntimeError; end
25
+ class Env < RuntimeError; end
26
+ class Exec < RuntimeError; end
27
+ class FileNotFound < RuntimeError; end
28
+ class Package < RuntimeError; end
29
+ class Service < RuntimeError; end
30
+ class Route < RuntimeError; end
31
+ class SearchIndex < RuntimeError; end
32
+ class Override < RuntimeError; end
33
+ class UnsupportedAction < RuntimeError; end
34
+ class MissingLibrary < RuntimeError; end
35
+ class MissingRole < RuntimeError; end
36
+ class CannotDetermineNodeName < RuntimeError; end
37
+ class User < RuntimeError; end
38
+ class Group < RuntimeError; end
39
+ class Link < RuntimeError; end
40
+ class Mount < RuntimeError; end
41
+ class CouchDBNotFound < RuntimeError; end
42
+ class PrivateKeyMissing < RuntimeError; end
43
+ class CannotWritePrivateKey < RuntimeError; end
44
+ class RoleNotFound < RuntimeError; end
45
+ class ValidationFailed < ArgumentError; end
46
+ class InvalidPrivateKey < ArgumentError; end
47
+ class ConfigurationError < ArgumentError; end
48
+ class RedirectLimitExceeded < RuntimeError; end
49
+ class AmbiguousRunlistSpecification < ArgumentError; end
50
+ class CookbookNotFound < RuntimeError; end
51
+ class AttributeNotFound < RuntimeError; end
52
+ class InvalidCommandOption < RuntimeError; end
53
+ class CommandTimeout < RuntimeError; end
54
+ class ShellCommandFailed < RuntimeError; end
55
+ class RequestedUIDUnavailable < RuntimeError; end
56
+ class InvalidHomeDirectory < ArgumentError; end
57
+ class DsclCommandFailed < RuntimeError; end
58
+ class UserIDNotFound < ArgumentError; end
59
+ class GroupIDNotFound < ArgumentError; end
60
+ class InvalidResourceReference < RuntimeError; end
61
+ class ResourceNotFound < RuntimeError; end
62
+ class InvalidResourceSpecification < ArgumentError; end
63
+ class SolrConnectionError < RuntimeError; end
64
+ class IllegalChecksumRevert < RuntimeError; end
65
+ end
66
+ end
@@ -0,0 +1,140 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008, 2010 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'chef/log'
21
+
22
+ class Chef
23
+
24
+ # == Chef::FileAccessControl
25
+ # FileAccessControl objects set the owner, group and mode of +file+ to
26
+ # the values specified by a value object, usually a Chef::Resource.
27
+ class FileAccessControl
28
+ UINT = (1 << 32)
29
+ UID_MAX = (1 << 31)
30
+
31
+ attr_reader :resource
32
+
33
+ attr_reader :file
34
+
35
+ # FileAccessControl objects set the owner, group and mode of +file+ to
36
+ # the values specified by +resource+. +file+ is completely independent
37
+ # of any file or path attribute on +resource+, so it is possible to set
38
+ # access control settings on a tempfile (for example).
39
+ # === Arguments:
40
+ # resource: probably a Chef::Resource::File object (or subclass), but
41
+ # this is not required. Must respond to +owner+, +group+,
42
+ # and +mode+
43
+ # file: The file whose access control settings you wish to modify,
44
+ # given as a String.
45
+ def initialize(resource, file)
46
+ @resource, @file = resource, file
47
+ @modified = false
48
+ end
49
+
50
+ def modified?
51
+ @modified
52
+ end
53
+
54
+ def set_all
55
+ set_owner
56
+ set_group
57
+ set_mode
58
+ end
59
+
60
+ # Workaround the fact that Ruby's Etc module doesn't believe in negative
61
+ # uids, so negative uids show up as the diminished radix complement of
62
+ # a uint. For example, a uid of -2 is reported as 4294967294
63
+ def dimished_radix_complement(int)
64
+ if int > UID_MAX
65
+ int - UINT
66
+ else
67
+ int
68
+ end
69
+ end
70
+
71
+ def target_uid
72
+ return nil if resource.owner.nil?
73
+ if resource.owner.kind_of?(String)
74
+ dimished_radix_complement( Etc.getpwnam(resource.owner).uid )
75
+ elsif resource.owner.kind_of?(Integer)
76
+ resource.owner
77
+ else
78
+ Chef::Log.error("The `owner` parameter of the #@resource resource is set to an invalid value (#{resource.owner.inspect})")
79
+ raise ArgumentError, "cannot resolve #{resource.owner.inspect} to uid, owner must be a string or integer"
80
+ end
81
+ rescue ArgumentError
82
+ raise Chef::Exceptions::UserIDNotFound, "cannot determine user id for '#{resource.owner}', does the user exist on this system?"
83
+ end
84
+
85
+ def set_owner
86
+ if (uid = target_uid) && (uid != stat.uid)
87
+ Chef::Log.debug("setting owner on #{file} to #{uid}")
88
+ File.chown(uid, nil, file)
89
+ modified
90
+ end
91
+ end
92
+
93
+ def target_gid
94
+ return nil if resource.group.nil?
95
+ if resource.group.kind_of?(String)
96
+ dimished_radix_complement( Etc.getgrnam(resource.group).gid )
97
+ elsif resource.group.kind_of?(Integer)
98
+ resource.group
99
+ else
100
+ Chef::Log.error("The `group` parameter of the #@resource resource is set to an invalid value (#{resource.owner.inspect})")
101
+ raise ArgumentError, "cannot resolve #{resource.group.inspect} to gid, group must be a string or integer"
102
+ end
103
+ rescue ArgumentError
104
+ raise Chef::Exceptions::GroupIDNotFound, "cannot determine group id for '#{resource.group}', does the group exist on this system?"
105
+ end
106
+
107
+ def set_group
108
+ if (gid = target_gid) && (gid != stat.gid)
109
+ Chef::Log.debug("setting group on #{file} to #{gid}")
110
+ File.chown(nil, gid, file)
111
+ modified
112
+ end
113
+ end
114
+
115
+ def target_mode
116
+ return nil if resource.mode.nil?
117
+ (resource.mode.respond_to?(:oct) ? resource.mode.oct : resource.mode.to_i) & 007777
118
+ end
119
+
120
+ def set_mode
121
+ if (mode = target_mode) && (mode != (stat.mode & 007777))
122
+ Chef::Log.debug("setting mode on #{file} to #{mode.to_s(8)}")
123
+ File.chmod(target_mode, file)
124
+ modified
125
+ end
126
+ end
127
+
128
+
129
+ def stat
130
+ @stat ||= ::File.stat(file)
131
+ end
132
+
133
+ private
134
+
135
+ def modified
136
+ @modified = true
137
+ end
138
+
139
+ end
140
+ end
@@ -0,0 +1,218 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@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/mixin/params_validate'
19
+ require 'chef/mixin/create_path'
20
+ require 'chef/exceptions'
21
+ require 'json'
22
+ require 'fileutils'
23
+
24
+ class Chef
25
+ class FileCache
26
+ class << self
27
+ include Chef::Mixin::ParamsValidate
28
+ include Chef::Mixin::CreatePath
29
+
30
+ # Write a file to the File Cache.
31
+ #
32
+ # === Parameters
33
+ # path<String>:: The path to the file you want to put in the cache - should
34
+ # be relative to file_cache_path
35
+ # contents<String>:: A string with the contents you want written to the file
36
+ #
37
+ # === Returns
38
+ # true
39
+ def store(path, contents)
40
+ validate(
41
+ {
42
+ :path => path,
43
+ :contents => contents
44
+ },
45
+ {
46
+ :path => { :kind_of => String },
47
+ :contents => { :kind_of => String },
48
+ }
49
+ )
50
+
51
+ file_path_array = File.split(path)
52
+ file_name = file_path_array.pop
53
+ cache_path = create_cache_path(File.join(file_path_array))
54
+ File.open(File.join(cache_path, file_name), "w") do |io|
55
+ io.print(contents)
56
+ end
57
+ true
58
+ end
59
+
60
+ # Move a file into the cache. Useful with the REST raw file output.
61
+ #
62
+ # === Parameters
63
+ # file<String>:: The path to the file you want in the cache
64
+ # path<String>:: The relative name you want the new file to use
65
+ def move_to(file, path)
66
+ validate(
67
+ {
68
+ :file => file,
69
+ :path => path
70
+ },
71
+ {
72
+ :file => { :kind_of => String },
73
+ :path => { :kind_of => String },
74
+ }
75
+ )
76
+
77
+ file_path_array = File.split(path)
78
+ file_name = file_path_array.pop
79
+ if File.exists?(file) && File.writable?(file)
80
+ FileUtils.mv(
81
+ file,
82
+ File.join(create_cache_path(File.join(file_path_array), true), file_name)
83
+ )
84
+ else
85
+ raise RuntimeError, "Cannot move #{file} to #{path}!"
86
+ end
87
+ end
88
+
89
+ # Read a file from the File Cache
90
+ #
91
+ # === Parameters
92
+ # path<String>:: The path to the file you want to load - should
93
+ # be relative to file_cache_path
94
+ # read<True/False>:: Whether to return the file contents, or the path.
95
+ # Defaults to true.
96
+ #
97
+ # === Returns
98
+ # String:: A string with the file contents, or the path to the file.
99
+ #
100
+ # === Raises
101
+ # Chef::Exceptions::FileNotFound:: If it cannot find the file in the cache
102
+ def load(path, read=true)
103
+ validate(
104
+ {
105
+ :path => path
106
+ },
107
+ {
108
+ :path => { :kind_of => String }
109
+ }
110
+ )
111
+ cache_path = create_cache_path(path, false)
112
+ raise Chef::Exceptions::FileNotFound, "Cannot find #{cache_path} for #{path}!" unless File.exists?(cache_path)
113
+ if read
114
+ File.read(cache_path)
115
+ else
116
+ cache_path
117
+ end
118
+ end
119
+
120
+ # Delete a file from the File Cache
121
+ #
122
+ # === Parameters
123
+ # path<String>:: The path to the file you want to delete - should
124
+ # be relative to file_cache_path
125
+ #
126
+ # === Returns
127
+ # true
128
+ def delete(path)
129
+ validate(
130
+ {
131
+ :path => path
132
+ },
133
+ {
134
+ :path => { :kind_of => String },
135
+ }
136
+ )
137
+ cache_path = create_cache_path(path, false)
138
+ if File.exists?(cache_path)
139
+ File.unlink(cache_path)
140
+ end
141
+ true
142
+ end
143
+
144
+ # List all the files in the Cache
145
+ #
146
+ # === Returns
147
+ # Array:: An array of files in the cache, suitable for use with load, delete and store
148
+ def list
149
+ find("**#{File::Separator}*")
150
+ end
151
+
152
+ ##
153
+ # Find files in the cache by +glob_pattern+
154
+ # === Returns
155
+ # [String] - An array of file cache keys matching the glob
156
+ def find(glob_pattern)
157
+ keys = Array.new
158
+ Dir[File.join(file_cache_path, glob_pattern)].each do |f|
159
+ if File.file?(f)
160
+ keys << f[/^#{Regexp.escape(Dir[file_cache_path].first) + File::Separator}(.+)/, 1]
161
+ end
162
+ end
163
+ keys
164
+ end
165
+
166
+ # Whether or not this file exists in the Cache
167
+ #
168
+ # === Parameters
169
+ # path:: The path to the file you want to check - is relative
170
+ # to file_cache_path
171
+ #
172
+ # === Returns
173
+ # True:: If the file exists
174
+ # False:: If it does not
175
+ def has_key?(path)
176
+ validate(
177
+ {
178
+ :path => path
179
+ },
180
+ {
181
+ :path => { :kind_of => String },
182
+ }
183
+ )
184
+ full_path = create_cache_path(path, false)
185
+ if File.exists?(full_path)
186
+ true
187
+ else
188
+ false
189
+ end
190
+ end
191
+
192
+ # Create a full path to a given file in the cache. By default,
193
+ # also creates the path if it does not exist.
194
+ #
195
+ # === Parameters
196
+ # path:: The path to create, relative to file_cache_path
197
+ # create_if_missing:: True by default - whether to create the path if it does not exist
198
+ #
199
+ # === Returns
200
+ # String:: The fully expanded path
201
+ def create_cache_path(path, create_if_missing=true)
202
+ cache_dir = File.expand_path(File.join(file_cache_path, path))
203
+ if create_if_missing
204
+ create_path(cache_dir)
205
+ else
206
+ cache_dir
207
+ end
208
+ end
209
+
210
+ private
211
+
212
+ def file_cache_path
213
+ Chef::Config[:file_cache_path]
214
+ end
215
+
216
+ end
217
+ end
218
+ end