chef 16.0.287-universal-mingw32 → 16.2.73-universal-mingw32

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 (333) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -3
  3. data/README.md +3 -3
  4. data/Rakefile +3 -2
  5. data/chef.gemspec +5 -5
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/application/apply.rb +2 -1
  9. data/lib/chef/application/base.rb +1 -1
  10. data/lib/chef/application/client.rb +1 -1
  11. data/lib/chef/application/windows_service_manager.rb +1 -1
  12. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  13. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  14. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
  15. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  16. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  17. data/lib/chef/chef_fs/path_utils.rb +4 -4
  18. data/lib/chef/cookbook/chefignore.rb +1 -1
  19. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  20. data/lib/chef/cookbook/metadata.rb +2 -2
  21. data/lib/chef/cookbook_loader.rb +1 -1
  22. data/lib/chef/cookbook_manifest.rb +1 -1
  23. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  24. data/lib/chef/cookbook_version.rb +4 -4
  25. data/lib/chef/data_bag.rb +4 -4
  26. data/lib/chef/data_collector.rb +1 -1
  27. data/lib/chef/data_collector/error_handlers.rb +1 -1
  28. data/lib/chef/decorator/lazy_array.rb +2 -2
  29. data/lib/chef/deprecated.rb +4 -0
  30. data/lib/chef/digester.rb +5 -4
  31. data/lib/chef/dsl/declare_resource.rb +1 -1
  32. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  33. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  34. data/lib/chef/file_access_control.rb +1 -1
  35. data/lib/chef/file_access_control/windows.rb +2 -2
  36. data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
  37. data/lib/chef/formatters/base.rb +1 -1
  38. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
  39. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  40. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  41. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
  42. data/lib/chef/http.rb +19 -4
  43. data/lib/chef/http/decompressor.rb +1 -1
  44. data/lib/chef/http/http_request.rb +1 -1
  45. data/lib/chef/http/json_output.rb +1 -1
  46. data/lib/chef/http/ssl_policies.rb +18 -0
  47. data/lib/chef/json_compat.rb +1 -1
  48. data/lib/chef/key.rb +1 -1
  49. data/lib/chef/knife.rb +2 -2
  50. data/lib/chef/knife/bootstrap.rb +20 -14
  51. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  52. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  53. data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
  54. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
  55. data/lib/chef/knife/client_bulk_delete.rb +1 -1
  56. data/lib/chef/knife/config_get.rb +1 -1
  57. data/lib/chef/knife/config_use_profile.rb +15 -5
  58. data/lib/chef/knife/cookbook_delete.rb +1 -1
  59. data/lib/chef/knife/cookbook_upload.rb +1 -4
  60. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  61. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  62. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  63. data/lib/chef/knife/core/node_presenter.rb +1 -1
  64. data/lib/chef/knife/core/status_presenter.rb +1 -1
  65. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  66. data/lib/chef/knife/core/windows_bootstrap_context.rb +19 -4
  67. data/lib/chef/knife/data_bag_create.rb +1 -1
  68. data/lib/chef/knife/key_create_base.rb +1 -1
  69. data/lib/chef/knife/key_edit_base.rb +1 -1
  70. data/lib/chef/knife/node_bulk_delete.rb +1 -1
  71. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  72. data/lib/chef/knife/role_bulk_delete.rb +1 -1
  73. data/lib/chef/knife/ssh.rb +2 -2
  74. data/lib/chef/knife/supermarket_share.rb +1 -1
  75. data/lib/chef/knife/supermarket_unshare.rb +1 -1
  76. data/lib/chef/log.rb +1 -1
  77. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  78. data/lib/chef/mixin/checksum.rb +0 -1
  79. data/lib/chef/mixin/openssl_helper.rb +4 -4
  80. data/lib/chef/mixin/properties.rb +2 -2
  81. data/lib/chef/mixin/securable.rb +2 -2
  82. data/lib/chef/mixin/shell_out.rb +1 -1
  83. data/lib/chef/node/attribute.rb +2 -2
  84. data/lib/chef/node/immutable_collections.rb +1 -1
  85. data/lib/chef/policy_builder/policyfile.rb +1 -1
  86. data/lib/chef/powershell.rb +1 -1
  87. data/lib/chef/property.rb +2 -2
  88. data/lib/chef/provider.rb +3 -3
  89. data/lib/chef/provider/batch.rb +3 -10
  90. data/lib/chef/provider/cron.rb +2 -14
  91. data/lib/chef/provider/directory.rb +1 -1
  92. data/lib/chef/provider/execute.rb +2 -1
  93. data/lib/chef/provider/file.rb +1 -1
  94. data/lib/chef/provider/group/dscl.rb +2 -2
  95. data/lib/chef/provider/group/windows.rb +1 -1
  96. data/lib/chef/provider/ifconfig.rb +7 -7
  97. data/lib/chef/provider/launchd.rb +11 -9
  98. data/lib/chef/provider/mount/aix.rb +1 -1
  99. data/lib/chef/provider/mount/windows.rb +2 -2
  100. data/lib/chef/provider/noop.rb +1 -1
  101. data/lib/chef/provider/package/cab.rb +1 -1
  102. data/lib/chef/provider/package/chocolatey.rb +1 -1
  103. data/lib/chef/provider/package/dpkg.rb +1 -1
  104. data/lib/chef/provider/package/openbsd.rb +1 -1
  105. data/lib/chef/provider/package/portage.rb +3 -2
  106. data/lib/chef/provider/package/powershell.rb +6 -2
  107. data/lib/chef/provider/package/rubygems.rb +3 -3
  108. data/lib/chef/provider/package/snap.rb +96 -27
  109. data/lib/chef/provider/package/windows.rb +2 -2
  110. data/lib/chef/provider/package/windows/msi.rb +3 -3
  111. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
  112. data/lib/chef/provider/package/yum.rb +1 -1
  113. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  114. data/lib/chef/provider/powershell_script.rb +11 -15
  115. data/lib/chef/provider/remote_directory.rb +2 -2
  116. data/lib/chef/provider/remote_file/http.rb +4 -1
  117. data/lib/chef/provider/script.rb +4 -75
  118. data/lib/chef/provider/service/arch.rb +2 -2
  119. data/lib/chef/provider/service/debian.rb +2 -2
  120. data/lib/chef/provider/service/macosx.rb +9 -0
  121. data/lib/chef/provider/service/openbsd.rb +4 -4
  122. data/lib/chef/provider/service/redhat.rb +1 -1
  123. data/lib/chef/provider/service/upstart.rb +1 -1
  124. data/lib/chef/provider/service/windows.rb +1 -1
  125. data/lib/chef/provider/subversion.rb +2 -2
  126. data/lib/chef/provider/user/aix.rb +1 -1
  127. data/lib/chef/provider/user/dscl.rb +6 -6
  128. data/lib/chef/provider/user/linux.rb +3 -3
  129. data/lib/chef/provider/user/mac.rb +15 -11
  130. data/lib/chef/provider/windows_script.rb +87 -25
  131. data/lib/chef/provider/windows_task.rb +4 -2
  132. data/lib/chef/provider/zypper_repository.rb +30 -10
  133. data/lib/chef/resource.rb +25 -14
  134. data/lib/chef/resource/alternatives.rb +1 -1
  135. data/lib/chef/resource/apt_package.rb +1 -1
  136. data/lib/chef/resource/archive_file.rb +28 -8
  137. data/lib/chef/resource/bash.rb +0 -1
  138. data/lib/chef/resource/batch.rb +4 -2
  139. data/lib/chef/resource/chef_client_scheduled_task.rb +13 -1
  140. data/lib/chef/resource/chef_gem.rb +57 -21
  141. data/lib/chef/resource/chef_handler.rb +2 -2
  142. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  143. data/lib/chef/resource/cron/_cron_shared.rb +98 -0
  144. data/lib/chef/resource/cron/cron.rb +46 -0
  145. data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
  146. data/lib/chef/resource/cron_access.rb +11 -3
  147. data/lib/chef/resource/csh.rb +0 -1
  148. data/lib/chef/resource/dmg_package.rb +2 -2
  149. data/lib/chef/resource/execute.rb +478 -8
  150. data/lib/chef/resource/file.rb +10 -8
  151. data/lib/chef/resource/freebsd_package.rb +1 -1
  152. data/lib/chef/resource/gem_package.rb +35 -2
  153. data/lib/chef/resource/helpers/cron_validations.rb +6 -3
  154. data/lib/chef/resource/homebrew_package.rb +30 -1
  155. data/lib/chef/resource/homebrew_update.rb +107 -0
  156. data/lib/chef/resource/hostname.rb +7 -20
  157. data/lib/chef/resource/kernel_module.rb +14 -1
  158. data/lib/chef/resource/launchd.rb +1 -1
  159. data/lib/chef/resource/locale.rb +3 -3
  160. data/lib/chef/resource/macos_userdefaults.rb +11 -6
  161. data/lib/chef/resource/mount.rb +1 -1
  162. data/lib/chef/resource/perl.rb +0 -1
  163. data/lib/chef/resource/plist.rb +23 -4
  164. data/lib/chef/resource/powershell_script.rb +4 -2
  165. data/lib/chef/resource/python.rb +0 -1
  166. data/lib/chef/resource/remote_file.rb +26 -10
  167. data/lib/chef/resource/ruby.rb +0 -1
  168. data/lib/chef/resource/scm/git.rb +1 -1
  169. data/lib/chef/resource/ssh_known_hosts_entry.rb +15 -0
  170. data/lib/chef/resource/sudo.rb +29 -2
  171. data/lib/chef/resource/swap_file.rb +17 -0
  172. data/lib/chef/resource/template.rb +1 -1
  173. data/lib/chef/resource/timezone.rb +15 -0
  174. data/lib/chef/resource/windows_ad_join.rb +30 -1
  175. data/lib/chef/resource/windows_audit_policy.rb +227 -0
  176. data/lib/chef/resource/windows_auto_run.rb +11 -0
  177. data/lib/chef/resource/windows_certificate.rb +27 -1
  178. data/lib/chef/resource/windows_dfs_server.rb +1 -1
  179. data/lib/chef/resource/windows_font.rb +3 -3
  180. data/lib/chef/resource/windows_package.rb +1 -1
  181. data/lib/chef/resource/windows_pagefile.rb +2 -2
  182. data/lib/chef/resource/windows_script.rb +2 -16
  183. data/lib/chef/resource/windows_security_policy.rb +47 -16
  184. data/lib/chef/resource/windows_shortcut.rb +1 -2
  185. data/lib/chef/resource/windows_task.rb +10 -10
  186. data/lib/chef/resource/windows_user_privilege.rb +70 -5
  187. data/lib/chef/resource/yum_repository.rb +9 -9
  188. data/lib/chef/resource_inspector.rb +4 -3
  189. data/lib/chef/resources.rb +4 -2
  190. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  191. data/lib/chef/search/query.rb +1 -1
  192. data/lib/chef/shell/ext.rb +1 -1
  193. data/lib/chef/util/diff.rb +2 -2
  194. data/lib/chef/util/windows/net_user.rb +1 -1
  195. data/lib/chef/util/windows/volume.rb +1 -1
  196. data/lib/chef/version.rb +1 -1
  197. data/lib/chef/win32/api.rb +2 -2
  198. data/lib/chef/win32/api/error.rb +3 -1
  199. data/lib/chef/win32/api/file.rb +1 -1
  200. data/lib/chef/win32/api/net.rb +1 -0
  201. data/lib/chef/win32/file.rb +1 -1
  202. data/lib/chef/win32/mutex.rb +1 -1
  203. data/lib/chef/win32/net.rb +1 -0
  204. data/lib/chef/win32/registry.rb +2 -2
  205. data/lib/chef/win32/security.rb +1 -1
  206. data/lib/chef/win32/security/sid.rb +4 -4
  207. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  208. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  209. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  210. data/spec/functional/knife/configure_spec.rb +1 -1
  211. data/spec/functional/resource/aix_service_spec.rb +10 -1
  212. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  213. data/spec/functional/resource/bash_spec.rb +3 -2
  214. data/spec/functional/resource/bff_spec.rb +1 -1
  215. data/spec/functional/resource/chocolatey_package_spec.rb +4 -0
  216. data/spec/functional/resource/cron_spec.rb +20 -1
  217. data/spec/functional/resource/dnf_package_spec.rb +6 -3
  218. data/spec/functional/resource/execute_spec.rb +1 -1
  219. data/spec/functional/resource/git_spec.rb +6 -6
  220. data/spec/functional/resource/group_spec.rb +9 -1
  221. data/spec/functional/resource/ifconfig_spec.rb +9 -1
  222. data/spec/functional/resource/insserv_spec.rb +3 -2
  223. data/spec/functional/resource/launchd_spec.rb +232 -0
  224. data/spec/functional/resource/link_spec.rb +2 -5
  225. data/spec/functional/resource/mount_spec.rb +9 -1
  226. data/spec/functional/resource/msu_package_spec.rb +9 -3
  227. data/spec/functional/resource/powershell_script_spec.rb +4 -4
  228. data/spec/functional/resource/remote_file_spec.rb +8 -8
  229. data/spec/functional/resource/rpm_spec.rb +1 -1
  230. data/spec/functional/resource/timezone_spec.rb +2 -0
  231. data/spec/functional/resource/windows_package_spec.rb +0 -1
  232. data/spec/functional/resource/windows_path_spec.rb +4 -0
  233. data/spec/functional/resource/windows_security_policy_spec.rb +0 -1
  234. data/spec/functional/resource/windows_service_spec.rb +4 -0
  235. data/spec/functional/resource/windows_task_spec.rb +16 -15
  236. data/spec/functional/resource/windows_user_privilege_spec.rb +0 -1
  237. data/spec/functional/resource/yum_package_spec.rb +4 -1
  238. data/spec/functional/resource/zypper_package_spec.rb +4 -1
  239. data/spec/functional/shell_spec.rb +0 -1
  240. data/spec/functional/win32/crypto_spec.rb +1 -1
  241. data/spec/integration/knife/config_use_profile_spec.rb +55 -2
  242. data/spec/integration/knife/cookbook_upload_spec.rb +1 -1
  243. data/spec/integration/knife/data_bag_from_file_spec.rb +1 -1
  244. data/spec/integration/knife/environment_from_file_spec.rb +1 -1
  245. data/spec/integration/knife/node_from_file_spec.rb +1 -1
  246. data/spec/integration/knife/role_from_file_spec.rb +1 -1
  247. data/spec/integration/recipes/recipe_dsl_spec.rb +4 -0
  248. data/spec/integration/recipes/resource_load_spec.rb +2 -2
  249. data/spec/support/chef_helpers.rb +1 -1
  250. data/spec/support/platform_helpers.rb +1 -1
  251. data/spec/support/platforms/win32/spec_service.rb +1 -1
  252. data/spec/support/shared/functional/execute_resource.rb +1 -1
  253. data/spec/support/shared/functional/securable_resource.rb +1 -2
  254. data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
  255. data/spec/support/shared/functional/windows_script.rb +3 -3
  256. data/spec/support/shared/unit/execute_resource.rb +1 -1
  257. data/spec/support/shared/unit/provider/file.rb +12 -8
  258. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  259. data/spec/unit/application/solo_spec.rb +4 -2
  260. data/spec/unit/application_spec.rb +7 -0
  261. data/spec/unit/chef_fs/config_spec.rb +2 -2
  262. data/spec/unit/chef_fs/diff_spec.rb +8 -8
  263. data/spec/unit/client_spec.rb +4 -1
  264. data/spec/unit/cookbook/synchronizer_spec.rb +26 -24
  265. data/spec/unit/data_bag_spec.rb +6 -3
  266. data/spec/unit/decorator_spec.rb +23 -23
  267. data/spec/unit/environment_spec.rb +5 -1
  268. data/spec/unit/guard_interpreter_spec.rb +1 -1
  269. data/spec/unit/http/api_versions_spec.rb +1 -1
  270. data/spec/unit/http/ssl_policies_spec.rb +20 -0
  271. data/spec/unit/knife/bootstrap_spec.rb +3 -2
  272. data/spec/unit/knife/cookbook_download_spec.rb +2 -2
  273. data/spec/unit/knife/cookbook_show_spec.rb +6 -7
  274. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
  275. data/spec/unit/knife/data_bag_edit_spec.rb +1 -1
  276. data/spec/unit/lwrp_spec.rb +5 -2
  277. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  278. data/spec/unit/mixin/powershell_out_spec.rb +2 -4
  279. data/spec/unit/mixin/powershell_type_coercions_spec.rb +1 -1
  280. data/spec/unit/mixin/subclass_directive_spec.rb +2 -2
  281. data/spec/unit/mixin/unformatter_spec.rb +2 -2
  282. data/spec/unit/mixin/uris_spec.rb +1 -1
  283. data/spec/unit/mixin/user_context_spec.rb +1 -9
  284. data/spec/unit/node/attribute_spec.rb +1 -1
  285. data/spec/unit/property_spec.rb +1 -1
  286. data/spec/unit/provider/batch_spec.rb +130 -0
  287. data/spec/unit/provider/cron/unix_spec.rb +1 -1
  288. data/spec/unit/provider/cron_spec.rb +9 -49
  289. data/spec/unit/provider/dsc_resource_spec.rb +22 -38
  290. data/spec/unit/provider/dsc_script_spec.rb +10 -10
  291. data/spec/unit/provider/execute_spec.rb +1 -1
  292. data/spec/unit/provider/git_spec.rb +3 -3
  293. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  294. data/spec/unit/provider/launchd_spec.rb +0 -42
  295. data/spec/unit/provider/mdadm_spec.rb +1 -3
  296. data/spec/unit/provider/package/openbsd_spec.rb +1 -1
  297. data/spec/unit/provider/package/pacman_spec.rb +17 -20
  298. data/spec/unit/provider/package/portage_spec.rb +2 -2
  299. data/spec/unit/provider/package/powershell_spec.rb +96 -87
  300. data/spec/unit/provider/package/snap_spec.rb +1 -1
  301. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
  302. data/spec/unit/provider/powershell_script_spec.rb +3 -45
  303. data/spec/unit/provider/script_spec.rb +20 -110
  304. data/spec/unit/provider/user/dscl_spec.rb +2 -2
  305. data/spec/unit/provider/windows_env_spec.rb +5 -4
  306. data/spec/unit/provider/zypper_repository_spec.rb +60 -10
  307. data/spec/unit/resource/archive_file_spec.rb +11 -2
  308. data/spec/unit/resource/chef_client_cron_spec.rb +23 -7
  309. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
  310. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +7 -4
  311. data/spec/unit/resource/cron_spec.rb +2 -2
  312. data/spec/unit/resource/file/verification_spec.rb +2 -1
  313. data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
  314. data/spec/unit/resource/homebrew_update_spec.rb +30 -0
  315. data/spec/unit/resource/powershell_script_spec.rb +10 -15
  316. data/spec/unit/resource/timezone_spec.rb +1 -1
  317. data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
  318. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  319. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  320. data/spec/unit/resource/windows_task_spec.rb +1 -1
  321. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  322. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  323. data/spec/unit/resource_spec.rb +84 -1
  324. data/spec/unit/role_spec.rb +23 -21
  325. data/spec/unit/util/backup_spec.rb +1 -1
  326. data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
  327. data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
  328. data/spec/unit/util/selinux_spec.rb +2 -1
  329. data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
  330. data/spec/unit/win32/registry_spec.rb +1 -1
  331. metadata +37 -31
  332. data/lib/chef/resource/cron.rb +0 -157
  333. data/spec/functional/resource/base.rb +0 -28
@@ -53,10 +53,13 @@ class Chef
53
53
 
54
54
  # Installs the package specified with the version passed else latest version will be installed
55
55
  def install_package(names, versions)
56
+ # To enable tls 1.2, which is disabled by default in some OS
57
+ powershell_out("[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12")
58
+
56
59
  names.each_with_index do |name, index|
57
60
  cmd = powershell_out(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
58
61
  next if cmd.nil?
59
- raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if cmd.stderr =~ /SkipPublisherCheck/
62
+ raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if /SkipPublisherCheck/.match?(cmd.stderr)
60
63
  end
61
64
  end
62
65
 
@@ -115,7 +118,8 @@ class Chef
115
118
  command = [command] unless command.is_a?(Array)
116
119
  cmdlet_name = command.first
117
120
  command.unshift("(")
118
- %w{-Force -ForceBootstrap}.each do |arg|
121
+ # -WarningAction SilentlyContinue is used to suppress the warnings from stdout
122
+ %w{-Force -ForceBootstrap -WarningAction SilentlyContinue}.each do |arg|
119
123
  command.push(arg)
120
124
  end
121
125
  command.push("-RequiredVersion #{version}") if version
@@ -250,7 +250,7 @@ class Chef
250
250
  private
251
251
 
252
252
  def logger
253
- Chef::Log.with_child({ subsytem: "gem_installer_environment" })
253
+ Chef::Log.with_child({ subsystem: "gem_installer_environment" })
254
254
  end
255
255
 
256
256
  end
@@ -420,7 +420,7 @@ class Chef
420
420
  end
421
421
 
422
422
  def is_omnibus?
423
- if RbConfig::CONFIG["bindir"] =~ %r{/(opscode|chef|chefdk)/embedded/bin}
423
+ if %r{/(opscode|chef|chefdk)/embedded/bin}.match?(RbConfig::CONFIG["bindir"])
424
424
  logger.trace("#{new_resource} detected omnibus installation in #{RbConfig::CONFIG["bindir"]}")
425
425
  # Omnibus installs to a static path because of linking on unix, find it.
426
426
  true
@@ -447,7 +447,7 @@ class Chef
447
447
 
448
448
  scheme = URI.parse(new_resource.source).scheme
449
449
  # URI.parse gets confused by MS Windows paths with forward slashes.
450
- scheme = nil if scheme =~ /^[a-z]$/
450
+ scheme = nil if /^[a-z]$/.match?(scheme)
451
451
  %w{http https}.include?(scheme)
452
452
  rescue URI::InvalidURIError
453
453
  logger.trace("#{new_resource} failed to parse source '#{new_resource.source}' as a URI, assuming a local path")
@@ -59,15 +59,14 @@ class Chef
59
59
  def get_current_versions
60
60
  package_name_array.each_with_index.map do |pkg, i|
61
61
  installed_version(i)
62
- end
62
+ end.compact
63
63
  end
64
64
 
65
65
  def install_package(names, versions)
66
66
  if new_resource.source
67
67
  install_snap_from_source(names, new_resource.source)
68
68
  else
69
- resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? }
70
- install_snaps(resolved_names)
69
+ install_snaps(names)
71
70
  end
72
71
  end
73
72
 
@@ -75,14 +74,16 @@ class Chef
75
74
  if new_resource.source
76
75
  install_snap_from_source(names, new_resource.source)
77
76
  else
78
- resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? }
79
- update_snaps(resolved_names)
77
+ if get_current_versions.empty?
78
+ install_snaps(names, versions)
79
+ else
80
+ update_snaps(names)
81
+ end
80
82
  end
81
83
  end
82
84
 
83
85
  def remove_package(names, versions)
84
- resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? }
85
- uninstall_snaps(resolved_names)
86
+ uninstall_snaps(names)
86
87
  end
87
88
 
88
89
  alias purge_package remove_package
@@ -129,19 +130,73 @@ class Chef
129
130
  "Accept: application/json\r\n" +
130
131
  "Content-Type: application/json\r\n"
131
132
  if method == "POST"
132
- request.concat("Content-Length: #{post_data.bytesize}\r\n\r\n#{post_data}")
133
+ pdata = post_data.to_json.to_s
134
+ request.concat("Content-Length: #{pdata.bytesize}\r\n\r\n#{pdata}")
133
135
  end
134
136
  request.concat("\r\n")
135
- # While it is expected to allow clients to connect using HTTPS over a TCP socket,
136
- # at this point only a UNIX socket is supported. The socket is /run/snapd.socket
137
- # Note - UNIXSocket is not defined on windows systems
137
+
138
+ # while it is expected to allow clients to connect using https over
139
+ # a tcp socket, at this point only a unix socket is supported. the
140
+ # socket is /run/snapd.socket note - unix socket is not defined on
141
+ # windows systems
138
142
  if defined?(::UNIXSocket)
139
143
  UNIXSocket.open("/run/snapd.socket") do |socket|
140
- # Send request, read the response, split the response and parse the body
141
- socket.print(request)
142
- response = socket.read
143
- headers, body = response.split("\r\n\r\n", 2)
144
- JSON.parse(body)
144
+ # send request, read the response, split the response and parse
145
+ # the body
146
+ socket.write(request)
147
+
148
+ # WARNING!!! HERE BE DRAGONs
149
+ #
150
+ # So snapd doesn't return an EOF at the end of its body, so
151
+ # doing a normal read will just hang forever.
152
+ #
153
+ # Well, sort of. if, after it writes everything, you then send
154
+ # yet-another newline, it'll then send its EOF and promptly
155
+ # disconnect closing the pipe and preventing reading. so, you
156
+ # have to read first, and therein lies the EOF problem.
157
+ #
158
+ # So you can do non-blocking reads with selects, but it
159
+ # makes every read take about 5 seconds. If, instead, we
160
+ # read the last line char-by-char, it's about half a second.
161
+ #
162
+ # Reading a character at a time isn't efficient, and since we
163
+ # know that http headers always have a blank line after them,
164
+ # we can read lines until we find a blank line and *then* read
165
+ # a character at a time. snap returns all the json on a single
166
+ # line, so once you pass headers you must read a character a
167
+ # time.
168
+ #
169
+ # - jaymzh
170
+
171
+ Chef::Log.trace(
172
+ "snap_package[#{new_resource.package_name}]: reading headers"
173
+ )
174
+ loop do
175
+ response = socket.readline
176
+ break if response.strip.empty? # finished headers
177
+ end
178
+ Chef::Log.trace(
179
+ "snap_package[#{new_resource.package_name}]: past headers, " +
180
+ "onto the body..."
181
+ )
182
+ result = nil
183
+ body = ""
184
+ socket.each_char do |c|
185
+ body << c
186
+ # we know we're not done if we don't have a char that
187
+ # can end JSON
188
+ next unless ["}", "]"].include?(c)
189
+
190
+ begin
191
+ result = JSON.parse(body)
192
+ # if we get here, we were able to parse the json so we
193
+ # are done reading
194
+ break
195
+ rescue JSON::ParserError
196
+ next
197
+ end
198
+ end
199
+ result
145
200
  end
146
201
  end
147
202
  end
@@ -211,20 +266,22 @@ class Chef
211
266
  response.error!
212
267
  end
213
268
 
214
- def install_snaps(snap_names)
215
- response = post_snaps(snap_names, "install", new_resource.channel, new_resource.options)
216
- id = get_id_from_async_response(response)
217
- wait_for_completion(id)
269
+ def install_snaps(snap_names, versions)
270
+ snap_names.each do |snap|
271
+ response = post_snap(snap, "install", new_resource.channel, new_resource.options)
272
+ id = get_id_from_async_response(response)
273
+ wait_for_completion(id)
274
+ end
218
275
  end
219
276
 
220
277
  def update_snaps(snap_names)
221
- response = post_snaps(snap_names, "refresh", new_resource.channel, new_resource.options)
278
+ response = post_snaps(snap_names, "refresh", nil, new_resource.options)
222
279
  id = get_id_from_async_response(response)
223
280
  wait_for_completion(id)
224
281
  end
225
282
 
226
283
  def uninstall_snaps(snap_names)
227
- response = post_snaps(snap_names, "remove", new_resource.channel, new_resource.options)
284
+ response = post_snaps(snap_names, "remove", nil, new_resource.options)
228
285
  id = get_id_from_async_response(response)
229
286
  wait_for_completion(id)
230
287
  end
@@ -278,18 +335,20 @@ class Chef
278
335
  "action" => action,
279
336
  "snaps" => snap_names,
280
337
  }
281
- if %w{install refresh switch}.include?(action)
338
+ if %w{install refresh switch}.include?(action) && channel
282
339
  request["channel"] = channel
283
340
  end
284
341
 
285
342
  # No defensive handling of params
286
343
  # Snap will throw the proper exception if called improperly
287
344
  # And we can provide that exception to the end user
288
- request["classic"] = true if options["classic"]
289
- request["devmode"] = true if options["devmode"]
290
- request["jailmode"] = true if options["jailmode"]
345
+ if options
346
+ request["classic"] = true if options.include?("classic")
347
+ request["devmode"] = true if options.include?("devmode")
348
+ request["jailmode"] = true if options.include?("jailmode")
349
+ request["ignore_validation"] = true if options.include?("ignore-validation")
350
+ end
291
351
  request["revision"] = revision unless revision.nil?
292
- request["ignore_validation"] = true if options["ignore-validation"]
293
352
  request
294
353
  end
295
354
 
@@ -305,12 +364,22 @@ class Chef
305
364
  call_snap_api("POST", "/v2/snaps", json)
306
365
  end
307
366
 
367
+ def post_snap(snap_name, action, channel, options, revision = nil)
368
+ json = generate_snap_json(snap_name, action, channel, options, revision = nil)
369
+ json.delete("snaps")
370
+ call_snap_api("POST", "/v2/snaps/#{snap_name}", json)
371
+ end
372
+
308
373
  def get_latest_package_version(name, channel)
309
374
  json = call_snap_api("GET", "/v2/find?name=#{name}")
310
375
  if json["status-code"] != 200
311
376
  raise Chef::Exceptions::Package, json["result"], caller
312
377
  end
313
378
 
379
+ unless json["result"][0]["channels"]["latest/#{channel}"]
380
+ raise Chef::Exceptions::Package, "No version of #{name} in channel #{channel}", caller
381
+ end
382
+
314
383
  # Return the version matching the channel
315
384
  json["result"][0]["channels"]["latest/#{channel}"]["version"]
316
385
  end
@@ -38,7 +38,7 @@ class Chef
38
38
  def define_resource_requirements
39
39
  if new_resource.checksum
40
40
  requirements.assert(:install) do |a|
41
- a.assertion { new_resource.checksum.downcase == checksum(source_location) }
41
+ a.assertion { new_resource.checksum == checksum(source_location) }
42
42
  a.failure_message Chef::Exceptions::Package, "Checksum on resource (#{short_cksum(new_resource.checksum)}) does not match checksum on content (#{short_cksum(source_location)})"
43
43
  end
44
44
  end
@@ -169,7 +169,7 @@ class Chef
169
169
  # is not multipackage. The existing implementation of package_provider.installed_version should probably
170
170
  # be what `uninstall_version_array` is, and then that list should be sorted and last/first'd into the
171
171
  # current_resource.version. The current_version_array method was not intended to be overwritten by
172
- # sublasses (but ruby provides no feature to block doing so -- it is already marked as private).
172
+ # subclasses (but ruby provides no feature to block doing so -- it is already marked as private).
173
173
  #
174
174
  def current_version_array
175
175
  [ current_resource.version ]
@@ -18,7 +18,7 @@
18
18
 
19
19
  # TODO: Allow new_resource.source to be a Product Code as a GUID for uninstall / network install
20
20
 
21
- require_relative "../../../win32/api/installer" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
21
+ require_relative "../../../win32/api/installer" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
22
22
  require_relative "../../../mixin/shell_out"
23
23
 
24
24
  class Chef
@@ -26,7 +26,7 @@ class Chef
26
26
  class Package
27
27
  class Windows
28
28
  class MSI
29
- include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM =~ /mswin|mingw32|windows/
29
+ include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
30
30
  include Chef::Mixin::ShellOut
31
31
 
32
32
  def initialize(resource, uninstall_entries)
@@ -84,7 +84,7 @@ class Chef
84
84
  .map(&:uninstall_string).uniq.each do |uninstall_string|
85
85
  uninstall_string = "msiexec /x #{uninstall_string.match(/{.*}/)}"
86
86
  uninstall_string += expand_options(new_resource.options)
87
- uninstall_string += " /q" unless uninstall_string.downcase =~ %r{ /q}
87
+ uninstall_string += " /q" unless %r{ /q}.match?(uninstall_string.downcase)
88
88
  logger.trace("#{new_resource} removing MSI package version using '#{uninstall_string}'")
89
89
  shell_out!(uninstall_string, default_env: false, timeout: new_resource.timeout, returns: new_resource.returns)
90
90
  end
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "win32/registry" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
20
+ require "win32/registry" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
21
21
 
22
22
  class Chef
23
23
  class Provider
@@ -100,7 +100,7 @@ class Chef
100
100
 
101
101
  # If this is a package like the kernel that can be installed multiple times, we'll skip over this logic
102
102
  if new_resource.allow_downgrade && version_gt?(iv.version_with_arch, av.version_with_arch) && !python_helper.install_only_packages(name)
103
- # We allow downgrading only in the evenit of single-package
103
+ # We allow downgrading only in the event of single-package
104
104
  # rules where the user explicitly allowed it
105
105
  method = "downgrade"
106
106
  end
@@ -22,7 +22,7 @@ require "singleton" unless defined?(Singleton)
22
22
 
23
23
  #
24
24
  # These are largely historical APIs, the YumCache object no longer exists and this is a
25
- # fascade over the python helper class. It should be considered deprecated-lite and
25
+ # facade over the python helper class. It should be considered deprecated-lite and
26
26
  # no new APIs should be added and should be added to the python_helper instead.
27
27
  #
28
28
 
@@ -26,19 +26,12 @@ class Chef
26
26
 
27
27
  provides :powershell_script
28
28
 
29
- def initialize(new_resource, run_context)
30
- super(new_resource, run_context, ".ps1")
31
- add_exit_status_wrapper
32
- end
33
-
34
29
  action :run do
35
30
  validate_script_syntax!
36
31
  super()
37
32
  end
38
33
 
39
34
  def command
40
- basepath = is_forced_32bit ? wow64_directory : run_context.node["kernel"]["os_info"]["system_directory"]
41
-
42
35
  # Powershell.exe is always in "v1.0" folder (for backwards compatibility)
43
36
  interpreter_path = Chef::Util::PathHelper.join(basepath, "WindowsPowerShell", "v1.0", interpreter)
44
37
 
@@ -48,21 +41,19 @@ class Chef
48
41
  # error status of a failed Windows process that ran at the
49
42
  # end of the script, it gets changed to '1'.
50
43
  #
51
- "\"#{interpreter_path}\" #{new_resource.flags} -File \"#{script_file.path}\""
44
+ "\"#{interpreter_path}\" #{new_resource.flags} -File \"#{script_file_path}\""
52
45
  end
53
46
 
54
47
  protected
55
48
 
56
- # Process exit codes are strange with PowerShell and require
57
- # special handling to cover common use cases.
58
- def add_exit_status_wrapper
59
- self.code = wrapper_script
49
+ def code
50
+ code = wrapper_script
60
51
  logger.trace("powershell_script provider called with script code:\n\n#{new_resource.code}\n")
61
52
  logger.trace("powershell_script provider will execute transformed code:\n\n#{code}\n")
53
+ code
62
54
  end
63
55
 
64
56
  def validate_script_syntax!
65
- interpreter_arguments = new_resource.flags
66
57
  Tempfile.open(["chef_powershell_script-user-code", ".ps1"]) do |user_script_file|
67
58
  # Wrap the user's code in a PowerShell script block so that
68
59
  # it isn't executed. However, syntactically invalid script
@@ -80,7 +71,7 @@ class Chef
80
71
  # written to the file system at this point, which is required since
81
72
  # the intent is to execute the code just written to it.
82
73
  user_script_file.close
83
- validation_command = "\"#{interpreter}\" #{interpreter_arguments} -Command \". '#{user_script_file.path}'\""
74
+ validation_command = "\"#{interpreter}\" #{new_resource.flags} -Command \". '#{user_script_file.path}'\""
84
75
 
85
76
  # Note that other script providers like bash allow syntax errors
86
77
  # to be suppressed by setting 'returns' to a value that the
@@ -94,11 +85,13 @@ class Chef
94
85
  # means a non-zero return and thus a syntactically invalid script.
95
86
 
96
87
  with_os_architecture(node, architecture: new_resource.architecture) do
97
- shell_out!(validation_command, { returns: [0] })
88
+ shell_out!(validation_command, returns: [0])
98
89
  end
99
90
  end
100
91
  end
101
92
 
93
+ # Process exit codes are strange with PowerShell and require
94
+ # special handling to cover common use cases.
102
95
  # A wrapper script is used to launch user-supplied script while
103
96
  # still obtaining useful process exit codes. Unless you
104
97
  # explicitly call exit in PowerShell, the powershell.exe
@@ -182,6 +175,9 @@ class Chef
182
175
  EOH
183
176
  end
184
177
 
178
+ def script_extension
179
+ ".ps1"
180
+ end
185
181
  end
186
182
  end
187
183
  end
@@ -147,7 +147,7 @@ class Chef
147
147
  new_resource.updated_by_last_action(true) if res.updated?
148
148
  end
149
149
 
150
- # Get the files to tranfer. This returns files in lexicographical sort order.
150
+ # Get the files to transfer. This returns files in lexicographical sort order.
151
151
  #
152
152
  # FIXME: it should do breadth-first, see CHEF-5080 (please use a performant sort)
153
153
  #
@@ -245,7 +245,7 @@ class Chef
245
245
  res = Chef::Resource::Directory.new(dir, run_context)
246
246
  res.cookbook_name = resource_cookbook
247
247
  if ChefUtils.windows? && rights
248
- # rights are only meant to be applied to the toppest-level directory;
248
+ # rights are only meant to be applied to the most top-level directory;
249
249
  # Windows will handle inheritance.
250
250
  if dir == path
251
251
  rights.each do |r|
@@ -130,10 +130,13 @@ class Chef
130
130
  # which tricks Chef::REST into decompressing the response body. In this
131
131
  # case you'd end up with a tar archive (no gzip) named, e.g., foo.tgz,
132
132
  # which is not what you wanted.
133
- if uri.to_s =~ /gz$/
133
+ if /gz$/.match?(uri.to_s)
134
134
  logger.trace("Turning gzip compression off due to filename ending in gz")
135
135
  opts[:disable_gzip] = true
136
136
  end
137
+ if new_resource.ssl_verify_mode
138
+ opts[:ssl_verify_mode] = new_resource.ssl_verify_mode
139
+ end
137
140
  opts
138
141
  end
139
142
 
@@ -16,9 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "tempfile" unless defined?(Tempfile)
20
19
  require_relative "execute"
21
- require_relative "../win32/security" if ChefUtils.windows?
22
20
  require "forwardable" unless defined?(Forwardable)
23
21
 
24
22
  class Chef
@@ -34,84 +32,15 @@ class Chef
34
32
  provides :ruby
35
33
  provides :script
36
34
 
37
- def_delegators :new_resource, :interpreter, :flags
38
-
39
- attr_accessor :code
40
-
41
- def initialize(new_resource, run_context)
42
- super
43
- self.code = new_resource.code
44
- end
35
+ def_delegators :new_resource, :interpreter, :flags, :code
45
36
 
46
37
  def command
47
- "\"#{interpreter}\" #{flags} \"#{script_file.path}\""
48
- end
49
-
50
- def load_current_resource
51
- super
52
- end
53
-
54
- action :run do
55
- script_file.puts(code)
56
- script_file.close
57
-
58
- set_owner_and_group
59
-
60
- super()
61
-
62
- unlink_script_file
63
- end
64
-
65
- def set_owner_and_group
66
- if ChefUtils.windows?
67
- # And on Windows also this is a no-op if there is no user specified.
68
- grant_alternate_user_read_access
69
- else
70
- # FileUtils itself implements a no-op if +user+ or +group+ are nil
71
- # You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
72
- # as an unprivileged user.
73
- FileUtils.chown(new_resource.user, new_resource.group, script_file.path)
74
- end
38
+ "\"#{interpreter}\" #{flags}"
75
39
  end
76
40
 
77
- def grant_alternate_user_read_access
78
- # Do nothing if an alternate user isn't specified -- the file
79
- # will already have the correct permissions for the user as part
80
- # of the default ACL behavior on Windows.
81
- return if new_resource.user.nil?
82
-
83
- # Duplicate the script file's existing DACL
84
- # so we can add an ACE later
85
- securable_object = Chef::ReservedNames::Win32::Security::SecurableObject.new(script_file.path)
86
- aces = securable_object.security_descriptor.dacl.reduce([]) { |result, current| result.push(current) }
87
-
88
- username = new_resource.user
89
-
90
- if new_resource.domain
91
- username = new_resource.domain + '\\' + new_resource.user
92
- end
93
-
94
- # Create an ACE that allows the alternate user read access to the script
95
- # file so it can be read and executed.
96
- user_sid = Chef::ReservedNames::Win32::Security::SID.from_account(username)
97
- read_ace = Chef::ReservedNames::Win32::Security::ACE.access_allowed(user_sid, Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE, 0)
98
- aces.push(read_ace)
99
- acl = Chef::ReservedNames::Win32::Security::ACL.create(aces)
100
-
101
- # This actually applies the modified DACL to the file
102
- # Use parentheses to bypass RuboCop / ChefStyle warning
103
- # about useless setter
104
- (securable_object.dacl = acl)
41
+ def input
42
+ code
105
43
  end
106
-
107
- def script_file
108
- @script_file ||= Tempfile.open("chef-script")
109
- end
110
-
111
- def unlink_script_file
112
- script_file && script_file.close!
113
- end
114
-
115
44
  end
116
45
  end
117
46
  end