chef 12.4.3-universal-mingw32 → 12.5.1-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
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