chef 12.18.31 → 13.0.118

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 (611) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -11
  3. data/README.md +13 -13
  4. data/Rakefile +1 -19
  5. data/VERSION +1 -1
  6. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
  7. data/acceptance/Gemfile +8 -5
  8. data/acceptance/Gemfile.lock +90 -81
  9. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
  10. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
  11. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
  12. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
  13. data/chef-universal-mingw32.gemspec +2 -3
  14. data/chef.gemspec +8 -7
  15. data/lib/chef/api_client.rb +8 -15
  16. data/lib/chef/api_client_v1.rb +9 -11
  17. data/lib/chef/application/apply.rb +8 -10
  18. data/lib/chef/application/client.rb +1 -1
  19. data/lib/chef/application/exit_code.rb +11 -82
  20. data/lib/chef/application/knife.rb +2 -2
  21. data/lib/chef/application/solo.rb +0 -1
  22. data/lib/chef/application/windows_service.rb +36 -37
  23. data/lib/chef/application/windows_service_manager.rb +1 -1
  24. data/lib/chef/application.rb +15 -25
  25. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  26. data/lib/chef/audit/control_group_data.rb +1 -1
  27. data/lib/chef/blacklist.rb +81 -0
  28. data/lib/chef/chef_class.rb +1 -0
  29. data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
  30. data/lib/chef/chef_fs/command_line.rb +15 -16
  31. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  33. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  34. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  35. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  36. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  37. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  38. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  39. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  40. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  41. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  42. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
  43. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
  44. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
  45. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  46. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
  47. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  48. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  49. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  50. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  51. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  52. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
  53. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
  54. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  55. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  56. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
  57. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  58. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  59. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  60. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  61. data/lib/chef/chef_fs/file_system.rb +1 -1
  62. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  63. data/lib/chef/client.rb +47 -11
  64. data/lib/chef/config_fetcher.rb +4 -4
  65. data/lib/chef/constants.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
  67. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  68. data/lib/chef/cookbook/gem_installer.rb +10 -6
  69. data/lib/chef/cookbook/manifest_v0.rb +68 -0
  70. data/lib/chef/cookbook/manifest_v2.rb +41 -0
  71. data/lib/chef/cookbook/metadata.rb +25 -134
  72. data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
  73. data/lib/chef/cookbook/synchronizer.rb +24 -21
  74. data/lib/chef/cookbook/syntax_check.rb +1 -1
  75. data/lib/chef/cookbook_manifest.rb +91 -65
  76. data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
  77. data/lib/chef/cookbook_uploader.rb +1 -1
  78. data/lib/chef/cookbook_version.rb +69 -157
  79. data/lib/chef/data_bag.rb +1 -7
  80. data/lib/chef/data_bag_item.rb +5 -10
  81. data/lib/chef/data_collector/messages.rb +2 -0
  82. data/lib/chef/data_collector/resource_report.rb +32 -4
  83. data/lib/chef/data_collector.rb +3 -4
  84. data/lib/chef/decorator/unchain.rb +0 -16
  85. data/lib/chef/decorator.rb +1 -1
  86. data/lib/chef/deprecated.rb +53 -19
  87. data/lib/chef/dsl/audit.rb +2 -2
  88. data/lib/chef/dsl/declare_resource.rb +11 -17
  89. data/lib/chef/dsl/platform_introspection.rb +29 -31
  90. data/lib/chef/dsl/reboot_pending.rb +1 -1
  91. data/lib/chef/dsl/recipe.rb +1 -4
  92. data/lib/chef/dsl/resources.rb +4 -13
  93. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  94. data/lib/chef/environment.rb +9 -16
  95. data/lib/chef/event_dispatch/base.rb +16 -0
  96. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  97. data/lib/chef/exceptions.rb +6 -10
  98. data/lib/chef/file_access_control/unix.rb +14 -14
  99. data/lib/chef/file_access_control/windows.rb +1 -1
  100. data/lib/chef/formatters/error_description.rb +18 -1
  101. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  102. data/lib/chef/formatters/error_mapper.rb +6 -6
  103. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
  104. data/lib/chef/http/api_versions.rb +54 -0
  105. data/lib/chef/http/authenticator.rb +15 -6
  106. data/lib/chef/http/json_output.rb +4 -1
  107. data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
  108. data/lib/chef/http/validate_content_length.rb +2 -2
  109. data/lib/chef/http.rb +39 -0
  110. data/lib/chef/json_compat.rb +7 -103
  111. data/lib/chef/key.rb +5 -10
  112. data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
  113. data/lib/chef/knife/bootstrap.rb +6 -0
  114. data/lib/chef/knife/configure.rb +1 -3
  115. data/lib/chef/knife/configure_client.rb +1 -3
  116. data/lib/chef/knife/cookbook_create.rb +1 -434
  117. data/lib/chef/knife/cookbook_download.rb +3 -4
  118. data/lib/chef/knife/cookbook_show.rb +7 -3
  119. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  120. data/lib/chef/knife/core/bootstrap_context.rb +8 -7
  121. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  122. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  123. data/lib/chef/knife/core/status_presenter.rb +1 -1
  124. data/lib/chef/knife/core/subcommand_loader.rb +2 -32
  125. data/lib/chef/knife/core/ui.rb +20 -27
  126. data/lib/chef/knife/data_bag_create.rb +6 -4
  127. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  128. data/lib/chef/knife/deps.rb +32 -34
  129. data/lib/chef/knife/edit.rb +1 -1
  130. data/lib/chef/knife/help.rb +1 -1
  131. data/lib/chef/knife/list.rb +1 -1
  132. data/lib/chef/knife/search.rb +9 -20
  133. data/lib/chef/knife/ssh.rb +62 -36
  134. data/lib/chef/knife/ssl_check.rb +1 -1
  135. data/lib/chef/knife/user_delete.rb +1 -1
  136. data/lib/chef/knife/xargs.rb +1 -1
  137. data/lib/chef/knife.rb +6 -7
  138. data/lib/chef/mash.rb +1 -1
  139. data/lib/chef/mixin/create_path.rb +3 -5
  140. data/lib/chef/mixin/from_file.rb +2 -2
  141. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  142. data/lib/chef/mixin/notifying_block.rb +7 -9
  143. data/lib/chef/mixin/params_validate.rb +9 -8
  144. data/lib/chef/mixin/path_sanity.rb +17 -19
  145. data/lib/chef/mixin/securable.rb +1 -1
  146. data/lib/chef/mixin/shell_out.rb +33 -29
  147. data/lib/chef/mixin/unformatter.rb +2 -2
  148. data/lib/chef/mixin/uris.rb +4 -6
  149. data/lib/chef/mixin/versioned_api.rb +84 -0
  150. data/lib/chef/mixin/which.rb +25 -8
  151. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  152. data/lib/chef/mixin/xml_escape.rb +3 -5
  153. data/lib/chef/mixins.rb +0 -1
  154. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  155. data/lib/chef/node/attribute.rb +9 -32
  156. data/lib/chef/node/attribute_collections.rb +1 -19
  157. data/lib/chef/node/common_api.rb +5 -7
  158. data/lib/chef/node/immutable_collections.rb +42 -38
  159. data/lib/chef/node/mixin/immutablize_array.rb +1 -1
  160. data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
  161. data/lib/chef/node.rb +21 -20
  162. data/lib/chef/node_map.rb +2 -5
  163. data/lib/chef/org.rb +10 -17
  164. data/lib/chef/platform/provider_mapping.rb +2 -169
  165. data/lib/chef/platform/query_helpers.rb +1 -1
  166. data/lib/chef/platform/rebooter.rb +1 -2
  167. data/lib/chef/policy_builder/expand_node_object.rb +3 -29
  168. data/lib/chef/policy_builder/policyfile.rb +8 -6
  169. data/lib/chef/property.rb +66 -80
  170. data/lib/chef/provider/apt_repository.rb +6 -10
  171. data/lib/chef/provider/apt_update.rb +1 -7
  172. data/lib/chef/provider/batch.rb +1 -1
  173. data/lib/chef/provider/breakpoint.rb +2 -2
  174. data/lib/chef/provider/cookbook_file.rb +3 -9
  175. data/lib/chef/provider/cron.rb +42 -60
  176. data/lib/chef/provider/deploy/revision.rb +3 -5
  177. data/lib/chef/provider/deploy.rb +82 -88
  178. data/lib/chef/provider/directory.rb +33 -37
  179. data/lib/chef/provider/dsc_resource.rb +23 -11
  180. data/lib/chef/provider/dsc_script.rb +1 -5
  181. data/lib/chef/provider/env/windows.rb +5 -1
  182. data/lib/chef/provider/env.rb +32 -30
  183. data/lib/chef/provider/erl_call.rb +15 -47
  184. data/lib/chef/provider/execute.rb +7 -8
  185. data/lib/chef/provider/file.rb +49 -61
  186. data/lib/chef/provider/git.rb +56 -60
  187. data/lib/chef/provider/group.rb +1 -7
  188. data/lib/chef/provider/http_request.rb +37 -41
  189. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  190. data/lib/chef/provider/ifconfig.rb +0 -6
  191. data/lib/chef/provider/launchd.rb +6 -2
  192. data/lib/chef/provider/link.rb +51 -55
  193. data/lib/chef/provider/log.rb +3 -7
  194. data/lib/chef/provider/lwrp_base.rb +0 -9
  195. data/lib/chef/provider/mdadm.rb +25 -33
  196. data/lib/chef/provider/mount/aix.rb +2 -2
  197. data/lib/chef/provider/mount/mount.rb +2 -2
  198. data/lib/chef/provider/mount.rb +1 -5
  199. data/lib/chef/provider/noop.rb +1 -1
  200. data/lib/chef/provider/ohai.rb +1 -7
  201. data/lib/chef/provider/osx_profile.rb +24 -29
  202. data/lib/chef/provider/package/aix.rb +55 -53
  203. data/lib/chef/provider/package/apt.rb +15 -13
  204. data/lib/chef/provider/package/cab.rb +48 -20
  205. data/lib/chef/provider/package/chocolatey.rb +9 -10
  206. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  207. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  208. data/lib/chef/provider/package/dnf/version.rb +1 -1
  209. data/lib/chef/provider/package/dnf.rb +21 -19
  210. data/lib/chef/provider/package/dpkg.rb +8 -9
  211. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  212. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  213. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  214. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  215. data/lib/chef/provider/package/homebrew.rb +11 -10
  216. data/lib/chef/provider/package/ips.rb +18 -24
  217. data/lib/chef/provider/package/macports.rb +23 -23
  218. data/lib/chef/provider/package/msu.rb +11 -12
  219. data/lib/chef/provider/package/openbsd.rb +25 -22
  220. data/lib/chef/provider/package/pacman.rb +16 -17
  221. data/lib/chef/provider/package/paludis.rb +26 -27
  222. data/lib/chef/provider/package/portage.rb +22 -23
  223. data/lib/chef/provider/package/powershell.rb +17 -17
  224. data/lib/chef/provider/package/rpm.rb +25 -26
  225. data/lib/chef/provider/package/rubygems.rb +64 -62
  226. data/lib/chef/provider/package/smartos.rb +16 -16
  227. data/lib/chef/provider/package/solaris.rb +44 -45
  228. data/lib/chef/provider/package/windows/exe.rb +6 -6
  229. data/lib/chef/provider/package/windows/msi.rb +7 -7
  230. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
  231. data/lib/chef/provider/package/windows.rb +3 -3
  232. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  233. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  234. data/lib/chef/provider/package/yum.rb +319 -269
  235. data/lib/chef/provider/package/zypper.rb +10 -20
  236. data/lib/chef/provider/package.rb +71 -63
  237. data/lib/chef/provider/powershell_script.rb +15 -7
  238. data/lib/chef/provider/reboot.rb +10 -14
  239. data/lib/chef/provider/registry_key.rb +39 -43
  240. data/lib/chef/provider/remote_directory.rb +3 -15
  241. data/lib/chef/provider/remote_file.rb +3 -9
  242. data/lib/chef/provider/route.rb +1 -7
  243. data/lib/chef/provider/ruby_block.rb +4 -8
  244. data/lib/chef/provider/script.rb +42 -6
  245. data/lib/chef/provider/service/aix.rb +1 -5
  246. data/lib/chef/provider/service/debian.rb +15 -21
  247. data/lib/chef/provider/service/freebsd.rb +0 -1
  248. data/lib/chef/provider/service/gentoo.rb +0 -1
  249. data/lib/chef/provider/service/init.rb +0 -1
  250. data/lib/chef/provider/service/insserv.rb +2 -2
  251. data/lib/chef/provider/service/openbsd.rb +0 -1
  252. data/lib/chef/provider/service/redhat.rb +2 -2
  253. data/lib/chef/provider/service/simple.rb +0 -5
  254. data/lib/chef/provider/service/solaris.rb +5 -4
  255. data/lib/chef/provider/service/systemd.rb +1 -1
  256. data/lib/chef/provider/service/upstart.rb +10 -12
  257. data/lib/chef/provider/service/windows.rb +1 -5
  258. data/lib/chef/provider/service.rb +51 -58
  259. data/lib/chef/provider/subversion.rb +40 -46
  260. data/lib/chef/provider/systemd_unit.rb +2 -0
  261. data/lib/chef/provider/template/content.rb +24 -1
  262. data/lib/chef/provider/template.rb +3 -9
  263. data/lib/chef/provider/user/dscl.rb +3 -3
  264. data/lib/chef/provider/user/linux.rb +6 -5
  265. data/lib/chef/provider/user/pw.rb +4 -10
  266. data/lib/chef/provider/user/solaris.rb +2 -2
  267. data/lib/chef/provider/user/useradd.rb +5 -5
  268. data/lib/chef/provider/user.rb +43 -59
  269. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  270. data/lib/chef/provider/windows_task.rb +418 -0
  271. data/lib/chef/provider/yum_repository.rb +3 -6
  272. data/lib/chef/provider.rb +63 -115
  273. data/lib/chef/provider_resolver.rb +8 -34
  274. data/lib/chef/providers.rb +1 -1
  275. data/lib/chef/recipe.rb +9 -1
  276. data/lib/chef/resource/action_class.rb +13 -17
  277. data/lib/chef/resource/apt_repository.rb +0 -1
  278. data/lib/chef/resource/apt_update.rb +3 -1
  279. data/lib/chef/resource/chef_gem.rb +4 -11
  280. data/lib/chef/resource/chocolatey_package.rb +4 -1
  281. data/lib/chef/resource/dnf_package.rb +6 -3
  282. data/lib/chef/resource/dsc_resource.rb +9 -1
  283. data/lib/chef/resource/execute.rb +66 -19
  284. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  285. data/lib/chef/resource/file/verification.rb +2 -7
  286. data/lib/chef/resource/freebsd_package.rb +1 -1
  287. data/lib/chef/resource/gem_package.rb +16 -2
  288. data/lib/chef/resource/launchd.rb +3 -3
  289. data/lib/chef/resource/lwrp_base.rb +0 -2
  290. data/lib/chef/resource/mount.rb +5 -12
  291. data/lib/chef/resource/package.rb +2 -2
  292. data/lib/chef/resource/powershell_script.rb +1 -1
  293. data/lib/chef/resource/registry_key.rb +1 -1
  294. data/lib/chef/resource/script.rb +8 -34
  295. data/lib/chef/resource/service.rb +15 -13
  296. data/lib/chef/resource/systemd_unit.rb +5 -0
  297. data/lib/chef/resource/user/aix_user.rb +1 -1
  298. data/lib/chef/resource/user/dscl_user.rb +1 -1
  299. data/lib/chef/resource/user/linux_user.rb +1 -10
  300. data/lib/chef/resource/user/pw_user.rb +1 -1
  301. data/lib/chef/resource/user/solaris_user.rb +1 -1
  302. data/lib/chef/resource/user/windows_user.rb +1 -1
  303. data/lib/chef/resource/user.rb +1 -19
  304. data/lib/chef/resource/windows_package.rb +4 -1
  305. data/lib/chef/resource/windows_task.rb +237 -0
  306. data/lib/chef/resource/yum_package.rb +13 -4
  307. data/lib/chef/resource/yum_repository.rb +0 -1
  308. data/lib/chef/resource/zypper_package.rb +2 -0
  309. data/lib/chef/resource.rb +90 -202
  310. data/lib/chef/resource_builder.rb +1 -65
  311. data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
  312. data/lib/chef/resource_collection/resource_list.rb +6 -0
  313. data/lib/chef/resource_collection/resource_set.rb +44 -17
  314. data/lib/chef/resource_collection.rb +10 -0
  315. data/lib/chef/resource_reporter.rb +1 -1
  316. data/lib/chef/resource_resolver.rb +1 -25
  317. data/lib/chef/resources.rb +1 -1
  318. data/lib/chef/role.rb +0 -6
  319. data/lib/chef/run_context/cookbook_compiler.rb +49 -5
  320. data/lib/chef/run_context.rb +4 -25
  321. data/lib/chef/run_list/run_list_item.rb +1 -1
  322. data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
  323. data/lib/chef/search/query.rb +26 -31
  324. data/lib/chef/server_api.rb +2 -0
  325. data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
  326. data/lib/chef/shell/ext.rb +3 -3
  327. data/lib/chef/shell/shell_session.rb +14 -4
  328. data/lib/chef/shell.rb +32 -7
  329. data/lib/chef/user.rb +9 -16
  330. data/lib/chef/user_v1.rb +9 -16
  331. data/lib/chef/util/diff.rb +1 -1
  332. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  333. data/lib/chef/util/selinux.rb +1 -1
  334. data/lib/chef/util/windows/net_group.rb +18 -30
  335. data/lib/chef/util/windows/net_use.rb +7 -11
  336. data/lib/chef/util/windows/net_user.rb +12 -18
  337. data/lib/chef/util/windows/volume.rb +9 -15
  338. data/lib/chef/version.rb +1 -1
  339. data/lib/chef/version_class.rb +1 -1
  340. data/lib/chef/win32/api/file.rb +25 -31
  341. data/lib/chef/win32/api/installer.rb +2 -2
  342. data/lib/chef/win32/api.rb +4 -6
  343. data/lib/chef/win32/file.rb +4 -6
  344. data/lib/chef/win32/registry.rb +9 -9
  345. data/lib/chef/win32/security/acl.rb +2 -2
  346. data/lib/chef/win32/security/sid.rb +5 -0
  347. data/lib/chef/win32/security.rb +2 -2
  348. data/lib/chef/win32/unicode.rb +2 -2
  349. data/lib/chef/win32/version.rb +1 -1
  350. data/lib/chef.rb +1 -2
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
  352. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  353. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  354. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  355. data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
  356. data/spec/data/lwrp/resources/buck_passer.rb +5 -0
  357. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
  358. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
  359. data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
  360. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
  361. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
  362. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
  363. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  364. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  365. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  366. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
  367. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
  368. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
  369. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
  370. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
  371. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
  372. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
  373. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
  374. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
  375. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
  376. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
  377. data/spec/data/shef-config.rb +11 -10
  378. data/spec/functional/knife/ssh_spec.rb +34 -6
  379. data/spec/functional/rebooter_spec.rb +1 -0
  380. data/spec/functional/resource/bash_spec.rb +11 -45
  381. data/spec/functional/resource/batch_spec.rb +5 -1
  382. data/spec/functional/resource/cron_spec.rb +2 -2
  383. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  384. data/spec/functional/resource/execute_spec.rb +17 -0
  385. data/spec/functional/resource/link_spec.rb +3 -3
  386. data/spec/functional/resource/template_spec.rb +33 -0
  387. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  388. data/spec/functional/root_alias_spec.rb +78 -0
  389. data/spec/functional/shell_spec.rb +38 -40
  390. data/spec/integration/client/client_spec.rb +109 -16
  391. data/spec/integration/client/exit_code_spec.rb +1 -105
  392. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
  393. data/spec/integration/knife/cookbook_download_spec.rb +0 -24
  394. data/spec/integration/knife/cookbook_show_spec.rb +12 -23
  395. data/spec/integration/knife/deps_spec.rb +5 -9
  396. data/spec/integration/knife/search_node_spec.rb +39 -0
  397. data/spec/integration/knife/serve_spec.rb +58 -22
  398. data/spec/integration/knife/upload_spec.rb +3 -11
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
  400. data/spec/integration/recipes/notifies_spec.rb +60 -0
  401. data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
  402. data/spec/integration/recipes/resource_action_spec.rb +37 -30
  403. data/spec/spec_helper.rb +7 -0
  404. data/spec/support/chef_helpers.rb +5 -7
  405. data/spec/support/platform_helpers.rb +10 -3
  406. data/spec/support/platforms/prof/gc.rb +4 -6
  407. data/spec/support/shared/context/client.rb +9 -2
  408. data/spec/support/shared/functional/execute_resource.rb +150 -0
  409. data/spec/support/shared/functional/windows_script.rb +74 -4
  410. data/spec/support/shared/integration/knife_support.rb +1 -1
  411. data/spec/support/shared/unit/execute_resource.rb +37 -9
  412. data/spec/support/shared/unit/provider/file.rb +10 -0
  413. data/spec/support/shared/unit/script_resource.rb +1 -9
  414. data/spec/unit/application/exit_code_spec.rb +4 -89
  415. data/spec/unit/application_spec.rb +39 -29
  416. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
  417. data/spec/unit/client_spec.rb +72 -31
  418. data/spec/unit/config_fetcher_spec.rb +2 -2
  419. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
  420. data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
  421. data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
  422. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
  423. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
  424. data/spec/unit/cookbook/metadata_spec.rb +29 -108
  425. data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
  426. data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
  427. data/spec/unit/cookbook_loader_spec.rb +17 -19
  428. data/spec/unit/cookbook_manifest_spec.rb +12 -44
  429. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
  430. data/spec/unit/cookbook_spec.rb +10 -14
  431. data/spec/unit/cookbook_uploader_spec.rb +1 -1
  432. data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
  433. data/spec/unit/cookbook_version_spec.rb +19 -128
  434. data/spec/unit/data_bag_item_spec.rb +4 -0
  435. data/spec/unit/data_collector/messages_spec.rb +137 -0
  436. data/spec/unit/data_collector/resource_report_spec.rb +145 -0
  437. data/spec/unit/deprecation_spec.rb +0 -14
  438. data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
  439. data/spec/unit/formatters/error_description_spec.rb +52 -7
  440. data/spec/unit/http/api_versions_spec.rb +79 -0
  441. data/spec/unit/http/authenticator_spec.rb +20 -0
  442. data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
  443. data/spec/unit/json_compat_spec.rb +0 -32
  444. data/spec/unit/knife/bootstrap_spec.rb +34 -0
  445. data/spec/unit/knife/configure_client_spec.rb +0 -2
  446. data/spec/unit/knife/cookbook_create_spec.rb +1 -220
  447. data/spec/unit/knife/cookbook_download_spec.rb +46 -28
  448. data/spec/unit/knife/cookbook_show_spec.rb +42 -9
  449. data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
  450. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
  451. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
  452. data/spec/unit/knife/core/ui_spec.rb +21 -11
  453. data/spec/unit/knife/data_bag_create_spec.rb +65 -45
  454. data/spec/unit/knife/ssh_spec.rb +34 -36
  455. data/spec/unit/knife_spec.rb +2 -2
  456. data/spec/unit/lwrp_spec.rb +38 -127
  457. data/spec/unit/mixin/path_sanity_spec.rb +7 -7
  458. data/spec/unit/mixin/shell_out_spec.rb +18 -84
  459. data/spec/unit/mixin/versioned_api_spec.rb +128 -0
  460. data/spec/unit/mixin/which.rb +160 -0
  461. data/spec/unit/node/attribute_spec.rb +65 -33
  462. data/spec/unit/node/immutable_collections_spec.rb +104 -1
  463. data/spec/unit/node_map_spec.rb +1 -23
  464. data/spec/unit/node_spec.rb +81 -98
  465. data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
  466. data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
  467. data/spec/unit/property/validation_spec.rb +51 -69
  468. data/spec/unit/property_spec.rb +105 -125
  469. data/spec/unit/provider/apt_repository_spec.rb +33 -27
  470. data/spec/unit/provider/cron_spec.rb +15 -39
  471. data/spec/unit/provider/deploy_spec.rb +1 -1
  472. data/spec/unit/provider/directory_spec.rb +10 -0
  473. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  474. data/spec/unit/provider/erl_call_spec.rb +5 -13
  475. data/spec/unit/provider/execute_spec.rb +3 -14
  476. data/spec/unit/provider/launchd_spec.rb +2 -2
  477. data/spec/unit/provider/package/aix_spec.rb +22 -22
  478. data/spec/unit/provider/package/apt_spec.rb +37 -27
  479. data/spec/unit/provider/package/cab_spec.rb +59 -5
  480. data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
  481. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  482. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  483. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  484. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  485. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  486. data/spec/unit/provider/package/ips_spec.rb +37 -31
  487. data/spec/unit/provider/package/macports_spec.rb +10 -10
  488. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  489. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  490. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  491. data/spec/unit/provider/package/portage_spec.rb +6 -7
  492. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  493. data/spec/unit/provider/package/rubygems_spec.rb +135 -46
  494. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  495. data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
  496. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
  497. data/spec/unit/provider/package/windows_spec.rb +2 -1
  498. data/spec/unit/provider/package/yum_spec.rb +58 -50
  499. data/spec/unit/provider/package/zypper_spec.rb +54 -97
  500. data/spec/unit/provider/package_spec.rb +8 -0
  501. data/spec/unit/provider/powershell_script_spec.rb +14 -4
  502. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  503. data/spec/unit/provider/route_spec.rb +7 -1
  504. data/spec/unit/provider/script_spec.rb +49 -6
  505. data/spec/unit/provider/service/debian_service_spec.rb +14 -20
  506. data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
  507. data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
  508. data/spec/unit/provider/subversion_spec.rb +2 -2
  509. data/spec/unit/provider/user/linux_spec.rb +5 -43
  510. data/spec/unit/provider/user/pw_spec.rb +7 -27
  511. data/spec/unit/provider/windows_task_spec.rb +392 -0
  512. data/spec/unit/provider_resolver_spec.rb +0 -1
  513. data/spec/unit/provider_spec.rb +10 -3
  514. data/spec/unit/recipe_spec.rb +3 -172
  515. data/spec/unit/resource/chef_gem_spec.rb +16 -62
  516. data/spec/unit/resource/conditional_spec.rb +4 -4
  517. data/spec/unit/resource/cookbook_file_spec.rb +2 -2
  518. data/spec/unit/resource/cron_spec.rb +1 -1
  519. data/spec/unit/resource/deploy_spec.rb +4 -4
  520. data/spec/unit/resource/directory_spec.rb +2 -2
  521. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  522. data/spec/unit/resource/env_spec.rb +1 -1
  523. data/spec/unit/resource/execute_spec.rb +215 -1
  524. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  525. data/spec/unit/resource/file/verification_spec.rb +8 -14
  526. data/spec/unit/resource/file_spec.rb +3 -3
  527. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  528. data/spec/unit/resource/group_spec.rb +2 -2
  529. data/spec/unit/resource/ifconfig_spec.rb +1 -1
  530. data/spec/unit/resource/link_spec.rb +2 -2
  531. data/spec/unit/resource/mdadm_spec.rb +1 -1
  532. data/spec/unit/resource/mount_spec.rb +3 -3
  533. data/spec/unit/resource/ohai_spec.rb +1 -1
  534. data/spec/unit/resource/package_spec.rb +14 -4
  535. data/spec/unit/resource/registry_key_spec.rb +2 -2
  536. data/spec/unit/resource/remote_directory_spec.rb +2 -2
  537. data/spec/unit/resource/remote_file_spec.rb +2 -2
  538. data/spec/unit/resource/route_spec.rb +1 -1
  539. data/spec/unit/resource/scm_spec.rb +2 -2
  540. data/spec/unit/resource/script_spec.rb +1 -1
  541. data/spec/unit/resource/service_spec.rb +25 -5
  542. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  543. data/spec/unit/resource/template_spec.rb +2 -2
  544. data/spec/unit/resource/user_spec.rb +6 -6
  545. data/spec/unit/resource/windows_task_spec.rb +213 -0
  546. data/spec/unit/resource/yum_package_spec.rb +42 -1
  547. data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
  548. data/spec/unit/resource_collection_spec.rb +4 -3
  549. data/spec/unit/resource_reporter_spec.rb +6 -6
  550. data/spec/unit/resource_spec.rb +55 -71
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
  552. data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
  553. data/spec/unit/runner_spec.rb +10 -28
  554. data/spec/unit/search/query_spec.rb +32 -34
  555. data/spec/unit/server_api_versions_spec.rb +44 -0
  556. data/spec/unit/shell/shell_session_spec.rb +33 -2
  557. data/spec/unit/util/selinux_spec.rb +3 -14
  558. data/spec/unit/win32/error_spec.rb +67 -0
  559. data/spec/unit/win32/security_spec.rb +66 -0
  560. data/tasks/bundle.rb +36 -52
  561. data/tasks/changelog.rb +1 -1
  562. data/tasks/dependencies.rb +54 -52
  563. data/tasks/version.rb +41 -0
  564. metadata +91 -76
  565. data/lib/chef/deprecation/mixin/template.rb +0 -48
  566. data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
  567. data/lib/chef/deprecation/provider/file.rb +0 -198
  568. data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
  569. data/lib/chef/deprecation/provider/remote_file.rb +0 -85
  570. data/lib/chef/deprecation/provider/template.rb +0 -63
  571. data/lib/chef/dsl/method_missing.rb +0 -75
  572. data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
  573. data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
  574. data/lib/chef/mixin/command/unix.rb +0 -220
  575. data/lib/chef/mixin/command/windows.rb +0 -71
  576. data/lib/chef/mixin/command.rb +0 -194
  577. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
  578. data/lib/chef/provider/package/easy_install.rb +0 -135
  579. data/lib/chef/rest.rb +0 -210
  580. data/lib/chef/shell_out.rb +0 -13
  581. data/lib/chef/tasks/chef_repo.rake +0 -200
  582. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
  583. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
  584. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
  585. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
  586. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
  587. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
  588. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
  589. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
  590. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
  591. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
  592. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
  593. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
  594. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
  595. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
  596. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
  597. data/spec/functional/rest_spec.rb +0 -95
  598. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
  599. data/spec/unit/lib_backcompat_spec.rb +0 -34
  600. data/spec/unit/mixin/command_spec.rb +0 -107
  601. data/spec/unit/platform_spec.rb +0 -242
  602. data/spec/unit/provider/package/easy_install_spec.rb +0 -114
  603. data/spec/unit/resource/easy_install_package_spec.rb +0 -39
  604. data/spec/unit/rest/auth_credentials_spec.rb +0 -292
  605. data/spec/unit/rest_spec.rb +0 -753
  606. data/spec/unit/shell_out_spec.rb +0 -18
  607. data/tasks/bin/bundle-platform +0 -20
  608. data/tasks/bin/bundle-platform.bat +0 -2
  609. data/tasks/bin/bundler_patch.rb +0 -27
  610. data/tasks/bin/gem-version-diff +0 -37
  611. data/tasks/bundle_util.rb +0 -110
@@ -17,7 +17,6 @@
17
17
  #
18
18
  #
19
19
  require "chef/provider/package"
20
- require "chef/mixin/command"
21
20
  require "chef/resource/package"
22
21
  require "chef/mixin/get_source_from_package"
23
22
 
@@ -34,48 +33,45 @@ class Chef
34
33
  def define_resource_requirements
35
34
  super
36
35
  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"
36
+ a.assertion { new_resource.source }
37
+ a.failure_message Chef::Exceptions::Package, "Source for package #{new_resource.name} required for action install"
39
38
  end
40
39
  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"
40
+ a.assertion { !new_resource.source || package_source_found? }
41
+ a.failure_message Chef::Exceptions::Package, "Package #{new_resource.name} not found: #{new_resource.source}"
42
+ a.whyrun "would assume #{new_resource.source} would be have previously been made available"
44
43
  end
45
44
  end
46
45
 
47
46
  def load_current_resource
48
- @current_resource = Chef::Resource::Package.new(@new_resource.name)
49
- @current_resource.package_name(@new_resource.package_name)
47
+ @current_resource = Chef::Resource::Package.new(new_resource.name)
48
+ current_resource.package_name(new_resource.package_name)
50
49
 
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
50
+ if package_source_found?
51
+ Chef::Log.debug("#{new_resource} checking pkg status")
52
+ ret = shell_out_compact_timeout("installp", "-L", "-d", new_resource.source)
53
+ ret.stdout.each_line do |line|
54
+ case line
55
+ when /:#{new_resource.package_name}:/
56
+ fields = line.split(":")
57
+ new_resource.version(fields[2])
58
+ when /^#{new_resource.package_name}:/
59
+ Chef::Log.warn("You are installing a bff package by product name. For idempotent installs, please install individual filesets")
60
+ fields = line.split(":")
61
+ new_resource.version(fields[2])
66
62
  end
67
- raise Chef::Exceptions::Package, "package source #{@new_resource.source} does not provide package #{@new_resource.package_name}" unless @new_resource.version
68
63
  end
64
+ raise Chef::Exceptions::Package, "package source #{new_resource.source} does not provide package #{new_resource.package_name}" unless new_resource.version
69
65
  end
70
66
 
71
- Chef::Log.debug("#{@new_resource} checking install state")
72
- ret = shell_out_with_timeout("lslpp -lcq #{@current_resource.package_name}")
67
+ Chef::Log.debug("#{new_resource} checking install state")
68
+ ret = shell_out_compact_timeout("lslpp", "-lcq", current_resource.package_name)
73
69
  ret.stdout.each_line do |line|
74
70
  case line
75
- when /#{@current_resource.package_name}/
71
+ when /#{current_resource.package_name}/
76
72
  fields = line.split(":")
77
- Chef::Log.debug("#{@new_resource} version #{fields[2]} is already installed")
78
- @current_resource.version(fields[2])
73
+ Chef::Log.debug("#{new_resource} version #{fields[2]} is already installed")
74
+ current_resource.version(fields[2])
79
75
  end
80
76
  end
81
77
 
@@ -83,23 +79,25 @@ class Chef
83
79
  raise Chef::Exceptions::Package, "lslpp failed - #{ret.format_for_exception}!"
84
80
  end
85
81
 
86
- @current_resource
82
+ current_resource
87
83
  end
88
84
 
89
85
  def candidate_version
90
86
  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}")
87
+ if package_source_found?
88
+ ret = shell_out_compact_timeout("installp", "-L", "-d", new_resource.source)
89
+ ret.stdout.each_line do |line|
90
+ case line
91
+ when /\w:#{Regexp.escape(new_resource.package_name)}:(.*)/
92
+ fields = line.split(":")
93
+ @candidate_version = fields[2]
94
+ new_resource.version(fields[2])
95
+ Chef::Log.debug("#{new_resource} setting install candidate version to #{@candidate_version}")
96
+ end
97
+ end
98
+ unless ret.exitstatus == 0
99
+ raise Chef::Exceptions::Package, "installp -L -d #{new_resource.source} - #{ret.format_for_exception}!"
99
100
  end
100
- end
101
- unless ret.exitstatus == 0
102
- raise Chef::Exceptions::Package, "installp -L -d #{@new_resource.source} - #{ret.format_for_exception}!"
103
101
  end
104
102
  @candidate_version
105
103
  end
@@ -112,28 +110,32 @@ class Chef
112
110
  # So far, the code has been tested only with standalone packages.
113
111
  #
114
112
  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}")
113
+ Chef::Log.debug("#{new_resource} package install options: #{options}")
114
+ if options.nil?
115
+ shell_out_compact_timeout!("installp", "-aYF", "-d", new_resource.source, new_resource.package_name)
116
+ Chef::Log.debug("#{new_resource} installed version #{new_resource.version} from: #{new_resource.source}")
119
117
  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}")
118
+ shell_out_compact_timeout!("installp", "-aYF", options, "-d", new_resource.source, new_resource.package_name)
119
+ Chef::Log.debug("#{new_resource} installed version #{new_resource.version} from: #{new_resource.source}")
122
120
  end
123
121
  end
124
122
 
125
- alias_method :upgrade_package, :install_package
123
+ alias upgrade_package install_package
126
124
 
127
125
  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}")
126
+ if options.nil?
127
+ shell_out_compact_timeout!("installp", "-u", name)
128
+ Chef::Log.debug("#{new_resource} removed version #{new_resource.version}")
131
129
  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}")
130
+ shell_out_compact_timeout!("installp", "-u", options, name)
131
+ Chef::Log.debug("#{new_resource} removed version #{new_resource.version}")
134
132
  end
135
133
  end
136
134
 
135
+ def package_source_found?
136
+ @package_source_found ||= new_resource.source && ::File.exist?(new_resource.source)
137
+ end
138
+
137
139
  end
138
140
  end
139
141
  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,
@@ -19,50 +19,79 @@
19
19
  require "chef/provider/package"
20
20
  require "chef/resource/cab_package"
21
21
  require "chef/mixin/shell_out"
22
+ require "chef/mixin/uris"
23
+ require "chef/mixin/checksum"
22
24
 
23
25
  class Chef
24
26
  class Provider
25
27
  class Package
26
28
  class Cab < Chef::Provider::Package
27
29
  include Chef::Mixin::ShellOut
30
+ include Chef::Mixin::Uris
31
+ include Chef::Mixin::Checksum
28
32
 
29
33
  provides :cab_package, os: "windows"
30
34
 
31
35
  def load_current_resource
32
36
  @current_resource = Chef::Resource::CabPackage.new(new_resource.name)
33
- current_resource.source(new_resource.source)
37
+ current_resource.source(cab_file_source)
34
38
  new_resource.version(package_version)
35
39
  current_resource.version(installed_version)
36
40
  current_resource
37
41
  end
38
42
 
43
+ def cab_file_source
44
+ @cab_file_source ||= uri_scheme?(new_resource.source) ? download_source_file : new_resource.source
45
+ end
46
+
47
+ def download_source_file
48
+ source_resource.run_action(:create)
49
+ Chef::Log.debug("#{new_resource} fetched source file to #{source_resource.path}")
50
+ source_resource.path
51
+ end
52
+
53
+ def source_resource
54
+ @source_resource ||= declare_resource(:remote_file, new_resource.name) do
55
+ path default_download_cache_path
56
+ source new_resource.source
57
+ backup false
58
+ end
59
+ end
60
+
61
+ def default_download_cache_path
62
+ uri = ::URI.parse(new_resource.source)
63
+ filename = ::File.basename(::URI.unescape(uri.path))
64
+ file_cache_dir = Chef::FileCache.create_cache_path("package/")
65
+ Chef::Util::PathHelper.cleanpath("#{file_cache_dir}/#{filename}")
66
+ end
67
+
39
68
  def install_package(name, version)
40
- dism_command("/Add-Package /PackagePath:\"#{@new_resource.source}\"")
69
+ dism_command("/Add-Package /PackagePath:\"#{cab_file_source}\"")
41
70
  end
42
71
 
43
72
  def remove_package(name, version)
44
- dism_command("/Remove-Package /PackagePath:\"#{@new_resource.source}\"")
73
+ dism_command("/Remove-Package /PackagePath:\"#{cab_file_source}\"")
45
74
  end
46
75
 
47
76
  def dism_command(command)
48
- shellout = Mixlib::ShellOut.new("dism.exe /Online /English #{command} /NoRestart", { :timeout => @new_resource.timeout })
77
+ shellout = Mixlib::ShellOut.new("dism.exe /Online /English #{command} /NoRestart", timeout: new_resource.timeout)
49
78
  with_os_architecture(nil) do
50
79
  shellout.run_command
51
80
  end
52
81
  end
53
82
 
54
83
  def installed_version
55
- stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{@new_resource.source}\"").stdout
84
+ stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{cab_file_source}\"").stdout
56
85
  package_info = parse_dism_get_package_info(stdout)
57
86
  # e.g. Package_for_KB2975719~31bf3856ad364e35~amd64~~6.3.1.8
58
87
  package = split_package_identity(package_info["package_information"]["package_identity"])
59
88
  # Search for just the package name to catch a different version being installed
60
- Chef::Log.debug("#{@new_resource} searching for installed package #{package['name']}")
89
+ Chef::Log.debug("#{new_resource} searching for installed package #{package['name']}")
61
90
  found_packages = installed_packages.select { |p| p["package_identity"] =~ /^#{package['name']}~/ }
62
- if found_packages.length == 0
91
+ if found_packages.empty?
63
92
  nil
64
93
  elsif found_packages.length == 1
65
- stdout = dism_command("/Get-PackageInfo /PackageName:\"#{found_packages.first["package_identity"]}\"").stdout
94
+ stdout = dism_command("/Get-PackageInfo /PackageName:\"#{found_packages.first['package_identity']}\"").stdout
66
95
  find_version(stdout)
67
96
  else
68
97
  # Presuming this won't happen, otherwise we need to handle it
@@ -71,8 +100,8 @@ class Chef
71
100
  end
72
101
 
73
102
  def package_version
74
- Chef::Log.debug("#{@new_resource} getting product version for package at #{@new_resource.source}")
75
- stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{@new_resource.source}\"").stdout
103
+ Chef::Log.debug("#{new_resource} getting product version for package at #{cab_file_source}")
104
+ stdout = dism_command("/Get-PackageInfo /PackagePath:\"#{cab_file_source}\"").stdout
76
105
  find_version(stdout)
77
106
  end
78
107
 
@@ -85,22 +114,21 @@ class Chef
85
114
  # returns a hash of package state information given the output of dism /get-packages
86
115
  # expected keys: package_identity
87
116
  def parse_dism_get_packages(text)
88
- packages = Array.new
117
+ packages = []
89
118
  text.each_line do |line|
90
119
  key, value = line.split(":") if line.start_with?("Package Identity")
91
- unless key.nil? || value.nil?
92
- package = Hash.new
93
- package[key.downcase.strip.tr(" ", "_")] = value.strip.chomp
94
- packages << package
95
- end
120
+ next if key.nil? || value.nil?
121
+ package = {}
122
+ package[key.downcase.strip.tr(" ", "_")] = value.strip.chomp
123
+ packages << package
96
124
  end
97
125
  packages
98
126
  end
99
127
 
100
128
  # returns a hash of package information given the output of dism /get-packageinfo
101
129
  def parse_dism_get_package_info(text)
102
- package_data = Hash.new
103
- errors = Array.new
130
+ package_data = {}
131
+ errors = []
104
132
  in_section = false
105
133
  section_headers = [ "Package information", "Custom Properties", "Features" ]
106
134
  text.each_line do |line|
@@ -112,7 +140,7 @@ class Chef
112
140
  v = $2 # has to be first or the gsub below replaces this variable
113
141
  k = $1.downcase.strip.tr(" ", "_")
114
142
  if in_section
115
- package_data[in_section] = Hash.new unless package_data[in_section]
143
+ package_data[in_section] = {} unless package_data[in_section]
116
144
  package_data[in_section][k] = v
117
145
  else
118
146
  package_data[k] = v
@@ -132,7 +160,7 @@ class Chef
132
160
  end
133
161
 
134
162
  def split_package_identity(identity)
135
- data = Hash.new
163
+ data = {}
136
164
  data["name"], data["publisher"], data["arch"], data["resource_id"], data["version"] = identity.split("~")
137
165
  data
138
166
  end
@@ -30,8 +30,8 @@ class Chef
30
30
  # Declare that our arguments should be arrays
31
31
  use_multipackage_api
32
32
 
33
- PATHFINDING_POWERSHELL_COMMAND = "[System.Environment]::GetEnvironmentVariable('ChocolateyInstall', 'MACHINE')"
34
- CHOCO_MISSING_MSG = <<-EOS
33
+ PATHFINDING_POWERSHELL_COMMAND = "[System.Environment]::GetEnvironmentVariable('ChocolateyInstall', 'MACHINE')".freeze
34
+ CHOCO_MISSING_MSG = <<-EOS.freeze
35
35
  Could not locate your Chocolatey install. To install chocolatey, we recommend
36
36
  the 'chocolatey' cookbook (https://github.com/chocolatey/chocolatey-cookbook).
37
37
  If Chocolatey is installed, ensure that the 'ChocolateyInstall' environment
@@ -59,8 +59,8 @@ EOS
59
59
  # so we want to assert candidates exist for the alternate source
60
60
  requirements.assert(:upgrade, :install) do |a|
61
61
  a.assertion { candidates_exist_for_all_uninstalled? }
62
- a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(", ")}")
63
- a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(", ")} would have been configured")
62
+ a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(', ')}")
63
+ a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(', ')} would have been configured")
64
64
  end
65
65
  end
66
66
 
@@ -133,12 +133,11 @@ EOS
133
133
  end
134
134
 
135
135
  # Choco does not have dpkg's distinction between purge and remove
136
- alias_method :purge_package, :remove_package
136
+ alias purge_package remove_package
137
137
 
138
138
  # Override the superclass check. The semantics for our new_resource.source is not files to
139
139
  # install from, but like the rubygem provider's sources which are more like repos.
140
- def check_resource_semantics!
141
- end
140
+ def check_resource_semantics!; end
142
141
 
143
142
  private
144
143
 
@@ -160,7 +159,7 @@ EOS
160
159
  def choco_install_path
161
160
  @choco_install_path ||= powershell_out!(
162
161
  PATHFINDING_POWERSHELL_COMMAND
163
- ).stdout.chomp
162
+ ).stdout.chomp
164
163
  end
165
164
 
166
165
  # Helper to dispatch a choco command through shell_out using the timeout
@@ -169,7 +168,7 @@ EOS
169
168
  # @param args [String] variable number of string arguments
170
169
  # @return [Mixlib::ShellOut] object returned from shell_out!
171
170
  def choco_command(*args)
172
- shell_out_with_timeout!(args_to_string(choco_exe, *args), { :returns => new_resource.returns })
171
+ shell_out_with_timeout!(args_to_string(choco_exe, *args), returns: new_resource.returns)
173
172
  end
174
173
 
175
174
  # Use the available_packages Hash helper to create an array suitable for
@@ -268,7 +267,7 @@ EOS
268
267
  # @param names [Array] original mixed case names
269
268
  # @return [Array] same names in lower case
270
269
  def lowercase_names(names)
271
- names.map { |name| name.downcase }
270
+ names.map(&:downcase)
272
271
  end
273
272
  end
274
273
  end
@@ -53,7 +53,7 @@ def query(command):
53
53
  if len(archq.run()) > 0:
54
54
  q = archq
55
55
 
56
- pkgs = dnf.query.latest_limit_pkgs(q, 1)
56
+ pkgs = q.latest(1).run()
57
57
 
58
58
  if not pkgs:
59
59
  sys.stdout.write('{} nil nil\n'.format(command['provides'].split().pop(0)))
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright 2016, Chef Software, Inc.
2
+ # Copyright:: Copyright 2016-2017, Chef Software Inc.
3
3
  # License:: Apache License, Version 2.0
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,6 +15,8 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
+ require "chef/mixin/which"
19
+ require "chef/mixin/shell_out"
18
20
  require "chef/provider/package/dnf/version"
19
21
  require "timeout"
20
22
 
@@ -24,7 +26,8 @@ class Chef
24
26
  class Dnf < Chef::Provider::Package
25
27
  class PythonHelper
26
28
  include Singleton
27
- extend Chef::Mixin::Which
29
+ include Chef::Mixin::Which
30
+ include Chef::Mixin::ShellOut
28
31
 
29
32
  attr_accessor :stdin
30
33
  attr_accessor :stdout
@@ -32,11 +35,16 @@ class Chef
32
35
  attr_accessor :wait_thr
33
36
 
34
37
  DNF_HELPER = ::File.expand_path(::File.join(::File.dirname(__FILE__), "dnf_helper.py")).freeze
35
- DNF_COMMAND = "#{which("python3")} #{DNF_HELPER}"
38
+
39
+ def dnf_command
40
+ @dnf_command ||= which("python", "python3", "python2", "python2.7") do |f|
41
+ shell_out("#{f} -c 'import dnf'").exitstatus == 0
42
+ end + " #{DNF_HELPER}"
43
+ end
36
44
 
37
45
  def start
38
46
  ENV["PYTHONUNBUFFERED"] = "1"
39
- @stdin, @stdout, @stderr, @wait_thr = Open3.popen3(DNF_COMMAND)
47
+ @stdin, @stdout, @stderr, @wait_thr = Open3.popen3(dnf_command)
40
48
  end
41
49
 
42
50
  def reap
@@ -53,6 +61,27 @@ class Chef
53
61
  start if stdin.nil?
54
62
  end
55
63
 
64
+ # @returns Array<Version>
65
+ def query(action, provides, version = nil, arch = nil)
66
+ with_helper do
67
+ json = build_query(action, provides, version, arch)
68
+ Chef::Log.debug "sending '#{json}' to python helper"
69
+ stdin.syswrite json + "\n"
70
+ output = stdout.sysread(4096).chomp
71
+ Chef::Log.debug "got '#{output}' from python helper"
72
+ version = parse_response(output)
73
+ Chef::Log.debug "parsed #{version} from python helper"
74
+ version
75
+ end
76
+ end
77
+
78
+ def restart
79
+ reap
80
+ start
81
+ end
82
+
83
+ private
84
+
56
85
  # i couldn't figure out how to decompose an evr on the python side, it seems reasonably
57
86
  # painless to do it in ruby (generally massaging nevras in the ruby side is HIGHLY
58
87
  # discouraged -- this is an "every rule has an exception" exception -- any additional
@@ -60,10 +89,12 @@ class Chef
60
89
  def add_version(hash, version)
61
90
  epoch = nil
62
91
  if version =~ /(\S+):(\S+)/
63
- epoch, version = $1, $2
92
+ epoch = $1
93
+ version = $2
64
94
  end
65
95
  if version =~ /(\S+)-(\S+)/
66
- version, release = $1, $2
96
+ version = $1
97
+ release = $2
67
98
  end
68
99
  hash["epoch"] = epoch unless epoch.nil?
69
100
  hash["release"] = release unless release.nil?
@@ -83,35 +114,41 @@ class Chef
83
114
  array.each_slice(3).map { |x| Version.new(*x) }.first
84
115
  end
85
116
 
86
- # @returns Array<Version>
87
- def query(action, provides, version = nil, arch = nil)
88
- with_helper do
89
- json = build_query(action, provides, version, arch)
90
- Chef::Log.debug "sending '#{json}' to python helper"
91
- stdin.syswrite json + "\n"
92
- output = stdout.sysread(4096).chomp
93
- Chef::Log.debug "got '#{output}' from python helper"
94
- version = parse_response(output)
95
- Chef::Log.debug "parsed #{version} from python helper"
96
- version
117
+ def drain_stderr
118
+ output = ""
119
+ until IO.select([stderr], nil, nil, 0).nil?
120
+ output += stderr.sysread(4096).chomp
97
121
  end
98
- end
99
-
100
- def restart
101
- reap
102
- start
122
+ output
123
+ rescue
124
+ # we must rescue EOFError, and we don't much care about errors on stderr anyway
125
+ output
103
126
  end
104
127
 
105
128
  def with_helper
106
129
  max_retries ||= 5
130
+ ret = nil
107
131
  Timeout.timeout(600) do
108
132
  check
109
- yield
133
+ ret = yield
110
134
  end
135
+ output = drain_stderr
136
+ unless output.empty?
137
+ Chef::Log.debug "discarding output on stderr from python helper: #{output}"
138
+ end
139
+ ret
111
140
  rescue EOFError, Errno::EPIPE, Timeout::Error, Errno::ESRCH => e
112
- raise e unless ( max_retries -= 1 ) > 0
113
- restart
114
- retry
141
+ output = drain_stderr
142
+ if ( max_retries -= 1 ) > 0
143
+ unless output.empty?
144
+ Chef::Log.debug "discarding output on stderr from python helper: #{output}"
145
+ end
146
+ restart
147
+ retry
148
+ else
149
+ raise e if output.empty?
150
+ raise "dnf-helper.py had stderr output:\n\n#{output}"
151
+ end
115
152
  end
116
153
  end
117
154
  end
@@ -48,7 +48,7 @@ class Chef
48
48
  name == other.name && version == other.version && arch == other.arch
49
49
  end
50
50
 
51
- alias_method :eql?, :==
51
+ alias eql? ==
52
52
  end
53
53
  end
54
54
  end