chef 12.18.31-universal-mingw32 → 12.19.33-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -4
  3. data/README.md +12 -13
  4. data/VERSION +1 -1
  5. data/acceptance/Gemfile +4 -4
  6. data/acceptance/Gemfile.lock +70 -69
  7. data/chef-universal-mingw32.gemspec +2 -3
  8. data/chef.gemspec +6 -6
  9. data/lib/chef/api_client.rb +8 -10
  10. data/lib/chef/api_client_v1.rb +9 -11
  11. data/lib/chef/application/apply.rb +8 -10
  12. data/lib/chef/application/client.rb +1 -1
  13. data/lib/chef/application/exit_code.rb +3 -5
  14. data/lib/chef/application/knife.rb +2 -2
  15. data/lib/chef/application/windows_service.rb +29 -30
  16. data/lib/chef/application/windows_service_manager.rb +1 -1
  17. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  18. data/lib/chef/audit/control_group_data.rb +1 -1
  19. data/lib/chef/chef_class.rb +1 -0
  20. data/lib/chef/chef_fs/chef_fs_data_store.rb +5 -7
  21. data/lib/chef/chef_fs/command_line.rb +15 -16
  22. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  23. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  24. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  25. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  26. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  27. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  28. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  29. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  30. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  31. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  33. data/lib/chef/chef_fs/file_system.rb +1 -1
  34. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +5 -6
  35. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  36. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  37. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  38. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  39. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  40. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  41. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +18 -24
  42. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  43. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  44. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +10 -12
  45. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  46. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  47. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  48. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  49. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  50. data/lib/chef/cookbook/cookbook_version_loader.rb +25 -31
  51. data/lib/chef/cookbook/metadata.rb +26 -26
  52. data/lib/chef/cookbook/syntax_check.rb +1 -1
  53. data/lib/chef/cookbook_version.rb +3 -3
  54. data/lib/chef/data_bag.rb +1 -1
  55. data/lib/chef/data_bag_item.rb +3 -3
  56. data/lib/chef/data_collector.rb +3 -4
  57. data/lib/chef/decorator.rb +1 -1
  58. data/lib/chef/deprecated.rb +30 -0
  59. data/lib/chef/dsl/audit.rb +2 -2
  60. data/lib/chef/dsl/declare_resource.rb +1 -1
  61. data/lib/chef/dsl/platform_introspection.rb +29 -31
  62. data/lib/chef/dsl/reboot_pending.rb +1 -1
  63. data/lib/chef/dsl/resources.rb +6 -8
  64. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  65. data/lib/chef/environment.rb +9 -11
  66. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  67. data/lib/chef/exceptions.rb +4 -1
  68. data/lib/chef/file_access_control/unix.rb +14 -14
  69. data/lib/chef/file_access_control/windows.rb +1 -1
  70. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  71. data/lib/chef/formatters/error_mapper.rb +6 -6
  72. data/lib/chef/http/api_versions.rb +50 -0
  73. data/lib/chef/http/validate_content_length.rb +2 -2
  74. data/lib/chef/json_compat.rb +6 -10
  75. data/lib/chef/key.rb +5 -5
  76. data/lib/chef/knife.rb +4 -4
  77. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  78. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  79. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  80. data/lib/chef/knife/core/status_presenter.rb +1 -1
  81. data/lib/chef/knife/core/ui.rb +19 -25
  82. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  83. data/lib/chef/knife/deps.rb +32 -34
  84. data/lib/chef/knife/help.rb +1 -1
  85. data/lib/chef/knife/list.rb +1 -1
  86. data/lib/chef/knife/search.rb +2 -2
  87. data/lib/chef/knife/ssh.rb +37 -27
  88. data/lib/chef/knife/ssl_check.rb +1 -1
  89. data/lib/chef/knife/user_delete.rb +1 -1
  90. data/lib/chef/mash.rb +1 -1
  91. data/lib/chef/mixin/command.rb +2 -2
  92. data/lib/chef/mixin/create_path.rb +3 -5
  93. data/lib/chef/mixin/from_file.rb +2 -2
  94. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  95. data/lib/chef/mixin/notifying_block.rb +7 -9
  96. data/lib/chef/mixin/params_validate.rb +3 -3
  97. data/lib/chef/mixin/securable.rb +1 -1
  98. data/lib/chef/mixin/shell_out.rb +23 -3
  99. data/lib/chef/mixin/unformatter.rb +2 -2
  100. data/lib/chef/mixin/uris.rb +4 -6
  101. data/lib/chef/mixin/versioned_api.rb +69 -0
  102. data/lib/chef/mixin/which.rb +25 -8
  103. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  104. data/lib/chef/mixin/xml_escape.rb +3 -5
  105. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  106. data/lib/chef/node.rb +8 -8
  107. data/lib/chef/node/attribute.rb +4 -4
  108. data/lib/chef/node/common_api.rb +5 -7
  109. data/lib/chef/org.rb +10 -12
  110. data/lib/chef/platform/provider_mapping.rb +7 -7
  111. data/lib/chef/platform/query_helpers.rb +1 -1
  112. data/lib/chef/policy_builder/policyfile.rb +1 -0
  113. data/lib/chef/property.rb +31 -0
  114. data/lib/chef/provider/batch.rb +1 -1
  115. data/lib/chef/provider/breakpoint.rb +1 -1
  116. data/lib/chef/provider/cookbook_file.rb +3 -3
  117. data/lib/chef/provider/cron.rb +38 -38
  118. data/lib/chef/provider/deploy.rb +81 -81
  119. data/lib/chef/provider/deploy/revision.rb +3 -5
  120. data/lib/chef/provider/directory.rb +32 -32
  121. data/lib/chef/provider/dsc_resource.rb +22 -6
  122. data/lib/chef/provider/env.rb +28 -28
  123. data/lib/chef/provider/env/windows.rb +1 -1
  124. data/lib/chef/provider/erl_call.rb +13 -13
  125. data/lib/chef/provider/execute.rb +5 -2
  126. data/lib/chef/provider/file.rb +49 -51
  127. data/lib/chef/provider/git.rb +55 -55
  128. data/lib/chef/provider/http_request.rb +36 -36
  129. data/lib/chef/provider/launchd.rb +2 -2
  130. data/lib/chef/provider/link.rb +50 -50
  131. data/lib/chef/provider/log.rb +2 -2
  132. data/lib/chef/provider/mdadm.rb +25 -25
  133. data/lib/chef/provider/mount/aix.rb +2 -2
  134. data/lib/chef/provider/mount/mount.rb +2 -2
  135. data/lib/chef/provider/ohai.rb +1 -1
  136. data/lib/chef/provider/osx_profile.rb +23 -23
  137. data/lib/chef/provider/package.rb +74 -56
  138. data/lib/chef/provider/package/aix.rb +55 -52
  139. data/lib/chef/provider/package/apt.rb +15 -13
  140. data/lib/chef/provider/package/cab.rb +49 -20
  141. data/lib/chef/provider/package/chocolatey.rb +9 -10
  142. data/lib/chef/provider/package/dnf.rb +20 -18
  143. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  144. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  145. data/lib/chef/provider/package/dnf/version.rb +1 -1
  146. data/lib/chef/provider/package/dpkg.rb +8 -9
  147. data/lib/chef/provider/package/easy_install.rb +22 -22
  148. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  149. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  150. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  151. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  152. data/lib/chef/provider/package/homebrew.rb +11 -10
  153. data/lib/chef/provider/package/ips.rb +18 -23
  154. data/lib/chef/provider/package/macports.rb +23 -23
  155. data/lib/chef/provider/package/msu.rb +11 -11
  156. data/lib/chef/provider/package/openbsd.rb +25 -22
  157. data/lib/chef/provider/package/pacman.rb +16 -16
  158. data/lib/chef/provider/package/paludis.rb +26 -27
  159. data/lib/chef/provider/package/portage.rb +22 -22
  160. data/lib/chef/provider/package/powershell.rb +17 -17
  161. data/lib/chef/provider/package/rpm.rb +25 -25
  162. data/lib/chef/provider/package/rubygems.rb +60 -60
  163. data/lib/chef/provider/package/smartos.rb +16 -16
  164. data/lib/chef/provider/package/solaris.rb +44 -44
  165. data/lib/chef/provider/package/windows.rb +3 -3
  166. data/lib/chef/provider/package/windows/exe.rb +6 -6
  167. data/lib/chef/provider/package/windows/msi.rb +6 -6
  168. data/lib/chef/provider/package/yum.rb +318 -268
  169. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  170. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  171. data/lib/chef/provider/package/zypper.rb +11 -11
  172. data/lib/chef/provider/powershell_script.rb +15 -7
  173. data/lib/chef/provider/reboot.rb +10 -10
  174. data/lib/chef/provider/registry_key.rb +39 -39
  175. data/lib/chef/provider/remote_directory.rb +3 -3
  176. data/lib/chef/provider/remote_file.rb +3 -3
  177. data/lib/chef/provider/route.rb +1 -1
  178. data/lib/chef/provider/ruby_block.rb +3 -3
  179. data/lib/chef/provider/script.rb +42 -6
  180. data/lib/chef/provider/service.rb +49 -49
  181. data/lib/chef/provider/service/solaris.rb +1 -1
  182. data/lib/chef/provider/service/systemd.rb +1 -1
  183. data/lib/chef/provider/subversion.rb +39 -39
  184. data/lib/chef/provider/systemd_unit.rb +2 -0
  185. data/lib/chef/provider/template.rb +3 -3
  186. data/lib/chef/provider/user.rb +42 -42
  187. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  188. data/lib/chef/resource.rb +27 -16
  189. data/lib/chef/resource/apt_repository.rb +0 -1
  190. data/lib/chef/resource/chef_gem.rb +1 -1
  191. data/lib/chef/resource/dnf_package.rb +6 -3
  192. data/lib/chef/resource/dsc_resource.rb +9 -1
  193. data/lib/chef/resource/execute.rb +70 -6
  194. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  195. data/lib/chef/resource/freebsd_package.rb +1 -1
  196. data/lib/chef/resource/gem_package.rb +1 -1
  197. data/lib/chef/resource/launchd.rb +13 -1
  198. data/lib/chef/resource/package.rb +2 -2
  199. data/lib/chef/resource/registry_key.rb +1 -1
  200. data/lib/chef/resource/yum_package.rb +12 -3
  201. data/lib/chef/resource/yum_repository.rb +0 -1
  202. data/lib/chef/resource_collection/resource_collection_serialization.rb +3 -3
  203. data/lib/chef/resource_collection/resource_set.rb +2 -2
  204. data/lib/chef/resource_reporter.rb +1 -1
  205. data/lib/chef/run_context.rb +3 -3
  206. data/lib/chef/run_list/run_list_item.rb +1 -1
  207. data/lib/chef/run_list/versioned_recipe_list.rb +6 -6
  208. data/lib/chef/server_api.rb +2 -0
  209. data/lib/chef/server_api_versions.rb +40 -0
  210. data/lib/chef/shell.rb +1 -1
  211. data/lib/chef/shell/ext.rb +3 -3
  212. data/lib/chef/shell/shell_session.rb +1 -1
  213. data/lib/chef/user.rb +9 -11
  214. data/lib/chef/user_v1.rb +9 -11
  215. data/lib/chef/util/diff.rb +1 -1
  216. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  217. data/lib/chef/util/selinux.rb +1 -1
  218. data/lib/chef/util/windows/net_group.rb +18 -30
  219. data/lib/chef/util/windows/net_use.rb +7 -11
  220. data/lib/chef/util/windows/net_user.rb +11 -17
  221. data/lib/chef/util/windows/volume.rb +9 -15
  222. data/lib/chef/version.rb +1 -1
  223. data/lib/chef/version_class.rb +1 -1
  224. data/lib/chef/win32/api.rb +4 -6
  225. data/lib/chef/win32/api/file.rb +25 -31
  226. data/lib/chef/win32/api/installer.rb +2 -2
  227. data/lib/chef/win32/file.rb +4 -6
  228. data/lib/chef/win32/registry.rb +9 -9
  229. data/lib/chef/win32/security.rb +2 -2
  230. data/lib/chef/win32/security/acl.rb +2 -2
  231. data/lib/chef/win32/unicode.rb +2 -2
  232. data/lib/chef/win32/version.rb +1 -1
  233. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  234. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  235. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  236. data/spec/functional/knife/ssh_spec.rb +5 -5
  237. data/spec/functional/resource/batch_spec.rb +5 -1
  238. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  239. data/spec/functional/resource/execute_spec.rb +17 -0
  240. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  241. data/spec/integration/client/client_spec.rb +33 -0
  242. data/spec/integration/recipes/recipe_dsl_spec.rb +58 -58
  243. data/spec/spec_helper.rb +4 -0
  244. data/spec/support/chef_helpers.rb +5 -7
  245. data/spec/support/platform_helpers.rb +6 -0
  246. data/spec/support/platforms/prof/gc.rb +4 -6
  247. data/spec/support/shared/context/client.rb +1 -1
  248. data/spec/support/shared/functional/execute_resource.rb +150 -0
  249. data/spec/support/shared/functional/windows_script.rb +74 -4
  250. data/spec/support/shared/unit/execute_resource.rb +37 -0
  251. data/spec/support/shared/unit/provider/file.rb +10 -0
  252. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +9 -0
  253. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  254. data/spec/unit/http/api_versions_spec.rb +69 -0
  255. data/spec/unit/knife/ssh_spec.rb +34 -36
  256. data/spec/unit/mixin/versioned_api_spec.rb +107 -0
  257. data/spec/unit/mixin/which.rb +160 -0
  258. data/spec/unit/platform_spec.rb +28 -1
  259. data/spec/unit/provider/deploy_spec.rb +1 -1
  260. data/spec/unit/provider/directory_spec.rb +10 -0
  261. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  262. data/spec/unit/provider/execute_spec.rb +0 -1
  263. data/spec/unit/provider/launchd_spec.rb +2 -2
  264. data/spec/unit/provider/package/aix_spec.rb +22 -22
  265. data/spec/unit/provider/package/apt_spec.rb +27 -27
  266. data/spec/unit/provider/package/cab_spec.rb +59 -5
  267. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -0
  268. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  269. data/spec/unit/provider/package/easy_install_spec.rb +18 -18
  270. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  271. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  272. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  273. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  274. data/spec/unit/provider/package/ips_spec.rb +37 -31
  275. data/spec/unit/provider/package/macports_spec.rb +10 -10
  276. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  277. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  278. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  279. data/spec/unit/provider/package/portage_spec.rb +6 -7
  280. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  281. data/spec/unit/provider/package/rubygems_spec.rb +38 -38
  282. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  283. data/spec/unit/provider/package/windows_spec.rb +2 -1
  284. data/spec/unit/provider/package/yum_spec.rb +51 -43
  285. data/spec/unit/provider/package/zypper_spec.rb +34 -34
  286. data/spec/unit/provider/package_spec.rb +8 -0
  287. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  288. data/spec/unit/provider/route_spec.rb +7 -1
  289. data/spec/unit/provider/script_spec.rb +49 -6
  290. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  291. data/spec/unit/resource/execute_spec.rb +214 -0
  292. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  293. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  294. data/spec/unit/resource/package_spec.rb +5 -0
  295. data/spec/unit/resource/yum_package_spec.rb +42 -1
  296. data/spec/unit/resource_reporter_spec.rb +1 -1
  297. data/spec/unit/resource_spec.rb +18 -0
  298. data/spec/unit/server_api_versions_spec.rb +44 -0
  299. data/spec/unit/util/selinux_spec.rb +3 -14
  300. data/spec/unit/win32/error_spec.rb +67 -0
  301. data/spec/unit/win32/security_spec.rb +66 -0
  302. data/tasks/changelog.rb +1 -1
  303. data/tasks/dependencies.rb +20 -4
  304. metadata +39 -18
  305. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2008-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,6 +52,17 @@ class Chef
52
52
  @candidate_version = nil
53
53
  end
54
54
 
55
+ def options
56
+ if new_resource.options.is_a?(String)
57
+ # XXX: needs to handle double quotes, single quotes, nested quotes, etc and probably act
58
+ # more like a space-separated "C"SV file -- although users can fix this just by passing in
59
+ # a correctly pre-split Array.
60
+ new_resource.options.split(" ")
61
+ else
62
+ new_resource.options
63
+ end
64
+ end
65
+
55
66
  def whyrun_supported?
56
67
  true
57
68
  end
@@ -64,16 +75,15 @@ class Chef
64
75
  end
65
76
  end
66
77
 
67
- def load_current_resource
68
- end
78
+ def load_current_resource; end
69
79
 
70
80
  def define_resource_requirements
71
81
  # XXX: upgrade with a specific version doesn't make a whole lot of sense, but why don't we throw this anyway if it happens?
72
82
  # if not, shouldn't we raise to tell the user to use install instead of upgrade if they want to pin a version?
73
83
  requirements.assert(:install) do |a|
74
84
  a.assertion { candidates_exist_for_all_forced_changes? }
75
- a.failure_message(Chef::Exceptions::Package, "No version specified, and no candidate version available for #{forced_packages_missing_candidates.join(", ")}")
76
- a.whyrun("Assuming a repository that offers #{forced_packages_missing_candidates.join(", ")} would have been configured")
85
+ a.failure_message(Chef::Exceptions::Package, "No version specified, and no candidate version available for #{forced_packages_missing_candidates.join(', ')}")
86
+ a.whyrun("Assuming a repository that offers #{forced_packages_missing_candidates.join(', ')} would have been configured")
77
87
  end
78
88
 
79
89
  # XXX: Does it make sense to pass in a source with :upgrade? Probably
@@ -81,19 +91,19 @@ class Chef
81
91
  # so we'll just leave things as-is for now.
82
92
  requirements.assert(:upgrade, :install) do |a|
83
93
  a.assertion { candidates_exist_for_all_uninstalled? || new_resource.source }
84
- a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(", ")}")
85
- a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(", ")} would have been configured")
94
+ a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(', ')}")
95
+ a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(', ')} would have been configured")
86
96
  end
87
97
  end
88
98
 
89
99
  action :install do
90
100
  unless target_version_array.any?
91
- Chef::Log.debug("#{@new_resource} is already installed - nothing to do")
101
+ Chef::Log.debug("#{new_resource} is already installed - nothing to do")
92
102
  return
93
103
  end
94
104
 
95
105
  # @todo: move the preseed code out of the base class (and complete the fix for Array of preseeds? ugh...)
96
- if @new_resource.response_file
106
+ if new_resource.response_file
97
107
  if preseed_file = get_preseed_file(package_names_for_targets, versions_for_targets)
98
108
  converge_by("preseed package #{package_names_for_targets}") do
99
109
  preseed_package(preseed_file)
@@ -105,7 +115,7 @@ class Chef
105
115
  multipackage_api_adapter(package_names_for_targets, versions_for_targets) do |name, version|
106
116
  install_package(name, version)
107
117
  end
108
- Chef::Log.info("#{@new_resource} installed #{package_names_for_targets} at #{versions_for_targets}")
118
+ Chef::Log.info("#{new_resource} installed #{package_names_for_targets} at #{versions_for_targets}")
109
119
  end
110
120
  end
111
121
 
@@ -122,8 +132,8 @@ class Chef
122
132
  private :install_description
123
133
 
124
134
  action :upgrade do
125
- if !target_version_array.any?
126
- Chef::Log.debug("#{@new_resource} no versions to upgrade - nothing to do")
135
+ unless target_version_array.any?
136
+ Chef::Log.debug("#{new_resource} no versions to upgrade - nothing to do")
127
137
  return
128
138
  end
129
139
 
@@ -132,7 +142,7 @@ class Chef
132
142
  upgrade_package(name, version)
133
143
  end
134
144
  log_allow_downgrade = allow_downgrade ? "(allow_downgrade)" : ""
135
- Chef::Log.info("#{@new_resource} upgraded#{log_allow_downgrade} #{package_names_for_targets} to #{versions_for_targets}")
145
+ Chef::Log.info("#{new_resource} upgraded#{log_allow_downgrade} #{package_names_for_targets} to #{versions_for_targets}")
136
146
  end
137
147
  end
138
148
 
@@ -153,15 +163,15 @@ class Chef
153
163
 
154
164
  action :remove do
155
165
  if removing_package?
156
- description = @new_resource.version ? "version #{@new_resource.version} of " : ""
157
- converge_by("remove #{description}package #{@current_resource.package_name}") do
158
- multipackage_api_adapter(@current_resource.package_name, @new_resource.version) do |name, version|
166
+ description = new_resource.version ? "version #{new_resource.version} of " : ""
167
+ converge_by("remove #{description}package #{current_resource.package_name}") do
168
+ multipackage_api_adapter(current_resource.package_name, new_resource.version) do |name, version|
159
169
  remove_package(name, version)
160
170
  end
161
- Chef::Log.info("#{@new_resource} removed")
171
+ Chef::Log.info("#{new_resource} removed")
162
172
  end
163
173
  else
164
- Chef::Log.debug("#{@new_resource} package does not exist - nothing to do")
174
+ Chef::Log.debug("#{new_resource} package does not exist - nothing to do")
165
175
  end
166
176
  end
167
177
 
@@ -188,48 +198,48 @@ class Chef
188
198
 
189
199
  action :purge do
190
200
  if removing_package?
191
- description = @new_resource.version ? "version #{@new_resource.version} of" : ""
192
- converge_by("purge #{description} package #{@current_resource.package_name}") do
193
- multipackage_api_adapter(@current_resource.package_name, @new_resource.version) do |name, version|
201
+ description = new_resource.version ? "version #{new_resource.version} of" : ""
202
+ converge_by("purge #{description} package #{current_resource.package_name}") do
203
+ multipackage_api_adapter(current_resource.package_name, new_resource.version) do |name, version|
194
204
  purge_package(name, version)
195
205
  end
196
- Chef::Log.info("#{@new_resource} purged")
206
+ Chef::Log.info("#{new_resource} purged")
197
207
  end
198
208
  end
199
209
  end
200
210
 
201
211
  action :reconfig do
202
- if @current_resource.version.nil?
203
- Chef::Log.debug("#{@new_resource} is NOT installed - nothing to do")
212
+ if current_resource.version.nil?
213
+ Chef::Log.debug("#{new_resource} is NOT installed - nothing to do")
204
214
  return
205
215
  end
206
216
 
207
- unless @new_resource.response_file
208
- Chef::Log.debug("#{@new_resource} no response_file provided - nothing to do")
217
+ unless new_resource.response_file
218
+ Chef::Log.debug("#{new_resource} no response_file provided - nothing to do")
209
219
  return
210
220
  end
211
221
 
212
- if preseed_file = get_preseed_file(@new_resource.package_name, @current_resource.version)
213
- converge_by("reconfigure package #{@new_resource.package_name}") do
222
+ if preseed_file = get_preseed_file(new_resource.package_name, current_resource.version)
223
+ converge_by("reconfigure package #{new_resource.package_name}") do
214
224
  preseed_package(preseed_file)
215
- multipackage_api_adapter(@new_resource.package_name, @current_resource.version) do |name, version|
225
+ multipackage_api_adapter(new_resource.package_name, current_resource.version) do |name, version|
216
226
  reconfig_package(name, version)
217
227
 
218
228
  end
219
- Chef::Log.info("#{@new_resource} reconfigured")
229
+ Chef::Log.info("#{new_resource} reconfigured")
220
230
  end
221
231
  else
222
- Chef::Log.debug("#{@new_resource} preseeding has not changed - nothing to do")
232
+ Chef::Log.debug("#{new_resource} preseeding has not changed - nothing to do")
223
233
  end
224
234
  end
225
235
 
226
236
  def action_lock
227
- if package_locked(@new_resource.name, @new_resource.version) == false
228
- description = @new_resource.version ? "version #{@new_resource.version} of " : ""
229
- converge_by("lock #{description}package #{@current_resource.package_name}") do
230
- multipackage_api_adapter(@current_resource.package_name, @new_resource.version) do |name, version|
237
+ if package_locked(new_resource.name, new_resource.version) == false
238
+ description = new_resource.version ? "version #{new_resource.version} of " : ""
239
+ converge_by("lock #{description}package #{current_resource.package_name}") do
240
+ multipackage_api_adapter(current_resource.package_name, new_resource.version) do |name, version|
231
241
  lock_package(name, version)
232
- Chef::Log.info("#{@new_resource} locked")
242
+ Chef::Log.info("#{new_resource} locked")
233
243
  end
234
244
  end
235
245
  else
@@ -238,12 +248,12 @@ class Chef
238
248
  end
239
249
 
240
250
  def action_unlock
241
- if package_locked(@new_resource.name, @new_resource.version) == true
242
- description = @new_resource.version ? "version #{@new_resource.version} of " : ""
243
- converge_by("unlock #{description}package #{@current_resource.package_name}") do
244
- multipackage_api_adapter(@current_resource.package_name, @new_resource.version) do |name, version|
251
+ if package_locked(new_resource.name, new_resource.version) == true
252
+ description = new_resource.version ? "version #{new_resource.version} of " : ""
253
+ converge_by("unlock #{description}package #{current_resource.package_name}") do
254
+ multipackage_api_adapter(current_resource.package_name, new_resource.version) do |name, version|
245
255
  unlock_package(name, version)
246
- Chef::Log.info("#{@new_resource} unlocked")
256
+ Chef::Log.info("#{new_resource} unlocked")
247
257
  end
248
258
  end
249
259
  else
@@ -251,6 +261,10 @@ class Chef
251
261
  end
252
262
  end
253
263
 
264
+ def package_locked(name, version)
265
+ raise Chef::Exceptions::UnsupportedAction, "#{self} has no way to detect if package is locked"
266
+ end
267
+
254
268
  # @todo use composition rather than inheritance
255
269
 
256
270
  def multipackage_api_adapter(name, version)
@@ -295,6 +309,8 @@ class Chef
295
309
 
296
310
  # used by subclasses. deprecated. use #a_to_s instead.
297
311
  def expand_options(options)
312
+ # its deprecated but still work to do to deprecate it fully
313
+ #Chef.deprecated(:package_misc, "expand_options is deprecated, use shell_out_compact or shell_out_compact_timeout instead")
298
314
  options ? " #{options}" : ""
299
315
  end
300
316
 
@@ -339,7 +355,7 @@ class Chef
339
355
  def get_preseed_file(name, version)
340
356
  resource = preseed_resource(name, version)
341
357
  resource.run_action(:create)
342
- Chef::Log.debug("#{@new_resource} fetched preseed file to #{resource.path}")
358
+ Chef::Log.debug("#{new_resource} fetched preseed file to #{resource.path}")
343
359
 
344
360
  if resource.updated_by_last_action?
345
361
  resource.path
@@ -351,26 +367,26 @@ class Chef
351
367
  # @todo: extract apt/dpkg specific preseeding to a helper class
352
368
  def preseed_resource(name, version)
353
369
  # A directory in our cache to store this cookbook's preseed files in
354
- file_cache_dir = Chef::FileCache.create_cache_path("preseed/#{@new_resource.cookbook_name}")
370
+ file_cache_dir = Chef::FileCache.create_cache_path("preseed/#{new_resource.cookbook_name}")
355
371
  # The full path where the preseed file will be stored
356
372
  cache_seed_to = "#{file_cache_dir}/#{name}-#{version}.seed"
357
373
 
358
- Chef::Log.debug("#{@new_resource} fetching preseed file to #{cache_seed_to}")
374
+ Chef::Log.debug("#{new_resource} fetching preseed file to #{cache_seed_to}")
359
375
 
360
- if template_available?(@new_resource.response_file)
361
- Chef::Log.debug("#{@new_resource} fetching preseed file via Template")
376
+ if template_available?(new_resource.response_file)
377
+ Chef::Log.debug("#{new_resource} fetching preseed file via Template")
362
378
  remote_file = Chef::Resource::Template.new(cache_seed_to, run_context)
363
- remote_file.variables(@new_resource.response_file_variables)
364
- elsif cookbook_file_available?(@new_resource.response_file)
365
- Chef::Log.debug("#{@new_resource} fetching preseed file via cookbook_file")
379
+ remote_file.variables(new_resource.response_file_variables)
380
+ elsif cookbook_file_available?(new_resource.response_file)
381
+ Chef::Log.debug("#{new_resource} fetching preseed file via cookbook_file")
366
382
  remote_file = Chef::Resource::CookbookFile.new(cache_seed_to, run_context)
367
383
  else
368
- message = "No template or cookbook file found for response file #{@new_resource.response_file}"
384
+ message = "No template or cookbook file found for response file #{new_resource.response_file}"
369
385
  raise Chef::Exceptions::FileNotFound, message
370
386
  end
371
387
 
372
- remote_file.cookbook_name = @new_resource.cookbook_name
373
- remote_file.source(@new_resource.response_file)
388
+ remote_file.cookbook_name = new_resource.cookbook_name
389
+ remote_file.source(new_resource.response_file)
374
390
  remote_file.backup(false)
375
391
  remote_file
376
392
  end
@@ -608,8 +624,8 @@ class Chef
608
624
  end
609
625
 
610
626
  def allow_downgrade
611
- if @new_resource.respond_to?("allow_downgrade")
612
- @new_resource.allow_downgrade
627
+ if new_resource.respond_to?("allow_downgrade")
628
+ new_resource.allow_downgrade
613
629
  else
614
630
  false
615
631
  end
@@ -624,14 +640,16 @@ class Chef
624
640
  end
625
641
 
626
642
  def add_timeout_option(command_args)
643
+ # this is deprecated but its not quite done yet
644
+ #Chef.deprecated(:package_misc, "shell_out_with_timeout and add_timeout_option are deprecated methods, use shell_out_compact_timeout instead")
627
645
  args = command_args.dup
628
646
  if args.last.is_a?(Hash)
629
647
  options = args.pop.dup
630
648
  options[:timeout] = new_resource.timeout if new_resource.timeout
631
- options[:timeout] = 900 unless options.has_key?(:timeout)
649
+ options[:timeout] = 900 unless options.key?(:timeout)
632
650
  args << options
633
651
  else
634
- args << { :timeout => new_resource.timeout ? new_resource.timeout : 900 }
652
+ args << { timeout: new_resource.timeout ? new_resource.timeout : 900 }
635
653
  end
636
654
  args
637
655
  end
@@ -34,48 +34,45 @@ class Chef
34
34
  def define_resource_requirements
35
35
  super
36
36
  requirements.assert(:install) do |a|
37
- a.assertion { @new_resource.source }
38
- a.failure_message Chef::Exceptions::Package, "Source for package #{@new_resource.name} required for action install"
37
+ a.assertion { new_resource.source }
38
+ a.failure_message Chef::Exceptions::Package, "Source for package #{new_resource.name} required for action install"
39
39
  end
40
40
  requirements.assert(:all_actions) do |a|
41
- a.assertion { !@new_resource.source || @package_source_found }
42
- a.failure_message Chef::Exceptions::Package, "Package #{@new_resource.name} not found: #{@new_resource.source}"
43
- a.whyrun "would assume #{@new_resource.source} would be have previously been made available"
41
+ a.assertion { !new_resource.source || package_source_found? }
42
+ a.failure_message Chef::Exceptions::Package, "Package #{new_resource.name} not found: #{new_resource.source}"
43
+ a.whyrun "would assume #{new_resource.source} would be have previously been made available"
44
44
  end
45
45
  end
46
46
 
47
47
  def load_current_resource
48
- @current_resource = Chef::Resource::Package.new(@new_resource.name)
49
- @current_resource.package_name(@new_resource.package_name)
48
+ @current_resource = Chef::Resource::Package.new(new_resource.name)
49
+ current_resource.package_name(new_resource.package_name)
50
50
 
51
- if @new_resource.source
52
- @package_source_found = ::File.exists?(@new_resource.source)
53
- if @package_source_found
54
- Chef::Log.debug("#{@new_resource} checking pkg status")
55
- ret = shell_out_with_timeout("installp -L -d #{@new_resource.source}")
56
- ret.stdout.each_line do |line|
57
- case line
58
- when /:#{@new_resource.package_name}:/
59
- fields = line.split(":")
60
- @new_resource.version(fields[2])
61
- when /^#{@new_resource.package_name}:/
62
- Chef::Log.warn("You are installing a bff package by product name. For idempotent installs, please install individual filesets")
63
- fields = line.split(":")
64
- @new_resource.version(fields[2])
65
- end
51
+ if package_source_found?
52
+ Chef::Log.debug("#{new_resource} checking pkg status")
53
+ ret = shell_out_compact_timeout("installp", "-L", "-d", new_resource.source)
54
+ ret.stdout.each_line do |line|
55
+ case line
56
+ when /:#{new_resource.package_name}:/
57
+ fields = line.split(":")
58
+ new_resource.version(fields[2])
59
+ when /^#{new_resource.package_name}:/
60
+ Chef::Log.warn("You are installing a bff package by product name. For idempotent installs, please install individual filesets")
61
+ fields = line.split(":")
62
+ new_resource.version(fields[2])
66
63
  end
67
- raise Chef::Exceptions::Package, "package source #{@new_resource.source} does not provide package #{@new_resource.package_name}" unless @new_resource.version
68
64
  end
65
+ raise Chef::Exceptions::Package, "package source #{new_resource.source} does not provide package #{new_resource.package_name}" unless new_resource.version
69
66
  end
70
67
 
71
- Chef::Log.debug("#{@new_resource} checking install state")
72
- ret = shell_out_with_timeout("lslpp -lcq #{@current_resource.package_name}")
68
+ Chef::Log.debug("#{new_resource} checking install state")
69
+ ret = shell_out_compact_timeout("lslpp", "-lcq", current_resource.package_name)
73
70
  ret.stdout.each_line do |line|
74
71
  case line
75
- when /#{@current_resource.package_name}/
72
+ when /#{current_resource.package_name}/
76
73
  fields = line.split(":")
77
- Chef::Log.debug("#{@new_resource} version #{fields[2]} is already installed")
78
- @current_resource.version(fields[2])
74
+ Chef::Log.debug("#{new_resource} version #{fields[2]} is already installed")
75
+ current_resource.version(fields[2])
79
76
  end
80
77
  end
81
78
 
@@ -83,23 +80,25 @@ class Chef
83
80
  raise Chef::Exceptions::Package, "lslpp failed - #{ret.format_for_exception}!"
84
81
  end
85
82
 
86
- @current_resource
83
+ current_resource
87
84
  end
88
85
 
89
86
  def candidate_version
90
87
  return @candidate_version if @candidate_version
91
- ret = shell_out_with_timeout("installp -L -d #{@new_resource.source}")
92
- ret.stdout.each_line do |line|
93
- case line
94
- when /\w:#{Regexp.escape(@new_resource.package_name)}:(.*)/
95
- fields = line.split(":")
96
- @candidate_version = fields[2]
97
- @new_resource.version(fields[2])
98
- Chef::Log.debug("#{@new_resource} setting install candidate version to #{@candidate_version}")
88
+ if package_source_found?
89
+ ret = shell_out_compact_timeout("installp", "-L", "-d", new_resource.source)
90
+ ret.stdout.each_line do |line|
91
+ case line
92
+ when /\w:#{Regexp.escape(new_resource.package_name)}:(.*)/
93
+ fields = line.split(":")
94
+ @candidate_version = fields[2]
95
+ new_resource.version(fields[2])
96
+ Chef::Log.debug("#{new_resource} setting install candidate version to #{@candidate_version}")
97
+ end
98
+ end
99
+ unless ret.exitstatus == 0
100
+ raise Chef::Exceptions::Package, "installp -L -d #{new_resource.source} - #{ret.format_for_exception}!"
99
101
  end
100
- end
101
- unless ret.exitstatus == 0
102
- raise Chef::Exceptions::Package, "installp -L -d #{@new_resource.source} - #{ret.format_for_exception}!"
103
102
  end
104
103
  @candidate_version
105
104
  end
@@ -112,28 +111,32 @@ class Chef
112
111
  # So far, the code has been tested only with standalone packages.
113
112
  #
114
113
  def install_package(name, version)
115
- Chef::Log.debug("#{@new_resource} package install options: #{@new_resource.options}")
116
- if @new_resource.options.nil?
117
- shell_out_with_timeout!( "installp -aYF -d #{@new_resource.source} #{@new_resource.package_name}" )
118
- Chef::Log.debug("#{@new_resource} installed version #{@new_resource.version} from: #{@new_resource.source}")
114
+ Chef::Log.debug("#{new_resource} package install options: #{options}")
115
+ if options.nil?
116
+ shell_out_compact_timeout!("installp", "-aYF", "-d", new_resource.source, new_resource.package_name)
117
+ Chef::Log.debug("#{new_resource} installed version #{new_resource.version} from: #{new_resource.source}")
119
118
  else
120
- shell_out_with_timeout!( "installp -aYF #{expand_options(@new_resource.options)} -d #{@new_resource.source} #{@new_resource.package_name}" )
121
- Chef::Log.debug("#{@new_resource} installed version #{@new_resource.version} from: #{@new_resource.source}")
119
+ shell_out_compact_timeout!("installp", "-aYF", options, "-d", new_resource.source, new_resource.package_name)
120
+ Chef::Log.debug("#{new_resource} installed version #{new_resource.version} from: #{new_resource.source}")
122
121
  end
123
122
  end
124
123
 
125
- alias_method :upgrade_package, :install_package
124
+ alias upgrade_package install_package
126
125
 
127
126
  def remove_package(name, version)
128
- if @new_resource.options.nil?
129
- shell_out_with_timeout!( "installp -u #{name}" )
130
- Chef::Log.debug("#{@new_resource} removed version #{@new_resource.version}")
127
+ if options.nil?
128
+ shell_out_compact_timeout!("installp", "-u", name)
129
+ Chef::Log.debug("#{new_resource} removed version #{new_resource.version}")
131
130
  else
132
- shell_out_with_timeout!( "installp -u #{expand_options(@new_resource.options)} #{name}" )
133
- Chef::Log.debug("#{@new_resource} removed version #{@new_resource.version}")
131
+ shell_out_compact_timeout!("installp", "-u", options, name)
132
+ Chef::Log.debug("#{new_resource} removed version #{new_resource.version}")
134
133
  end
135
134
  end
136
135
 
136
+ def package_source_found?
137
+ @package_source_found ||= new_resource.source && ::File.exist?(new_resource.source)
138
+ end
139
+
137
140
  end
138
141
  end
139
142
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -72,21 +72,21 @@ class Chef
72
72
 
73
73
  def package_locked(name, version)
74
74
  islocked = false
75
- locked = shell_out_with_timeout!("apt-mark showhold")
75
+ locked = shell_out_compact_timeout!("apt-mark", "showhold")
76
76
  locked.stdout.each_line do |line|
77
77
  line_package = line.strip
78
78
  if line_package == name
79
79
  islocked = true
80
80
  end
81
81
  end
82
- return islocked
82
+ islocked
83
83
  end
84
84
 
85
85
  def install_package(name, version)
86
86
  package_name = name.zip(version).map do |n, v|
87
87
  package_data[n][:virtual] ? n : "#{n}=#{v}"
88
88
  end
89
- run_noninteractive("apt-get -q -y", default_release_options, new_resource.options, "install", package_name)
89
+ run_noninteractive("apt-get", "-q", "-y", default_release_options, options, "install", package_name)
90
90
  end
91
91
 
92
92
  def upgrade_package(name, version)
@@ -97,14 +97,14 @@ class Chef
97
97
  package_name = name.map do |n|
98
98
  package_data[n][:virtual] ? resolve_virtual_package_name(n) : n
99
99
  end
100
- run_noninteractive("apt-get -q -y", new_resource.options, "remove", package_name)
100
+ run_noninteractive("apt-get", "-q", "-y", options, "remove", package_name)
101
101
  end
102
102
 
103
103
  def purge_package(name, version)
104
104
  package_name = name.map do |n|
105
105
  package_data[n][:virtual] ? resolve_virtual_package_name(n) : n
106
106
  end
107
- run_noninteractive("apt-get -q -y", new_resource.options, "purge", package_name)
107
+ run_noninteractive("apt-get", "-q", "-y", options, "purge", package_name)
108
108
  end
109
109
 
110
110
  def preseed_package(preseed_file)
@@ -118,11 +118,11 @@ class Chef
118
118
  end
119
119
 
120
120
  def lock_package(name, version)
121
- run_noninteractive("apt-mark", new_resource.options, "hold", name)
121
+ run_noninteractive("apt-mark", options, "hold", name)
122
122
  end
123
123
 
124
124
  def unlock_package(name, version)
125
- run_noninteractive("apt-mark", new_resource.options, "unhold", name)
125
+ run_noninteractive("apt-mark", options, "unhold", name)
126
126
  end
127
127
 
128
128
  private
@@ -131,12 +131,14 @@ class Chef
131
131
  # interactive prompts. Command is run with default localization rather
132
132
  # than forcing locale to "C", so command output may not be stable.
133
133
  def run_noninteractive(*args)
134
- shell_out_with_timeout!(a_to_s(*args), :env => { "DEBIAN_FRONTEND" => "noninteractive" })
134
+ shell_out_compact_timeout!(*args, env: { "DEBIAN_FRONTEND" => "noninteractive" })
135
135
  end
136
136
 
137
137
  def default_release_options
138
138
  # Use apt::Default-Release option only if provider supports it
139
- "-o APT::Default-Release=#{new_resource.default_release}" if new_resource.respond_to?(:default_release) && new_resource.default_release
139
+ if new_resource.respond_to?(:default_release) && new_resource.default_release
140
+ [ "-o", "APT::Default-Release=#{new_resource.default_release}" ]
141
+ end
140
142
  end
141
143
 
142
144
  def resolve_package_versions(pkg)
@@ -156,7 +158,7 @@ class Chef
156
158
  end
157
159
 
158
160
  def resolve_virtual_package_name(pkg)
159
- showpkg = run_noninteractive("apt-cache showpkg", pkg).stdout
161
+ showpkg = run_noninteractive("apt-cache", "showpkg", pkg).stdout
160
162
  partitions = showpkg.rpartition(/Reverse Provides: ?#{$/}/)
161
163
  return nil if partitions[0] == "" && partitions[1] == "" # not found in output
162
164
  set = partitions[2].lines.each_with_object(Set.new) do |line, acc|
@@ -166,7 +168,7 @@ class Chef
166
168
  if set.size > 1
167
169
  raise Chef::Exceptions::Package, "#{new_resource.package_name} is a virtual package provided by multiple packages, you must explicitly select one"
168
170
  end
169
- return set.to_a.first
171
+ set.to_a.first
170
172
  end
171
173
 
172
174
  def package_data_for(pkg)
@@ -186,7 +188,7 @@ class Chef
186
188
  end
187
189
  end
188
190
 
189
- return {
191
+ {
190
192
  current_version: current_version,
191
193
  candidate_version: candidate_version,
192
194
  virtual: virtual,