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,114 @@
1
+ #
2
+ # Author:: Joe Williams (<joe@joetify.com>)
3
+ # Copyright:: Copyright (c) 2009 Joe Williams
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/provider/package'
20
+ require 'chef/mixin/command'
21
+ require 'chef/mixin/shell_out'
22
+ require 'chef/resource/package'
23
+ require 'chef/mixin/shell_out'
24
+
25
+ class Chef
26
+ class Provider
27
+ class Package
28
+ class EasyInstall < Chef::Provider::Package
29
+
30
+ include Chef::Mixin::ShellOut
31
+
32
+ def install_check(name)
33
+ check = false
34
+
35
+ begin
36
+ # first check to see if we can import it
37
+ output = shell_out!("python -c \"import #{name}\"").stderr
38
+ unless output.include? "ImportError"
39
+ check = true
40
+ end
41
+ rescue
42
+ # then check to see if its on the path
43
+ output = shell_out!("python -c \"import sys; print sys.path\"").stdout
44
+ if output.downcase.include? "#{name.downcase}"
45
+ check = true
46
+ end
47
+ end
48
+
49
+ check
50
+ end
51
+
52
+ def easy_install_binary_path
53
+ path = @new_resource.easy_install_binary
54
+ path ? path : 'easy_install'
55
+ end
56
+
57
+ def load_current_resource
58
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
59
+ @current_resource.package_name(@new_resource.package_name)
60
+ @current_resource.version(nil)
61
+
62
+ # get the currently installed version if installed
63
+ package_version = nil
64
+ if install_check(@new_resource.package_name)
65
+ begin
66
+ output = shell_out!("python -c \"import #{@new_resource.package_name}; print #{@new_resource.package_name}.__version__\"").stdout
67
+ package_version = output.strip
68
+ rescue
69
+ output = shell_out!("python -c \"import #{@new_resource.package_name}; print #{@new_resource.package_name}.__path__\"").stdout
70
+ output[/\S\S(.*)\/(.*)-(.*)-py(.*).egg\S/]
71
+ package_version = $3
72
+ end
73
+ end
74
+
75
+ if package_version == @new_resource.version
76
+ Chef::Log.debug("#{@new_resource.package_name} at version #{@new_resource.version}")
77
+ @current_resource.version(@new_resource.version)
78
+ else
79
+ Chef::Log.debug("#{@new_resource.package_name} at version #{package_version}")
80
+ @current_resource.version(package_version)
81
+ end
82
+
83
+ @current_resource
84
+ end
85
+
86
+ def candidate_version
87
+ return @candidate_version if @candidate_version
88
+
89
+ # do a dry run to get the latest version
90
+ result = shell_out!("#{easy_install_binary_path} -n #{@new_resource.package_name}", :returns=>[0,1])
91
+ @candidate_version = result.stdout[/(.*)Best match: (.*) (.*)$/, 3]
92
+ @candidate_version
93
+ end
94
+
95
+ def install_package(name, version)
96
+ run_command(:command => "#{easy_install_binary_path} \"#{name}==#{version}\"")
97
+ end
98
+
99
+ def upgrade_package(name, version)
100
+ install_package(name, version)
101
+ end
102
+
103
+ def remove_package(name, version)
104
+ run_command(:command => "#{easy_install_binary_path} -m #{name}")
105
+ end
106
+
107
+ def purge_package(name, version)
108
+ remove_package(name, version)
109
+ end
110
+
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,123 @@
1
+ #
2
+ # Authors:: Bryan McLellan (btm@loftninjas.org)
3
+ # Matthew Landauer (matthew@openaustralia.org)
4
+ # Copyright:: Copyright (c) 2009 Bryan McLellan, Matthew Landauer
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/provider/package'
21
+ require 'chef/mixin/shell_out'
22
+ require 'chef/resource/package'
23
+
24
+ class Chef
25
+ class Provider
26
+ class Package
27
+ class Freebsd < Chef::Provider::Package
28
+ include Chef::Mixin::ShellOut
29
+
30
+ def initialize(*args)
31
+ super
32
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
33
+ end
34
+
35
+ def current_installed_version
36
+ pkg_info = shell_out!("pkg_info -E \"#{package_name}*\"", :env => nil, :returns => [0,1])
37
+ pkg_info.stdout[/^#{package_name}-(.+)/, 1]
38
+ end
39
+
40
+ def port_path
41
+ case @new_resource.package_name
42
+ # When the package name starts with a '/' treat it as the full path to the ports directory
43
+ when /^\//
44
+ @new_resource.package_name
45
+ # Otherwise if the package name contains a '/' not at the start (like 'www/wordpress') treat as a relative
46
+ # path from /usr/ports
47
+ when /\//
48
+ "/usr/ports/#{@new_resource.package_name}"
49
+ # Otherwise look up the path to the ports directory using 'whereis'
50
+ else
51
+ whereis = shell_out!("whereis -s #{@new_resource.package_name}", :env => nil)
52
+ unless path = whereis.stdout[/^#{@new_resource.package_name}:\s+(.+)$/, 1]
53
+ raise Chef::Exceptions::Package, "Could not find port with the name #{@new_resource.package_name}"
54
+ end
55
+ path
56
+ end
57
+ end
58
+
59
+ def ports_makefile_variable_value(variable)
60
+ make_v = shell_out!("make -V #{variable}", :cwd => port_path, :env => nil, :returns => [0,1])
61
+ make_v.stdout.strip.split($\).first # $\ is the line separator, i.e., newline
62
+ end
63
+
64
+ def ports_candidate_version
65
+ ports_makefile_variable_value("PORTVERSION")
66
+ end
67
+
68
+ def load_current_resource
69
+ @current_resource.package_name(@new_resource.package_name)
70
+
71
+ @current_resource.version(current_installed_version)
72
+ Chef::Log.debug("Current version is #{@current_resource.version}") if @current_resource.version
73
+
74
+ @candidate_version = ports_candidate_version
75
+ Chef::Log.debug("Ports candidate version is #{@candidate_version}") if @candidate_version
76
+
77
+ @current_resource
78
+ end
79
+
80
+ def latest_link_name
81
+ ports_makefile_variable_value("LATEST_LINK")
82
+ end
83
+
84
+ # The name of the package (without the version number) as understood by pkg_add and pkg_info
85
+ def package_name
86
+ if ports_makefile_variable_value("PKGNAME") =~ /^(.+)-[^-]+$/
87
+ $1
88
+ else
89
+ raise Chef::Exceptions::Package, "Unexpected form for PKGNAME variable in #{port_path}/Makefile"
90
+ end
91
+ end
92
+
93
+ def install_package(name, version)
94
+ unless @current_resource.version
95
+ case @new_resource.source
96
+ when /^ports$/
97
+ shell_out!("make -DBATCH install", :cwd => port_path, :env => nil).status
98
+ when /^http/, /^ftp/
99
+ shell_out!("pkg_add -r #{package_name}", :env => { "PACKAGESITE" => @new_resource.source, 'LC_ALL' => nil }).status
100
+ Chef::Log.info("Installed package #{package_name} from: #{@new_resource.source}")
101
+ when /^\//
102
+ shell_out!("pkg_add #{@new_resource.name}", :env => { "PKG_PATH" => @new_resource.source , 'LC_ALL'=>nil}).status
103
+ Chef::Log.info("Installed package #{@new_resource.name} from: #{@new_resource.source}")
104
+ else
105
+ shell_out!("pkg_add -r #{latest_link_name}", :env => nil).status
106
+ Chef::Log.info("Installed package #{package_name}")
107
+ end
108
+ end
109
+ end
110
+
111
+ def remove_package(name, version)
112
+ # a version is mandatory
113
+ if version
114
+ shell_out!("pkg_delete #{package_name}-#{version}", :env => nil).status
115
+ else
116
+ shell_out!("pkg_delete #{package_name}-#{@current_resource.version}", :env => nil).status
117
+ end
118
+ end
119
+
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,105 @@
1
+ class Chef
2
+ class Provider
3
+ class Package
4
+ class Macports < Chef::Provider::Package
5
+ def load_current_resource
6
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
7
+ @current_resource.package_name(@new_resource.package_name)
8
+
9
+ @current_resource.version(current_installed_version)
10
+ Chef::Log.debug("Current version is #{@current_resource.version}") if @current_resource.version
11
+
12
+ @candidate_version = macports_candidate_version
13
+
14
+ if !@new_resource.version and !@candidate_version
15
+ raise Chef::Exceptions::Package, "Could not get a candidate version for this package -- #{@new_resource.name} does not seem to be a valid package!"
16
+ end
17
+
18
+ Chef::Log.debug("MacPorts candidate version is #{@candidate_version}") if @candidate_version
19
+
20
+ @current_resource
21
+ end
22
+
23
+ def current_installed_version
24
+ command = "port installed #{@new_resource.package_name}"
25
+ output = get_response_from_command(command)
26
+
27
+ response = nil
28
+ output.each_line do |line|
29
+ match = line.match(/^.+ @([^\s]+) \(active\)$/)
30
+ response = match[1] if match
31
+ end
32
+ response
33
+ end
34
+
35
+ def macports_candidate_version
36
+ command = "port info --version #{@new_resource.package_name}"
37
+ output = get_response_from_command(command)
38
+
39
+ match = output.match(/^version: (.+)$/)
40
+
41
+ match ? match[1] : nil
42
+ end
43
+
44
+ def install_package(name, version)
45
+ unless @current_resource.version == version
46
+ command = "port install #{name}"
47
+ command << " @#{version}" if version and !version.empty?
48
+ run_command_with_systems_locale(
49
+ :command => command
50
+ )
51
+ end
52
+ end
53
+
54
+ def purge_package(name, version)
55
+ command = "port uninstall #{name}"
56
+ command << " @#{version}" if version and !version.empty?
57
+ run_command_with_systems_locale(
58
+ :command => command
59
+ )
60
+ end
61
+
62
+ def remove_package(name, version)
63
+ command = "port deactivate #{name}"
64
+ command << " @#{version}" if version and !version.empty?
65
+
66
+ run_command_with_systems_locale(
67
+ :command => command
68
+ )
69
+ end
70
+
71
+ def upgrade_package(name, version)
72
+ # Saving this to a variable -- weird rSpec behavior
73
+ # happens otherwise...
74
+ current_version = @current_resource.version
75
+
76
+ if current_version.nil? or current_version.empty?
77
+ # Macports doesn't like when you upgrade a package
78
+ # that hasn't been installed.
79
+ install_package(name, version)
80
+ elsif current_version != version
81
+ run_command_with_systems_locale(
82
+ :command => "port upgrade #{name} @#{version}"
83
+ )
84
+ end
85
+ end
86
+
87
+ private
88
+ def get_response_from_command(command)
89
+ output = nil
90
+ status = popen4(command) do |pid, stdin, stdout, stderr|
91
+ begin
92
+ output = stdout.read
93
+ rescue Exception
94
+ raise Chef::Exceptions::Package, "Could not read from STDOUT on command: #{command}"
95
+ end
96
+ end
97
+ unless status.exitstatus == 0 || status.exitstatus == 1
98
+ raise Chef::Exceptions::Package, "#{command} failed - #{status.insect}!"
99
+ end
100
+ output
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,101 @@
1
+ #
2
+ # Author:: Jan Zimmek (<jan.zimmek@web.de>)
3
+ # Copyright:: Copyright (c) 2010 Jan Zimmek
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/provider/package'
20
+ require 'chef/mixin/command'
21
+ require 'chef/resource/package'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Package
26
+ class Pacman < Chef::Provider::Package
27
+
28
+ def load_current_resource
29
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
30
+ @current_resource.package_name(@new_resource.package_name)
31
+
32
+ @current_resource.version(nil)
33
+
34
+ Chef::Log.debug("Checking pacman for #{@new_resource.package_name}")
35
+ status = popen4("pacman -Qi #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
36
+ stdout.each do |line|
37
+ case line
38
+ when /^Version(\s?)*: (.+)$/
39
+ Chef::Log.debug("Current version is #{$2}")
40
+ @current_resource.version($2)
41
+ end
42
+ end
43
+ end
44
+
45
+ unless status.exitstatus == 0 || status.exitstatus == 1
46
+ raise Chef::Exceptions::Package, "pacman failed - #{status.inspect}!"
47
+ end
48
+
49
+ @current_resource
50
+ end
51
+
52
+ def candidate_version
53
+ return @candidate_version if @candidate_version
54
+
55
+ status = popen4("pacman -Ss #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
56
+ stdout.each do |line|
57
+ case line
58
+ when /^(extra|core|community)\/#{Regexp.escape(@new_resource.package_name)} (.+)$/
59
+ # $2 contains a string like "4.4.0-1 (kde kdenetwork)" or "3.10-4 (base)"
60
+ # simply split by space and use first token
61
+ @candidate_version = $2.split(" ").first
62
+ end
63
+ end
64
+ end
65
+
66
+ unless status.exitstatus == 0 || status.exitstatus == 1
67
+ raise Chef::Exceptions::Package, "pacman failed - #{status.inspect}!"
68
+ end
69
+
70
+ unless @candidate_version
71
+ raise Chef::Exceptions::Package, "pacman does not have a version of package #{@new_resource.package_name}"
72
+ end
73
+
74
+ @candidate_version
75
+
76
+ end
77
+
78
+ def install_package(name, version)
79
+ run_command_with_systems_locale(
80
+ :command => "pacman --sync --noconfirm --noprogressbar#{expand_options(@new_resource.options)} #{name}"
81
+ )
82
+ end
83
+
84
+ def upgrade_package(name, version)
85
+ install_package(name, version)
86
+ end
87
+
88
+ def remove_package(name, version)
89
+ run_command_with_systems_locale(
90
+ :command => "pacman --remove --noconfirm --noprogressbar#{expand_options(@new_resource.options)} #{name}"
91
+ )
92
+ end
93
+
94
+ def purge_package(name, version)
95
+ remove_package(name, version)
96
+ end
97
+
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,124 @@
1
+ #
2
+ # Author:: Ezra Zygmuntowicz (<ezra@engineyard.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/provider/package'
20
+ require 'chef/mixin/command'
21
+ require 'chef/resource/package'
22
+
23
+ class Chef
24
+ class Provider
25
+ class Package
26
+ class Portage < Chef::Provider::Package
27
+
28
+ def load_current_resource
29
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
30
+ @current_resource.package_name(@new_resource.package_name)
31
+
32
+ category = @new_resource.package_name.split('/').first
33
+ pkg = @new_resource.package_name.split('/').last
34
+
35
+ @current_resource.version(nil)
36
+
37
+ catdir = "/var/db/pkg/#{category}"
38
+
39
+ if( ::File.exists?(catdir) )
40
+ Dir.entries(catdir).each do |entry|
41
+ if(entry =~ /^#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?(-r\d+)?)/)
42
+ @current_resource.version($1)
43
+ Chef::Log.debug("Got current version #{$1}")
44
+ break
45
+ end
46
+ end
47
+ end
48
+
49
+ @current_resource
50
+ end
51
+
52
+
53
+ def parse_emerge(package, txt)
54
+ available, installed, pkg = nil
55
+ txt.each do |line|
56
+ if line =~ /\*(.*)/
57
+ pkg = $1.strip
58
+ end
59
+ if (pkg == package) || (pkg.split('/').last == package rescue false)
60
+ if line =~ /Latest version available: (.*)/
61
+ available = $1
62
+ elsif line =~ /Latest version installed: (.*)/
63
+ installed = $1
64
+ end
65
+ end
66
+ end
67
+ available = installed unless available
68
+ [available, installed]
69
+ end
70
+
71
+ def candidate_version
72
+ return @candidate_version if @candidate_version
73
+
74
+ status = popen4("emerge --color n --nospinner --search #{@new_resource.package_name.split('/').last}") do |pid, stdin, stdout, stderr|
75
+ available, installed = parse_emerge(@new_resource.package_name, stdout.read)
76
+ @candidate_version = available
77
+ end
78
+
79
+ unless status.exitstatus == 0
80
+ raise Chef::Exceptions::Package, "emerge --search failed - #{status.inspect}!"
81
+ end
82
+
83
+ @candidate_version
84
+
85
+ end
86
+
87
+
88
+ def install_package(name, version)
89
+ pkg = "=#{name}-#{version}"
90
+
91
+ if(version =~ /^\~(.+)/)
92
+ # If we start with a tilde
93
+ pkg = "~#{name}-#{$1}"
94
+ end
95
+
96
+ run_command_with_systems_locale(
97
+ :command => "emerge -g --color n --nospinner --quiet#{expand_options(@new_resource.options)} #{pkg}"
98
+ )
99
+ end
100
+
101
+ def upgrade_package(name, version)
102
+ install_package(name, version)
103
+ end
104
+
105
+ def remove_package(name, version)
106
+ if(version)
107
+ pkg = "=#{@new_resource.package_name}-#{version}"
108
+ else
109
+ pkg = "#{@new_resource.package_name}"
110
+ end
111
+
112
+ run_command_with_systems_locale(
113
+ :command => "emerge --unmerge --color n --nospinner --quiet#{expand_options(@new_resource.options)} #{pkg}"
114
+ )
115
+ end
116
+
117
+ def purge_package(name, version)
118
+ remove_package(name, version)
119
+ end
120
+
121
+ end
122
+ end
123
+ end
124
+ end