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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -4
  3. data/README.md +12 -13
  4. data/VERSION +1 -1
  5. data/acceptance/Gemfile +4 -4
  6. data/acceptance/Gemfile.lock +70 -69
  7. data/chef-universal-mingw32.gemspec +2 -3
  8. data/chef.gemspec +6 -6
  9. data/lib/chef/api_client.rb +8 -10
  10. data/lib/chef/api_client_v1.rb +9 -11
  11. data/lib/chef/application/apply.rb +8 -10
  12. data/lib/chef/application/client.rb +1 -1
  13. data/lib/chef/application/exit_code.rb +3 -5
  14. data/lib/chef/application/knife.rb +2 -2
  15. data/lib/chef/application/windows_service.rb +29 -30
  16. data/lib/chef/application/windows_service_manager.rb +1 -1
  17. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  18. data/lib/chef/audit/control_group_data.rb +1 -1
  19. data/lib/chef/chef_class.rb +1 -0
  20. data/lib/chef/chef_fs/chef_fs_data_store.rb +5 -7
  21. data/lib/chef/chef_fs/command_line.rb +15 -16
  22. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  23. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  24. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  25. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  26. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  27. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  28. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  29. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  30. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  31. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  33. data/lib/chef/chef_fs/file_system.rb +1 -1
  34. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +5 -6
  35. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  36. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  37. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  38. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  39. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  40. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  41. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +18 -24
  42. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  43. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  44. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +10 -12
  45. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  46. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  47. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  48. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  49. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  50. data/lib/chef/cookbook/cookbook_version_loader.rb +25 -31
  51. data/lib/chef/cookbook/metadata.rb +26 -26
  52. data/lib/chef/cookbook/syntax_check.rb +1 -1
  53. data/lib/chef/cookbook_version.rb +3 -3
  54. data/lib/chef/data_bag.rb +1 -1
  55. data/lib/chef/data_bag_item.rb +3 -3
  56. data/lib/chef/data_collector.rb +3 -4
  57. data/lib/chef/decorator.rb +1 -1
  58. data/lib/chef/deprecated.rb +30 -0
  59. data/lib/chef/dsl/audit.rb +2 -2
  60. data/lib/chef/dsl/declare_resource.rb +1 -1
  61. data/lib/chef/dsl/platform_introspection.rb +29 -31
  62. data/lib/chef/dsl/reboot_pending.rb +1 -1
  63. data/lib/chef/dsl/resources.rb +6 -8
  64. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  65. data/lib/chef/environment.rb +9 -11
  66. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  67. data/lib/chef/exceptions.rb +4 -1
  68. data/lib/chef/file_access_control/unix.rb +14 -14
  69. data/lib/chef/file_access_control/windows.rb +1 -1
  70. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  71. data/lib/chef/formatters/error_mapper.rb +6 -6
  72. data/lib/chef/http/api_versions.rb +50 -0
  73. data/lib/chef/http/validate_content_length.rb +2 -2
  74. data/lib/chef/json_compat.rb +6 -10
  75. data/lib/chef/key.rb +5 -5
  76. data/lib/chef/knife.rb +4 -4
  77. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  78. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  79. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  80. data/lib/chef/knife/core/status_presenter.rb +1 -1
  81. data/lib/chef/knife/core/ui.rb +19 -25
  82. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  83. data/lib/chef/knife/deps.rb +32 -34
  84. data/lib/chef/knife/help.rb +1 -1
  85. data/lib/chef/knife/list.rb +1 -1
  86. data/lib/chef/knife/search.rb +2 -2
  87. data/lib/chef/knife/ssh.rb +37 -27
  88. data/lib/chef/knife/ssl_check.rb +1 -1
  89. data/lib/chef/knife/user_delete.rb +1 -1
  90. data/lib/chef/mash.rb +1 -1
  91. data/lib/chef/mixin/command.rb +2 -2
  92. data/lib/chef/mixin/create_path.rb +3 -5
  93. data/lib/chef/mixin/from_file.rb +2 -2
  94. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  95. data/lib/chef/mixin/notifying_block.rb +7 -9
  96. data/lib/chef/mixin/params_validate.rb +3 -3
  97. data/lib/chef/mixin/securable.rb +1 -1
  98. data/lib/chef/mixin/shell_out.rb +23 -3
  99. data/lib/chef/mixin/unformatter.rb +2 -2
  100. data/lib/chef/mixin/uris.rb +4 -6
  101. data/lib/chef/mixin/versioned_api.rb +69 -0
  102. data/lib/chef/mixin/which.rb +25 -8
  103. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  104. data/lib/chef/mixin/xml_escape.rb +3 -5
  105. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  106. data/lib/chef/node.rb +8 -8
  107. data/lib/chef/node/attribute.rb +4 -4
  108. data/lib/chef/node/common_api.rb +5 -7
  109. data/lib/chef/org.rb +10 -12
  110. data/lib/chef/platform/provider_mapping.rb +7 -7
  111. data/lib/chef/platform/query_helpers.rb +1 -1
  112. data/lib/chef/policy_builder/policyfile.rb +1 -0
  113. data/lib/chef/property.rb +31 -0
  114. data/lib/chef/provider/batch.rb +1 -1
  115. data/lib/chef/provider/breakpoint.rb +1 -1
  116. data/lib/chef/provider/cookbook_file.rb +3 -3
  117. data/lib/chef/provider/cron.rb +38 -38
  118. data/lib/chef/provider/deploy.rb +81 -81
  119. data/lib/chef/provider/deploy/revision.rb +3 -5
  120. data/lib/chef/provider/directory.rb +32 -32
  121. data/lib/chef/provider/dsc_resource.rb +22 -6
  122. data/lib/chef/provider/env.rb +28 -28
  123. data/lib/chef/provider/env/windows.rb +1 -1
  124. data/lib/chef/provider/erl_call.rb +13 -13
  125. data/lib/chef/provider/execute.rb +5 -2
  126. data/lib/chef/provider/file.rb +49 -51
  127. data/lib/chef/provider/git.rb +55 -55
  128. data/lib/chef/provider/http_request.rb +36 -36
  129. data/lib/chef/provider/launchd.rb +2 -2
  130. data/lib/chef/provider/link.rb +50 -50
  131. data/lib/chef/provider/log.rb +2 -2
  132. data/lib/chef/provider/mdadm.rb +25 -25
  133. data/lib/chef/provider/mount/aix.rb +2 -2
  134. data/lib/chef/provider/mount/mount.rb +2 -2
  135. data/lib/chef/provider/ohai.rb +1 -1
  136. data/lib/chef/provider/osx_profile.rb +23 -23
  137. data/lib/chef/provider/package.rb +74 -56
  138. data/lib/chef/provider/package/aix.rb +55 -52
  139. data/lib/chef/provider/package/apt.rb +15 -13
  140. data/lib/chef/provider/package/cab.rb +49 -20
  141. data/lib/chef/provider/package/chocolatey.rb +9 -10
  142. data/lib/chef/provider/package/dnf.rb +20 -18
  143. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  144. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  145. data/lib/chef/provider/package/dnf/version.rb +1 -1
  146. data/lib/chef/provider/package/dpkg.rb +8 -9
  147. data/lib/chef/provider/package/easy_install.rb +22 -22
  148. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  149. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  150. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  151. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  152. data/lib/chef/provider/package/homebrew.rb +11 -10
  153. data/lib/chef/provider/package/ips.rb +18 -23
  154. data/lib/chef/provider/package/macports.rb +23 -23
  155. data/lib/chef/provider/package/msu.rb +11 -11
  156. data/lib/chef/provider/package/openbsd.rb +25 -22
  157. data/lib/chef/provider/package/pacman.rb +16 -16
  158. data/lib/chef/provider/package/paludis.rb +26 -27
  159. data/lib/chef/provider/package/portage.rb +22 -22
  160. data/lib/chef/provider/package/powershell.rb +17 -17
  161. data/lib/chef/provider/package/rpm.rb +25 -25
  162. data/lib/chef/provider/package/rubygems.rb +60 -60
  163. data/lib/chef/provider/package/smartos.rb +16 -16
  164. data/lib/chef/provider/package/solaris.rb +44 -44
  165. data/lib/chef/provider/package/windows.rb +3 -3
  166. data/lib/chef/provider/package/windows/exe.rb +6 -6
  167. data/lib/chef/provider/package/windows/msi.rb +6 -6
  168. data/lib/chef/provider/package/yum.rb +318 -268
  169. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  170. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  171. data/lib/chef/provider/package/zypper.rb +11 -11
  172. data/lib/chef/provider/powershell_script.rb +15 -7
  173. data/lib/chef/provider/reboot.rb +10 -10
  174. data/lib/chef/provider/registry_key.rb +39 -39
  175. data/lib/chef/provider/remote_directory.rb +3 -3
  176. data/lib/chef/provider/remote_file.rb +3 -3
  177. data/lib/chef/provider/route.rb +1 -1
  178. data/lib/chef/provider/ruby_block.rb +3 -3
  179. data/lib/chef/provider/script.rb +42 -6
  180. data/lib/chef/provider/service.rb +49 -49
  181. data/lib/chef/provider/service/solaris.rb +1 -1
  182. data/lib/chef/provider/service/systemd.rb +1 -1
  183. data/lib/chef/provider/subversion.rb +39 -39
  184. data/lib/chef/provider/systemd_unit.rb +2 -0
  185. data/lib/chef/provider/template.rb +3 -3
  186. data/lib/chef/provider/user.rb +42 -42
  187. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  188. data/lib/chef/resource.rb +27 -16
  189. data/lib/chef/resource/apt_repository.rb +0 -1
  190. data/lib/chef/resource/chef_gem.rb +1 -1
  191. data/lib/chef/resource/dnf_package.rb +6 -3
  192. data/lib/chef/resource/dsc_resource.rb +9 -1
  193. data/lib/chef/resource/execute.rb +70 -6
  194. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  195. data/lib/chef/resource/freebsd_package.rb +1 -1
  196. data/lib/chef/resource/gem_package.rb +1 -1
  197. data/lib/chef/resource/launchd.rb +13 -1
  198. data/lib/chef/resource/package.rb +2 -2
  199. data/lib/chef/resource/registry_key.rb +1 -1
  200. data/lib/chef/resource/yum_package.rb +12 -3
  201. data/lib/chef/resource/yum_repository.rb +0 -1
  202. data/lib/chef/resource_collection/resource_collection_serialization.rb +3 -3
  203. data/lib/chef/resource_collection/resource_set.rb +2 -2
  204. data/lib/chef/resource_reporter.rb +1 -1
  205. data/lib/chef/run_context.rb +3 -3
  206. data/lib/chef/run_list/run_list_item.rb +1 -1
  207. data/lib/chef/run_list/versioned_recipe_list.rb +6 -6
  208. data/lib/chef/server_api.rb +2 -0
  209. data/lib/chef/server_api_versions.rb +40 -0
  210. data/lib/chef/shell.rb +1 -1
  211. data/lib/chef/shell/ext.rb +3 -3
  212. data/lib/chef/shell/shell_session.rb +1 -1
  213. data/lib/chef/user.rb +9 -11
  214. data/lib/chef/user_v1.rb +9 -11
  215. data/lib/chef/util/diff.rb +1 -1
  216. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  217. data/lib/chef/util/selinux.rb +1 -1
  218. data/lib/chef/util/windows/net_group.rb +18 -30
  219. data/lib/chef/util/windows/net_use.rb +7 -11
  220. data/lib/chef/util/windows/net_user.rb +11 -17
  221. data/lib/chef/util/windows/volume.rb +9 -15
  222. data/lib/chef/version.rb +1 -1
  223. data/lib/chef/version_class.rb +1 -1
  224. data/lib/chef/win32/api.rb +4 -6
  225. data/lib/chef/win32/api/file.rb +25 -31
  226. data/lib/chef/win32/api/installer.rb +2 -2
  227. data/lib/chef/win32/file.rb +4 -6
  228. data/lib/chef/win32/registry.rb +9 -9
  229. data/lib/chef/win32/security.rb +2 -2
  230. data/lib/chef/win32/security/acl.rb +2 -2
  231. data/lib/chef/win32/unicode.rb +2 -2
  232. data/lib/chef/win32/version.rb +1 -1
  233. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  234. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  235. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  236. data/spec/functional/knife/ssh_spec.rb +5 -5
  237. data/spec/functional/resource/batch_spec.rb +5 -1
  238. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  239. data/spec/functional/resource/execute_spec.rb +17 -0
  240. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  241. data/spec/integration/client/client_spec.rb +33 -0
  242. data/spec/integration/recipes/recipe_dsl_spec.rb +58 -58
  243. data/spec/spec_helper.rb +4 -0
  244. data/spec/support/chef_helpers.rb +5 -7
  245. data/spec/support/platform_helpers.rb +6 -0
  246. data/spec/support/platforms/prof/gc.rb +4 -6
  247. data/spec/support/shared/context/client.rb +1 -1
  248. data/spec/support/shared/functional/execute_resource.rb +150 -0
  249. data/spec/support/shared/functional/windows_script.rb +74 -4
  250. data/spec/support/shared/unit/execute_resource.rb +37 -0
  251. data/spec/support/shared/unit/provider/file.rb +10 -0
  252. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +9 -0
  253. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  254. data/spec/unit/http/api_versions_spec.rb +69 -0
  255. data/spec/unit/knife/ssh_spec.rb +34 -36
  256. data/spec/unit/mixin/versioned_api_spec.rb +107 -0
  257. data/spec/unit/mixin/which.rb +160 -0
  258. data/spec/unit/platform_spec.rb +28 -1
  259. data/spec/unit/provider/deploy_spec.rb +1 -1
  260. data/spec/unit/provider/directory_spec.rb +10 -0
  261. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  262. data/spec/unit/provider/execute_spec.rb +0 -1
  263. data/spec/unit/provider/launchd_spec.rb +2 -2
  264. data/spec/unit/provider/package/aix_spec.rb +22 -22
  265. data/spec/unit/provider/package/apt_spec.rb +27 -27
  266. data/spec/unit/provider/package/cab_spec.rb +59 -5
  267. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -0
  268. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  269. data/spec/unit/provider/package/easy_install_spec.rb +18 -18
  270. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  271. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  272. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  273. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  274. data/spec/unit/provider/package/ips_spec.rb +37 -31
  275. data/spec/unit/provider/package/macports_spec.rb +10 -10
  276. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  277. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  278. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  279. data/spec/unit/provider/package/portage_spec.rb +6 -7
  280. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  281. data/spec/unit/provider/package/rubygems_spec.rb +38 -38
  282. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  283. data/spec/unit/provider/package/windows_spec.rb +2 -1
  284. data/spec/unit/provider/package/yum_spec.rb +51 -43
  285. data/spec/unit/provider/package/zypper_spec.rb +34 -34
  286. data/spec/unit/provider/package_spec.rb +8 -0
  287. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  288. data/spec/unit/provider/route_spec.rb +7 -1
  289. data/spec/unit/provider/script_spec.rb +49 -6
  290. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  291. data/spec/unit/resource/execute_spec.rb +214 -0
  292. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  293. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  294. data/spec/unit/resource/package_spec.rb +5 -0
  295. data/spec/unit/resource/yum_package_spec.rb +42 -1
  296. data/spec/unit/resource_reporter_spec.rb +1 -1
  297. data/spec/unit/resource_spec.rb +18 -0
  298. data/spec/unit/server_api_versions_spec.rb +44 -0
  299. data/spec/unit/util/selinux_spec.rb +3 -14
  300. data/spec/unit/win32/error_spec.rb +67 -0
  301. data/spec/unit/win32/security_spec.rb +66 -0
  302. data/tasks/changelog.rb +1 -1
  303. data/tasks/dependencies.rb +20 -4
  304. metadata +39 -18
  305. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
@@ -2,7 +2,7 @@
2
2
  # Author:: Prajakta Purohit (<prajakta@chef.io>)
3
3
  # Author:: Lamont Granquist (<lamont@chef.io>)
4
4
  #
5
- # Copyright:: Copyright 2011-2016, Chef Software Inc.
5
+ # Copyright:: Copyright 2011-2017, Chef Software Inc.
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
8
8
  # you may not use this file except in compliance with the License.
@@ -47,19 +47,19 @@ class Chef
47
47
 
48
48
  def load_current_resource
49
49
  running_on_windows!
50
- @current_resource ||= Chef::Resource::RegistryKey.new(@new_resource.key, run_context)
51
- @current_resource.key(@new_resource.key)
52
- @current_resource.architecture(@new_resource.architecture)
53
- @current_resource.recursive(@new_resource.recursive)
54
- if registry.key_exists?(@new_resource.key)
55
- @current_resource.values(registry.get_values(@new_resource.key))
56
- end
57
- values_to_hash(@current_resource.unscrubbed_values)
58
- @current_resource
50
+ @current_resource ||= Chef::Resource::RegistryKey.new(new_resource.key, run_context)
51
+ current_resource.key(new_resource.key)
52
+ current_resource.architecture(new_resource.architecture)
53
+ current_resource.recursive(new_resource.recursive)
54
+ if registry.key_exists?(new_resource.key)
55
+ current_resource.values(registry.get_values(new_resource.key))
56
+ end
57
+ values_to_hash(current_resource.unscrubbed_values)
58
+ current_resource
59
59
  end
60
60
 
61
61
  def registry
62
- @registry ||= Chef::Win32::Registry.new(@run_context, @new_resource.architecture)
62
+ @registry ||= Chef::Win32::Registry.new(@run_context, new_resource.architecture)
63
63
  end
64
64
 
65
65
  def values_to_hash(values)
@@ -79,51 +79,51 @@ class Chef
79
79
 
80
80
  def define_resource_requirements
81
81
  requirements.assert(:create, :create_if_missing, :delete, :delete_key) do |a|
82
- a.assertion { registry.hive_exists?(@new_resource.key) }
83
- a.failure_message(Chef::Exceptions::Win32RegHiveMissing, "Hive #{@new_resource.key.split("\\").shift} does not exist")
82
+ a.assertion { registry.hive_exists?(new_resource.key) }
83
+ a.failure_message(Chef::Exceptions::Win32RegHiveMissing, "Hive #{new_resource.key.split("\\").shift} does not exist")
84
84
  end
85
85
 
86
86
  requirements.assert(:create) do |a|
87
- a.assertion { registry.key_exists?(@new_resource.key) }
88
- a.whyrun("Key #{@new_resource.key} does not exist. Unless it would have been created before, attempt to modify its values would fail.")
87
+ a.assertion { registry.key_exists?(new_resource.key) }
88
+ a.whyrun("Key #{new_resource.key} does not exist. Unless it would have been created before, attempt to modify its values would fail.")
89
89
  end
90
90
 
91
91
  requirements.assert(:create, :create_if_missing) do |a|
92
92
  # If keys missing in the path and recursive == false
93
- a.assertion { !registry.keys_missing?(@current_resource.key) || @new_resource.recursive }
93
+ a.assertion { !registry.keys_missing?(current_resource.key) || new_resource.recursive }
94
94
  a.failure_message(Chef::Exceptions::Win32RegNoRecursive, "Intermediate keys missing but recursive is set to false")
95
- a.whyrun("Intermediate keys in #{@new_resource.key} do not exist. Unless they would have been created earlier, attempt to modify them would fail.")
95
+ a.whyrun("Intermediate keys in #{new_resource.key} do not exist. Unless they would have been created earlier, attempt to modify them would fail.")
96
96
  end
97
97
 
98
98
  requirements.assert(:delete_key) do |a|
99
99
  # If key to be deleted has subkeys but recurssive == false
100
- a.assertion { !registry.key_exists?(@new_resource.key) || !registry.has_subkeys?(@new_resource.key) || @new_resource.recursive }
101
- a.failure_message(Chef::Exceptions::Win32RegNoRecursive, "#{@new_resource.key} has subkeys but recursive is set to false.")
102
- a.whyrun("#{@current_resource.key} has subkeys, but recursive is set to false. attempt to delete would fails unless subkeys were deleted prior to this action.")
100
+ a.assertion { !registry.key_exists?(new_resource.key) || !registry.has_subkeys?(new_resource.key) || new_resource.recursive }
101
+ a.failure_message(Chef::Exceptions::Win32RegNoRecursive, "#{new_resource.key} has subkeys but recursive is set to false.")
102
+ a.whyrun("#{current_resource.key} has subkeys, but recursive is set to false. attempt to delete would fails unless subkeys were deleted prior to this action.")
103
103
  end
104
104
 
105
105
  requirements.assert(:create, :create_if_missing) do |a|
106
106
  # If type key missing in the RegistryKey values hash
107
- a.assertion { !key_missing?(@new_resource.values, :type) }
107
+ a.assertion { !key_missing?(new_resource.values, :type) }
108
108
  a.failure_message(Chef::Exceptions::RegKeyValuesTypeMissing, "Missing type key in RegistryKey values hash")
109
109
  a.whyrun("Type key does not exist. Attempt would fail unless the complete values hash containing all the keys does not exist for registry_key resource's create action.")
110
110
  end
111
111
 
112
112
  requirements.assert(:create, :create_if_missing) do |a|
113
113
  # If data key missing in the RegistryKey values hash
114
- a.assertion { !key_missing?(@new_resource.values, :data) }
114
+ a.assertion { !key_missing?(new_resource.values, :data) }
115
115
  a.failure_message(Chef::Exceptions::RegKeyValuesDataMissing, "Missing data key in RegistryKey values hash")
116
116
  a.whyrun("Data key does not exist. Attempt would fail unless the complete values hash containing all the keys does not exist for registry_key resource's create action.")
117
117
  end
118
118
  end
119
119
 
120
120
  def action_create
121
- unless registry.key_exists?(@current_resource.key)
122
- converge_by("create key #{@new_resource.key}") do
123
- registry.create_key(@new_resource.key, @new_resource.recursive)
121
+ unless registry.key_exists?(current_resource.key)
122
+ converge_by("create key #{new_resource.key}") do
123
+ registry.create_key(new_resource.key, new_resource.recursive)
124
124
  end
125
125
  end
126
- @new_resource.unscrubbed_values.each do |value|
126
+ new_resource.unscrubbed_values.each do |value|
127
127
  if @name_hash.has_key?(value[:name].downcase)
128
128
  current_value = @name_hash[value[:name].downcase]
129
129
  if [:dword, :dword_big_endian, :qword].include? value[:type]
@@ -131,38 +131,38 @@ class Chef
131
131
  end
132
132
  unless current_value[:type] == value[:type] && current_value[:data] == value[:data]
133
133
  converge_by("set value #{value}") do
134
- registry.set_value(@new_resource.key, value)
134
+ registry.set_value(new_resource.key, value)
135
135
  end
136
136
  end
137
137
  else
138
138
  converge_by("set value #{value}") do
139
- registry.set_value(@new_resource.key, value)
139
+ registry.set_value(new_resource.key, value)
140
140
  end
141
141
  end
142
142
  end
143
143
  end
144
144
 
145
145
  def action_create_if_missing
146
- unless registry.key_exists?(@new_resource.key)
147
- converge_by("create key #{@new_resource.key}") do
148
- registry.create_key(@new_resource.key, @new_resource.recursive)
146
+ unless registry.key_exists?(new_resource.key)
147
+ converge_by("create key #{new_resource.key}") do
148
+ registry.create_key(new_resource.key, new_resource.recursive)
149
149
  end
150
150
  end
151
- @new_resource.unscrubbed_values.each do |value|
151
+ new_resource.unscrubbed_values.each do |value|
152
152
  unless @name_hash.has_key?(value[:name].downcase)
153
153
  converge_by("create value #{value}") do
154
- registry.set_value(@new_resource.key, value)
154
+ registry.set_value(new_resource.key, value)
155
155
  end
156
156
  end
157
157
  end
158
158
  end
159
159
 
160
160
  def action_delete
161
- if registry.key_exists?(@new_resource.key)
162
- @new_resource.unscrubbed_values.each do |value|
161
+ if registry.key_exists?(new_resource.key)
162
+ new_resource.unscrubbed_values.each do |value|
163
163
  if @name_hash.has_key?(value[:name].downcase)
164
164
  converge_by("delete value #{value}") do
165
- registry.delete_value(@new_resource.key, value)
165
+ registry.delete_value(new_resource.key, value)
166
166
  end
167
167
  end
168
168
  end
@@ -170,9 +170,9 @@ class Chef
170
170
  end
171
171
 
172
172
  def action_delete_key
173
- if registry.key_exists?(@new_resource.key)
174
- converge_by("delete key #{@new_resource.key}") do
175
- registry.delete_key(@new_resource.key, @new_resource.recursive)
173
+ if registry.key_exists?(new_resource.key)
174
+ converge_by("delete key #{new_resource.key}") do
175
+ registry.delete_key(new_resource.key, new_resource.recursive)
176
176
  end
177
177
  end
178
178
  end
@@ -36,9 +36,9 @@ class Chef
36
36
 
37
37
  provides :remote_directory
38
38
 
39
- def_delegators :@new_resource, :purge, :path, :source, :cookbook, :cookbook_name
40
- def_delegators :@new_resource, :files_rights, :files_mode, :files_group, :files_owner, :files_backup
41
- def_delegators :@new_resource, :rights, :mode, :group, :owner
39
+ def_delegators :new_resource, :purge, :path, :source, :cookbook, :cookbook_name
40
+ def_delegators :new_resource, :files_rights, :files_mode, :files_group, :files_owner, :files_backup
41
+ def_delegators :new_resource, :rights, :mode, :group, :owner
42
42
 
43
43
  # The overwrite property on the resource. Delegates to new_resource but can be mutated.
44
44
  #
@@ -36,15 +36,15 @@ class Chef
36
36
  end
37
37
 
38
38
  def load_current_resource
39
- @current_resource = Chef::Resource::RemoteFile.new(@new_resource.name)
39
+ @current_resource = Chef::Resource::RemoteFile.new(new_resource.name)
40
40
  super
41
41
  end
42
42
 
43
43
  private
44
44
 
45
45
  def managing_content?
46
- return true if @new_resource.checksum
47
- return true if !@new_resource.source.nil? && @action != :create_if_missing
46
+ return true if new_resource.checksum
47
+ return true if !new_resource.source.nil? && @action != :create_if_missing
48
48
  false
49
49
  end
50
50
 
@@ -219,7 +219,7 @@ class Chef
219
219
  case action
220
220
  when :add
221
221
  content << (options[:target]).to_s
222
- content << "/#{options[:netmask]}" if options[:netmask]
222
+ content << "/#{MASK[options[:netmask].to_s]}" if options[:netmask]
223
223
  content << " via #{options[:gateway]}" if options[:gateway]
224
224
  content << "\n"
225
225
  end
@@ -31,9 +31,9 @@ class Chef
31
31
  end
32
32
 
33
33
  def action_run
34
- converge_by("execute the ruby block #{@new_resource.name}") do
35
- @new_resource.block.call
36
- Chef::Log.info("#{@new_resource} called")
34
+ converge_by("execute the ruby block #{new_resource.name}") do
35
+ new_resource.block.call
36
+ Chef::Log.info("#{new_resource} called")
37
37
  end
38
38
  end
39
39
 
@@ -18,6 +18,7 @@
18
18
 
19
19
  require "tempfile"
20
20
  require "chef/provider/execute"
21
+ require "chef/win32/security" if Chef::Platform.windows?
21
22
  require "forwardable"
22
23
 
23
24
  class Chef
@@ -33,7 +34,7 @@ class Chef
33
34
  provides :ruby
34
35
  provides :script
35
36
 
36
- def_delegators :@new_resource, :interpreter, :flags
37
+ def_delegators :new_resource, :interpreter, :flags
37
38
 
38
39
  attr_accessor :code
39
40
 
@@ -50,7 +51,7 @@ class Chef
50
51
  super
51
52
  # @todo Chef-13: change this to an exception
52
53
  if code.nil?
53
- Chef::Log.warn "#{@new_resource}: No code attribute was given, resource does nothing, this behavior is deprecated and will be removed in Chef-13"
54
+ Chef::Log.warn "#{new_resource}: No code attribute was given, resource does nothing, this behavior is deprecated and will be removed in Chef-13"
54
55
  end
55
56
  end
56
57
 
@@ -66,10 +67,45 @@ class Chef
66
67
  end
67
68
 
68
69
  def set_owner_and_group
69
- # FileUtils itself implements a no-op if +user+ or +group+ are nil
70
- # You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
71
- # as an unprivileged user.
72
- FileUtils.chown(new_resource.user, new_resource.group, script_file.path)
70
+ if Chef::Platform.windows?
71
+ # And on Windows also this is a no-op if there is no user specified.
72
+ grant_alternate_user_read_access
73
+ else
74
+ # FileUtils itself implements a no-op if +user+ or +group+ are nil
75
+ # You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
76
+ # as an unprivileged user.
77
+ FileUtils.chown(new_resource.user, new_resource.group, script_file.path)
78
+ end
79
+ end
80
+
81
+ def grant_alternate_user_read_access
82
+ # Do nothing if an alternate user isn't specified -- the file
83
+ # will already have the correct permissions for the user as part
84
+ # of the default ACL behavior on Windows.
85
+ return if new_resource.user.nil?
86
+
87
+ # Duplicate the script file's existing DACL
88
+ # so we can add an ACE later
89
+ securable_object = Chef::ReservedNames::Win32::Security::SecurableObject.new(script_file.path)
90
+ aces = securable_object.security_descriptor.dacl.reduce([]) { |result, current| result.push(current) }
91
+
92
+ username = new_resource.user
93
+
94
+ if new_resource.domain
95
+ username = new_resource.domain + '\\' + new_resource.user
96
+ end
97
+
98
+ # Create an ACE that allows the alternate user read access to the script
99
+ # file so it can be read and executed.
100
+ user_sid = Chef::ReservedNames::Win32::Security::SID.from_account(username)
101
+ 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)
102
+ aces.push(read_ace)
103
+ acl = Chef::ReservedNames::Win32::Security::ACL.create(aces)
104
+
105
+ # This actually applies the modified DACL to the file
106
+ # Use parentheses to bypass RuboCop / ChefStyle warning
107
+ # about useless setter
108
+ (securable_object.dacl = acl)
73
109
  end
74
110
 
75
111
  def script_file
@@ -51,21 +51,21 @@ class Chef
51
51
  # XXX?: the #nil? check below will likely fail if this is a cloned resource or if
52
52
  # we just run multiple actions.
53
53
  def load_new_resource_state
54
- if @new_resource.enabled.nil?
55
- @new_resource.enabled(@current_resource.enabled)
54
+ if new_resource.enabled.nil?
55
+ new_resource.enabled(current_resource.enabled)
56
56
  end
57
- if @new_resource.running.nil?
58
- @new_resource.running(@current_resource.running)
57
+ if new_resource.running.nil?
58
+ new_resource.running(current_resource.running)
59
59
  end
60
- if @new_resource.masked.nil?
61
- @new_resource.masked(@current_resource.masked)
60
+ if new_resource.masked.nil?
61
+ new_resource.masked(current_resource.masked)
62
62
  end
63
63
  end
64
64
 
65
65
  # subclasses should override this if they do implement user services
66
66
  def user_services_requirements
67
67
  requirements.assert(:all_actions) do |a|
68
- a.assertion { @new_resource.user.nil? }
68
+ a.assertion { new_resource.user.nil? }
69
69
  a.failure_message Chef::Exceptions::UnsupportedAction, "#{self} does not support user services"
70
70
  end
71
71
  end
@@ -76,7 +76,7 @@ class Chef
76
76
 
77
77
  def define_resource_requirements
78
78
  requirements.assert(:reload) do |a|
79
- a.assertion { supports[:reload] || @new_resource.reload_command }
79
+ a.assertion { supports[:reload] || new_resource.reload_command }
80
80
  a.failure_message Chef::Exceptions::UnsupportedAction, "#{self} does not support :reload"
81
81
  # if a service is not declared to support reload, that won't
82
82
  # typically change during the course of a run - so no whyrun
@@ -85,97 +85,97 @@ class Chef
85
85
  end
86
86
 
87
87
  def action_enable
88
- if @current_resource.enabled
89
- Chef::Log.debug("#{@new_resource} already enabled - nothing to do")
88
+ if current_resource.enabled
89
+ Chef::Log.debug("#{new_resource} already enabled - nothing to do")
90
90
  else
91
- converge_by("enable service #{@new_resource}") do
91
+ converge_by("enable service #{new_resource}") do
92
92
  enable_service
93
- Chef::Log.info("#{@new_resource} enabled")
93
+ Chef::Log.info("#{new_resource} enabled")
94
94
  end
95
95
  end
96
96
  load_new_resource_state
97
- @new_resource.enabled(true)
97
+ new_resource.enabled(true)
98
98
  end
99
99
 
100
100
  def action_disable
101
- if @current_resource.enabled
102
- converge_by("disable service #{@new_resource}") do
101
+ if current_resource.enabled
102
+ converge_by("disable service #{new_resource}") do
103
103
  disable_service
104
- Chef::Log.info("#{@new_resource} disabled")
104
+ Chef::Log.info("#{new_resource} disabled")
105
105
  end
106
106
  else
107
- Chef::Log.debug("#{@new_resource} already disabled - nothing to do")
107
+ Chef::Log.debug("#{new_resource} already disabled - nothing to do")
108
108
  end
109
109
  load_new_resource_state
110
- @new_resource.enabled(false)
110
+ new_resource.enabled(false)
111
111
  end
112
112
 
113
113
  def action_mask
114
- if @current_resource.masked
115
- Chef::Log.debug("#{@new_resource} already masked - nothing to do")
114
+ if current_resource.masked
115
+ Chef::Log.debug("#{new_resource} already masked - nothing to do")
116
116
  else
117
- converge_by("mask service #{@new_resource}") do
117
+ converge_by("mask service #{new_resource}") do
118
118
  mask_service
119
- Chef::Log.info("#{@new_resource} masked")
119
+ Chef::Log.info("#{new_resource} masked")
120
120
  end
121
121
  end
122
122
  load_new_resource_state
123
- @new_resource.masked(true)
123
+ new_resource.masked(true)
124
124
  end
125
125
 
126
126
  def action_unmask
127
- if @current_resource.masked
128
- converge_by("unmask service #{@new_resource}") do
127
+ if current_resource.masked
128
+ converge_by("unmask service #{new_resource}") do
129
129
  unmask_service
130
- Chef::Log.info("#{@new_resource} unmasked")
130
+ Chef::Log.info("#{new_resource} unmasked")
131
131
  end
132
132
  else
133
- Chef::Log.debug("#{@new_resource} already unmasked - nothing to do")
133
+ Chef::Log.debug("#{new_resource} already unmasked - nothing to do")
134
134
  end
135
135
  load_new_resource_state
136
- @new_resource.masked(false)
136
+ new_resource.masked(false)
137
137
  end
138
138
 
139
139
  def action_start
140
- unless @current_resource.running
141
- converge_by("start service #{@new_resource}") do
140
+ unless current_resource.running
141
+ converge_by("start service #{new_resource}") do
142
142
  start_service
143
- Chef::Log.info("#{@new_resource} started")
143
+ Chef::Log.info("#{new_resource} started")
144
144
  end
145
145
  else
146
- Chef::Log.debug("#{@new_resource} already running - nothing to do")
146
+ Chef::Log.debug("#{new_resource} already running - nothing to do")
147
147
  end
148
148
  load_new_resource_state
149
- @new_resource.running(true)
149
+ new_resource.running(true)
150
150
  end
151
151
 
152
152
  def action_stop
153
- if @current_resource.running
154
- converge_by("stop service #{@new_resource}") do
153
+ if current_resource.running
154
+ converge_by("stop service #{new_resource}") do
155
155
  stop_service
156
- Chef::Log.info("#{@new_resource} stopped")
156
+ Chef::Log.info("#{new_resource} stopped")
157
157
  end
158
158
  else
159
- Chef::Log.debug("#{@new_resource} already stopped - nothing to do")
159
+ Chef::Log.debug("#{new_resource} already stopped - nothing to do")
160
160
  end
161
161
  load_new_resource_state
162
- @new_resource.running(false)
162
+ new_resource.running(false)
163
163
  end
164
164
 
165
165
  def action_restart
166
- converge_by("restart service #{@new_resource}") do
166
+ converge_by("restart service #{new_resource}") do
167
167
  restart_service
168
- Chef::Log.info("#{@new_resource} restarted")
168
+ Chef::Log.info("#{new_resource} restarted")
169
169
  end
170
170
  load_new_resource_state
171
- @new_resource.running(true)
171
+ new_resource.running(true)
172
172
  end
173
173
 
174
174
  def action_reload
175
- if @current_resource.running
176
- converge_by("reload service #{@new_resource}") do
175
+ if current_resource.running
176
+ converge_by("reload service #{new_resource}") do
177
177
  reload_service
178
- Chef::Log.info("#{@new_resource} reloaded")
178
+ Chef::Log.info("#{new_resource} reloaded")
179
179
  end
180
180
  end
181
181
  load_new_resource_state
@@ -216,17 +216,17 @@ class Chef
216
216
  protected
217
217
 
218
218
  def default_init_command
219
- if @new_resource.init_command
220
- @new_resource.init_command
221
- elsif self.instance_variable_defined?(:@init_command)
219
+ if new_resource.init_command
220
+ new_resource.init_command
221
+ elsif instance_variable_defined?(:@init_command)
222
222
  @init_command
223
223
  end
224
224
  end
225
225
 
226
226
  def custom_command_for_action?(action)
227
227
  method_name = "#{action}_command".to_sym
228
- @new_resource.respond_to?(method_name) &&
229
- !!@new_resource.send(method_name)
228
+ new_resource.respond_to?(method_name) &&
229
+ !!new_resource.send(method_name)
230
230
  end
231
231
 
232
232
  module ServicePriorityInit