chef 12.4.3-universal-mingw32 → 12.5.1-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 (320) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +21 -25
  3. data/Gemfile +46 -0
  4. data/README.md +4 -4
  5. data/Rakefile +4 -110
  6. data/bin/chef-service-manager +3 -1
  7. data/distro/common/html/knife_cookbook_site.html +18 -18
  8. data/distro/common/man/man1/knife-cookbook-site.1 +11 -11
  9. data/lib/chef.rb +1 -1
  10. data/lib/chef/application.rb +1 -1
  11. data/lib/chef/application/apply.rb +19 -1
  12. data/lib/chef/application/client.rb +11 -5
  13. data/lib/chef/application/knife.rb +2 -2
  14. data/lib/chef/application/solo.rb +1 -1
  15. data/lib/chef/application/windows_service_manager.rb +19 -12
  16. data/lib/chef/chef_class.rb +46 -0
  17. data/lib/chef/chef_fs/config.rb +22 -24
  18. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +3 -1
  19. data/lib/chef/chef_fs/file_pattern.rb +4 -15
  20. data/lib/chef/chef_fs/file_system/acl_dir.rb +3 -4
  21. data/lib/chef/chef_fs/file_system/acls_dir.rb +5 -1
  22. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +0 -5
  23. data/lib/chef/chef_fs/file_system/base_fs_object.rb +5 -2
  24. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +2 -9
  25. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +2 -9
  26. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +10 -17
  27. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -12
  28. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +15 -11
  29. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +8 -2
  30. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +4 -4
  31. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +1 -1
  32. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -11
  33. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +3 -5
  34. data/lib/chef/chef_fs/file_system/environments_dir.rb +1 -1
  35. data/lib/chef/chef_fs/file_system/file_system_entry.rb +7 -4
  36. data/lib/chef/chef_fs/file_system/memory_dir.rb +2 -3
  37. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +15 -0
  38. data/lib/chef/chef_fs/file_system/nodes_dir.rb +1 -1
  39. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -2
  40. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +4 -9
  41. data/lib/chef/chef_fs/knife.rb +35 -7
  42. data/lib/chef/chef_fs/path_utils.rb +65 -34
  43. data/lib/chef/client.rb +2 -3
  44. data/lib/chef/config.rb +34 -2
  45. data/lib/chef/{mixin/wstring.rb → constants.rb} +9 -13
  46. data/lib/chef/cookbook/metadata.rb +25 -3
  47. data/lib/chef/cookbook/synchronizer.rb +1 -1
  48. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  49. data/lib/chef/cookbook_version.rb +3 -3
  50. data/lib/chef/delayed_evaluator.rb +21 -0
  51. data/lib/chef/deprecation/mixin/template.rb +1 -2
  52. data/lib/chef/deprecation/provider/cookbook_file.rb +1 -1
  53. data/lib/chef/deprecation/provider/file.rb +1 -1
  54. data/lib/chef/deprecation/provider/remote_directory.rb +52 -0
  55. data/lib/chef/deprecation/provider/remote_file.rb +1 -2
  56. data/lib/chef/deprecation/provider/template.rb +1 -1
  57. data/lib/chef/deprecation/warnings.rb +3 -4
  58. data/lib/chef/dsl/reboot_pending.rb +3 -2
  59. data/lib/chef/dsl/recipe.rb +26 -7
  60. data/lib/chef/dsl/resources.rb +2 -2
  61. data/lib/chef/event_dispatch/base.rb +51 -22
  62. data/lib/chef/event_dispatch/dispatcher.rb +21 -6
  63. data/lib/chef/event_dispatch/dsl.rb +64 -0
  64. data/lib/chef/exceptions.rb +28 -1
  65. data/lib/chef/file_content_management/tempfile.rb +1 -1
  66. data/lib/chef/formatters/base.rb +3 -0
  67. data/lib/chef/formatters/doc.rb +56 -6
  68. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +36 -0
  69. data/lib/chef/formatters/minimal.rb +2 -2
  70. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -1
  71. data/lib/chef/http/http_request.rb +1 -1
  72. data/lib/chef/knife.rb +35 -55
  73. data/lib/chef/knife/bootstrap.rb +41 -0
  74. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -0
  75. data/lib/chef/knife/bootstrap/client_builder.rb +16 -0
  76. data/lib/chef/knife/bootstrap/templates/README.md +3 -4
  77. data/lib/chef/knife/bootstrap/templates/chef-full.erb +1 -1
  78. data/lib/chef/knife/cookbook_create.rb +1 -1
  79. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  80. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  81. data/lib/chef/knife/cookbook_site_share.rb +6 -6
  82. data/lib/chef/knife/cookbook_site_unshare.rb +2 -2
  83. data/lib/chef/knife/core/bootstrap_context.rb +12 -4
  84. data/lib/chef/knife/core/custom_manifest_loader.rb +69 -0
  85. data/lib/chef/knife/core/gem_glob_loader.rb +138 -0
  86. data/lib/chef/knife/core/hashed_command_loader.rb +80 -0
  87. data/lib/chef/knife/core/node_presenter.rb +24 -1
  88. data/lib/chef/knife/core/object_loader.rb +1 -0
  89. data/lib/chef/knife/core/subcommand_loader.rb +131 -146
  90. data/lib/chef/knife/node_run_list_remove.rb +12 -1
  91. data/lib/chef/knife/null.rb +10 -0
  92. data/lib/chef/knife/rehash.rb +62 -0
  93. data/lib/chef/knife/search.rb +3 -3
  94. data/lib/chef/knife/ssh.rb +52 -30
  95. data/lib/chef/knife/ssl_check.rb +3 -2
  96. data/lib/chef/knife/user_edit.rb +1 -2
  97. data/lib/chef/local_mode.rb +5 -0
  98. data/lib/chef/log.rb +5 -1
  99. data/lib/chef/mixin/deprecation.rb +8 -8
  100. data/lib/chef/mixin/params_validate.rb +362 -135
  101. data/lib/chef/mixin/template.rb +48 -0
  102. data/lib/chef/mixin/which.rb +1 -1
  103. data/lib/chef/mixin/wide_string.rb +72 -0
  104. data/lib/chef/mixin/windows_architecture_helper.rb +15 -39
  105. data/lib/chef/mixin/windows_env_helper.rb +4 -1
  106. data/lib/chef/monkey_patches/webrick-utils.rb +51 -0
  107. data/lib/chef/monkey_patches/win32/registry.rb +72 -0
  108. data/lib/chef/node.rb +116 -3
  109. data/lib/chef/node_map.rb +2 -2
  110. data/lib/chef/platform/handler_map.rb +0 -5
  111. data/lib/chef/platform/provider_mapping.rb +5 -6
  112. data/lib/chef/platform/query_helpers.rb +46 -4
  113. data/lib/chef/platform/rebooter.rb +1 -1
  114. data/lib/chef/platform/service_helpers.rb +30 -32
  115. data/lib/chef/policy_builder.rb +1 -8
  116. data/lib/chef/policy_builder/dynamic.rb +186 -0
  117. data/lib/chef/policy_builder/expand_node_object.rb +30 -15
  118. data/lib/chef/policy_builder/policyfile.rb +155 -18
  119. data/lib/chef/property.rb +568 -0
  120. data/lib/chef/provider.rb +222 -13
  121. data/lib/chef/provider/batch.rb +8 -0
  122. data/lib/chef/provider/deploy.rb +5 -7
  123. data/lib/chef/provider/directory.rb +14 -2
  124. data/lib/chef/provider/dsc_resource.rb +5 -9
  125. data/lib/chef/provider/group/pw.rb +1 -1
  126. data/lib/chef/provider/ifconfig.rb +2 -2
  127. data/lib/chef/provider/lwrp_base.rb +1 -75
  128. data/lib/chef/provider/mount.rb +7 -3
  129. data/lib/chef/provider/package.rb +1 -1
  130. data/lib/chef/provider/package/dpkg.rb +5 -11
  131. data/lib/chef/provider/package/rpm.rb +2 -2
  132. data/lib/chef/provider/package/rubygems.rb +1 -1
  133. data/lib/chef/provider/package/windows/msi.rb +2 -2
  134. data/lib/chef/provider/package/yum.rb +17 -5
  135. data/lib/chef/provider/powershell_script.rb +59 -23
  136. data/lib/chef/provider/registry_key.rb +5 -5
  137. data/lib/chef/provider/remote_directory.rb +190 -102
  138. data/lib/chef/provider/service.rb +12 -2
  139. data/lib/chef/provider/service/aix.rb +1 -1
  140. data/lib/chef/provider/service/debian.rb +3 -5
  141. data/lib/chef/provider/service/freebsd.rb +1 -1
  142. data/lib/chef/provider/service/gentoo.rb +3 -3
  143. data/lib/chef/provider/service/init.rb +3 -3
  144. data/lib/chef/provider/service/insserv.rb +2 -4
  145. data/lib/chef/provider/service/invokercd.rb +2 -4
  146. data/lib/chef/provider/service/macosx.rb +5 -1
  147. data/lib/chef/provider/service/openbsd.rb +2 -1
  148. data/lib/chef/provider/service/redhat.rb +52 -16
  149. data/lib/chef/provider/service/simple.rb +2 -2
  150. data/lib/chef/provider/service/systemd.rb +3 -5
  151. data/lib/chef/provider/service/upstart.rb +4 -6
  152. data/lib/chef/provider/subversion.rb +13 -7
  153. data/lib/chef/provider/template/content.rb +16 -6
  154. data/lib/chef/provider/user/solaris.rb +32 -4
  155. data/lib/chef/provider/windows_script.rb +3 -5
  156. data/lib/chef/provider_resolver.rb +2 -2
  157. data/lib/chef/recipe.rb +1 -8
  158. data/lib/chef/resource.rb +563 -90
  159. data/lib/chef/resource/action_class.rb +83 -0
  160. data/lib/chef/resource/chef_gem.rb +3 -3
  161. data/lib/chef/resource/deploy.rb +8 -2
  162. data/lib/chef/resource/dsc_script.rb +2 -0
  163. data/lib/chef/resource/file/verification.rb +7 -1
  164. data/lib/chef/resource/lwrp_base.rb +1 -7
  165. data/lib/chef/resource/registry_key.rb +1 -1
  166. data/lib/chef/resource/service.rb +10 -2
  167. data/lib/chef/resource/subversion.rb +5 -0
  168. data/lib/chef/resource/windows_script.rb +6 -2
  169. data/lib/chef/resource/yum_package.rb +10 -1
  170. data/lib/chef/resource_resolver.rb +3 -3
  171. data/lib/chef/run_context.rb +402 -83
  172. data/lib/chef/run_list/versioned_recipe_list.rb +15 -0
  173. data/lib/chef/run_lock.rb +30 -21
  174. data/lib/chef/util/powershell/ps_credential.rb +4 -0
  175. data/lib/chef/util/windows.rb +0 -32
  176. data/lib/chef/util/windows/net_group.rb +85 -106
  177. data/lib/chef/util/windows/net_use.rb +35 -71
  178. data/lib/chef/util/windows/net_user.rb +0 -1
  179. data/lib/chef/util/windows/volume.rb +19 -19
  180. data/lib/chef/version.rb +3 -3
  181. data/lib/chef/win32/api.rb +1 -0
  182. data/lib/chef/win32/api/file.rb +20 -0
  183. data/lib/chef/win32/api/net.rb +163 -43
  184. data/lib/chef/win32/api/registry.rb +51 -0
  185. data/lib/chef/win32/api/system.rb +23 -0
  186. data/lib/chef/win32/api/unicode.rb +0 -43
  187. data/lib/chef/win32/crypto.rb +2 -1
  188. data/lib/chef/win32/file.rb +28 -3
  189. data/lib/chef/win32/mutex.rb +1 -2
  190. data/lib/chef/win32/net.rb +162 -8
  191. data/lib/chef/win32/process.rb +13 -0
  192. data/lib/chef/win32/registry.rb +35 -30
  193. data/lib/chef/win32/security.rb +1 -1
  194. data/lib/chef/win32/security/token.rb +1 -1
  195. data/lib/chef/win32/system.rb +62 -0
  196. data/lib/chef/win32/unicode.rb +7 -2
  197. data/lib/chef/win32/version.rb +0 -4
  198. data/lib/chef/workstation_config_loader.rb +3 -158
  199. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -0
  200. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -0
  201. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -0
  202. data/spec/data/dsc_lcm.pfx +0 -0
  203. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -0
  204. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -0
  205. data/spec/functional/dsl/reboot_pending_spec.rb +33 -43
  206. data/spec/functional/knife/cookbook_delete_spec.rb +17 -7
  207. data/spec/functional/knife/ssh_spec.rb +16 -0
  208. data/spec/functional/rebooter_spec.rb +1 -1
  209. data/spec/functional/resource/deploy_revision_spec.rb +1 -1
  210. data/spec/functional/resource/dsc_resource_spec.rb +2 -0
  211. data/spec/functional/resource/dsc_script_spec.rb +91 -2
  212. data/spec/functional/resource/group_spec.rb +67 -44
  213. data/spec/functional/resource/{powershell_spec.rb → powershell_script_spec.rb} +107 -18
  214. data/spec/functional/resource/windows_service_spec.rb +1 -1
  215. data/spec/functional/run_lock_spec.rb +368 -189
  216. data/spec/functional/win32/{registry_helper_spec.rb → registry_spec.rb} +16 -23
  217. data/spec/functional/win32/service_manager_spec.rb +2 -2
  218. data/spec/integration/client/client_spec.rb +51 -0
  219. data/spec/integration/knife/chef_repo_path_spec.rb +13 -11
  220. data/spec/integration/knife/download_spec.rb +4 -0
  221. data/spec/integration/knife/list_spec.rb +8 -0
  222. data/spec/integration/knife/upload_spec.rb +1 -1
  223. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -16
  224. data/spec/integration/recipes/remote_directory.rb +74 -0
  225. data/spec/integration/recipes/resource_action_spec.rb +363 -0
  226. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +423 -0
  227. data/spec/integration/recipes/resource_load_spec.rb +206 -0
  228. data/spec/spec_helper.rb +9 -0
  229. data/spec/support/platform_helpers.rb +13 -0
  230. data/spec/support/shared/context/win32.rb +34 -0
  231. data/spec/support/shared/functional/win32_service.rb +2 -1
  232. data/spec/support/shared/functional/windows_script.rb +63 -26
  233. data/spec/support/shared/unit/mock_shellout.rb +46 -0
  234. data/spec/support/shared/unit/provider/file.rb +10 -4
  235. data/spec/unit/application/client_spec.rb +16 -3
  236. data/spec/unit/application/knife_spec.rb +2 -2
  237. data/spec/unit/application/solo_spec.rb +4 -3
  238. data/spec/unit/chef_class_spec.rb +23 -4
  239. data/spec/unit/chef_fs/path_util_spec.rb +108 -0
  240. data/spec/unit/client_spec.rb +6 -1
  241. data/spec/unit/config_spec.rb +31 -0
  242. data/spec/unit/cookbook/metadata_spec.rb +23 -3
  243. data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
  244. data/spec/unit/deprecation_spec.rb +3 -6
  245. data/spec/unit/dsl/reboot_pending_spec.rb +12 -6
  246. data/spec/unit/event_dispatch/dispatcher_spec.rb +65 -3
  247. data/spec/unit/event_dispatch/dsl_spec.rb +83 -0
  248. data/spec/unit/formatters/doc_spec.rb +32 -0
  249. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +26 -0
  250. data/spec/unit/json_compat_spec.rb +4 -3
  251. data/spec/unit/knife/bootstrap/client_builder_spec.rb +27 -0
  252. data/spec/unit/knife/bootstrap_spec.rb +55 -3
  253. data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
  254. data/spec/unit/knife/core/bootstrap_context_spec.rb +21 -4
  255. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -0
  256. data/spec/unit/knife/core/gem_glob_loader_spec.rb +210 -0
  257. data/spec/unit/knife/core/hashed_command_loader_spec.rb +93 -0
  258. data/spec/unit/knife/core/subcommand_loader_spec.rb +16 -192
  259. data/spec/unit/knife/node_run_list_remove_spec.rb +17 -0
  260. data/spec/unit/knife/ssl_check_spec.rb +4 -0
  261. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +10 -10
  262. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  263. data/spec/unit/mixin/template_spec.rb +5 -1
  264. data/spec/unit/mixin/windows_architecture_helper_spec.rb +13 -8
  265. data/spec/unit/node_spec.rb +220 -0
  266. data/spec/unit/platform/query_helpers_spec.rb +146 -3
  267. data/spec/unit/policy_builder/dynamic_spec.rb +275 -0
  268. data/spec/unit/policy_builder/expand_node_object_spec.rb +37 -38
  269. data/spec/unit/policy_builder/policyfile_spec.rb +260 -46
  270. data/spec/unit/property/state_spec.rb +506 -0
  271. data/spec/unit/property/validation_spec.rb +663 -0
  272. data/spec/unit/property_spec.rb +1094 -0
  273. data/spec/unit/provider/deploy_spec.rb +5 -5
  274. data/spec/unit/provider/directory_spec.rb +35 -0
  275. data/spec/unit/provider/dsc_resource_spec.rb +3 -10
  276. data/spec/unit/provider/ifconfig_spec.rb +22 -2
  277. data/spec/unit/provider/mount/aix_spec.rb +2 -1
  278. data/spec/unit/provider/mount/mount_spec.rb +6 -0
  279. data/spec/unit/provider/mount/windows_spec.rb +14 -0
  280. data/spec/unit/provider/mount_spec.rb +12 -1
  281. data/spec/unit/provider/package/dpkg_spec.rb +8 -1
  282. data/spec/unit/provider/package/rpm_spec.rb +18 -1
  283. data/spec/unit/provider/package/rubygems_spec.rb +18 -0
  284. data/spec/unit/provider/package/yum_spec.rb +97 -24
  285. data/spec/unit/provider/powershell_script_spec.rb +106 -0
  286. data/spec/unit/provider/registry_key_spec.rb +12 -0
  287. data/spec/unit/provider/remote_directory_spec.rb +1 -2
  288. data/spec/unit/provider/service/aix_service_spec.rb +3 -3
  289. data/spec/unit/provider/service/gentoo_service_spec.rb +4 -4
  290. data/spec/unit/provider/service/macosx_spec.rb +4 -4
  291. data/spec/unit/provider/service/openbsd_service_spec.rb +10 -8
  292. data/spec/unit/provider/service/redhat_spec.rb +88 -8
  293. data/spec/unit/provider/service/upstart_service_spec.rb +11 -7
  294. data/spec/unit/provider/service/windows_spec.rb +211 -200
  295. data/spec/unit/provider/subversion_spec.rb +50 -31
  296. data/spec/unit/provider/template/content_spec.rb +93 -2
  297. data/spec/unit/provider/user/solaris_spec.rb +66 -9
  298. data/spec/unit/provider_resolver_spec.rb +707 -650
  299. data/spec/unit/provider_spec.rb +1 -3
  300. data/spec/unit/recipe_spec.rb +0 -4
  301. data/spec/unit/resource/deploy_spec.rb +7 -1
  302. data/spec/unit/resource/dsc_script_spec.rb +4 -0
  303. data/spec/unit/resource/file/verification_spec.rb +33 -5
  304. data/spec/unit/resource/{powershell_spec.rb → powershell_script_spec.rb} +17 -13
  305. data/spec/unit/resource/service_spec.rb +4 -4
  306. data/spec/unit/resource/subversion_spec.rb +4 -0
  307. data/spec/unit/resource/yum_package_spec.rb +10 -1
  308. data/spec/unit/resource_spec.rb +2 -2
  309. data/spec/unit/run_context/child_run_context_spec.rb +133 -0
  310. data/spec/unit/run_context_spec.rb +7 -0
  311. data/spec/unit/run_list/versioned_recipe_list_spec.rb +5 -0
  312. data/spec/unit/win32/registry_spec.rb +394 -0
  313. data/tasks/external_tests.rb +47 -23
  314. data/tasks/maintainers.rb +155 -14
  315. metadata +64 -53
  316. data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +0 -76
  317. data/lib/chef/knife/bootstrap/templates/chef-aix.erb +0 -72
  318. data/spec/unit/provider/powershell_spec.rb +0 -80
  319. data/spec/unit/registry_helper_spec.rb +0 -376
  320. data/spec/unit/workstation_config_loader_spec.rb +0 -283
@@ -22,7 +22,7 @@ require 'chef/win32/memory'
22
22
  require 'chef/win32/process'
23
23
  require 'chef/win32/unicode'
24
24
  require 'chef/win32/security/token'
25
- require 'chef/mixin/wstring'
25
+ require 'chef/mixin/wide_string'
26
26
 
27
27
  class Chef
28
28
  module ReservedNames::Win32
@@ -18,7 +18,7 @@
18
18
 
19
19
  require 'chef/win32/security'
20
20
  require 'chef/win32/api/security'
21
-
21
+ require 'chef/win32/unicode'
22
22
  require 'ffi'
23
23
 
24
24
  class Chef
@@ -0,0 +1,62 @@
1
+ #
2
+ # Author:: Salim Alam (<salam@chef.io>)
3
+ # Copyright:: Copyright 2015 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/win32/api/system'
20
+ require 'chef/win32/error'
21
+ require 'ffi'
22
+
23
+ class Chef
24
+ module ReservedNames::Win32
25
+ class System
26
+ include Chef::ReservedNames::Win32::API::System
27
+ extend Chef::ReservedNames::Win32::API::System
28
+
29
+ def self.get_system_wow64_directory
30
+ ptr = FFI::MemoryPointer.new(:char, 255, true)
31
+ succeeded = GetSystemWow64DirectoryA(ptr, 255)
32
+
33
+ if succeeded == 0
34
+ raise Win32APIError, "Failed to get Wow64 system directory"
35
+ end
36
+
37
+ ptr.read_string.strip
38
+ end
39
+
40
+ def self.wow64_disable_wow64_fs_redirection
41
+ original_redirection_state = FFI::MemoryPointer.new(:pointer)
42
+
43
+ succeeded = Wow64DisableWow64FsRedirection(original_redirection_state)
44
+
45
+ if succeeded == 0
46
+ raise Win32APIError, "Failed to disable Wow64 file redirection"
47
+ end
48
+
49
+ original_redirection_state
50
+ end
51
+
52
+ def self.wow64_revert_wow64_fs_redirection(original_redirection_state)
53
+ succeeded = Wow64RevertWow64FsRedirection(original_redirection_state)
54
+
55
+ if succeeded == 0
56
+ raise Win32APIError, "Failed to revert Wow64 file redirection"
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -17,6 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
+ require 'chef/mixin/wide_string'
20
21
  require 'chef/win32/api/unicode'
21
22
 
22
23
  class Chef
@@ -30,6 +31,8 @@ end
30
31
 
31
32
  module FFI
32
33
  class Pointer
34
+ include Chef::Mixin::WideString
35
+
33
36
  def read_wstring(num_wchars = nil)
34
37
  if num_wchars.nil?
35
38
  # Find the length of the string
@@ -43,13 +46,15 @@ module FFI
43
46
  num_wchars = length
44
47
  end
45
48
 
46
- Chef::ReservedNames::Win32::Unicode.wide_to_utf8(self.get_bytes(0, num_wchars*2))
49
+ wide_to_utf8(self.get_bytes(0, num_wchars*2))
47
50
  end
48
51
  end
49
52
  end
50
53
 
51
54
  class String
55
+ include Chef::Mixin::WideString
56
+
52
57
  def to_wstring
53
- Chef::ReservedNames::Win32::Unicode.utf8_to_wide(self)
58
+ utf8_to_wide(self)
54
59
  end
55
60
  end
@@ -122,10 +122,6 @@ class Chef
122
122
  # WMI always returns the truth. See article at
123
123
  # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
124
124
 
125
- # CHEF-4888: Work around ruby #2618, expected to be fixed in Ruby 2.1.0
126
- # https://github.com/ruby/ruby/commit/588504b20f5cc880ad51827b93e571e32446e5db
127
- # https://github.com/ruby/ruby/commit/27ed294c7134c0de582007af3c915a635a6506cd
128
-
129
125
  wmi = WmiLite::Wmi.new
130
126
  os_info = wmi.first_of('Win32_OperatingSystem')
131
127
  os_version = os_info['version']
@@ -1,5 +1,5 @@
1
1
  #
2
- # Author:: Daniel DeLeo (<dan@getchef.com>)
2
+ # Author:: Claire McQuin (<claire@chef.io>)
3
3
  # Copyright:: Copyright (c) 2014 Chef Software, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
@@ -16,163 +16,8 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/config_fetcher'
20
- require 'chef/config'
21
- require 'chef/null_logger'
22
- require 'chef/util/path_helper'
19
+ require 'chef-config/workstation_config_loader'
23
20
 
24
21
  class Chef
25
-
26
- class WorkstationConfigLoader
27
-
28
- # Path to a config file requested by user, (e.g., via command line option). Can be nil
29
- attr_accessor :explicit_config_file
30
-
31
- # TODO: initialize this with a logger for Chef and Knife
32
- def initialize(explicit_config_file, logger=nil)
33
- @explicit_config_file = explicit_config_file
34
- @config_location = nil
35
- @logger = logger || NullLogger.new
36
- end
37
-
38
- def no_config_found?
39
- config_location.nil?
40
- end
41
-
42
- def config_location
43
- @config_location ||= (explicit_config_file || locate_local_config)
44
- end
45
-
46
- def chef_config_dir
47
- if @chef_config_dir.nil?
48
- @chef_config_dir = false
49
- full_path = working_directory.split(File::SEPARATOR)
50
- (full_path.length - 1).downto(0) do |i|
51
- candidate_directory = File.join(full_path[0..i] + [".chef" ])
52
- if File.exist?(candidate_directory) && File.directory?(candidate_directory)
53
- @chef_config_dir = candidate_directory
54
- break
55
- end
56
- end
57
- end
58
- @chef_config_dir
59
- end
60
-
61
- def load
62
- # Ignore it if there's no explicit_config_file and can't find one at a
63
- # default path.
64
- return false if config_location.nil?
65
-
66
- if explicit_config_file && !path_exists?(config_location)
67
- raise Exceptions::ConfigurationError, "Specified config file #{config_location} does not exist"
68
- end
69
-
70
- # Have to set Chef::Config.config_file b/c other config is derived from it.
71
- Chef::Config.config_file = config_location
72
- read_config(IO.read(config_location), config_location)
73
- end
74
-
75
- # (Private API, public for test purposes)
76
- def env
77
- ENV
78
- end
79
-
80
- # (Private API, public for test purposes)
81
- def path_exists?(path)
82
- Pathname.new(path).expand_path.exist?
83
- end
84
-
85
- private
86
-
87
- def have_config?(path)
88
- if path_exists?(path)
89
- logger.info("Using config at #{path}")
90
- true
91
- else
92
- logger.debug("Config not found at #{path}, trying next option")
93
- false
94
- end
95
- end
96
-
97
- def locate_local_config
98
- candidate_configs = []
99
-
100
- # Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
101
- if env['KNIFE_HOME']
102
- candidate_configs << File.join(env['KNIFE_HOME'], 'config.rb')
103
- candidate_configs << File.join(env['KNIFE_HOME'], 'knife.rb')
104
- end
105
- # Look for $PWD/knife.rb
106
- if Dir.pwd
107
- candidate_configs << File.join(Dir.pwd, 'config.rb')
108
- candidate_configs << File.join(Dir.pwd, 'knife.rb')
109
- end
110
- # Look for $UPWARD/.chef/knife.rb
111
- if chef_config_dir
112
- candidate_configs << File.join(chef_config_dir, 'config.rb')
113
- candidate_configs << File.join(chef_config_dir, 'knife.rb')
114
- end
115
- # Look for $HOME/.chef/knife.rb
116
- Chef::Util::PathHelper.home('.chef') do |dot_chef_dir|
117
- candidate_configs << File.join(dot_chef_dir, 'config.rb')
118
- candidate_configs << File.join(dot_chef_dir, 'knife.rb')
119
- end
120
-
121
- candidate_configs.find do | candidate_config |
122
- have_config?(candidate_config)
123
- end
124
- end
125
-
126
- def working_directory
127
- a = if Chef::Platform.windows?
128
- env['CD']
129
- else
130
- env['PWD']
131
- end || Dir.pwd
132
-
133
- a
134
- end
135
-
136
- def read_config(config_content, config_file_path)
137
- Chef::Config.from_string(config_content, config_file_path)
138
- rescue SignalException
139
- raise
140
- rescue SyntaxError => e
141
- message = ""
142
- message << "You have invalid ruby syntax in your config file #{config_file_path}\n\n"
143
- message << "#{e.class.name}: #{e.message}\n"
144
- if file_line = e.message[/#{Regexp.escape(config_file_path)}:[\d]+/]
145
- line = file_line[/:([\d]+)$/, 1].to_i
146
- message << highlight_config_error(config_file_path, line)
147
- end
148
- raise Exceptions::ConfigurationError, message
149
- rescue Exception => e
150
- message = "You have an error in your config file #{config_file_path}\n\n"
151
- message << "#{e.class.name}: #{e.message}\n"
152
- filtered_trace = e.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
153
- filtered_trace.each {|bt_line| message << " " << bt_line << "\n" }
154
- if !filtered_trace.empty?
155
- line_nr = filtered_trace.first[/#{Regexp.escape(config_file_path)}:([\d]+)/, 1]
156
- message << highlight_config_error(config_file_path, line_nr.to_i)
157
- end
158
- raise Exceptions::ConfigurationError, message
159
- end
160
-
161
-
162
- def highlight_config_error(file, line)
163
- config_file_lines = []
164
- IO.readlines(file).each_with_index {|l, i| config_file_lines << "#{(i + 1).to_s.rjust(3)}: #{l.chomp}"}
165
- if line == 1
166
- lines = config_file_lines[0..3]
167
- else
168
- lines = config_file_lines[Range.new(line - 2, line)]
169
- end
170
- "Relevant file content:\n" + lines.join("\n") + "\n"
171
- end
172
-
173
- def logger
174
- @logger
175
- end
176
-
177
- end
22
+ WorkstationConfigLoader = ChefConfig::WorkstationConfigLoader
178
23
  end
@@ -0,0 +1,14 @@
1
+ <%= @cookbook_name %>
2
+ <%= @recipe_name %>
3
+ <%= @recipe_line_string %>
4
+ <%= @recipe_path %>
5
+ <%= @recipe_line %>
6
+ <%= @template_name %>
7
+ <%= @template_path %>
8
+ <%= cookbook_name %>
9
+ <%= recipe_name %>
10
+ <%= recipe_line_string %>
11
+ <%= recipe_path %>
12
+ <%= recipe_line %>
13
+ <%= template_name %>
14
+ <%= template_path %>
@@ -0,0 +1 @@
1
+ before <%= render 'nested_partial.erb', :variables => { :hello => @test } %> after
Binary file
@@ -0,0 +1,24 @@
1
+ module ::RanResources
2
+ def self.resources
3
+ @resources ||= []
4
+ end
5
+ end
6
+ class RunContextCustomResource < Chef::Resource
7
+ action :create do
8
+ ruby_block '4' do
9
+ block { RanResources.resources << 4 }
10
+ end
11
+ recipe_eval do
12
+ ruby_block '1' do
13
+ block { RanResources.resources << 1 }
14
+ end
15
+ include_recipe 'include::includee'
16
+ ruby_block '3' do
17
+ block { RanResources.resources << 3 }
18
+ end
19
+ end
20
+ ruby_block '5' do
21
+ block { RanResources.resources << 5 }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ ruby_block '2' do
2
+ block { RanResources.resources << 2 }
3
+ end
@@ -30,13 +30,6 @@ describe Chef::DSL::RebootPending, :windows_only do
30
30
  ohai
31
31
  end
32
32
 
33
- def registry_unsafe?
34
- registry.value_exists?('HKLM\SYSTEM\CurrentControlSet\Control\Session Manager', { :name => 'PendingFileRenameOperations' }) ||
35
- registry.key_exists?('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired')
36
- registry.key_exists?('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired') ||
37
- registry.key_exists?('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile')
38
- end
39
-
40
33
  let(:node) { Chef::Node.new }
41
34
  let(:events) { Chef::EventDispatch::Dispatcher.new }
42
35
  let!(:ohai) { run_ohai } # Ensure we have necessary node data
@@ -45,76 +38,73 @@ describe Chef::DSL::RebootPending, :windows_only do
45
38
  let(:registry) { Chef::Win32::Registry.new(run_context) }
46
39
 
47
40
  describe "reboot_pending?" do
41
+ let(:reg_key) { nil }
42
+ let(:original_set) { false }
48
43
 
49
- describe "when there is nothing to indicate a reboot is pending" do
50
- it "should return false" do
51
- skip "Found existing registry keys" if registry_unsafe?
52
- expect(recipe.reboot_pending?).to be_falsey
53
- end
54
- end
44
+ before(:all) { @any_flag = Hash.new }
45
+
46
+ after { @any_flag[reg_key] = original_set }
55
47
 
56
48
  describe 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations' do
49
+ let(:reg_key) { 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager' }
50
+ let(:original_set) { registry.value_exists?(reg_key, { :name => 'PendingFileRenameOperations' }) }
51
+
57
52
  it "returns true if the registry value exists" do
58
- skip "Found existing registry keys" if registry_unsafe?
59
- registry.set_value('HKLM\SYSTEM\CurrentControlSet\Control\Session Manager',
53
+ skip 'found existing registry key' if original_set
54
+ registry.set_value(reg_key,
60
55
  { :name => 'PendingFileRenameOperations', :type => :multi_string, :data => ['\??\C:\foo.txt|\??\C:\bar.txt'] })
61
56
 
62
57
  expect(recipe.reboot_pending?).to be_truthy
63
58
  end
64
59
 
65
60
  after do
66
- unless registry_unsafe?
67
- registry.delete_value('HKLM\SYSTEM\CurrentControlSet\Control\Session Manager', { :name => 'PendingFileRenameOperations' })
61
+ unless original_set
62
+ registry.delete_value(reg_key, { :name => 'PendingFileRenameOperations' })
68
63
  end
69
64
  end
70
65
  end
71
66
 
72
- describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' do
67
+ describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired' do
68
+ let(:reg_key) { 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired' }
69
+ let(:original_set) { registry.key_exists?(reg_key) }
70
+
73
71
  it "returns true if the registry key exists" do
74
- skip "Found existing registry keys" if registry_unsafe?
75
- registry.create_key('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired', false)
72
+ skip 'found existing registry key' if original_set
73
+ pending "Permissions are limited to 'TrustedInstaller' by default"
74
+ registry.create_key(reg_key, false)
76
75
 
77
76
  expect(recipe.reboot_pending?).to be_truthy
78
77
  end
79
78
 
80
79
  after do
81
- unless registry_unsafe?
82
- registry.delete_key('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired', false)
80
+ unless original_set
81
+ registry.delete_key(reg_key, false)
83
82
  end
84
83
  end
85
84
  end
86
85
 
87
- describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired' do
86
+ describe 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' do
87
+ let(:reg_key) { 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' }
88
+ let(:original_set) { registry.key_exists?(reg_key) }
89
+
88
90
  it "returns true if the registry key exists" do
89
- pending "Permissions are limited to 'TrustedInstaller' by default"
90
- skip "Found existing registry keys" if registry_unsafe?
91
- registry.create_key('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired', false)
91
+ skip 'found existing registry key' if original_set
92
+ registry.create_key(reg_key, false)
92
93
 
93
94
  expect(recipe.reboot_pending?).to be_truthy
94
95
  end
95
96
 
96
97
  after do
97
- unless registry_unsafe?
98
- registry.delete_key('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootRequired', false)
98
+ unless original_set
99
+ registry.delete_key(reg_key, false)
99
100
  end
100
101
  end
101
102
  end
102
103
 
103
- describe 'HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile\Flags' do
104
- it "returns true if the registry key exists" do
105
- skip "Found existing registry keys" if registry_unsafe?
106
- registry.create_key('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile', true)
107
- registry.set_value('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile',
108
- { :name => 'Flags', :type => :dword, :data => 3 })
109
-
110
- expect(recipe.reboot_pending?).to be_truthy
111
- end
112
-
113
- after do
114
- unless registry_unsafe?
115
- registry.delete_value('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile', { :name => 'Flags' })
116
- registry.delete_key('HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile', false)
117
- end
104
+ describe "when there is nothing to indicate a reboot is pending" do
105
+ it "should return false" do
106
+ skip 'reboot pending' if @any_flag.any? { |_,v| v == true }
107
+ expect(recipe.reboot_pending?).to be_falsey
118
108
  end
119
109
  end
120
110
  end