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
@@ -82,6 +82,21 @@ class Chef
82
82
  qualified_recipe
83
83
  end
84
84
  end
85
+
86
+ # Get an array of strings of both fully-qualified and unexpanded recipe names
87
+ # in response to chef/chef#3767
88
+ # Chef-13 will revert to the behaviour of just including the fully-qualified name
89
+ #
90
+ # @return [Array] Array of strings with fully-qualified and unexpanded recipe names
91
+ def with_duplicate_names
92
+ self.map do |recipe_name|
93
+ if recipe_name.include?('::')
94
+ recipe_name
95
+ else
96
+ [recipe_name, "#{recipe_name}::default"]
97
+ end
98
+ end.flatten
99
+ end
85
100
  end
86
101
  end
87
102
  end
@@ -87,27 +87,8 @@ class Chef
87
87
  # Either acquire() or test() methods should be called in order to
88
88
  # get the ownership of run_lock.
89
89
  def test
90
- # ensure the runlock_file path exists
91
- create_path(File.dirname(runlock_file))
92
- @runlock = File.open(runlock_file,'a+')
93
-
94
- if Chef::Platform.windows?
95
- acquire_win32_mutex
96
- else
97
- # If we support FD_CLOEXEC, then use it.
98
- # NB: ruby-2.0.0-p195 sets FD_CLOEXEC by default, but not
99
- # ruby-1.8.7/1.9.3
100
- if Fcntl.const_defined?('F_SETFD') && Fcntl.const_defined?('FD_CLOEXEC')
101
- runlock.fcntl(Fcntl::F_SETFD, runlock.fcntl(Fcntl::F_GETFD, 0) | Fcntl::FD_CLOEXEC)
102
- end
103
- # Flock will return 0 if it can acquire the lock otherwise it
104
- # will return false
105
- if runlock.flock(File::LOCK_NB|File::LOCK_EX) == 0
106
- true
107
- else
108
- false
109
- end
110
- end
90
+ create_lock
91
+ acquire_lock
111
92
  end
112
93
 
113
94
  #
@@ -147,6 +128,34 @@ class Chef
147
128
  end
148
129
  end
149
130
 
131
+ # @api private solely for race condition tests
132
+ def create_lock
133
+ # ensure the runlock_file path exists
134
+ create_path(File.dirname(runlock_file))
135
+ @runlock = File.open(runlock_file,'a+')
136
+ end
137
+
138
+ # @api private solely for race condition tests
139
+ def acquire_lock
140
+ if Chef::Platform.windows?
141
+ acquire_win32_mutex
142
+ else
143
+ # If we support FD_CLOEXEC, then use it.
144
+ # NB: ruby-2.0.0-p195 sets FD_CLOEXEC by default, but not
145
+ # ruby-1.8.7/1.9.3
146
+ if Fcntl.const_defined?('F_SETFD') && Fcntl.const_defined?('FD_CLOEXEC')
147
+ runlock.fcntl(Fcntl::F_SETFD, runlock.fcntl(Fcntl::F_GETFD, 0) | Fcntl::FD_CLOEXEC)
148
+ end
149
+ # Flock will return 0 if it can acquire the lock otherwise it
150
+ # will return false
151
+ if runlock.flock(File::LOCK_NB|File::LOCK_EX) == 0
152
+ true
153
+ else
154
+ false
155
+ end
156
+ end
157
+ end
158
+
150
159
  private
151
160
 
152
161
  def reset
@@ -29,6 +29,10 @@ class Chef::Util::Powershell
29
29
  "New-Object System.Management.Automation.PSCredential('#{@username}',('#{encrypt(@password)}' | ConvertTo-SecureString))"
30
30
  end
31
31
 
32
+ def to_s
33
+ to_psobject
34
+ end
35
+
32
36
  private
33
37
 
34
38
  def encrypt(str)
@@ -15,42 +15,10 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
- #requires: gem install windows-pr
19
- require 'windows/api'
20
- require 'windows/error'
21
- require 'windows/handle'
22
- require 'windows/unicode'
23
- require 'windows/msvcrt/buffer'
24
- require 'windows/msvcrt/string'
25
- require 'windows/network/management'
26
18
 
27
19
  class Chef
28
20
  class Util
29
21
  class Windows
30
- protected
31
-
32
- include ::Windows::Error
33
- include ::Windows::Unicode
34
- include ::Windows::MSVCRT::Buffer
35
- include ::Windows::MSVCRT::String
36
- include ::Windows::Network::Management
37
-
38
- PTR_SIZE = 4 #XXX 64-bit
39
-
40
- def lpwstr_to_s(buffer, offset)
41
- str = 0.chr * (256 * 2) #XXX unhardcode this length (*2 for WCHAR)
42
- wcscpy str, buffer[offset*PTR_SIZE,PTR_SIZE].unpack('L')[0]
43
- wide_to_multi str
44
- end
45
-
46
- def dword_to_i(buffer, offset)
47
- buffer[offset*PTR_SIZE,PTR_SIZE].unpack('i')[0] || 0
48
- end
49
-
50
- #return pointer for use with pack('L')
51
- def str_to_ptr(v)
52
- [v].pack('p*').unpack('L')[0]
53
- end
54
22
  end
55
23
  end
56
24
  end
@@ -1,106 +1,85 @@
1
- #
2
- # Author:: Doug MacEachern (<dougm@vmware.com>)
3
- # Copyright:: Copyright (c) 2010 VMware, 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/util/windows'
20
-
21
- #wrapper around a subset of the NetGroup* APIs.
22
- #nothing Chef specific, but not complete enough to be its own gem, so util for now.
23
- class Chef::Util::Windows::NetGroup < Chef::Util::Windows
24
-
25
- private
26
-
27
- def pack_str(s)
28
- [str_to_ptr(s)].pack('L')
29
- end
30
-
31
- def modify_members(members, func)
32
- buffer = 0.chr * (members.size * PTR_SIZE)
33
- members.each_with_index do |member,offset|
34
- buffer[offset*PTR_SIZE,PTR_SIZE] = pack_str(multi_to_wide(member))
35
- end
36
- rc = func.call(nil, @name, 3, buffer, members.size)
37
- if rc != NERR_Success
38
- raise ArgumentError, get_last_error(rc)
39
- end
40
- end
41
-
42
- public
43
-
44
- def initialize(groupname)
45
- @name = multi_to_wide(groupname)
46
- end
47
-
48
- def local_get_members
49
- group_members = []
50
- handle = 0.chr * PTR_SIZE
51
- rc = ERROR_MORE_DATA
52
-
53
- while rc == ERROR_MORE_DATA
54
- ptr = 0.chr * PTR_SIZE
55
- nread = 0.chr * PTR_SIZE
56
- total = 0.chr * PTR_SIZE
57
-
58
- rc = NetLocalGroupGetMembers.call(nil, @name, 0, ptr, -1,
59
- nread, total, handle)
60
- if (rc == NERR_Success) || (rc == ERROR_MORE_DATA)
61
- ptr = ptr.unpack('L')[0]
62
- nread = nread.unpack('i')[0]
63
- members = 0.chr * (nread * PTR_SIZE ) #nread * sizeof(LOCALGROUP_MEMBERS_INFO_0)
64
- memcpy(members, ptr, members.size)
65
-
66
- # 1 pointer field in LOCALGROUP_MEMBERS_INFO_0, offset 0 is lgrmi0_sid
67
- nread.times do |i|
68
- sid_address = members[i * PTR_SIZE, PTR_SIZE].unpack('L')[0]
69
- sid_ptr = FFI::Pointer.new(sid_address)
70
- member_sid = Chef::ReservedNames::Win32::Security::SID.new(sid_ptr)
71
- group_members << member_sid.to_s
72
- end
73
- NetApiBufferFree(ptr)
74
- else
75
- raise ArgumentError, get_last_error(rc)
76
- end
77
- end
78
- group_members
79
- end
80
-
81
- def local_add
82
- rc = NetLocalGroupAdd.call(nil, 0, pack_str(@name), nil)
83
- if rc != NERR_Success
84
- raise ArgumentError, get_last_error(rc)
85
- end
86
- end
87
-
88
- def local_set_members(members)
89
- modify_members(members, NetLocalGroupSetMembers)
90
- end
91
-
92
- def local_add_members(members)
93
- modify_members(members, NetLocalGroupAddMembers)
94
- end
95
-
96
- def local_delete_members(members)
97
- modify_members(members, NetLocalGroupDelMembers)
98
- end
99
-
100
- def local_delete
101
- rc = NetLocalGroupDel.call(nil, @name)
102
- if rc != NERR_Success
103
- raise ArgumentError, get_last_error(rc)
104
- end
105
- end
106
- end
1
+ #
2
+ # Author:: Doug MacEachern (<dougm@vmware.com>)
3
+ # Copyright:: Copyright (c) 2010 VMware, 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/util/windows'
20
+ require 'chef/win32/net'
21
+
22
+ #wrapper around a subset of the NetGroup* APIs.
23
+ class Chef::Util::Windows::NetGroup
24
+
25
+ private
26
+
27
+ def groupname
28
+ @groupname
29
+ end
30
+
31
+ public
32
+
33
+ def initialize(groupname)
34
+ @groupname = groupname
35
+ end
36
+
37
+ def local_get_members
38
+ begin
39
+ Chef::ReservedNames::Win32::NetUser::net_local_group_get_members(nil, groupname)
40
+ rescue Chef::Exceptions::Win32NetAPIError => e
41
+ raise ArgumentError, e.msg
42
+ end
43
+ end
44
+
45
+ def local_add
46
+ begin
47
+ Chef::ReservedNames::Win32::NetUser::net_local_group_add(nil, groupname)
48
+ rescue Chef::Exceptions::Win32NetAPIError => e
49
+ raise ArgumentError, e.msg
50
+ end
51
+ end
52
+
53
+ def local_set_members(members)
54
+ begin
55
+ Chef::ReservedNames::Win32::NetUser::net_local_group_set_members(nil, groupname, members)
56
+ rescue Chef::Exceptions::Win32NetAPIError => e
57
+ raise ArgumentError, e.msg
58
+ end
59
+ end
60
+
61
+ def local_add_members(members)
62
+ begin
63
+ Chef::ReservedNames::Win32::NetUser::net_local_group_add_members(nil, groupname, members)
64
+ rescue Chef::Exceptions::Win32NetAPIError => e
65
+ raise ArgumentError, e.msg
66
+ end
67
+ end
68
+
69
+ def local_delete_members(members)
70
+ begin
71
+ Chef::ReservedNames::Win32::NetUser::net_local_group_del_members(nil, groupname, members)
72
+ rescue Chef::Exceptions::Win32NetAPIError => e
73
+ raise ArgumentError, e.msg
74
+ end
75
+
76
+ end
77
+
78
+ def local_delete
79
+ begin
80
+ Chef::ReservedNames::Win32::NetUser::net_local_group_del(nil, groupname)
81
+ rescue Chef::Exceptions::Win32NetAPIError => e
82
+ raise ArgumentError, e.msg
83
+ end
84
+ end
85
+ end
@@ -21,61 +21,18 @@
21
21
  #see also cmd.exe: net use /?
22
22
 
23
23
  require 'chef/util/windows'
24
+ require 'chef/win32/net'
24
25
 
25
26
  class Chef::Util::Windows::NetUse < Chef::Util::Windows
26
-
27
- private
28
-
29
- USE_NOFORCE = 0
30
- USE_FORCE = 1
31
- USE_LOTS_OF_FORCE = 2 #every windows API should support this flag
32
-
33
- USE_INFO_2 = [
34
- [:local, nil],
35
- [:remote, nil],
36
- [:password, nil],
37
- [:status, 0],
38
- [:asg_type, 0],
39
- [:refcount, 0],
40
- [:usecount, 0],
41
- [:username, nil],
42
- [:domainname, nil]
43
- ]
44
-
45
- USE_INFO_2_TEMPLATE =
46
- USE_INFO_2.collect { |field| field[1].class == Fixnum ? 'i' : 'L' }.join
47
-
48
- SIZEOF_USE_INFO_2 = #sizeof(USE_INFO_2)
49
- USE_INFO_2.inject(0) do |sum, item|
50
- sum + (item[1].class == Fixnum ? 4 : PTR_SIZE)
51
- end
52
-
53
- def use_info_2(args)
54
- USE_INFO_2.collect { |field|
55
- args.include?(field[0]) ? args[field[0]] : field[1]
56
- }
57
- end
58
-
59
- def use_info_2_pack(use)
60
- use.collect { |v|
61
- v.class == Fixnum ? v : str_to_ptr(multi_to_wide(v))
62
- }.pack(USE_INFO_2_TEMPLATE)
27
+ def initialize(localname)
28
+ @use_name = localname
63
29
  end
64
30
 
65
- def use_info_2_unpack(buffer)
66
- use = Hash.new
67
- USE_INFO_2.each_with_index do |field,offset|
68
- use[field[0]] = field[1].class == Fixnum ?
69
- dword_to_i(buffer, offset) : lpwstr_to_s(buffer, offset)
31
+ def to_ui2_struct(use_info)
32
+ use_info.inject({}) do |memo, (k,v)|
33
+ memo["ui2_#{k}".to_sym] = v
34
+ memo
70
35
  end
71
- use
72
- end
73
-
74
- public
75
-
76
- def initialize(localname)
77
- @localname = localname
78
- @name = multi_to_wide(localname)
79
36
  end
80
37
 
81
38
  def add(args)
@@ -84,38 +41,45 @@ class Chef::Util::Windows::NetUse < Chef::Util::Windows
84
41
  args = Hash.new
85
42
  args[:remote] = remote
86
43
  end
87
- args[:local] ||= @localname
88
- use = use_info_2(args)
89
- buffer = use_info_2_pack(use)
90
- rc = NetUseAdd.call(nil, 2, buffer, nil)
91
- if rc != NERR_Success
92
- raise ArgumentError, get_last_error(rc)
44
+ args[:local] ||= use_name
45
+ ui2_hash = to_ui2_struct(args)
46
+
47
+ begin
48
+ Chef::ReservedNames::Win32::Net.net_use_add_l2(nil, ui2_hash)
49
+ rescue Chef::Exceptions::Win32APIError => e
50
+ raise ArgumentError, e
93
51
  end
94
52
  end
95
53
 
96
- def get_info
97
- ptr = 0.chr * PTR_SIZE
98
- rc = NetUseGetInfo.call(nil, @name, 2, ptr)
99
-
100
- if rc != NERR_Success
101
- raise ArgumentError, get_last_error(rc)
54
+ def from_use_info_struct(ui2_hash)
55
+ ui2_hash.inject({}) do |memo, (k,v)|
56
+ memo[k.to_s.sub('ui2_', '').to_sym] = v
57
+ memo
102
58
  end
59
+ end
103
60
 
104
- ptr = ptr.unpack('L')[0]
105
- buffer = 0.chr * SIZEOF_USE_INFO_2
106
- memcpy(buffer, ptr, buffer.size)
107
- NetApiBufferFree(ptr)
108
- use_info_2_unpack(buffer)
61
+ def get_info
62
+ begin
63
+ ui2 = Chef::ReservedNames::Win32::Net.net_use_get_info_l2(nil, use_name)
64
+ from_use_info_struct(ui2)
65
+ rescue Chef::Exceptions::Win32APIError => e
66
+ raise ArgumentError, e
67
+ end
109
68
  end
110
69
 
111
70
  def device
112
71
  get_info()[:remote]
113
72
  end
114
- #XXX should we use some FORCE here?
73
+
115
74
  def delete
116
- rc = NetUseDel.call(nil, @name, USE_NOFORCE)
117
- if rc != NERR_Success
118
- raise ArgumentError, get_last_error(rc)
75
+ begin
76
+ Chef::ReservedNames::Win32::Net.net_use_del(nil, use_name, :use_noforce)
77
+ rescue Chef::Exceptions::Win32APIError => e
78
+ raise ArgumentError, e
119
79
  end
120
80
  end
81
+
82
+ def use_name
83
+ @use_name
84
+ end
121
85
  end