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,133 @@
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/provider/package'
20
+ require 'chef/mixin/command'
21
+ require 'chef/resource/package'
22
+ require 'singleton'
23
+
24
+ class Chef
25
+ class Provider
26
+ class Package
27
+ class Zypper < Chef::Provider::Package
28
+
29
+
30
+ def load_current_resource
31
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
32
+ @current_resource.package_name(@new_resource.package_name)
33
+
34
+ is_installed=false
35
+ is_out_of_date=false
36
+ version=''
37
+ oud_version=''
38
+ Chef::Log.debug("Checking zypper for #{@new_resource.package_name}")
39
+ status = popen4("zypper info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
40
+ stdout.each do |line|
41
+ case line
42
+ when /^Version: (.+)$/
43
+ version = $1
44
+ Chef::Log.debug("zypper version=#{$1}")
45
+ when /^Installed: Yes$/
46
+ is_installed=true
47
+ Chef::Log.debug("zypper installed true")
48
+
49
+ when /^Installed: No$/
50
+ is_installed=false
51
+ Chef::Log.debug("zypper installed false")
52
+ when /^Status: out-of-date \(version (.+) installed\)$/
53
+ is_out_of_date=true
54
+ oud_version=$1
55
+ Chef::Log.debug("zypper out of date version=#{$1}")
56
+ end
57
+ end
58
+ end
59
+
60
+ if is_installed==false
61
+ @candidate_version=version
62
+ @current_resource.version(nil)
63
+ Chef::Log.debug("dentro installed false");
64
+ end
65
+
66
+ if is_installed==true
67
+ if is_out_of_date==true
68
+ @current_resource.version(oud_version)
69
+ @candidate_version=version
70
+ Chef::Log.debug("dentro installed outofdate");
71
+ else
72
+ @current_resource.version(version)
73
+ @candidate_version=version
74
+ Chef::Log.debug("dentro installed");
75
+ end
76
+ end
77
+
78
+
79
+ unless status.exitstatus == 0
80
+ raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
81
+ end
82
+
83
+
84
+ Chef::Log.debug("zypper current resource #{@current_resource}")
85
+ @current_resource
86
+ end
87
+
88
+ def install_package(name, version)
89
+ if version
90
+ run_command(
91
+ :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
92
+ )
93
+ else
94
+ run_command(
95
+ :command => "zypper -n --no-gpg-checks install -l #{name}"
96
+ )
97
+ end
98
+ end
99
+
100
+ def upgrade_package(name, version)
101
+ if version
102
+ run_command(
103
+ :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
104
+ )
105
+ else
106
+ run_command(
107
+ :command => "zypper -n --no-gpg-checks install -l #{name}"
108
+ )
109
+ end
110
+ end
111
+
112
+ def remove_package(name, version)
113
+ if version
114
+ run_command(
115
+ :command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
116
+ )
117
+ else
118
+ run_command(
119
+ :command => "zypper -n --no-gpg-checks remove #{name}"
120
+ )
121
+ end
122
+
123
+
124
+ end
125
+
126
+ def purge_package(name, version)
127
+ remove_package(name, version)
128
+ end
129
+
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,160 @@
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/mixin/command'
20
+ require 'chef/log'
21
+ require 'chef/file_cache'
22
+ require 'chef/resource/remote_file'
23
+ require 'chef/platform'
24
+
25
+ class Chef
26
+ class Provider
27
+ class Package < Chef::Provider
28
+
29
+ include Chef::Mixin::Command
30
+
31
+ attr_accessor :candidate_version
32
+
33
+ def initialize(new_resource, run_context)
34
+ super
35
+ @candidate_version = nil
36
+ end
37
+
38
+ def action_install
39
+ # If we specified a version, and it's not the current version, move to the specified version
40
+ if @new_resource.version != nil && @new_resource.version != @current_resource.version
41
+ install_version = @new_resource.version
42
+ # If it's not installed at all, install it
43
+ elsif @current_resource.version == nil
44
+ install_version = candidate_version
45
+ else
46
+ return
47
+ end
48
+
49
+ unless install_version
50
+ raise(Chef::Exceptions::Package, "No version specified, and no candidate version available for #{@new_resource.package_name}")
51
+ end
52
+
53
+ Chef::Log.info("Installing #{@new_resource} version #{install_version}")
54
+
55
+ # We need to make sure we handle the preseed file
56
+ if @new_resource.response_file
57
+ preseed_package(@new_resource.package_name, install_version)
58
+ end
59
+
60
+ status = install_package(@new_resource.package_name, install_version)
61
+ if status
62
+ @new_resource.updated_by_last_action(true)
63
+ end
64
+ end
65
+
66
+ def action_upgrade
67
+ if @current_resource.version != candidate_version
68
+ orig_version = @current_resource.version || "uninstalled"
69
+ Chef::Log.info("Upgrading #{@new_resource} version from #{orig_version} to #{candidate_version}")
70
+ status = upgrade_package(@new_resource.package_name, candidate_version)
71
+ if status
72
+ @new_resource.updated_by_last_action(true)
73
+ end
74
+ end
75
+ end
76
+
77
+ def action_remove
78
+ if removing_package?
79
+ Chef::Log.info("Removing #{@new_resource}")
80
+ remove_package(@current_resource.package_name, @new_resource.version)
81
+ @new_resource.updated_by_last_action(true)
82
+ else
83
+ end
84
+ end
85
+
86
+ def removing_package?
87
+ if @current_resource.version.nil?
88
+ false # nothing to remove
89
+ elsif @new_resource.version.nil?
90
+ true # remove any version of a package
91
+ elsif @new_resource.version == @current_resource.version
92
+ true # remove the version we have
93
+ else
94
+ false # we don't have the version we want to remove
95
+ end
96
+ end
97
+
98
+ def action_purge
99
+ if removing_package?
100
+ Chef::Log.info("Purging #{@new_resource}")
101
+ purge_package(@current_resource.package_name, @new_resource.version)
102
+ @new_resource.updated_by_last_action(true)
103
+ end
104
+ end
105
+
106
+ def install_package(name, version)
107
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :install"
108
+ end
109
+
110
+ def upgrade_package(name, version)
111
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :upgrade"
112
+ end
113
+
114
+ def remove_package(name, version)
115
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remove"
116
+ end
117
+
118
+ def purge_package(name, version)
119
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :purge"
120
+ end
121
+
122
+ def preseed_package(name, version)
123
+ raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support pre-seeding package install/upgrade instructions - don't ask it to!"
124
+ end
125
+
126
+ def get_preseed_file(name, version)
127
+ resource = preseed_resource(name, version)
128
+ Chef::Log.debug("Fetching preseed file to #{resource.path}")
129
+ resource.run_action('create')
130
+
131
+ if resource.updated_by_last_action?
132
+ resource.path
133
+ else
134
+ false
135
+ end
136
+ end
137
+
138
+ def preseed_resource(name, version)
139
+ # A directory in our cache to store this cookbook's preseed files in
140
+ file_cache_dir = Chef::FileCache.create_cache_path("preseed/#{@new_resource.cookbook_name}")
141
+ # The full path where the preseed file will be stored
142
+ cache_seed_to = "#{file_cache_dir}/#{name}-#{version}.seed"
143
+
144
+ Chef::Log.debug("Fetching preseed file to #{cache_seed_to}")
145
+
146
+ remote_file = Chef::Resource::CookbookFile.new(cache_seed_to, run_context)
147
+ remote_file.cookbook_name = @new_resource.cookbook_name
148
+ remote_file.source(@new_resource.response_file)
149
+ remote_file.backup(false)
150
+
151
+ remote_file
152
+ end
153
+
154
+ def expand_options(options)
155
+ options ? " #{options}" : ""
156
+ end
157
+
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,140 @@
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/provider/file'
20
+ require 'chef/provider/directory'
21
+ #require 'chef/rest'
22
+ #require 'chef/mixin/find_preferred_file'
23
+ require 'chef/resource/directory'
24
+ require 'chef/resource/remote_file'
25
+ require 'chef/platform'
26
+ require 'uri'
27
+ require 'tempfile'
28
+ require 'net/https'
29
+ require 'set'
30
+
31
+ class Chef
32
+ class Provider
33
+ class RemoteDirectory < Chef::Provider::Directory
34
+
35
+ def action_create
36
+ super
37
+ Chef::Log.debug("Doing a remote recursive directory transfer for #{@new_resource}")
38
+
39
+ files_to_purge = Set.new(
40
+ Dir.glob(::File.join(@new_resource.path, '**', '*'), ::File::FNM_DOTMATCH).select do |name|
41
+ name !~ /(?:^|#{Regexp.escape(::File::SEPARATOR)})\.\.?$/
42
+ end
43
+ )
44
+ files_to_transfer.each do |cookbook_file_relative_path|
45
+ create_cookbook_file(cookbook_file_relative_path)
46
+ files_to_purge.delete(::File.dirname(::File.join(@new_resource.path, cookbook_file_relative_path)))
47
+ files_to_purge.delete(::File.join(@new_resource.path, cookbook_file_relative_path))
48
+ end
49
+ purge_unmanaged_files(files_to_purge)
50
+ end
51
+
52
+ def action_create_if_missing
53
+ # if this action is called, ignore the existing overwrite flag
54
+ @new_resource.overwrite = false
55
+ action_create
56
+ end
57
+
58
+ protected
59
+
60
+ def purge_unmanaged_files(unmanaged_files)
61
+ if @new_resource.purge
62
+ unmanaged_files.sort.reverse.each do |f|
63
+ if ::File.directory?(f)
64
+ Chef::Log.debug("Removing directory #{f}")
65
+ Dir::rmdir(f)
66
+ else
67
+ Chef::Log.debug("Deleting file #{f}")
68
+ ::File.delete(f)
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ def files_to_transfer
75
+ cookbook = run_context.cookbook_collection[resource_cookbook]
76
+ files = cookbook.relative_filenames_in_preferred_directory(node, :files, @new_resource.source)
77
+ files.sort.reverse
78
+ end
79
+
80
+ def directory_root_in_cookbook_cache
81
+ @directory_root_in_cookbook_cache ||= begin
82
+ cookbook = run_context.cookbook_collection[resource_cookbook]
83
+ cookbook.preferred_filename_on_disk_location(node, :files, @new_resource.source, @new_resource.path)
84
+ end
85
+ end
86
+
87
+ # Determine the cookbook to get the file from. If new resource sets an
88
+ # explicit cookbook, use it, otherwise fall back to the implicit cookbook
89
+ # i.e., the cookbook the resource was declared in.
90
+ def resource_cookbook
91
+ @new_resource.cookbook || @new_resource.cookbook_name
92
+ end
93
+
94
+ def create_cookbook_file(cookbook_file_relative_path)
95
+ full_path = ::File.join(@new_resource.path, cookbook_file_relative_path)
96
+
97
+ ensure_directory_exists(::File.dirname(full_path))
98
+
99
+ file_to_fetch = cookbook_file_resource(full_path, cookbook_file_relative_path)
100
+ if @new_resource.overwrite
101
+ file_to_fetch.run_action(:create)
102
+ else
103
+ file_to_fetch.run_action(:create_if_missing)
104
+ end
105
+ @new_resource.updated_by_last_action(true) if file_to_fetch.updated?
106
+ end
107
+
108
+ def cookbook_file_resource(target_path, relative_source_path)
109
+ cookbook_file = Chef::Resource::CookbookFile.new(target_path, run_context)
110
+ cookbook_file.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
111
+ cookbook_file.source(::File.join(@new_resource.source, relative_source_path))
112
+ cookbook_file.mode(@new_resource.files_mode) if @new_resource.files_mode
113
+ cookbook_file.group(@new_resource.files_group) if @new_resource.files_group
114
+ cookbook_file.owner(@new_resource.files_owner) if @new_resource.files_owner
115
+ cookbook_file.backup(@new_resource.files_backup) if @new_resource.files_backup
116
+
117
+ cookbook_file
118
+ end
119
+
120
+ def ensure_directory_exists(path)
121
+ unless ::File.directory?(path)
122
+ directory_to_create = resource_for_directory(path)
123
+ directory_to_create.run_action(:create)
124
+ @new_resource.updated_by_last_action(true) if directory_to_create.updated?
125
+ end
126
+ end
127
+
128
+ def resource_for_directory(path)
129
+ dir = Chef::Resource::Directory.new(path, run_context)
130
+ dir.cookbook_name = @new_resource.cookbook || @new_resource.cookbook_name
131
+ dir.mode(@new_resource.mode)
132
+ dir.group(@new_resource.group)
133
+ dir.owner(@new_resource.owner)
134
+ dir.recursive(true)
135
+ dir
136
+ end
137
+
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,120 @@
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/provider/file'
20
+ require 'chef/rest'
21
+ require 'chef/mixin/find_preferred_file'
22
+ require 'uri'
23
+ require 'tempfile'
24
+ require 'net/https'
25
+
26
+ class Chef
27
+ class Provider
28
+ class RemoteFile < Chef::Provider::File
29
+
30
+ include Chef::Mixin::FindPreferredFile
31
+
32
+ def load_current_resource
33
+ super
34
+ @current_resource.checksum(checksum(@current_resource.path)) if ::File.exist?(@current_resource.path)
35
+ end
36
+
37
+ def action_create
38
+ Chef::Log.debug("Checking #{@new_resource} for changes")
39
+
40
+ if current_resource_matches_target_checksum?
41
+ Chef::Log.debug("File #{@new_resource} checksum matches target checksum (#{@new_resource.checksum}), not updating")
42
+ else
43
+ Chef::REST.new(@new_resource.source, nil, nil).fetch(@new_resource.source) do |raw_file|
44
+ if matches_current_checksum?(raw_file)
45
+ Chef::Log.debug "#{@new_resource}: Target and Source checksums are the same, taking no action"
46
+ else
47
+ backup_new_resource
48
+ Chef::Log.debug "copying remote file from origin #{raw_file.path} to destination #{@new_resource.path}"
49
+ FileUtils.cp raw_file.path, @new_resource.path
50
+ @new_resource.updated_by_last_action(true)
51
+ end
52
+ end
53
+ end
54
+ enforce_ownership_and_permissions
55
+
56
+ @new_resource.updated_by_last_action?
57
+ end
58
+
59
+ def action_create_if_missing
60
+ if ::File.exists?(@new_resource.path)
61
+ Chef::Log.debug("File #{@new_resource.path} exists, taking no action.")
62
+ else
63
+ action_create
64
+ end
65
+ end
66
+
67
+ def enforce_ownership_and_permissions
68
+ set_owner if @new_resource.owner
69
+ set_group if @new_resource.group
70
+ set_mode if @new_resource.mode
71
+ end
72
+
73
+ def current_resource_matches_target_checksum?
74
+ @new_resource.checksum && @current_resource.checksum && @current_resource.checksum =~ /^#{Regexp.escape(@new_resource.checksum)}/
75
+ end
76
+
77
+ def matches_current_checksum?(candidate_file)
78
+ Chef::Log.debug "#{@new_resource}: Checking for file existence of #{@new_resource.path}"
79
+ if ::File.exists?(@new_resource.path)
80
+ Chef::Log.debug "#{@new_resource}: File exists at #{@new_resource.path}"
81
+ @new_resource.checksum(checksum(candidate_file.path))
82
+ Chef::Log.debug "#{@new_resource}: Target checksum: #{@current_resource.checksum}"
83
+ Chef::Log.debug "#{@new_resource}: Source checksum: #{@new_resource.checksum}"
84
+
85
+ @new_resource.checksum == @current_resource.checksum
86
+ else
87
+ Chef::Log.info "#{@new_resource}: Creating #{@new_resource.path}"
88
+ false
89
+ end
90
+ end
91
+
92
+ def backup_new_resource
93
+ if ::File.exists?(@new_resource.path)
94
+ Chef::Log.debug "#{@new_resource}: checksum changed from #{@current_resource.checksum} to #{@new_resource.checksum}"
95
+ Chef::Log.info "#{@new_resource}: Updating #{@new_resource.path}"
96
+ backup @new_resource.path
97
+ end
98
+ end
99
+
100
+ def source_file(source, current_checksum, &block)
101
+ if absolute_uri?(source)
102
+ fetch_from_uri(source, &block)
103
+ elsif !Chef::Config[:solo]
104
+ fetch_from_chef_server(source, current_checksum, &block)
105
+ else
106
+ fetch_from_local_cookbook(source, &block)
107
+ end
108
+ end
109
+
110
+ private
111
+
112
+ def absolute_uri?(source)
113
+ URI.parse(source).absolute?
114
+ rescue URI::InvalidURIError
115
+ false
116
+ end
117
+
118
+ end
119
+ end
120
+ end