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
@@ -31,5 +31,5 @@ require 'chef/daemon'
31
31
  require 'chef/run_status'
32
32
  require 'chef/handler'
33
33
  require 'chef/handler/json_file'
34
-
34
+ require 'chef/event_dispatch/dsl'
35
35
  require 'chef/chef_class'
@@ -382,7 +382,7 @@ class Chef
382
382
 
383
383
  def emit_warnings
384
384
  if Chef::Config[:chef_gem_compile_time]
385
- Chef::Log.deprecation "setting chef_gem_compile_time to true is deprecated"
385
+ Chef.log_deprecation "setting chef_gem_compile_time to true is deprecated"
386
386
  end
387
387
  end
388
388
 
@@ -49,6 +49,24 @@ class Chef::Application::Apply < Chef::Application
49
49
  :description => "Load attributes from a JSON file or URL",
50
50
  :proc => nil
51
51
 
52
+ option :force_logger,
53
+ :long => "--force-logger",
54
+ :description => "Use logger output instead of formatter output",
55
+ :boolean => true,
56
+ :default => false
57
+
58
+ option :force_formatter,
59
+ :long => "--force-formatter",
60
+ :description => "Use formatter output instead of logger output",
61
+ :boolean => true,
62
+ :default => false
63
+
64
+ option :formatter,
65
+ :short => "-F FORMATTER",
66
+ :long => "--format FORMATTER",
67
+ :description => "output format to use",
68
+ :proc => lambda { |format| Chef::Config.add_formatter(format) }
69
+
52
70
  option :log_level,
53
71
  :short => "-l LEVEL",
54
72
  :long => "--log_level LEVEL",
@@ -82,7 +100,7 @@ class Chef::Application::Apply < Chef::Application
82
100
  option :color,
83
101
  :long => '--[no-]color',
84
102
  :boolean => true,
85
- :default => !Chef::Platform.windows?,
103
+ :default => true,
86
104
  :description => "Use colored output, defaults to enabled"
87
105
 
88
106
  option :minimal_ohai,
@@ -58,8 +58,8 @@ class Chef::Application::Client < Chef::Application
58
58
  option :color,
59
59
  :long => '--[no-]color',
60
60
  :boolean => true,
61
- :default => !Chef::Platform.windows?,
62
- :description => "Use colored output, defaults to false on Windows, true otherwise"
61
+ :default => true,
62
+ :description => "Use colored output, defaults to enabled"
63
63
 
64
64
  option :log_level,
65
65
  :short => "-l LEVEL",
@@ -160,6 +160,12 @@ class Chef::Application::Client < Chef::Application
160
160
  :description => "Set the client key file location",
161
161
  :proc => nil
162
162
 
163
+ option :named_run_list,
164
+ :short => "-n NAMED_RUN_LIST",
165
+ :long => "--named-run-list NAMED_RUN_LIST",
166
+ :description => "Use a policyfile's named run list instead of the default run list",
167
+ :default => nil
168
+
163
169
  option :environment,
164
170
  :short => '-E ENVIRONMENT',
165
171
  :long => '--environment ENVIRONMENT',
@@ -449,9 +455,9 @@ class Chef::Application::Client < Chef::Application
449
455
  end
450
456
 
451
457
  def audit_mode_settings_explanation
452
- "\n* To enable audit mode after converge, use command line option `--audit-mode enabled` or set `:audit_mode = :enabled` in your config file." +
453
- "\n* To disable audit mode, use command line option `--audit-mode disabled` or set `:audit_mode = :disabled` in your config file." +
454
- "\n* To only run audit mode, use command line option `--audit-mode audit-only` or set `:audit_mode = :audit_only` in your config file." +
458
+ "\n* To enable audit mode after converge, use command line option `--audit-mode enabled` or set `audit_mode :enabled` in your config file." +
459
+ "\n* To disable audit mode, use command line option `--audit-mode disabled` or set `audit_mode :disabled` in your config file." +
460
+ "\n* To only run audit mode, use command line option `--audit-mode audit-only` or set `audit_mode :audit_only` in your config file." +
455
461
  "\nAudit mode is disabled by default."
456
462
  end
457
463
 
@@ -44,8 +44,8 @@ class Chef::Application::Knife < Chef::Application
44
44
  option :color,
45
45
  :long => '--[no-]color',
46
46
  :boolean => true,
47
- :default => !Chef::Platform.windows?,
48
- :description => "Use colored output, defaults to false on Windows, true otherwise"
47
+ :default => true,
48
+ :description => "Use colored output, defaults to enabled"
49
49
 
50
50
  option :environment,
51
51
  :short => "-E ENVIRONMENT",
@@ -214,7 +214,7 @@ class Chef::Application::Solo < Chef::Application
214
214
  FileUtils.mkdir_p(recipes_path)
215
215
  tarball_path = File.join(recipes_path, 'recipes.tgz')
216
216
  fetch_recipe_tarball(Chef::Config[:recipe_url], tarball_path)
217
- Chef::Mixin::Command.run_command(:command => "tar zxvf #{tarball_path} -C #{recipes_path}")
217
+ Mixlib::ShellOut.new("tar zxvf #{tarball_path} -C #{recipes_path}").run_command
218
218
  end
219
219
 
220
220
  # json_attribs shuld be fetched after recipe_url tarball is unpacked.
@@ -78,7 +78,7 @@ class Chef
78
78
 
79
79
  raise ArgumentError, "Service definition is not provided" if service_options.nil?
80
80
 
81
- required_options = [:service_name, :service_display_name, :service_name, :service_description, :service_file_path]
81
+ required_options = [:service_name, :service_display_name, :service_description, :service_file_path]
82
82
 
83
83
  required_options.each do |req_option|
84
84
  if !service_options.has_key?(req_option)
@@ -92,6 +92,8 @@ class Chef
92
92
  @service_file_path = service_options[:service_file_path]
93
93
  @service_start_name = service_options[:run_as_user]
94
94
  @password = service_options[:run_as_password]
95
+ @delayed_start = service_options[:delayed_start]
96
+ @dependencies = service_options[:dependencies]
95
97
  end
96
98
 
97
99
  def run(params = ARGV)
@@ -113,17 +115,22 @@ class Chef
113
115
  cmd = "\"#{ruby}\" \"#{@service_file_path}\" #{opts}".gsub(File::SEPARATOR, File::ALT_SEPARATOR)
114
116
 
115
117
  ::Win32::Service.new(
116
- :service_name => @service_name,
117
- :display_name => @service_display_name,
118
- :description => @service_description,
119
- # Prior to 0.8.5, win32-service creates interactive services by default,
120
- # and we don't want that, so we need to override the service type.
121
- :service_type => ::Win32::Service::SERVICE_WIN32_OWN_PROCESS,
122
- :start_type => ::Win32::Service::SERVICE_AUTO_START,
123
- :binary_path_name => cmd,
124
- :service_start_name => @service_start_name,
125
- :password => @password,
126
- )
118
+ :service_name => @service_name,
119
+ :display_name => @service_display_name,
120
+ :description => @service_description,
121
+ # Prior to 0.8.5, win32-service creates interactive services by default,
122
+ # and we don't want that, so we need to override the service type.
123
+ :service_type => ::Win32::Service::SERVICE_WIN32_OWN_PROCESS,
124
+ :start_type => ::Win32::Service::SERVICE_AUTO_START,
125
+ :binary_path_name => cmd,
126
+ :service_start_name => @service_start_name,
127
+ :password => @password,
128
+ :dependencies => @dependencies
129
+ )
130
+ ::Win32::Service.configure(
131
+ :service_name => @service_name,
132
+ :delayed_start => @delayed_start
133
+ ) unless @delayed_start.nil?
127
134
  puts "Service '#{@service_name}' has successfully been installed."
128
135
  end
129
136
  when 'status'
@@ -52,7 +52,14 @@ class Chef
52
52
  #
53
53
  attr_reader :run_context
54
54
 
55
+ # Register an event handler with user specified block
55
56
  #
57
+ # @return[Chef::EventDispatch::Base] handler object
58
+ def event_handler(&block)
59
+ dsl = Chef::EventDispatch::DSL.new('Chef client DSL')
60
+ dsl.instance_eval(&block)
61
+ end
62
+
56
63
  # Get the array of providers associated with a resource_name for the current node
57
64
  #
58
65
  # @param resource_name [Symbol] name of the resource as a symbol
@@ -183,6 +190,45 @@ class Chef
183
190
  def resource_handler_map
184
191
  @resource_handler_map ||= Chef::Platform::ResourceHandlerMap.instance
185
192
  end
193
+
194
+ #
195
+ # Emit a deprecation message.
196
+ #
197
+ # @param message The message to send.
198
+ # @param location The location. Defaults to the caller who called you (since
199
+ # generally the person who triggered the check is the one that needs to be
200
+ # fixed).
201
+ #
202
+ # @example
203
+ # Chef.deprecation("Deprecated!")
204
+ #
205
+ # @api private this will likely be removed in favor of an as-yet unwritten
206
+ # `Chef.log`
207
+ def log_deprecation(message, location=nil)
208
+ if !location
209
+ # Pick the first caller that is *not* part of the Chef gem, that's the
210
+ # thing the user wrote.
211
+ chef_gem_path = File.expand_path("../..", __FILE__)
212
+ caller(0..10).each do |c|
213
+ if !c.start_with?(chef_gem_path)
214
+ location = c
215
+ break
216
+ end
217
+ end
218
+ end
219
+ # `run_context.events` is the primary deprecation target if we're in a
220
+ # run. If we are not yet in a run, print to `Chef::Log`.
221
+ if run_context && run_context.events
222
+ run_context.events.deprecation(message, location)
223
+ else
224
+ Chef::Log.deprecation(message, location)
225
+ end
226
+ end
227
+ end
228
+
229
+ # @api private Only for test dependency injection; not evenly implemented as yet.
230
+ def self.path_to(path)
231
+ path
186
232
  end
187
233
 
188
234
  reset!
@@ -111,7 +111,7 @@ class Chef
111
111
  #
112
112
  def initialize(chef_config = Chef::Config, cwd = Dir.pwd, options = {}, ui = nil)
113
113
  @chef_config = chef_config
114
- @cwd = cwd
114
+ @cwd = File.expand_path(cwd)
115
115
  @cookbook_version = options[:cookbook_version]
116
116
 
117
117
  if @chef_config[:repo_mode] == 'everything' && is_hosted? && !ui.nil?
@@ -166,34 +166,37 @@ class Chef
166
166
  # server_path('/home/jkeiser/chef_repo/cookbooks/blah') == '/cookbooks/blah'
167
167
  # server_path('/home/*/chef_repo/cookbooks/blah') == nil
168
168
  #
169
- # If there are multiple paths (cookbooks, roles, data bags, etc. can all
170
- # have separate paths), and cwd+the path reaches into one of them, we will
171
- # return a path relative to that. Otherwise we will return a path to
172
- # chef_repo.
169
+ # If there are multiple different, manually specified paths to object locations
170
+ # (cookbooks, roles, data bags, etc. can all have separate paths), and cwd+the
171
+ # path reaches into one of them, we will return a path relative to the first
172
+ # one to match it. Otherwise we expect the path provided to be to the chef
173
+ # repo path itself. Paths that are not available on the server are not supported.
173
174
  #
174
175
  # Globs are allowed as well, but globs outside server paths are NOT
175
176
  # (presently) supported. See above examples. TODO support that.
176
177
  #
177
178
  # If the path does not reach into ANY specified directory, nil is returned.
178
179
  def server_path(file_path)
179
- pwd = File.expand_path(Dir.pwd)
180
- absolute_pwd = Chef::ChefFS::PathUtils.realest_path(File.expand_path(file_path, pwd))
180
+ target_path = Chef::ChefFS::PathUtils.realest_path(file_path, @cwd)
181
181
 
182
182
  # Check all object paths (cookbooks_dir, data_bags_dir, etc.)
183
+ # These are either manually specified by the user or autogenerated relative
184
+ # to chef_repo_path.
183
185
  object_paths.each_pair do |name, paths|
184
186
  paths.each do |path|
185
- realest_path = Chef::ChefFS::PathUtils.realest_path(path)
186
- if PathUtils.descendant_of?(absolute_pwd, realest_path)
187
- relative_path = Chef::ChefFS::PathUtils::relative_to(absolute_pwd, realest_path)
188
- return relative_path == '.' ? "/#{name}" : "/#{name}/#{relative_path}"
187
+ object_abs_path = Chef::ChefFS::PathUtils.realest_path(path, @cwd)
188
+ if relative_path = PathUtils.descendant_path(target_path, object_abs_path)
189
+ return Chef::ChefFS::PathUtils.join("/#{name}", relative_path)
189
190
  end
190
191
  end
191
192
  end
192
193
 
193
194
  # Check chef_repo_path
194
195
  Array(@chef_config[:chef_repo_path]).flatten.each do |chef_repo_path|
195
- realest_chef_repo_path = Chef::ChefFS::PathUtils.realest_path(chef_repo_path)
196
- if absolute_pwd == realest_chef_repo_path
196
+ # We're using realest_path here but we really don't need to - we can just expand the
197
+ # path and use realpath because a repo_path if provided *must* exist.
198
+ realest_chef_repo_path = Chef::ChefFS::PathUtils.realest_path(chef_repo_path, @cwd)
199
+ if Chef::ChefFS::PathUtils.os_path_eq?(target_path, realest_chef_repo_path)
197
200
  return '/'
198
201
  end
199
202
  end
@@ -201,15 +204,10 @@ class Chef
201
204
  nil
202
205
  end
203
206
 
204
- # The current directory, relative to server root
207
+ # The current directory, relative to server root. This is a case-sensitive server path.
208
+ # It only exists if the current directory is a child of one of the recognized object_paths below.
205
209
  def base_path
206
- @base_path ||= begin
207
- if @chef_config[:chef_repo_path]
208
- server_path(File.expand_path(@cwd))
209
- else
210
- nil
211
- end
212
- end
210
+ @base_path ||= server_path(@cwd)
213
211
  end
214
212
 
215
213
  # Print the given server path, relative to the current directory
@@ -217,10 +215,10 @@ class Chef
217
215
  server_path = entry.path
218
216
  if base_path && server_path[0,base_path.length] == base_path
219
217
  if server_path == base_path
220
- return "."
221
- elsif server_path[base_path.length,1] == "/"
218
+ return '.'
219
+ elsif server_path[base_path.length,1] == '/'
222
220
  return server_path[base_path.length + 1, server_path.length - base_path.length - 1]
223
- elsif base_path == "/" && server_path[0,1] == "/"
221
+ elsif base_path == '/' && server_path[0,1] == '/'
224
222
  return server_path[1, server_path.length - 1]
225
223
  end
226
224
  end
@@ -13,11 +13,13 @@ class Chef
13
13
  'validator' => false,
14
14
  'chef_type' => 'client'
15
15
  }
16
+ # Handle the fact that admin/validator have changed type from string -> boolean
17
+ client['admin'] = (client['admin'] == 'true') if client['admin'].is_a?(String)
18
+ client['validator'] = (client['validator'] == 'true') if client['validator'].is_a?(String)
16
19
  if entry.respond_to?(:org) && entry.org
17
20
  defaults['orgname'] = entry.org
18
21
  end
19
22
  result = normalize_hash(client, defaults)
20
- # You can NOT send json_class, or it will fail
21
23
  result.delete('json_class')
22
24
  result
23
25
  end
@@ -72,7 +72,7 @@ class Chef
72
72
  def could_match_children?(path)
73
73
  return false if path == '' # Empty string is not a path
74
74
 
75
- argument_is_absolute = !!(path =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
75
+ argument_is_absolute = Chef::ChefFS::PathUtils::is_absolute?(path)
76
76
  return false if is_absolute != argument_is_absolute
77
77
  path = path[1,path.length-1] if argument_is_absolute
78
78
 
@@ -111,7 +111,7 @@ class Chef
111
111
  #
112
112
  # This method assumes +could_match_children?(path)+ is +true+.
113
113
  def exact_child_name_under(path)
114
- path = path[1,path.length-1] if !!(path =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
114
+ path = path[1,path.length-1] if Chef::ChefFS::PathUtils::is_absolute?(path)
115
115
  dirs_in_path = Chef::ChefFS::PathUtils::split(path).length
116
116
  return nil if exact_parts.length <= dirs_in_path
117
117
  return exact_parts[dirs_in_path]
@@ -149,7 +149,7 @@ class Chef
149
149
  # abc/*/def.match?('abc/foo/def') == true
150
150
  # abc/*/def.match?('abc/foo') == false
151
151
  def match?(path)
152
- argument_is_absolute = !!(path =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
152
+ argument_is_absolute = Chef::ChefFS::PathUtils::is_absolute?(path)
153
153
  return false if is_absolute != argument_is_absolute
154
154
  path = path[1,path.length-1] if argument_is_absolute
155
155
  !!regexp.match(path)
@@ -160,17 +160,6 @@ class Chef
160
160
  pattern
161
161
  end
162
162
 
163
- # Given a relative file pattern and a directory, makes a new file pattern
164
- # starting with the directory.
165
- #
166
- # FilePattern.relative_to('/usr/local', 'bin/*grok') == FilePattern.new('/usr/local/bin/*grok')
167
- #
168
- # BUG: this does not support patterns starting with <tt>..</tt>
169
- def self.relative_to(dir, pattern)
170
- return FilePattern.new(pattern) if pattern =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/
171
- FilePattern.new(Chef::ChefFS::PathUtils::join(dir, pattern))
172
- end
173
-
174
163
  private
175
164
 
176
165
  def regexp
@@ -195,7 +184,7 @@ class Chef
195
184
 
196
185
  def calculate
197
186
  if !@regexp
198
- @is_absolute = !!(@pattern =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
187
+ @is_absolute = Chef::ChefFS::PathUtils::is_absolute?(@pattern)
199
188
 
200
189
  full_regexp_parts = []
201
190
  normalized_parts = []
@@ -28,10 +28,9 @@ class Chef
28
28
  parent.parent.child(name).api_path
29
29
  end
30
30
 
31
- def child(name)
31
+ def make_child_entry(name, exists = nil)
32
32
  result = @children.select { |child| child.name == name }.first if @children
33
- result ||= can_have_child?(name, false) ?
34
- AclEntry.new(name, self) : NonexistentFSObject.new(name, self)
33
+ result || AclEntry.new(name, self, exists)
35
34
  end
36
35
 
37
36
  def can_have_child?(name, is_dir)
@@ -42,7 +41,7 @@ class Chef
42
41
  if @children.nil?
43
42
  # Grab the ACTUAL children (/nodes, /containers, etc.) and get their names
44
43
  names = parent.parent.child(name).children.map { |child| child.dir? ? "#{child.name}.json" : child.name }
45
- @children = names.map { |name| AclEntry.new(name, self, true) }
44
+ @children = names.map { |name| make_child_entry(name, true) }
46
45
  end
47
46
  @children
48
47
  end
@@ -40,8 +40,12 @@ class Chef
40
40
  parent.api_path
41
41
  end
42
42
 
43
+ def make_child_entry(name)
44
+ children.select { |child| child.name == name }.first
45
+ end
46
+
43
47
  def can_have_child?(name, is_dir)
44
- is_dir ? ENTITY_TYPES.include(name) : name == 'organization.json'
48
+ is_dir ? ENTITY_TYPES.include?(name) : name == 'organization.json'
45
49
  end
46
50
 
47
51
  def children
@@ -31,11 +31,6 @@ class Chef
31
31
  true
32
32
  end
33
33
 
34
- # Override child(name) to provide a child object by name without the network read
35
- def child(name)
36
- children.select { |child| child.name == name }.first || NonexistentFSObject.new(name, self)
37
- end
38
-
39
34
  def can_have_child?(name, is_dir)
40
35
  true
41
36
  end
@@ -95,7 +95,10 @@ class Chef
95
95
  # directly perform a network request to retrieve the y.json data bag. No
96
96
  # network request was necessary to retrieve
97
97
  def child(name)
98
- NonexistentFSObject.new(name, self)
98
+ if can_have_child?(name, true) || can_have_child?(name, false)
99
+ result = make_child_entry(name)
100
+ end
101
+ result || NonexistentFSObject.new(name, self)
99
102
  end
100
103
 
101
104
  # Override children to report your *actual* list of children as an array.
@@ -171,7 +174,7 @@ class Chef
171
174
 
172
175
  # Important directory attributes: name, parent, path, root
173
176
  # Overridable attributes: dir?, child(name), path_for_printing
174
- # Abstract: read, write, delete, children, can_have_child?, create_child, compare_to
177
+ # Abstract: read, write, delete, children, can_have_child?, create_child, compare_to, make_child_entry
175
178
  end # class BaseFsObject
176
179
  end
177
180
  end