chef 11.4.4 → 11.6.0.hotfix.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 (504) hide show
  1. data/README.md +1 -1
  2. data/Rakefile +18 -1
  3. data/bin/chef-service-manager +37 -0
  4. data/distro/common/html/chef-client.8.html +4 -4
  5. data/distro/common/html/chef-expander.8.html +4 -4
  6. data/distro/common/html/chef-expanderctl.8.html +4 -4
  7. data/distro/common/html/chef-server-webui.8.html +4 -4
  8. data/distro/common/html/chef-server.8.html +4 -4
  9. data/distro/common/html/chef-shell.1.html +4 -4
  10. data/distro/common/html/chef-solo.8.html +12 -18
  11. data/distro/common/html/chef-solr.8.html +4 -4
  12. data/distro/common/html/knife-bootstrap.1.html +4 -4
  13. data/distro/common/html/knife-client.1.html +4 -4
  14. data/distro/common/html/knife-configure.1.html +4 -4
  15. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  16. data/distro/common/html/knife-cookbook.1.html +7 -10
  17. data/distro/common/html/knife-data-bag.1.html +7 -10
  18. data/distro/common/html/knife-environment.1.html +6 -8
  19. data/distro/common/html/knife-exec.1.html +4 -4
  20. data/distro/common/html/knife-index.1.html +4 -4
  21. data/distro/common/html/knife-node.1.html +4 -4
  22. data/distro/common/html/knife-role.1.html +4 -4
  23. data/distro/common/html/knife-search.1.html +4 -4
  24. data/distro/common/html/knife-ssh.1.html +4 -4
  25. data/distro/common/html/knife-status.1.html +4 -4
  26. data/distro/common/html/knife-tag.1.html +4 -4
  27. data/distro/common/html/knife.1.html +4 -4
  28. data/distro/common/man/man1/chef-shell.1 +1 -1
  29. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  30. data/distro/common/man/man1/knife-client.1 +1 -1
  31. data/distro/common/man/man1/knife-configure.1 +1 -1
  32. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  33. data/distro/common/man/man1/knife-cookbook.1 +2 -15
  34. data/distro/common/man/man1/knife-data-bag.1 +2 -15
  35. data/distro/common/man/man1/knife-environment.1 +2 -12
  36. data/distro/common/man/man1/knife-exec.1 +1 -1
  37. data/distro/common/man/man1/knife-index.1 +1 -1
  38. data/distro/common/man/man1/knife-node.1 +1 -1
  39. data/distro/common/man/man1/knife-role.1 +1 -1
  40. data/distro/common/man/man1/knife-search.1 +1 -1
  41. data/distro/common/man/man1/knife-ssh.1 +1 -1
  42. data/distro/common/man/man1/knife-status.1 +1 -1
  43. data/distro/common/man/man1/knife-tag.1 +1 -1
  44. data/distro/common/man/man1/knife.1 +1 -1
  45. data/distro/common/man/man8/chef-client.8 +1 -1
  46. data/distro/common/man/man8/chef-expander.8 +1 -1
  47. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  48. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  49. data/distro/common/man/man8/chef-server.8 +1 -1
  50. data/distro/common/man/man8/chef-solo.8 +4 -36
  51. data/distro/common/man/man8/chef-solr.8 +1 -1
  52. data/distro/debian/etc/init.d/chef-client +4 -2
  53. data/distro/windows/service_manager.rb +2 -146
  54. data/lib/chef.rb +1 -1
  55. data/lib/chef/application.rb +5 -12
  56. data/lib/chef/application/apply.rb +2 -0
  57. data/lib/chef/application/client.rb +12 -12
  58. data/lib/chef/application/knife.rb +2 -2
  59. data/lib/chef/application/solo.rb +4 -5
  60. data/lib/chef/application/windows_service.rb +113 -56
  61. data/lib/chef/application/windows_service_manager.rb +179 -0
  62. data/lib/chef/chef_fs.rb +2 -4
  63. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  64. data/lib/chef/chef_fs/command_line.rb +145 -93
  65. data/lib/chef/chef_fs/config.rb +205 -0
  66. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  67. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  68. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  69. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  70. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  71. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  72. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  73. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  74. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  75. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  76. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  77. data/lib/chef/chef_fs/file_system.rb +195 -127
  78. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  79. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  80. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  81. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  82. data/lib/chef/chef_fs/file_system/base_fs_object.rb +98 -39
  83. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  84. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  85. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  86. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  87. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +14 -63
  88. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
  89. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
  90. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
  91. data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
  92. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  94. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
  95. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
  96. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
  97. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  98. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  99. data/lib/chef/chef_fs/file_system/file_system_entry.rb +8 -8
  100. data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
  101. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  102. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  103. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  104. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  105. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +2 -2
  106. data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
  107. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  108. data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
  109. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  110. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  111. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +42 -13
  112. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
  113. data/lib/chef/chef_fs/knife.rb +68 -29
  114. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  115. data/lib/chef/chef_fs/path_utils.rb +29 -3
  116. data/lib/chef/chef_fs/raw_request.rb +79 -0
  117. data/lib/chef/client.rb +46 -20
  118. data/lib/chef/config.rb +59 -61
  119. data/lib/chef/cookbook/chefignore.rb +2 -1
  120. data/lib/chef/cookbook/synchronizer.rb +8 -6
  121. data/lib/chef/cookbook/syntax_check.rb +17 -2
  122. data/lib/chef/cookbook_uploader.rb +10 -1
  123. data/lib/chef/cookbook_version.rb +0 -109
  124. data/lib/chef/data_bag.rb +15 -6
  125. data/lib/chef/deprecation/mixin/template.rb +49 -0
  126. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  127. data/lib/chef/deprecation/provider/file.rb +197 -0
  128. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  129. data/lib/chef/deprecation/provider/template.rb +63 -0
  130. data/lib/chef/deprecation/warnings.rb +38 -0
  131. data/lib/chef/encrypted_data_bag_item.rb +153 -61
  132. data/lib/chef/environment.rb +34 -3
  133. data/lib/chef/event_dispatch/base.rb +3 -0
  134. data/lib/chef/exceptions.rb +27 -2
  135. data/lib/chef/file_access_control/unix.rb +64 -7
  136. data/lib/chef/file_access_control/windows.rb +22 -11
  137. data/lib/chef/file_content_management/content_base.rb +56 -0
  138. data/lib/chef/file_content_management/deploy.rb +38 -0
  139. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  140. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  141. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  142. data/lib/chef/file_content_management/tempfile.rb +61 -0
  143. data/lib/chef/formatters/doc.rb +1 -1
  144. data/lib/chef/formatters/error_descriptor.rb +5 -4
  145. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  146. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
  147. data/lib/chef/json_compat.rb +3 -0
  148. data/lib/chef/knife.rb +12 -3
  149. data/lib/chef/knife/bootstrap.rb +46 -2
  150. data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
  151. data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
  152. data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
  153. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
  154. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
  155. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
  156. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
  157. data/lib/chef/knife/client_show.rb +2 -5
  158. data/lib/chef/knife/configure.rb +3 -3
  159. data/lib/chef/knife/cookbook_create.rb +6 -5
  160. data/lib/chef/knife/cookbook_download.rb +13 -5
  161. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  162. data/lib/chef/knife/cookbook_test.rb +1 -0
  163. data/lib/chef/knife/cookbook_upload.rb +4 -9
  164. data/lib/chef/knife/core/bootstrap_context.rb +10 -4
  165. data/lib/chef/knife/core/generic_presenter.rb +16 -0
  166. data/lib/chef/knife/core/node_editor.rb +1 -1
  167. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  168. data/lib/chef/knife/core/ui.rb +19 -4
  169. data/lib/chef/knife/delete.rb +76 -9
  170. data/lib/chef/knife/deps.rb +139 -0
  171. data/lib/chef/knife/diff.rb +22 -5
  172. data/lib/chef/knife/download.rb +16 -3
  173. data/lib/chef/knife/edit.rb +76 -0
  174. data/lib/chef/knife/environment_show.rb +2 -7
  175. data/lib/chef/knife/list.rb +91 -47
  176. data/lib/chef/knife/node_run_list_set.rb +66 -0
  177. data/lib/chef/knife/node_show.rb +1 -7
  178. data/lib/chef/knife/raw.rb +20 -64
  179. data/lib/chef/knife/role_show.rb +2 -4
  180. data/lib/chef/knife/search.rb +5 -6
  181. data/lib/chef/knife/show.rb +34 -11
  182. data/lib/chef/knife/ssh.rb +8 -0
  183. data/lib/chef/knife/upload.rb +23 -4
  184. data/lib/chef/knife/user_show.rb +2 -5
  185. data/lib/chef/knife/xargs.rb +265 -0
  186. data/lib/chef/log.rb +2 -2
  187. data/lib/chef/mixin/file_class.rb +0 -9
  188. data/lib/chef/mixin/language_include_recipe.rb +1 -1
  189. data/lib/chef/mixin/params_validate.rb +19 -9
  190. data/lib/chef/mixin/template.rb +126 -36
  191. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  192. data/lib/chef/monkey_patches/file.rb +26 -0
  193. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  194. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  195. data/lib/chef/monologger.rb +93 -0
  196. data/lib/chef/node.rb +4 -0
  197. data/lib/chef/platform.rb +4 -490
  198. data/lib/chef/platform/provider_mapping.rb +529 -0
  199. data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
  200. data/lib/chef/provider.rb +12 -9
  201. data/lib/chef/provider/batch.rb +35 -0
  202. data/lib/chef/provider/cookbook_file.rb +9 -78
  203. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  204. data/lib/chef/provider/deploy.rb +24 -20
  205. data/lib/chef/provider/deploy/revision.rb +27 -0
  206. data/lib/chef/provider/directory.rb +19 -22
  207. data/lib/chef/provider/execute.rb +22 -5
  208. data/lib/chef/provider/file.rb +299 -217
  209. data/lib/chef/provider/file/content.rb +39 -0
  210. data/lib/chef/provider/git.rb +76 -43
  211. data/lib/chef/provider/group/usermod.rb +2 -2
  212. data/lib/chef/provider/ifconfig.rb +25 -35
  213. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  214. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  215. data/lib/chef/provider/link.rb +10 -3
  216. data/lib/chef/provider/mount.rb +1 -1
  217. data/lib/chef/provider/mount/mount.rb +8 -3
  218. data/lib/chef/provider/mount/windows.rb +4 -1
  219. data/lib/chef/provider/package/portage.rb +9 -4
  220. data/lib/chef/provider/package/rubygems.rb +45 -10
  221. data/lib/chef/provider/package/smartos.rb +47 -36
  222. data/lib/chef/provider/package/yum.rb +19 -12
  223. data/lib/chef/provider/package/zypper.rb +45 -55
  224. data/lib/chef/provider/powershell_script.rb +77 -0
  225. data/lib/chef/provider/remote_directory.rb +5 -6
  226. data/lib/chef/provider/remote_file.rb +12 -108
  227. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  228. data/lib/chef/provider/remote_file/content.rb +75 -0
  229. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  230. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  231. data/lib/chef/provider/remote_file/http.rb +124 -0
  232. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  233. data/lib/chef/provider/route.rb +6 -2
  234. data/lib/chef/provider/script.rb +14 -2
  235. data/lib/chef/provider/service/macosx.rb +16 -10
  236. data/lib/chef/provider/service/solaris.rb +6 -5
  237. data/lib/chef/provider/template.rb +16 -78
  238. data/lib/chef/provider/template/content.rb +61 -0
  239. data/lib/chef/provider/user/solaris.rb +90 -0
  240. data/lib/chef/provider/user/useradd.rb +76 -63
  241. data/lib/chef/provider/windows_script.rb +73 -0
  242. data/lib/chef/providers.rb +16 -0
  243. data/lib/chef/resource.rb +23 -2
  244. data/lib/chef/resource/batch.rb +31 -0
  245. data/lib/chef/resource/conditional.rb +4 -0
  246. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  247. data/lib/chef/resource/file.rb +31 -3
  248. data/lib/chef/resource/link.rb +17 -0
  249. data/lib/chef/resource/lwrp_base.rb +1 -1
  250. data/lib/chef/resource/mount.rb +29 -2
  251. data/lib/chef/resource/powershell_script.rb +31 -0
  252. data/lib/chef/resource/remote_file.rb +47 -1
  253. data/lib/chef/resource/route.rb +1 -1
  254. data/lib/chef/resource/template.rb +145 -0
  255. data/lib/chef/resource/windows_script.rb +62 -0
  256. data/lib/chef/resource_collection.rb +45 -11
  257. data/lib/chef/resource_reporter.rb +81 -52
  258. data/lib/chef/resources.rb +2 -0
  259. data/lib/chef/rest.rb +13 -4
  260. data/lib/chef/rest/rest_request.rb +5 -1
  261. data/lib/chef/run_context/cookbook_compiler.rb +3 -3
  262. data/lib/chef/run_list/run_list_expansion.rb +1 -1
  263. data/lib/chef/run_lock.rb +7 -1
  264. data/lib/chef/runner.rb +0 -1
  265. data/lib/chef/scan_access_control.rb +6 -1
  266. data/lib/chef/search/query.rb +2 -2
  267. data/lib/chef/shell/shell_session.rb +2 -2
  268. data/lib/chef/util/backup.rb +84 -0
  269. data/lib/chef/util/diff.rb +145 -0
  270. data/lib/chef/util/file_edit.rb +1 -1
  271. data/lib/chef/util/selinux.rb +100 -0
  272. data/lib/chef/util/windows/net_user.rb +14 -1
  273. data/lib/chef/util/windows/volume.rb +2 -2
  274. data/lib/chef/version.rb +1 -1
  275. data/lib/chef/version/platform.rb +42 -0
  276. data/lib/chef/version_class.rb +1 -1
  277. data/lib/chef/version_constraint.rb +6 -5
  278. data/lib/chef/version_constraint/platform.rb +26 -0
  279. data/lib/chef/win32/api/file.rb +8 -2
  280. data/lib/chef/win32/version.rb +25 -8
  281. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  282. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  283. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  284. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  285. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  286. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  287. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  288. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  289. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  290. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  291. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  292. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  293. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  294. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  295. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  296. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  297. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  298. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  299. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  300. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  301. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  302. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  303. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  304. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  305. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  306. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  307. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  308. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  309. data/spec/data/apt/var/www/apt/db/version +4 -0
  310. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  311. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  312. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  313. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  314. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  315. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  316. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  317. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  318. data/spec/data/bootstrap/secret.erb +9 -0
  319. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  320. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  321. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  322. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  323. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  324. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  325. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  326. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  327. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  328. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  329. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  330. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  331. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  332. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  333. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  334. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  335. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  336. data/spec/data/null_config.rb +1 -0
  337. data/spec/data/partial_one.erb +1 -1
  338. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  339. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  340. data/spec/functional/knife/exec_spec.rb +2 -2
  341. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  342. data/spec/functional/resource/batch_spec.rb +64 -0
  343. data/spec/functional/resource/cookbook_file_spec.rb +2 -3
  344. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  345. data/spec/functional/resource/directory_spec.rb +2 -2
  346. data/spec/functional/resource/file_spec.rb +17 -1
  347. data/spec/functional/resource/git_spec.rb +259 -0
  348. data/spec/functional/resource/link_spec.rb +422 -388
  349. data/spec/functional/resource/package_spec.rb +297 -0
  350. data/spec/functional/resource/powershell_spec.rb +188 -0
  351. data/spec/functional/resource/registry_spec.rb +8 -4
  352. data/spec/functional/resource/remote_directory_spec.rb +2 -2
  353. data/spec/functional/resource/remote_file_spec.rb +97 -29
  354. data/spec/functional/resource/template_spec.rb +173 -17
  355. data/spec/functional/resource/user_spec.rb +547 -0
  356. data/spec/functional/run_lock_spec.rb +5 -0
  357. data/spec/functional/shell_spec.rb +2 -1
  358. data/spec/functional/win32/service_manager_spec.rb +269 -0
  359. data/spec/functional/win32/versions_spec.rb +78 -0
  360. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  361. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  362. data/spec/integration/knife/chefignore_spec.rb +271 -0
  363. data/spec/integration/knife/delete_spec.rb +944 -0
  364. data/spec/integration/knife/deps_spec.rb +648 -0
  365. data/spec/integration/knife/diff_spec.rb +536 -0
  366. data/spec/integration/knife/download_spec.rb +962 -0
  367. data/spec/integration/knife/list_spec.rb +633 -0
  368. data/spec/integration/knife/raw_spec.rb +166 -0
  369. data/spec/integration/knife/redirection_spec.rb +57 -0
  370. data/spec/integration/knife/show_spec.rb +158 -0
  371. data/spec/integration/knife/upload_spec.rb +1060 -0
  372. data/spec/integration/solo/solo_spec.rb +41 -0
  373. data/spec/spec_helper.rb +55 -1
  374. data/spec/support/chef_helpers.rb +32 -0
  375. data/spec/support/platform_helpers.rb +40 -0
  376. data/spec/support/platforms/win32/spec_service.rb +59 -0
  377. data/spec/support/shared/functional/directory_resource.rb +43 -16
  378. data/spec/support/shared/functional/file_resource.rb +661 -20
  379. data/spec/support/shared/functional/securable_resource.rb +109 -8
  380. data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
  381. data/spec/support/shared/integration/integration_helper.rb +166 -0
  382. data/spec/support/shared/integration/knife_support.rb +171 -0
  383. data/spec/support/shared/unit/execute_resource.rb +125 -0
  384. data/spec/support/shared/unit/file_system_support.rb +8 -48
  385. data/spec/support/shared/unit/provider/file.rb +609 -0
  386. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  387. data/spec/support/shared/unit/script_resource.rb +52 -0
  388. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  389. data/spec/tiny_server.rb +13 -11
  390. data/spec/unit/application/client_spec.rb +39 -1
  391. data/spec/unit/application/knife_spec.rb +12 -0
  392. data/spec/unit/application/solo_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +57 -2
  394. data/spec/unit/chef_fs/diff_spec.rb +30 -31
  395. data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
  396. data/spec/unit/chef_fs/file_system_spec.rb +2 -3
  397. data/spec/unit/client_spec.rb +20 -1
  398. data/spec/unit/config_spec.rb +70 -52
  399. data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
  400. data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
  401. data/spec/unit/cookbook_loader_spec.rb +3 -2
  402. data/spec/unit/daemon_spec.rb +7 -7
  403. data/spec/unit/data_bag_spec.rb +7 -0
  404. data/spec/unit/deprecation_spec.rb +86 -0
  405. data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
  406. data/spec/unit/environment_spec.rb +98 -0
  407. data/spec/unit/exceptions_spec.rb +6 -1
  408. data/spec/unit/file_access_control_spec.rb +21 -1
  409. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  410. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  411. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  412. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  413. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -2
  414. data/spec/unit/knife/bootstrap_spec.rb +128 -29
  415. data/spec/unit/knife/configure_spec.rb +42 -26
  416. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  417. data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
  418. data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
  419. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  420. data/spec/unit/knife/core/ui_spec.rb +41 -0
  421. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  422. data/spec/unit/knife_spec.rb +21 -0
  423. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
  424. data/spec/unit/mixin/params_validate_spec.rb +35 -0
  425. data/spec/unit/mixin/template_spec.rb +69 -57
  426. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  427. data/spec/unit/node_spec.rb +7 -0
  428. data/spec/unit/platform_spec.rb +15 -1
  429. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  430. data/spec/unit/provider/cookbook_file_spec.rb +26 -183
  431. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  432. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  433. data/spec/unit/provider/deploy_spec.rb +2 -2
  434. data/spec/unit/provider/directory_spec.rb +23 -23
  435. data/spec/unit/provider/execute_spec.rb +27 -1
  436. data/spec/unit/provider/file/content_spec.rb +101 -0
  437. data/spec/unit/provider/file_spec.rb +25 -484
  438. data/spec/unit/provider/git_spec.rb +224 -28
  439. data/spec/unit/provider/group/usermod_spec.rb +3 -1
  440. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  441. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  442. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  443. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  444. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  445. data/spec/unit/provider/mount_spec.rb +16 -6
  446. data/spec/unit/provider/package/portage_spec.rb +44 -0
  447. data/spec/unit/provider/package/rubygems_spec.rb +44 -1
  448. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  449. data/spec/unit/provider/package/yum_spec.rb +36 -39
  450. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  451. data/spec/unit/provider/package_spec.rb +0 -4
  452. data/spec/unit/provider/powershell_spec.rb +38 -0
  453. data/spec/unit/provider/remote_directory_spec.rb +0 -4
  454. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  455. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  456. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  457. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  458. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  459. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  460. data/spec/unit/provider/remote_file_spec.rb +33 -295
  461. data/spec/unit/provider/route_spec.rb +25 -9
  462. data/spec/unit/provider/service/macosx_spec.rb +176 -152
  463. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  464. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  465. data/spec/unit/provider/service/upstart_service_spec.rb +2 -2
  466. data/spec/unit/provider/service_spec.rb +3 -3
  467. data/spec/unit/provider/template/content_spec.rb +78 -0
  468. data/spec/unit/provider/template_spec.rb +52 -184
  469. data/spec/unit/provider/user/solaris_spec.rb +80 -0
  470. data/spec/unit/provider/user/useradd_spec.rb +12 -358
  471. data/spec/unit/resource/batch_spec.rb +48 -0
  472. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  473. data/spec/unit/resource/execute_spec.rb +3 -101
  474. data/spec/unit/resource/file_spec.rb +0 -5
  475. data/spec/unit/resource/group_spec.rb +9 -0
  476. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  477. data/spec/unit/resource/link_spec.rb +1 -0
  478. data/spec/unit/resource/mount_spec.rb +37 -0
  479. data/spec/unit/resource/powershell_spec.rb +48 -0
  480. data/spec/unit/resource/remote_file_spec.rb +44 -4
  481. data/spec/unit/resource/route_spec.rb +1 -1
  482. data/spec/unit/resource/script_spec.rb +13 -36
  483. data/spec/unit/resource/template_spec.rb +111 -8
  484. data/spec/unit/resource/user_spec.rb +7 -0
  485. data/spec/unit/resource_collection_spec.rb +61 -32
  486. data/spec/unit/resource_reporter_spec.rb +115 -102
  487. data/spec/unit/resource_spec.rb +170 -1
  488. data/spec/unit/rest/auth_credentials_spec.rb +2 -2
  489. data/spec/unit/rest_spec.rb +6 -2
  490. data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
  491. data/spec/unit/runner_spec.rb +1 -1
  492. data/spec/unit/scan_access_control_spec.rb +4 -2
  493. data/spec/unit/shell/shell_session_spec.rb +15 -2
  494. data/spec/unit/util/backup_spec.rb +149 -0
  495. data/spec/unit/util/diff_spec.rb +596 -0
  496. data/spec/unit/util/selinux_spec.rb +172 -0
  497. data/spec/unit/version/platform_spec.rb +61 -0
  498. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  499. data/spec/unit/version_constraint_spec.rb +5 -0
  500. metadata +233 -10
  501. data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
  502. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
  503. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
  504. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
@@ -112,21 +112,28 @@ class Chef
112
112
  end
113
113
  if @new_resource.link_type == :symbolic
114
114
  if access_controls.requires_changes?
115
- converge_by(access_controls.describe_changes) do
115
+ converge_by(access_controls.describe_changes) do
116
116
  access_controls.set_all
117
117
  end
118
118
  end
119
- end
119
+ end
120
120
  end
121
121
 
122
122
  def action_delete
123
123
  if @current_resource.to # Exists
124
- converge_by ("delete link at #{@new_resource.target_file}") do
124
+ converge_by("delete link at #{@new_resource.target_file}") do
125
125
  ::File.delete(@new_resource.target_file)
126
126
  Chef::Log.info("#{@new_resource} deleted")
127
127
  end
128
128
  end
129
129
  end
130
+
131
+ # Implementation components *should not* follow symlinks when managing
132
+ # access control (e.g., use lchmod instead of chmod) if the resource is a
133
+ # symlink.
134
+ def manage_symlink_access?
135
+ @new_resource.link_type == :symbolic
136
+ end
130
137
  end
131
138
  end
132
139
  end
@@ -79,7 +79,7 @@ class Chef
79
79
  end
80
80
 
81
81
  def action_enable
82
- unless @current_resource.enabled
82
+ unless @current_resource.enabled && mount_options_unchanged?
83
83
  converge_by("remount #{@current_resource.device}") do
84
84
  status = enable_fs
85
85
  if status
@@ -44,7 +44,7 @@ class Chef
44
44
  # only check for existence of non-remote devices
45
45
  if (device_should_exist? && !::File.exists?(device_real) )
46
46
  raise Chef::Exceptions::Mount, "Device #{@new_resource.device} does not exist"
47
- elsif( !::File.exists?(@new_resource.mount_point) )
47
+ elsif( @new_resource.mount_point != "none" && !::File.exists?(@new_resource.mount_point) )
48
48
  raise Chef::Exceptions::Mount, "Mount point #{@new_resource.mount_point} does not exist"
49
49
  end
50
50
  return true
@@ -177,7 +177,8 @@ class Chef
177
177
  end
178
178
 
179
179
  def device_should_exist?
180
- ( not network_device? ) &&
180
+ ( @new_resource.device != "none" ) &&
181
+ ( not network_device? ) &&
181
182
  ( not %w[ tmpfs fuse ].include? @new_resource.fstype )
182
183
  end
183
184
 
@@ -225,7 +226,11 @@ class Chef
225
226
  # ignore trailing slash
226
227
  Regexp.escape(device_real)+"/?"
227
228
  elsif ::File.symlink?(device_real)
228
- "(?:#{Regexp.escape(device_real)})|(?:#{Regexp.escape(::File.readlink(device_real))})"
229
+ # This regular expression tries to match device_real. If that does not match it will try to match the target of device_real.
230
+ # So given a symlink like this:
231
+ # /dev/mapper/vgroot-tmp.vol -> /dev/dm-9
232
+ # First it will try to match "/dev/mapper/vgroot-tmp.vol". If there is no match it will try matching for "/dev/dm-9".
233
+ "(?:#{Regexp.escape(device_real)}|#{Regexp.escape(::File.readlink(device_real))})"
229
234
  else
230
235
  Regexp.escape(device_real)
231
236
  end
@@ -59,7 +59,10 @@ class Chef
59
59
 
60
60
  def mount_fs
61
61
  unless @current_resource.mounted
62
- @mount.add(@new_resource.device)
62
+ @mount.add(:remote => @new_resource.device,
63
+ :username => @new_resource.username,
64
+ :domainname => @new_resource.domain,
65
+ :password => @new_resource.password)
63
66
  Chef::Log.debug("#{@new_resource} is mounted at #{@new_resource.mount_point}")
64
67
  else
65
68
  Chef::Log.debug("#{@new_resource} is already mounted at #{@new_resource.mount_point}")
@@ -58,14 +58,19 @@ class Chef
58
58
 
59
59
  def parse_emerge(package, txt)
60
60
  availables = {}
61
- package_without_category = package.split("/").last
62
61
  found_package_name = nil
63
62
 
64
63
  txt.each_line do |line|
65
64
  if line =~ /\*\s+#{PACKAGE_NAME_PATTERN}/
66
- found_package_name = $&.strip
67
- if found_package_name == package || found_package_name.split("/").last == package_without_category
68
- availables[found_package_name] = nil
65
+ found_package_name = $&.gsub(/\*/, '').strip
66
+ if package =~ /\// #the category is specified
67
+ if found_package_name == package
68
+ availables[found_package_name] = nil
69
+ end
70
+ else #the category is not specified
71
+ if found_package_name.split("/").last == package
72
+ availables[found_package_name] = nil
73
+ end
69
74
  end
70
75
  end
71
76
 
@@ -31,7 +31,14 @@ require 'rubygems/version'
31
31
  require 'rubygems/dependency'
32
32
  require 'rubygems/spec_fetcher'
33
33
  require 'rubygems/platform'
34
- require 'rubygems/format'
34
+
35
+ # Compatibility note: Rubygems 2.0 removes rubygems/format in favor of
36
+ # rubygems/package.
37
+ begin
38
+ require 'rubygems/format'
39
+ rescue LoadError
40
+ require 'rubygems/package'
41
+ end
35
42
  require 'rubygems/dependency_installer'
36
43
  require 'rubygems/uninstaller'
37
44
  require 'rubygems/specification'
@@ -105,6 +112,22 @@ class Chef
105
112
  Gem.sources = original_sources
106
113
  end
107
114
 
115
+ ##
116
+ # Extracts the gemspec from a (on-disk) gem package.
117
+ # === Returns
118
+ # Gem::Specification
119
+ #
120
+ #--
121
+ # Compatibility note: Rubygems 1.x uses Gem::Format, 2.0 moved this
122
+ # code into Gem::Package.
123
+ def spec_from_file(file)
124
+ if defined?(Gem::Format) and Gem::Package.respond_to?(:open)
125
+ Gem::Format.from_file_by_path(file).spec
126
+ else
127
+ Gem::Package.new(file).spec
128
+ end
129
+ end
130
+
108
131
  ##
109
132
  # Determines the candidate version for a gem from a .gem file on disk
110
133
  # and checks if it matches the version contraints in +gem_dependency+
@@ -114,7 +137,7 @@ class Chef
114
137
  # nil returns nil if the gem on disk doesn't match the
115
138
  # version constraints for +gem_dependency+
116
139
  def candidate_version_from_file(gem_dependency, source)
117
- spec = Gem::Format.from_file_by_path(source).spec
140
+ spec = spec_from_file(source)
118
141
  if spec.satisfies_requirement?(gem_dependency)
119
142
  logger.debug {"#{@new_resource} found candidate gem version #{spec.version} from local gem package #{source}"}
120
143
  spec.version
@@ -142,17 +165,26 @@ class Chef
142
165
  # Find the newest gem version available from Gem.sources that satisfies
143
166
  # the constraints of +gem_dependency+
144
167
  def find_newest_remote_version(gem_dependency, *sources)
145
- # DependencyInstaller sorts the results such that the last one is
146
- # always the one it considers best.
147
- spec_with_source = dependency_installer.find_gems_with_sources(gem_dependency).last
168
+ available_gems = dependency_installer.find_gems_with_sources(gem_dependency)
169
+ spec, source = if available_gems.respond_to?(:last)
170
+ # DependencyInstaller sorts the results such that the last one is
171
+ # always the one it considers best.
172
+ spec_with_source = available_gems.last
173
+ spec_with_source && spec_with_source
174
+ else
175
+ # Rubygems 2.0 returns a Gem::Available set, which is a
176
+ # collection of AvailableSet::Tuple structs
177
+ available_gems.pick_best!
178
+ best_gem = available_gems.set.first
179
+ best_gem && [best_gem.spec, best_gem.source]
180
+ end
148
181
 
149
- spec = spec_with_source && spec_with_source[0]
150
- version = spec && spec_with_source[0].version
182
+ version = spec && spec.version
151
183
  if version
152
- logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{spec_with_source[1]}" }
184
+ logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{source}" }
153
185
  version
154
186
  else
155
- source_list = sources.compact.empty? ? "[#{Gem.sources.join(', ')}]" : "[#{sources.join(', ')}]"
187
+ source_list = sources.compact.empty? ? "[#{Gem.sources.to_a.join(', ')}]" : "[#{sources.join(', ')}]"
156
188
  logger.warn { "#{@new_resource} failed to find gem #{gem_dependency} from #{source_list}" }
157
189
  nil
158
190
  end
@@ -393,6 +425,9 @@ class Chef
393
425
  # URI.parse gets confused by MS Windows paths with forward slashes.
394
426
  scheme = nil if scheme =~ /^[a-z]$/
395
427
  %w{http https}.include?(scheme)
428
+ rescue URI::InvalidURIError
429
+ Chef::Log.debug("#{@new_resource} failed to parse source '#{@new_resource.source}' as a URI, assuming a local path")
430
+ false
396
431
  end
397
432
 
398
433
  def current_version
@@ -502,7 +537,7 @@ class Chef
502
537
  if version
503
538
  shell_out!("#{gem_binary_path} install #{name} -q --no-rdoc --no-ri -v \"#{version}\"#{src}#{opts}", :env=>nil)
504
539
  else
505
- shell_out!("#{gem_binary_path} install #{name} -q --no-rdoc --no-ri #{src}#{opts}", :env=>nil)
540
+ shell_out!("#{gem_binary_path} install \"#{name}\" -q --no-rdoc --no-ri #{src}#{opts}", :env=>nil)
506
541
  end
507
542
  end
508
543
 
@@ -2,6 +2,7 @@
2
2
  # Authors:: Trevor O (trevoro@joyent.com)
3
3
  # Bryan McLellan (btm@loftninjas.org)
4
4
  # Matthew Landauer (matthew@openaustralia.org)
5
+ # Ben Rockwood (benr@joyent.com)
5
6
  # Copyright:: Copyright (c) 2009 Bryan McLellan, Matthew Landauer
6
7
  # License:: Apache License, Version 2.0
7
8
  #
@@ -17,10 +18,6 @@
17
18
  # See the License for the specific language governing permissions and
18
19
  # limitations under the License.
19
20
  #
20
- # Notes
21
- #
22
- # * Supports installing using a local package name
23
- # * Otherwise reverts to installing from the pkgsrc repositories URL
24
21
 
25
22
  require 'chef/provider/package'
26
23
  require 'chef/mixin/shell_out'
@@ -36,47 +33,61 @@ class Chef
36
33
 
37
34
 
38
35
  def load_current_resource
39
- Chef::Log.debug("#{@new_resource} loading current resource")
40
- @current_resource = Chef::Resource::Package.new(@new_resource.name)
41
- @current_resource.package_name(@new_resource.package_name)
42
- @current_resource.version(nil)
36
+ Chef::Log.debug("#{@new_resource} loading current resource")
37
+ @current_resource = Chef::Resource::Package.new(@new_resource.name)
38
+ @current_resource.package_name(@new_resource.package_name)
39
+ @current_resource.version(nil)
43
40
  check_package_state(@new_resource.package_name)
44
- @current_resource # modified by check_package_state
45
- end
46
-
47
- def check_package_state(name)
48
- Chef::Log.debug("#{@new_resource} checking package #{name}")
49
- # XXX
50
- version = nil
51
- info = shell_out!("pkg_info -E \"#{name}*\"", :env => nil, :returns => [0,1])
52
-
53
- if info.stdout
54
- version = info.stdout[/^#{@new_resource.package_name}-(.+)/, 1]
41
+ @current_resource # modified by check_package_state
42
+ end
43
+
44
+ def check_package_state(name)
45
+ Chef::Log.debug("#{@new_resource} checking package #{name}")
46
+ version = nil
47
+ info = shell_out!("/opt/local/sbin/pkg_info -E \"#{name}*\"", :env => nil, :returns => [0,1])
48
+
49
+ if info.stdout
50
+ version = info.stdout[/^#{@new_resource.package_name}-(.+)/, 1]
55
51
  end
56
52
 
57
- if !version
58
- @current_resource.version(nil)
59
- else
60
- @current_resource.version(version)
61
- end
53
+ if !version
54
+ @current_resource.version(nil)
55
+ else
56
+ @current_resource.version(version)
57
+ end
62
58
  end
63
59
 
60
+ def candidate_version
61
+ return @candidate_version if @candidate_version
62
+ name = nil
63
+ version = nil
64
+ pkg = shell_out!("/opt/local/bin/pkgin se #{new_resource.package_name}", :env => nil, :returns => [0,1])
65
+ pkg.stdout.each_line do |line|
66
+ case line
67
+ when /^#{name}/
68
+ name, version = line.split[0].split(/-([^-]+)$/)
69
+ end
70
+ end
71
+ @candidate_version = version
72
+ version
73
+ end
74
+
64
75
  def install_package(name, version)
65
- Chef::Log.debug("#{@new_resource} installing package #{name}-#{version}")
66
- package = "#{name}-#{version}"
67
- out = shell_out!("pkgin -y install #{package}", :env => nil)
76
+ Chef::Log.debug("#{@new_resource} installing package #{name} version #{version}")
77
+ package = "#{name}-#{version}"
78
+ out = shell_out!("/opt/local/bin/pkgin -y install #{package}", :env => nil)
68
79
  end
69
80
 
70
- def upgrade_package(name, version)
71
- Chef::Log.debug("#{@new_resource} upgrading package #{name}-#{version}")
72
- install_package(name, version)
73
- end
81
+ def upgrade_package(name, version)
82
+ Chef::Log.debug("#{@new_resource} upgrading package #{name} version #{version}")
83
+ install_package(name, version)
84
+ end
74
85
 
75
- def remove_package(name, version)
76
- Chef::Log.debug("#{@new_resource} removing package #{name}-#{version}")
77
- package = "#{name}-#{version}"
78
- out = shell_out!("pkgin -y remove #{package}", :env => nil)
79
- end
86
+ def remove_package(name, version)
87
+ Chef::Log.debug("#{@new_resource} removing package #{name} version #{version}")
88
+ package = "#{name}"
89
+ out = shell_out!("/opt/local/bin/pkgin -y remove #{package}", :env => nil)
90
+ end
80
91
 
81
92
  end
82
93
  end
@@ -16,8 +16,10 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
+ require 'chef/config'
19
20
  require 'chef/provider/package'
20
21
  require 'chef/mixin/command'
22
+ require 'chef/mixin/shell_out'
21
23
  require 'chef/resource/package'
22
24
  require 'singleton'
23
25
  require 'chef/mixin/get_source_from_package'
@@ -645,6 +647,7 @@ class Chef
645
647
  # Cache for our installed and available packages, pulled in from yum-dump.py
646
648
  class YumCache
647
649
  include Chef::Mixin::Command
650
+ include Chef::Mixin::ShellOut
648
651
  include Singleton
649
652
 
650
653
  def initialize
@@ -705,9 +708,11 @@ class Chef
705
708
  error = nil
706
709
 
707
710
  helper = ::File.join(::File.dirname(__FILE__), 'yum-dump.py')
711
+ status = nil
708
712
 
709
- status = popen4("/usr/bin/python #{helper}#{opts}", :waitlast => true) do |pid, stdin, stdout, stderr|
710
- stdout.each do |line|
713
+ begin
714
+ status = shell_out!("/usr/bin/python #{helper}#{opts}", :timeout => Chef::Config[:yum_timeout])
715
+ status.stdout.each_line do |line|
711
716
  one_line = true
712
717
 
713
718
  line.chomp!
@@ -754,7 +759,10 @@ class Chef
754
759
  @rpmdb << pkg
755
760
  end
756
761
 
757
- error = stderr.readlines
762
+ error = status.stderr
763
+ rescue Mixlib::ShellOut::CommandTimeout => e
764
+ Chef::Log.error("#{helper} exceeded timeout #{Chef::Config[:yum_timeout]}")
765
+ raise(e)
758
766
  end
759
767
 
760
768
  if status.exitstatus != 0
@@ -939,6 +947,7 @@ class Chef
939
947
  end # YumCache
940
948
 
941
949
  include Chef::Mixin::GetSourceFromPackage
950
+ include Chef::Mixin::ShellOut
942
951
 
943
952
  def initialize(new_resource, run_context)
944
953
  super
@@ -981,7 +990,7 @@ class Chef
981
990
  end
982
991
 
983
992
  def yum_command(command)
984
- status, stdout, stderr = output_of_command(command, {})
993
+ status, stdout, stderr = output_of_command(command, {:timeout => Chef::Config[:yum_timeout]})
985
994
 
986
995
  # This is fun: rpm can encounter errors in the %post/%postun scripts which aren't
987
996
  # considered fatal - meaning the rpm is still successfully installed. These issue
@@ -998,7 +1007,7 @@ class Chef
998
1007
  if l =~ %r{^error: %(post|postun)\(.*\) scriptlet failed, exit status \d+$}
999
1008
  Chef::Log.warn("#{@new_resource} caught non-fatal scriptlet issue: \"#{l}\". Can't trust yum exit status " +
1000
1009
  "so running install again to verify.")
1001
- status, stdout, stderr = output_of_command(command, {})
1010
+ status, stdout, stderr = output_of_command(command, {:timeout => Chef::Config[:yum_timeout]})
1002
1011
  break
1003
1012
  end
1004
1013
  end
@@ -1062,13 +1071,11 @@ class Chef
1062
1071
  end
1063
1072
 
1064
1073
  Chef::Log.debug("#{@new_resource} checking rpm status")
1065
- status = popen4("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}") do |pid, stdin, stdout, stderr|
1066
- stdout.each do |line|
1067
- case line
1068
- when /([\w\d_.-]+)\s([\w\d_.-]+)/
1069
- @current_resource.package_name($1)
1070
- @new_resource.version($2)
1071
- end
1074
+ shell_out!("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}", :timeout => Chef::Config[:yum_timeout]).stdout.each_line do |line|
1075
+ case line
1076
+ when /([\w\d_.-]+)\s([\w\d_.-]+)/
1077
+ @current_resource.package_name($1)
1078
+ @new_resource.version($2)
1072
1079
  end
1073
1080
  end
1074
1081
  end
@@ -1,14 +1,17 @@
1
+ # -*- coding: utf-8 -*-
1
2
  #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Authors:: Adam Jacob (<adam@opscode.com>)
4
+ # Ionuț Arțăriși (<iartarisi@suse.cz>)
3
5
  # Copyright:: Copyright (c) 2008 Opscode, Inc.
6
+ # Copyright (c) 2013 SUSE Linux GmbH
4
7
  # License:: Apache License, Version 2.0
5
8
  #
6
9
  # Licensed under the Apache License, Version 2.0 (the "License");
7
10
  # you may not use this file except in compliance with the License.
8
11
  # You may obtain a copy of the License at
9
- #
12
+ #
10
13
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
14
+ #
12
15
  # Unless required by applicable law or agreed to in writing, software
13
16
  # distributed under the License is distributed on an "AS IS" BASIS,
14
17
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,14 +22,16 @@
19
22
  require 'chef/provider/package'
20
23
  require 'chef/mixin/command'
21
24
  require 'chef/resource/package'
25
+ require 'chef/mixin/shell_out'
22
26
  require 'singleton'
23
27
 
24
28
  class Chef
25
29
  class Provider
26
30
  class Package
27
- class Zypper < Chef::Provider::Package
28
-
29
-
31
+ class Zypper < Chef::Provider::Package
32
+
33
+ include Chef::Mixin::ShellOut
34
+
30
35
  def load_current_resource
31
36
  @current_resource = Chef::Resource::Package.new(@new_resource.name)
32
37
  @current_resource.package_name(@new_resource.package_name)
@@ -36,7 +41,7 @@ class Chef
36
41
  version=''
37
42
  oud_version=''
38
43
  Chef::Log.debug("#{@new_resource} checking zypper")
39
- status = popen4("zypper info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
44
+ status = popen4("zypper --non-interactive info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
40
45
  stdout.each do |line|
41
46
  case line
42
47
  when /^Version: (.+)$/
@@ -45,7 +50,7 @@ class Chef
45
50
  when /^Installed: Yes$/
46
51
  is_installed=true
47
52
  Chef::Log.debug("#{@new_resource} is installed")
48
-
53
+
49
54
  when /^Installed: No$/
50
55
  is_installed=false
51
56
  Chef::Log.debug("#{@new_resource} is not installed")
@@ -61,12 +66,12 @@ class Chef
61
66
  @candidate_version=version
62
67
  @current_resource.version(nil)
63
68
  end
64
-
69
+
65
70
  if is_installed==true
66
71
  if is_out_of_date==true
67
72
  @current_resource.version(oud_version)
68
73
  @candidate_version=version
69
- else
74
+ else
70
75
  @current_resource.version(version)
71
76
  @candidate_version=version
72
77
  end
@@ -75,69 +80,54 @@ class Chef
75
80
  unless status.exitstatus == 0
76
81
  raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
77
82
  end
78
-
83
+
79
84
  @current_resource
80
85
  end
81
-
82
- #Gets the zypper Version from command output (Returns Floating Point number)
86
+
83
87
  def zypper_version()
84
88
  `zypper -V 2>&1`.scan(/\d+/).join(".").to_f
85
89
  end
86
90
 
87
91
  def install_package(name, version)
88
- if zypper_version < 1.0
89
- run_command(
90
- :command => "zypper install -y #{name}"
91
- )
92
- elsif version
93
- run_command(
94
- :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
95
- )
96
- else
97
- run_command(
98
- :command => "zypper -n --no-gpg-checks install -l #{name}"
99
- )
100
- end
92
+ zypper_package("install --auto-agree-with-licenses", name, version)
101
93
  end
102
94
 
103
95
  def upgrade_package(name, version)
104
- if zypper_version < 1.0
105
- run_command(
106
- :command => "zypper install -y #{name}"
107
- )
108
- elsif version
109
- run_command(
110
- :command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
111
- )
112
- else
113
- run_command(
114
- :command => "zypper -n --no-gpg-checks install -l #{name}"
115
- )
116
- end
96
+ install_package(name, version)
117
97
  end
118
98
 
119
99
  def remove_package(name, version)
100
+ zypper_package("remove", name, version)
101
+ end
102
+
103
+ def purge_package(name, version)
104
+ zypper_package("remove --clean-deps", name, version)
105
+ end
106
+
107
+ private
108
+ def zypper_package(command, pkgname, version)
109
+ version = "=#{version}" unless version.empty?
120
110
  if zypper_version < 1.0
121
- run_command(
122
- :command => "zypper remove -y #{name}"
123
- )
124
- elsif version
125
- run_command(
126
- :command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
127
- )
111
+ shell_out!("zypper#{gpg_checks} #{command} -y #{pkgname}")
128
112
  else
129
- run_command(
130
- :command => "zypper -n --no-gpg-checks remove #{name}"
131
- )
113
+ shell_out!("zypper --non-interactive#{gpg_checks} "+
114
+ "#{command} #{pkgname}#{version}")
132
115
  end
133
-
134
-
135
116
  end
136
-
137
- def purge_package(name, version)
138
- remove_package(name, version)
117
+
118
+ def gpg_checks()
119
+ case Chef::Config[:zypper_check_gpg]
120
+ when true
121
+ ""
122
+ when false
123
+ " --no-gpg-checks"
124
+ when nil
125
+ Chef::Log.warn("Chef::Config[:zypper_check_gpg] was not set. " +
126
+ "All packages will be installed without gpg signature checks. " +
127
+ "This is a security hazard.")
128
+ " --no-gpg-checks"
129
+ end
139
130
  end
140
-
141
131
  end
142
132
  end
143
133
  end