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,187 @@
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
+
19
+ require 'chef/config'
20
+ require 'chef/mixin/params_validate'
21
+ require 'chef/couchdb'
22
+ require 'chef/index_queue'
23
+ require 'digest/sha1'
24
+ require 'json'
25
+
26
+ class Chef
27
+ class OpenIDRegistration
28
+
29
+ attr_accessor :name, :salt, :validated, :password, :couchdb_rev, :admin
30
+
31
+ include Chef::Mixin::ParamsValidate
32
+ include Chef::IndexQueue::Indexable
33
+
34
+ DESIGN_DOCUMENT = {
35
+ "version" => 3,
36
+ "language" => "javascript",
37
+ "views" => {
38
+ "all" => {
39
+ "map" => <<-EOJS
40
+ function(doc) {
41
+ if (doc.chef_type == "openid_registration") {
42
+ emit(doc.name, doc);
43
+ }
44
+ }
45
+ EOJS
46
+ },
47
+ "all_id" => {
48
+ "map" => <<-EOJS
49
+ function(doc) {
50
+ if (doc.chef_type == "openid_registration") {
51
+ emit(doc.name, doc.name);
52
+ }
53
+ }
54
+ EOJS
55
+ },
56
+ "validated" => {
57
+ "map" => <<-EOJS
58
+ function(doc) {
59
+ if (doc.chef_type == "openid_registration") {
60
+ if (doc.validated == true) {
61
+ emit(doc.name, doc);
62
+ }
63
+ }
64
+ }
65
+ EOJS
66
+ },
67
+ "unvalidated" => {
68
+ "map" => <<-EOJS
69
+ function(doc) {
70
+ if (doc.chef_type == "openid_registration") {
71
+ if (doc.validated == false) {
72
+ emit(doc.name, doc);
73
+ }
74
+ }
75
+ }
76
+ EOJS
77
+ },
78
+ },
79
+ }
80
+
81
+ # Create a new Chef::OpenIDRegistration object.
82
+ def initialize()
83
+ @name = nil
84
+ @salt = nil
85
+ @password = nil
86
+ @validated = false
87
+ @admin = false
88
+ @couchdb_rev = nil
89
+ @couchdb = Chef::CouchDB.new
90
+ end
91
+
92
+ def name=(n)
93
+ @name = n.gsub(/\./, '_')
94
+ end
95
+
96
+ # Set the password for this object.
97
+ def set_password(password)
98
+ @salt = generate_salt
99
+ @password = encrypt_password(@salt, password)
100
+ end
101
+
102
+ # Serialize this object as a hash
103
+ def to_json(*a)
104
+ attributes = Hash.new
105
+ recipes = Array.new
106
+ result = {
107
+ 'name' => @name,
108
+ 'json_class' => self.class.name,
109
+ 'salt' => @salt,
110
+ 'password' => @password,
111
+ 'validated' => @validated,
112
+ 'admin' => @admin,
113
+ 'chef_type' => 'openid_registration',
114
+ }
115
+ result["_rev"] = @couchdb_rev if @couchdb_rev
116
+ result.to_json(*a)
117
+ end
118
+
119
+ # Create a Chef::Node from JSON
120
+ def self.json_create(o)
121
+ me = new
122
+ me.name = o["name"]
123
+ me.salt = o["salt"]
124
+ me.password = o["password"]
125
+ me.validated = o["validated"]
126
+ me.admin = o["admin"]
127
+ me.couchdb_rev = o["_rev"] if o.has_key?("_rev")
128
+ me
129
+ end
130
+
131
+ # List all the Chef::OpenIDRegistration objects in the CouchDB. If inflate is set to true, you will get
132
+ # the full list of all registration objects. Otherwise, you'll just get the IDs
133
+ def self.list(inflate=false)
134
+ rs = Chef::CouchDB.new.list("registrations", inflate)
135
+ if inflate
136
+ rs["rows"].collect { |r| r["value"] }
137
+ else
138
+ rs["rows"].collect { |r| r["key"] }
139
+ end
140
+ end
141
+
142
+ def self.cdb_list(*args)
143
+ list(*args)
144
+ end
145
+
146
+ # Load an OpenIDRegistration by name from CouchDB
147
+ def self.load(name)
148
+ Chef::CouchDB.new.load("openid_registration", name)
149
+ end
150
+
151
+ # Whether or not there is an OpenID Registration with this key.
152
+ def self.has_key?(name)
153
+ Chef::CouchDB.new.has_key?("openid_registration", name)
154
+ end
155
+
156
+ # Remove this OpenIDRegistration from the CouchDB
157
+ def destroy
158
+ @couchdb.delete("openid_registration", @name, @couchdb_rev)
159
+ end
160
+
161
+ # Save this OpenIDRegistration to the CouchDB
162
+ def save
163
+ results = @couchdb.store("openid_registration", @name, self)
164
+ @couchdb_rev = results["rev"]
165
+ end
166
+
167
+ # Set up our CouchDB design document
168
+ def self.create_design_document(couchdb=nil)
169
+ couchdb ||= Chef::CouchDB.new
170
+ couchdb.create_design_document("registrations", DESIGN_DOCUMENT)
171
+ end
172
+
173
+ protected
174
+
175
+ def generate_salt
176
+ salt = Time.now.to_s
177
+ chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
178
+ 1.upto(30) { |i| salt << chars[rand(chars.size-1)] }
179
+ salt
180
+ end
181
+
182
+ def encrypt_password(salt, password)
183
+ Digest::SHA1.hexdigest("--#{salt}--#{password}--")
184
+ end
185
+
186
+ end
187
+ end
@@ -0,0 +1,371 @@
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
+
19
+ require 'chef/config'
20
+ require 'chef/log'
21
+ require 'chef/mixin/params_validate'
22
+
23
+ # Actually, this file depends on nearly every provider in chef, but actually
24
+ # requiring them causes circular requires resulting in uninitialized constant
25
+ # errors.
26
+ require 'chef/provider'
27
+ require 'chef/provider/log'
28
+ require 'chef/provider/user'
29
+ require 'chef/provider/group'
30
+ require 'chef/provider/mount'
31
+ require 'chef/provider/service'
32
+ require 'chef/provider/package'
33
+
34
+
35
+ class Chef
36
+ class Platform
37
+
38
+ class << self
39
+ attr_writer :platforms
40
+
41
+ def platforms
42
+ @platforms ||= {
43
+ :mac_os_x => {
44
+ :default => {
45
+ :package => Chef::Provider::Package::Macports,
46
+ :user => Chef::Provider::User::Dscl,
47
+ :group => Chef::Provider::Group::Dscl
48
+ }
49
+ },
50
+ :freebsd => {
51
+ :default => {
52
+ :group => Chef::Provider::Group::Pw,
53
+ :package => Chef::Provider::Package::Freebsd,
54
+ :service => Chef::Provider::Service::Freebsd,
55
+ :user => Chef::Provider::User::Pw,
56
+ :cron => Chef::Provider::Cron
57
+ }
58
+ },
59
+ :ubuntu => {
60
+ :default => {
61
+ :package => Chef::Provider::Package::Apt,
62
+ :service => Chef::Provider::Service::Debian,
63
+ :cron => Chef::Provider::Cron,
64
+ :mdadm => Chef::Provider::Mdadm
65
+ }
66
+ },
67
+ :debian => {
68
+ :default => {
69
+ :package => Chef::Provider::Package::Apt,
70
+ :service => Chef::Provider::Service::Debian,
71
+ :cron => Chef::Provider::Cron,
72
+ :mdadm => Chef::Provider::Mdadm
73
+ }
74
+ },
75
+ :centos => {
76
+ :default => {
77
+ :service => Chef::Provider::Service::Redhat,
78
+ :cron => Chef::Provider::Cron,
79
+ :package => Chef::Provider::Package::Yum,
80
+ :mdadm => Chef::Provider::Mdadm
81
+ }
82
+ },
83
+ :amazon => {
84
+ :default => {
85
+ :service => Chef::Provider::Service::Redhat,
86
+ :cron => Chef::Provider::Cron,
87
+ :package => Chef::Provider::Package::Yum,
88
+ :mdadm => Chef::Provider::Mdadm
89
+ }
90
+ },
91
+ :scientific => {
92
+ :default => {
93
+ :service => Chef::Provider::Service::Redhat,
94
+ :cron => Chef::Provider::Cron,
95
+ :package => Chef::Provider::Package::Yum,
96
+ :mdadm => Chef::Provider::Mdadm
97
+ }
98
+ },
99
+ :fedora => {
100
+ :default => {
101
+ :service => Chef::Provider::Service::Redhat,
102
+ :cron => Chef::Provider::Cron,
103
+ :package => Chef::Provider::Package::Yum,
104
+ :mdadm => Chef::Provider::Mdadm
105
+ }
106
+ },
107
+ :suse => {
108
+ :default => {
109
+ :service => Chef::Provider::Service::Redhat,
110
+ :cron => Chef::Provider::Cron,
111
+ :package => Chef::Provider::Package::Zypper
112
+ }
113
+ },
114
+ :redhat => {
115
+ :default => {
116
+ :service => Chef::Provider::Service::Redhat,
117
+ :cron => Chef::Provider::Cron,
118
+ :package => Chef::Provider::Package::Yum,
119
+ :mdadm => Chef::Provider::Mdadm
120
+ }
121
+ },
122
+ :gentoo => {
123
+ :default => {
124
+ :package => Chef::Provider::Package::Portage,
125
+ :service => Chef::Provider::Service::Gentoo,
126
+ :cron => Chef::Provider::Cron,
127
+ :mdadm => Chef::Provider::Mdadm
128
+ }
129
+ },
130
+ :arch => {
131
+ :default => {
132
+ :package => Chef::Provider::Package::Pacman,
133
+ :service => Chef::Provider::Service::Arch,
134
+ :cron => Chef::Provider::Cron,
135
+ :mdadm => Chef::Provider::Mdadm
136
+ }
137
+ },
138
+ :mswin => {
139
+ :default => {
140
+ :env => Chef::Provider::Env::Windows,
141
+ :service => Chef::Provider::Service::Windows,
142
+ :user => Chef::Provider::User::Windows,
143
+ :group => Chef::Provider::Group::Windows,
144
+ :mount => Chef::Provider::Mount::Windows
145
+ }
146
+ },
147
+ :mingw32 => {
148
+ :default => {
149
+ :env => Chef::Provider::Env::Windows,
150
+ :service => Chef::Provider::Service::Windows,
151
+ :user => Chef::Provider::User::Windows,
152
+ :group => Chef::Provider::Group::Windows,
153
+ :mount => Chef::Provider::Mount::Windows
154
+ }
155
+ },
156
+ :windows => {
157
+ :default => {
158
+ :env => Chef::Provider::Env::Windows,
159
+ :service => Chef::Provider::Service::Windows,
160
+ :user => Chef::Provider::User::Windows,
161
+ :group => Chef::Provider::Group::Windows,
162
+ :mount => Chef::Provider::Mount::Windows
163
+ }
164
+ },
165
+ :solaris => {},
166
+ :solaris2 => {
167
+ :default => {
168
+ :service => Chef::Provider::Service::Solaris,
169
+ :package => Chef::Provider::Package::Solaris,
170
+ :cron => Chef::Provider::Cron::Solaris,
171
+ :group => Chef::Provider::Group::Usermod
172
+ }
173
+ },
174
+ :default => {
175
+ :file => Chef::Provider::File,
176
+ :directory => Chef::Provider::Directory,
177
+ :link => Chef::Provider::Link,
178
+ :template => Chef::Provider::Template,
179
+ :remote_directory => Chef::Provider::RemoteDirectory,
180
+ :execute => Chef::Provider::Execute,
181
+ :mount => Chef::Provider::Mount::Mount,
182
+ :script => Chef::Provider::Script,
183
+ :service => Chef::Provider::Service::Init,
184
+ :perl => Chef::Provider::Script,
185
+ :python => Chef::Provider::Script,
186
+ :ruby => Chef::Provider::Script,
187
+ :bash => Chef::Provider::Script,
188
+ :csh => Chef::Provider::Script,
189
+ :user => Chef::Provider::User::Useradd,
190
+ :group => Chef::Provider::Group::Gpasswd,
191
+ :http_request => Chef::Provider::HttpRequest,
192
+ :route => Chef::Provider::Route,
193
+ :ifconfig => Chef::Provider::Ifconfig,
194
+ :ruby_block => Chef::Provider::RubyBlock,
195
+ :erl_call => Chef::Provider::ErlCall,
196
+ :log => Chef::Provider::Log::ChefLog
197
+ }
198
+ }
199
+ end
200
+
201
+ include Chef::Mixin::ParamsValidate
202
+
203
+ def find(name, version)
204
+ provider_map = platforms[:default].clone
205
+
206
+ name_sym = name
207
+ if name.kind_of?(String)
208
+ name.downcase!
209
+ name.gsub!(/\s/, "_")
210
+ name_sym = name.to_sym
211
+ end
212
+
213
+ if platforms.has_key?(name_sym)
214
+ if platforms[name_sym].has_key?(version)
215
+ Chef::Log.debug("Platform #{name.to_s} version #{version} found")
216
+ if platforms[name_sym].has_key?(:default)
217
+ provider_map.merge!(platforms[name_sym][:default])
218
+ end
219
+ provider_map.merge!(platforms[name_sym][version])
220
+ elsif platforms[name_sym].has_key?(:default)
221
+ provider_map.merge!(platforms[name_sym][:default])
222
+ end
223
+ else
224
+ Chef::Log.debug("Platform #{name} not found, using all defaults. (Unsupported platform?)")
225
+ end
226
+ provider_map
227
+ end
228
+
229
+ def find_platform_and_version(node)
230
+ platform = nil
231
+ version = nil
232
+
233
+ if node[:platform]
234
+ platform = node[:platform]
235
+ elsif node.attribute?("os")
236
+ platform = node[:os]
237
+ end
238
+
239
+ raise ArgumentError, "Cannot find a platform for #{node}" unless platform
240
+
241
+ if node[:platform_version]
242
+ version = node[:platform_version]
243
+ elsif node[:os_version]
244
+ version = node[:os_version]
245
+ elsif node[:os_release]
246
+ version = node[:os_release]
247
+ end
248
+
249
+ raise ArgumentError, "Cannot find a version for #{node}" unless version
250
+
251
+ return platform, version
252
+ end
253
+
254
+ def provider_for_resource(resource)
255
+ node = resource.run_context && resource.run_context.node
256
+ raise ArgumentError, "Cannot find the provider for a resource with no run context set" unless node
257
+ find_provider_for_node(node, resource).new(resource, resource.run_context)
258
+ end
259
+
260
+ def provider_for_node(node, resource_type)
261
+ raise NotImplementedError, "#{self.class.name} no longer supports #provider_for_node"
262
+ find_provider_for_node(node, resource_type).new(node, resource_type)
263
+ end
264
+
265
+ def find_provider_for_node(node, resource_type)
266
+ platform, version = find_platform_and_version(node)
267
+ provider = find_provider(platform, version, resource_type)
268
+ end
269
+
270
+ def set(args)
271
+ validate(
272
+ args,
273
+ {
274
+ :platform => {
275
+ :kind_of => Symbol,
276
+ :required => false,
277
+ },
278
+ :version => {
279
+ :kind_of => String,
280
+ :required => false,
281
+ },
282
+ :resource => {
283
+ :kind_of => Symbol,
284
+ },
285
+ :provider => {
286
+ :kind_of => [ String, Symbol, Class ],
287
+ }
288
+ }
289
+ )
290
+ if args.has_key?(:platform)
291
+ if args.has_key?(:version)
292
+ if platforms.has_key?(args[:platform])
293
+ if platforms[args[:platform]].has_key?(args[:version])
294
+ platforms[args[:platform]][args[:version]][args[:resource].to_sym] = args[:provider]
295
+ else
296
+ platforms[args[:platform]][args[:version]] = {
297
+ args[:resource].to_sym => args[:provider]
298
+ }
299
+ end
300
+ else
301
+ platforms[args[:platform]] = {
302
+ args[:version] => {
303
+ args[:resource].to_sym => args[:provider]
304
+ }
305
+ }
306
+ end
307
+ else
308
+ if platforms.has_key?(args[:platform])
309
+ if platforms[args[:platform]].has_key?(:default)
310
+ platforms[args[:platform]][:default][args[:resource].to_sym] = args[:provider]
311
+ else
312
+ platforms[args[:platform]] = { :default => { args[:resource].to_sym => args[:provider] } }
313
+ end
314
+ else
315
+ platforms[args[:platform]] = {
316
+ :default => {
317
+ args[:resource].to_sym => args[:provider]
318
+ }
319
+ }
320
+ end
321
+ end
322
+ else
323
+ if platforms.has_key?(:default)
324
+ platforms[:default][args[:resource].to_sym] = args[:provider]
325
+ else
326
+ platforms[:default] = {
327
+ args[:resource].to_sym => args[:provider]
328
+ }
329
+ end
330
+ end
331
+ end
332
+
333
+ def find_provider(platform, version, resource_type)
334
+ pmap = Chef::Platform.find(platform, version)
335
+ provider_klass = explicit_provider(platform, version, resource_type) ||
336
+ platform_provider(platform, version, resource_type) ||
337
+ resource_matching_provider(platform, version, resource_type)
338
+
339
+ raise ArgumentError, "Cannot find a provider for #{resource_type} on #{platform} version #{version}" if provider_klass.nil?
340
+
341
+ provider_klass
342
+ end
343
+
344
+ private
345
+
346
+ def explicit_provider(platform, version, resource_type)
347
+ resource_type.kind_of?(Chef::Resource) ? resource_type.provider : nil
348
+ end
349
+
350
+ def platform_provider(platform, version, resource_type)
351
+ pmap = Chef::Platform.find(platform, version)
352
+ rtkey = resource_type.kind_of?(Chef::Resource) ? resource_type.resource_name.to_sym : resource_type
353
+ pmap.has_key?(rtkey) ? pmap[rtkey] : nil
354
+ end
355
+
356
+ def resource_matching_provider(platform, version, resource_type)
357
+ if resource_type.kind_of?(Chef::Resource)
358
+ begin
359
+ Chef::Provider.const_get(resource_type.class.to_s.split('::').last)
360
+ rescue NameError
361
+ nil
362
+ end
363
+ else
364
+ nil
365
+ end
366
+ end
367
+
368
+ end
369
+
370
+ end
371
+ end