chef 16.5.64 → 16.8.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (317) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -14
  3. data/README.md +1 -1
  4. data/Rakefile +21 -14
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +3 -2
  7. data/lib/chef/application.rb +2 -2
  8. data/lib/chef/application/base.rb +1 -1
  9. data/lib/chef/application/client.rb +7 -2
  10. data/lib/chef/application/knife.rb +1 -1
  11. data/lib/chef/application/solo.rb +1 -1
  12. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  13. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  14. data/lib/chef/chef_fs/file_pattern.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  16. data/lib/chef/client.rb +6 -32
  17. data/lib/chef/compliance/default_attributes.rb +89 -0
  18. data/lib/chef/compliance/fetcher/automate.rb +69 -0
  19. data/lib/chef/compliance/fetcher/chef_server.rb +134 -0
  20. data/lib/chef/compliance/reporter/automate.rb +202 -0
  21. data/lib/chef/compliance/reporter/chef_server_automate.rb +94 -0
  22. data/lib/chef/compliance/reporter/compliance_enforcer.rb +20 -0
  23. data/lib/chef/compliance/reporter/json_file.rb +19 -0
  24. data/lib/chef/compliance/runner.rb +261 -0
  25. data/lib/chef/cookbook/gem_installer.rb +1 -1
  26. data/lib/chef/cookbook_manifest.rb +2 -1
  27. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  28. data/lib/chef/cookbook_version.rb +2 -5
  29. data/lib/chef/data_collector.rb +1 -1
  30. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  31. data/lib/chef/environment.rb +1 -1
  32. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  33. data/lib/chef/exceptions.rb +5 -1
  34. data/lib/chef/file_access_control/windows.rb +1 -4
  35. data/lib/chef/file_content_management/tempfile.rb +1 -1
  36. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
  37. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +5 -5
  38. data/lib/chef/formatters/indentable_output_stream.rb +2 -2
  39. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
  40. data/lib/chef/http.rb +2 -12
  41. data/lib/chef/http/basic_client.rb +1 -1
  42. data/lib/chef/http/http_request.rb +1 -1
  43. data/lib/chef/http/socketless_chef_zero_client.rb +1 -1
  44. data/lib/chef/http/ssl_policies.rb +6 -0
  45. data/lib/chef/json_compat.rb +2 -7
  46. data/lib/chef/key.rb +1 -1
  47. data/lib/chef/knife/bootstrap.rb +2 -1
  48. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +2 -2
  49. data/lib/chef/knife/bootstrap/train_connector.rb +1 -1
  50. data/lib/chef/knife/config_show.rb +1 -1
  51. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  52. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  53. data/lib/chef/knife/core/ui.rb +5 -2
  54. data/lib/chef/knife/core/windows_bootstrap_context.rb +7 -4
  55. data/lib/chef/knife/node_policy_set.rb +2 -2
  56. data/lib/chef/knife/node_run_list_add.rb +1 -1
  57. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  58. data/lib/chef/knife/node_run_list_set.rb +1 -1
  59. data/lib/chef/knife/role_env_run_list_add.rb +1 -1
  60. data/lib/chef/knife/role_env_run_list_set.rb +1 -1
  61. data/lib/chef/knife/role_run_list_add.rb +1 -1
  62. data/lib/chef/knife/role_run_list_set.rb +1 -1
  63. data/lib/chef/knife/search.rb +0 -1
  64. data/lib/chef/knife/ssh.rb +5 -3
  65. data/lib/chef/knife/tag_create.rb +1 -1
  66. data/lib/chef/knife/tag_delete.rb +1 -1
  67. data/lib/chef/local_mode.rb +1 -1
  68. data/lib/chef/mixin/convert_to_class_name.rb +0 -56
  69. data/lib/chef/mixin/openssl_helper.rb +1 -1
  70. data/lib/chef/mixin/powershell_exec.rb +24 -10
  71. data/lib/chef/mixin/powershell_out.rb +12 -5
  72. data/lib/chef/mixin/properties.rb +2 -0
  73. data/lib/chef/mixin/template.rb +1 -1
  74. data/lib/chef/mixin/unformatter.rb +1 -1
  75. data/lib/chef/mixin/uris.rb +3 -1
  76. data/lib/chef/node/attribute_collections.rb +2 -6
  77. data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
  78. data/lib/chef/node_map.rb +2 -2
  79. data/lib/chef/platform/query_helpers.rb +4 -4
  80. data/lib/chef/policy_builder/dynamic.rb +2 -0
  81. data/lib/chef/powershell.rb +10 -4
  82. data/lib/chef/property.rb +1 -1
  83. data/lib/chef/provider.rb +1 -1
  84. data/lib/chef/provider/cron.rb +2 -13
  85. data/lib/chef/provider/dsc_resource.rb +12 -24
  86. data/lib/chef/provider/dsc_script.rb +16 -20
  87. data/lib/chef/provider/file.rb +1 -1
  88. data/lib/chef/provider/git.rb +5 -5
  89. data/lib/chef/provider/group.rb +14 -6
  90. data/lib/chef/provider/group/windows.rb +12 -1
  91. data/lib/chef/provider/ifconfig.rb +8 -8
  92. data/lib/chef/provider/ifconfig/debian.rb +38 -22
  93. data/lib/chef/provider/ifconfig/redhat.rb +54 -18
  94. data/lib/chef/provider/launchd.rb +1 -11
  95. data/lib/chef/provider/link.rb +0 -9
  96. data/lib/chef/provider/mount.rb +18 -1
  97. data/lib/chef/provider/mount/linux.rb +4 -0
  98. data/lib/chef/provider/mount/mount.rb +41 -43
  99. data/lib/chef/provider/package.rb +3 -0
  100. data/lib/chef/provider/package/apt.rb +1 -1
  101. data/lib/chef/provider/package/chocolatey.rb +6 -6
  102. data/lib/chef/provider/package/dpkg.rb +3 -12
  103. data/lib/chef/provider/package/freebsd/base.rb +3 -2
  104. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  105. data/lib/chef/provider/package/homebrew.rb +1 -1
  106. data/lib/chef/provider/package/ips.rb +1 -1
  107. data/lib/chef/provider/package/powershell.rb +2 -3
  108. data/lib/chef/provider/package/rubygems.rb +1 -1
  109. data/lib/chef/provider/package/snap.rb +1 -3
  110. data/lib/chef/provider/package/solaris.rb +0 -2
  111. data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
  112. data/lib/chef/provider/package/zypper.rb +98 -71
  113. data/lib/chef/provider/powershell_script.rb +12 -1
  114. data/lib/chef/provider/registry_key.rb +4 -3
  115. data/lib/chef/provider/route.rb +2 -2
  116. data/lib/chef/provider/service/debian.rb +2 -1
  117. data/lib/chef/provider/service/redhat.rb +1 -1
  118. data/lib/chef/provider/user.rb +17 -9
  119. data/lib/chef/provider/user/aix.rb +1 -1
  120. data/lib/chef/provider/user/dscl.rb +2 -2
  121. data/lib/chef/provider/user/mac.rb +14 -6
  122. data/lib/chef/provider/user/solaris.rb +1 -1
  123. data/lib/chef/provider/user/windows.rb +10 -3
  124. data/lib/chef/providers.rb +0 -3
  125. data/lib/chef/pwsh.rb +71 -0
  126. data/lib/chef/resource.rb +1 -1
  127. data/lib/chef/resource/apt_repository.rb +6 -5
  128. data/lib/chef/resource/bash.rb +119 -1
  129. data/lib/chef/resource/batch.rb +1 -1
  130. data/lib/chef/resource/breakpoint.rb +3 -1
  131. data/lib/chef/resource/build_essential.rb +5 -8
  132. data/lib/chef/resource/chef_client_config.rb +313 -0
  133. data/lib/chef/resource/chef_client_cron.rb +5 -5
  134. data/lib/chef/resource/chef_client_scheduled_task.rb +4 -4
  135. data/lib/chef/resource/chef_client_systemd_timer.rb +5 -5
  136. data/lib/chef/resource/chef_handler.rb +1 -0
  137. data/lib/chef/resource/chef_sleep.rb +1 -1
  138. data/lib/chef/resource/cron/_cron_shared.rb +1 -0
  139. data/lib/chef/resource/cron/cron_d.rb +2 -2
  140. data/lib/chef/resource/csh.rb +2 -2
  141. data/lib/chef/resource/dsc_script.rb +8 -1
  142. data/lib/chef/resource/execute.rb +6 -4
  143. data/lib/chef/resource/file.rb +2 -2
  144. data/lib/chef/resource/homebrew_update.rb +4 -1
  145. data/lib/chef/resource/hostname.rb +5 -5
  146. data/lib/chef/resource/ifconfig.rb +52 -5
  147. data/lib/chef/resource/kernel_module.rb +1 -1
  148. data/lib/chef/resource/ksh.rb +3 -3
  149. data/lib/chef/resource/launchd.rb +15 -15
  150. data/lib/chef/resource/lwrp_base.rb +3 -5
  151. data/lib/chef/resource/mount.rb +8 -2
  152. data/lib/chef/resource/perl.rb +2 -2
  153. data/lib/chef/resource/plist.rb +2 -6
  154. data/lib/chef/resource/powershell_package_source.rb +19 -18
  155. data/lib/chef/resource/powershell_script.rb +14 -11
  156. data/lib/chef/resource/python.rb +2 -2
  157. data/lib/chef/resource/registry_key.rb +93 -2
  158. data/lib/chef/resource/route.rb +1 -1
  159. data/lib/chef/resource/ruby.rb +2 -2
  160. data/lib/chef/resource/scm/_scm.rb +2 -1
  161. data/lib/chef/resource/scm/git.rb +82 -1
  162. data/lib/chef/resource/scm/subversion.rb +12 -0
  163. data/lib/chef/resource/script.rb +2 -2
  164. data/lib/chef/resource/solaris_package.rb +0 -2
  165. data/lib/chef/resource/sudo.rb +1 -1
  166. data/lib/chef/resource/support/client.erb +64 -0
  167. data/lib/chef/resource/systemd_unit.rb +42 -1
  168. data/lib/chef/resource/template.rb +2 -2
  169. data/lib/chef/resource/windows_ad_join.rb +9 -9
  170. data/lib/chef/resource/windows_audit_policy.rb +26 -24
  171. data/lib/chef/resource/windows_certificate.rb +13 -7
  172. data/lib/chef/resource/windows_dfs_server.rb +7 -4
  173. data/lib/chef/resource/windows_env.rb +173 -0
  174. data/lib/chef/resource/windows_feature.rb +2 -0
  175. data/lib/chef/resource/windows_firewall_profile.rb +7 -12
  176. data/lib/chef/resource/windows_firewall_rule.rb +9 -11
  177. data/lib/chef/resource/windows_font.rb +1 -1
  178. data/lib/chef/resource/windows_package.rb +1 -0
  179. data/lib/chef/resource/windows_path.rb +38 -0
  180. data/lib/chef/resource/windows_security_policy.rb +5 -5
  181. data/lib/chef/resource/windows_service.rb +108 -0
  182. data/lib/chef/resource/windows_share.rb +18 -18
  183. data/lib/chef/resource/windows_task.rb +629 -28
  184. data/lib/chef/resource/windows_workgroup.rb +6 -4
  185. data/lib/chef/resource/yum_repository.rb +1 -1
  186. data/lib/chef/resource_collection/resource_set.rb +2 -6
  187. data/lib/chef/resource_inspector.rb +77 -75
  188. data/lib/chef/resource_reporter.rb +0 -2
  189. data/lib/chef/resources.rb +1 -0
  190. data/lib/chef/run_lock.rb +2 -2
  191. data/lib/chef/search/query.rb +3 -1
  192. data/lib/chef/server_api.rb +0 -4
  193. data/lib/chef/shell/ext.rb +1 -1
  194. data/lib/chef/util/backup.rb +1 -1
  195. data/lib/chef/util/dsc/configuration_generator.rb +52 -11
  196. data/lib/chef/util/dsc/lcm_output_parser.rb +4 -7
  197. data/lib/chef/util/dsc/local_configuration_manager.rb +18 -15
  198. data/lib/chef/util/dsc/resource_store.rb +5 -11
  199. data/lib/chef/version.rb +1 -1
  200. data/lib/chef/win32/api/file.rb +4 -0
  201. data/lib/chef/win32/file.rb +1 -1
  202. data/lib/chef/win32/security/sid.rb +1 -1
  203. data/lib/chef/win32/unicode.rb +1 -1
  204. data/spec/functional/mixin/powershell_out_spec.rb +11 -3
  205. data/spec/functional/resource/apt_package_spec.rb +4 -6
  206. data/spec/functional/resource/chocolatey_package_spec.rb +3 -3
  207. data/spec/functional/resource/cron_spec.rb +3 -3
  208. data/spec/functional/resource/dsc_script_spec.rb +6 -9
  209. data/spec/functional/resource/mount_spec.rb +10 -2
  210. data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
  211. data/spec/functional/resource/powershell_script_spec.rb +57 -14
  212. data/spec/functional/resource/windows_certificate_spec.rb +10 -6
  213. data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
  214. data/spec/functional/resource/windows_package_spec.rb +36 -10
  215. data/spec/functional/resource/windows_share_spec.rb +103 -0
  216. data/spec/functional/resource/windows_task_spec.rb +2 -3
  217. data/spec/functional/resource/zypper_package_spec.rb +11 -0
  218. data/spec/integration/client/client_spec.rb +2 -1
  219. data/spec/integration/compliance/compliance_spec.rb +81 -0
  220. data/spec/integration/knife/client_key_create_spec.rb +1 -1
  221. data/spec/integration/knife/node_create_spec.rb +1 -1
  222. data/spec/integration/knife/node_environment_set_spec.rb +1 -1
  223. data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
  224. data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
  225. data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
  226. data/spec/integration/knife/node_show_spec.rb +1 -1
  227. data/spec/integration/recipes/notifies_spec.rb +1 -1
  228. data/spec/integration/recipes/provider_choice.rb +2 -2
  229. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -0
  230. data/spec/spec_helper.rb +3 -4
  231. data/spec/support/lib/chef/resource/cat.rb +1 -1
  232. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
  233. data/spec/support/mock/platform.rb +24 -16
  234. data/spec/support/platform_helpers.rb +11 -4
  235. data/spec/support/shared/unit/knife_shared.rb +1 -1
  236. data/spec/support/shared/unit/script_resource.rb +4 -4
  237. data/spec/support/shared/unit/windows_script_resource.rb +1 -1
  238. data/spec/unit/chef_fs/config_spec.rb +1 -1
  239. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  240. data/spec/unit/client_spec.rb +17 -0
  241. data/spec/unit/compliance/fetcher/automate_spec.rb +134 -0
  242. data/spec/unit/compliance/fetcher/chef_server_spec.rb +93 -0
  243. data/spec/unit/compliance/reporter/automate_spec.rb +427 -0
  244. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +177 -0
  245. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +48 -0
  246. data/spec/unit/compliance/runner_spec.rb +140 -0
  247. data/spec/unit/data_collector_spec.rb +0 -4
  248. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
  249. data/spec/unit/http/ssl_policies_spec.rb +11 -0
  250. data/spec/unit/knife/client_create_spec.rb +2 -2
  251. data/spec/unit/knife/configure_client_spec.rb +5 -5
  252. data/spec/unit/knife/configure_spec.rb +3 -3
  253. data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
  254. data/spec/unit/knife/cookbook_download_spec.rb +2 -2
  255. data/spec/unit/knife/cookbook_list_spec.rb +2 -2
  256. data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
  257. data/spec/unit/knife/core/node_editor_spec.rb +1 -1
  258. data/spec/unit/knife/environment_compare_spec.rb +3 -3
  259. data/spec/unit/knife/supermarket_download_spec.rb +8 -8
  260. data/spec/unit/knife/supermarket_list_spec.rb +3 -3
  261. data/spec/unit/knife/supermarket_search_spec.rb +1 -1
  262. data/spec/unit/knife/tag_create_spec.rb +1 -1
  263. data/spec/unit/knife/tag_delete_spec.rb +1 -1
  264. data/spec/unit/knife/user_create_spec.rb +1 -1
  265. data/spec/unit/mixin/powershell_exec_spec.rb +41 -4
  266. data/spec/unit/mixin/powershell_out_spec.rb +14 -0
  267. data/spec/unit/mixin/which.rb +1 -1
  268. data/spec/unit/platform/query_helpers_spec.rb +11 -12
  269. data/spec/unit/provider/dsc_resource_spec.rb +10 -27
  270. data/spec/unit/provider/dsc_script_spec.rb +1 -1
  271. data/spec/unit/provider/group/windows_spec.rb +6 -0
  272. data/spec/unit/provider/group_spec.rb +1 -1
  273. data/spec/unit/provider/mount/linux_spec.rb +10 -0
  274. data/spec/unit/provider/mount/mount_spec.rb +21 -10
  275. data/spec/unit/provider/mount/solaris_spec.rb +1 -1
  276. data/spec/unit/provider/mount/windows_spec.rb +1 -0
  277. data/spec/unit/provider/mount_spec.rb +31 -0
  278. data/spec/unit/provider/package/chocolatey_spec.rb +1 -2
  279. data/spec/unit/provider/package/powershell_spec.rb +87 -95
  280. data/spec/unit/provider/package/zypper_spec.rb +0 -25
  281. data/spec/unit/provider/package_spec.rb +2 -2
  282. data/spec/unit/provider/powershell_script_spec.rb +11 -0
  283. data/spec/unit/provider/subversion_spec.rb +0 -3
  284. data/spec/unit/provider/systemd_unit_spec.rb +1 -1
  285. data/spec/unit/provider/user_spec.rb +7 -1
  286. data/spec/unit/provider/windows_env_spec.rb +18 -34
  287. data/spec/unit/provider/windows_path_spec.rb +6 -11
  288. data/spec/unit/provider/windows_task_spec.rb +7 -6
  289. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  290. data/spec/unit/resource/build_essential_spec.rb +0 -12
  291. data/spec/unit/resource/chef_client_config_spec.rb +137 -0
  292. data/spec/unit/resource/ifconfig_spec.rb +2 -10
  293. data/spec/unit/resource/mount_spec.rb +18 -5
  294. data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
  295. data/spec/unit/resource/powershell_script_spec.rb +4 -74
  296. data/spec/unit/resource/service_spec.rb +2 -2
  297. data/spec/unit/resource/solaris_package_spec.rb +8 -10
  298. data/spec/unit/resource/windows_certificate_spec.rb +12 -0
  299. data/spec/unit/resource_inspector_spec.rb +3 -3
  300. data/spec/unit/shell_spec.rb +2 -2
  301. data/spec/unit/util/dsc/configuration_generator_spec.rb +79 -0
  302. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +27 -35
  303. data/tasks/rspec.rb +1 -1
  304. metadata +47 -24
  305. data/lib/chef/monkey_patches/net_http.rb +0 -22
  306. data/lib/chef/provider/windows_env.rb +0 -210
  307. data/lib/chef/provider/windows_path.rb +0 -61
  308. data/lib/chef/provider/windows_task.rb +0 -631
  309. data/lib/chef/util/powershell/cmdlet.rb +0 -175
  310. data/lib/chef/util/powershell/cmdlet_result.rb +0 -61
  311. data/spec/functional/util/powershell/cmdlet_spec.rb +0 -111
  312. data/spec/support/mock/constant.rb +0 -52
  313. data/spec/unit/monkey_patches/uri_spec.rb +0 -34
  314. data/spec/unit/provider_resolver_spec.rb +0 -885
  315. data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
  316. data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
  317. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -63,17 +63,15 @@ class Chef
63
63
 
64
64
  Chef::Log.trace("Loaded contents of #{filename} into resource #{resource_name} (#{resource_class})")
65
65
 
66
- LWRPBase.loaded_lwrps[filename] = true
67
-
68
66
  # wire up the default resource name after the class is parsed only if we haven't declared one.
69
67
  # (this ordering is important for MapCollision deprecation warnings)
70
68
  resource_class.provides resource_name.to_sym unless Chef::ResourceResolver.includes_handler?(resource_name.to_sym, self)
71
69
 
70
+ LWRPBase.loaded_lwrps[filename] = resource_class
71
+
72
72
  resource_class
73
73
  end
74
74
 
75
- alias :attribute :property
76
-
77
75
  # Adds +action_names+ to the list of valid actions for this resource.
78
76
  # Does not include superclass's action list when appending.
79
77
  def actions(*action_names)
@@ -88,7 +86,7 @@ class Chef
88
86
 
89
87
  # @deprecated
90
88
  def valid_actions(*args)
91
- Chef::Log.warn("`valid_actions' is deprecated, please use allowed_actions `instead'!")
89
+ Chef::Log.warn("`valid_actions` is deprecated, please use `allowed_actions` instead!")
92
90
  allowed_actions(*args)
93
91
  end
94
92
 
@@ -41,6 +41,7 @@ class Chef
41
41
  sensitive: true
42
42
 
43
43
  property :mount_point, String, name_property: true,
44
+ coerce: proc { |arg| arg.chomp("/") }, # Removed "/" from the end of str, because it was causing idempotency issue.
44
45
  description: "The directory (or path) in which the device is to be mounted. Defaults to the name of the resource block if not provided."
45
46
 
46
47
  property :device, String, identity: true,
@@ -65,7 +66,7 @@ class Chef
65
66
 
66
67
  property :options, [Array, String, nil],
67
68
  description: "An array or comma separated list of options for the mount.",
68
- coerce: proc { |arg| arg.is_a?(String) ? arg.split(",") : arg },
69
+ coerce: proc { |arg| mount_options(arg) }, # Please see #mount_options method.
69
70
  default: %w{defaults}
70
71
 
71
72
  property :dump, [Integer, FalseClass],
@@ -84,7 +85,7 @@ class Chef
84
85
  description: "Windows only: Use to specify the user name."
85
86
 
86
87
  property :domain, String,
87
- description: "Windows only: Use to specify the domain in which the username and password are located."
88
+ description: "Windows only: Use to specify the domain in which the `username` and `password` are located."
88
89
 
89
90
  private
90
91
 
@@ -94,6 +95,11 @@ class Chef
94
95
  @fstype = nil
95
96
  end
96
97
 
98
+ # Returns array of string without leading and trailing whitespace.
99
+ def mount_options(options)
100
+ (options.is_a?(String) ? options.split(",") : options).collect(&:strip)
101
+ end
102
+
97
103
  end
98
104
  end
99
105
  end
@@ -32,9 +32,9 @@ class Chef
32
32
 
33
33
  description "Use the **perl** resource to execute scripts using the Perl interpreter."\
34
34
  " This resource may also use any of the actions and properties that are"\
35
- " available to the execute resource. Commands that are executed with this"\
35
+ " available to the **execute** resource. Commands that are executed with this"\
36
36
  " resource are (by their nature) not idempotent, as they are typically"\
37
- " unique to the environment in which they are run. Use not_if and only_if"\
37
+ " unique to the environment in which they are run. Use `not_if` and `only_if`"\
38
38
  " to guard this resource for idempotence."
39
39
  end
40
40
  end
@@ -151,9 +151,7 @@ class Chef
151
151
  value.to_i
152
152
  when "float"
153
153
  value.to_f
154
- when "string"
155
- value
156
- when "dictionary"
154
+ when "string", "dictionary"
157
155
  value
158
156
  when nil
159
157
  ""
@@ -168,9 +166,7 @@ class Chef
168
166
  "array"
169
167
  when Integer
170
168
  "integer"
171
- when FalseClass
172
- "bool"
173
- when TrueClass
169
+ when FalseClass, TrueClass
174
170
  "bool"
175
171
  when Hash
176
172
  "dict"
@@ -16,7 +16,6 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
- require_relative "../json_compat"
20
19
 
21
20
  class Chef
22
21
  class Resource
@@ -57,11 +56,11 @@ class Chef
57
56
 
58
57
  load_current_value do
59
58
  cmd = load_resource_state_script(source_name)
60
- repo = powershell_out!(cmd)
61
- if repo.stdout.empty?
59
+ repo = powershell_exec!(cmd)
60
+ if repo.result.empty?
62
61
  current_value_does_not_exist!
63
62
  else
64
- status = Chef::JSONCompat.from_json(repo.stdout)
63
+ status = repo.result
65
64
  end
66
65
  url status["url"]
67
66
  trusted status["trusted"]
@@ -78,28 +77,28 @@ class Chef
78
77
  if package_source_exists?
79
78
  converge_if_changed :url, :trusted, :publish_location, :script_source_location, :script_publish_location do
80
79
  update_cmd = build_ps_repository_command("Set", new_resource)
81
- res = powershell_out(update_cmd)
82
- raise "Failed to update #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
80
+ res = powershell_exec(update_cmd)
81
+ raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
83
82
  end
84
83
  else
85
84
  converge_by("register source: #{new_resource.source_name}") do
86
85
  register_cmd = build_ps_repository_command("Register", new_resource)
87
- res = powershell_out(register_cmd)
88
- raise "Failed to register #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
86
+ res = powershell_exec(register_cmd)
87
+ raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
89
88
  end
90
89
  end
91
90
  else
92
91
  if package_source_exists?
93
92
  converge_if_changed :url, :trusted, :provider_name do
94
93
  update_cmd = build_package_source_command("Set", new_resource)
95
- res = powershell_out(update_cmd)
96
- raise "Failed to update #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
94
+ res = powershell_exec(update_cmd)
95
+ raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
97
96
  end
98
97
  else
99
98
  converge_by("register source: #{new_resource.source_name}") do
100
99
  register_cmd = build_package_source_command("Register", new_resource)
101
- res = powershell_out(register_cmd)
102
- raise "Failed to register #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
100
+ res = powershell_exec(register_cmd)
101
+ raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
103
102
  end
104
103
  end
105
104
  end
@@ -110,16 +109,16 @@ class Chef
110
109
  if package_source_exists?
111
110
  unregister_cmd = "Get-PackageSource -Name '#{new_resource.source_name}' | Unregister-PackageSource"
112
111
  converge_by("unregister source: #{new_resource.source_name}") do
113
- res = powershell_out(unregister_cmd)
114
- raise "Failed to unregister #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
112
+ res = powershell_exec(unregister_cmd)
113
+ raise "Failed to unregister #{new_resource.source_name}: #{res.errors}" if res.error?
115
114
  end
116
115
  end
117
116
  end
118
117
 
119
118
  action_class do
120
119
  def package_source_exists?
121
- cmd = powershell_out!("(Get-PackageSource -Name '#{new_resource.source_name}' -WarningAction SilentlyContinue).Name")
122
- cmd.stdout.downcase.strip == new_resource.source_name.downcase
120
+ cmd = powershell_exec!("(Get-PackageSource -Name '#{new_resource.source_name}' -ErrorAction SilentlyContinue).Name")
121
+ !cmd.result.empty? && cmd.result.to_s.downcase.strip == new_resource.source_name.downcase
123
122
  end
124
123
 
125
124
  def psrepository_cmdlet_appropriate?
@@ -133,6 +132,7 @@ class Chef
133
132
  cmd << " -PublishLocation '#{new_resource.publish_location}'" if new_resource.publish_location
134
133
  cmd << " -ScriptSourceLocation '#{new_resource.script_source_location}'" if new_resource.script_source_location
135
134
  cmd << " -ScriptPublishLocation '#{new_resource.script_publish_location}'" if new_resource.script_publish_location
135
+ cmd << " | Out-Null"
136
136
  cmd
137
137
  end
138
138
 
@@ -141,6 +141,7 @@ class Chef
141
141
  cmd << " -Location '#{new_resource.url}'" if new_resource.url
142
142
  cmd << " -Trusted:#{new_resource.trusted ? "$true" : "$false"}"
143
143
  cmd << " -ProviderName '#{new_resource.provider_name}'" if new_resource.provider_name
144
+ cmd << " | Out-Null"
144
145
  cmd
145
146
  end
146
147
  end
@@ -157,11 +158,11 @@ class Chef
157
158
  if ((Get-PackageSource -Name '#{name}').ProviderName -eq 'PowerShellGet') {
158
159
  (Get-PSRepository -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.SourceLocation}},
159
160
  @{n='trusted';e={$_.Trusted}}, @{n='provider_name';e={$_.PackageManagementProvider}}, @{n='publish_location';e={$_.PublishLocation}},
160
- @{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}} | ConvertTo-Json
161
+ @{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}}
161
162
  }
162
163
  else {
163
164
  (Get-PackageSource -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.Location}},
164
- @{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}} | ConvertTo-Json
165
+ @{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}}
165
166
  }
166
167
  }
167
168
  EOH
@@ -22,11 +22,24 @@ class Chef
22
22
  class PowershellScript < Chef::Resource::WindowsScript
23
23
  unified_mode true
24
24
 
25
+ set_guard_inherited_attributes(:interpreter)
26
+
25
27
  provides :powershell_script, os: "windows"
26
28
 
29
+ description <<~DESC
30
+ Use the **powershell_script** resource to execute a script using the Windows PowerShell interpreter, much like how the script and script-based resources **bash**, **csh**, **perl**, **python**, and **ruby** are used. The **powershell_script** resource is specific to the Microsoft Windows platform, but may use both the the Windows PowerShell interpreter or the PowerShell Core (pwsh) interpreter as of Chef Infra Client 16.6 and later.
31
+
32
+ The **powershell_script** resource creates and executes a temporary file rather than running the command inline. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use `not_if` and `only_if` conditionals to guard this resource for idempotence.
33
+ DESC
34
+
27
35
  property :flags, String,
28
36
  description: "A string that is passed to the Windows PowerShell command"
29
37
 
38
+ property :interpreter, String,
39
+ default: "powershell",
40
+ equal_to: %w{powershell pwsh},
41
+ description: "The interpreter type, `powershell` or `pwsh` (PowerShell Core)"
42
+
30
43
  property :convert_boolean_return, [true, false],
31
44
  default: false,
32
45
  description: <<~DESC
@@ -51,18 +64,8 @@ class Chef
51
64
  ```
52
65
  DESC
53
66
 
54
- description "Use the **powershell_script** resource to execute a script using the Windows PowerShell"\
55
- " interpreter, much like how the script and script-based resources—bash, csh, perl, python,"\
56
- " and ruby—are used. The powershell_script is specific to the Microsoft Windows platform"\
57
- " and the Windows PowerShell interpreter.\n\n The powershell_script resource creates and"\
58
- " executes a temporary file (similar to how the script resource behaves), rather than running"\
59
- " the command inline. Commands that are executed with this resource are (by their nature) not"\
60
- " idempotent, as they are typically unique to the environment in which they are run. Use not_if"\
61
- " and only_if to guard this resource for idempotence."
62
-
63
67
  def initialize(*args)
64
68
  super
65
- @interpreter = "powershell.exe"
66
69
  @default_guard_interpreter = resource_name
67
70
  end
68
71
 
@@ -73,7 +76,7 @@ class Chef
73
76
  # default for this resource, this method can be removed since
74
77
  # guard context and recipe resource context will have the
75
78
  # same behavior.
76
- def self.get_default_attributes(opts)
79
+ def self.get_default_attributes
77
80
  { convert_boolean_return: true }
78
81
  end
79
82
  end
@@ -31,9 +31,9 @@ class Chef
31
31
 
32
32
  description "Use the **python** resource to execute scripts using the Python interpreter."\
33
33
  " This resource may also use any of the actions and properties that are available"\
34
- " to the execute resource. Commands that are executed with this resource are (by"\
34
+ " to the **execute** resource. Commands that are executed with this resource are (by"\
35
35
  " their nature) not idempotent, as they are typically unique to the environment in"\
36
- " which they are run. Use not_if and only_if to guard this resource for idempotence."
36
+ " which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
37
37
  end
38
38
  end
39
39
  end
@@ -27,7 +27,96 @@ class Chef
27
27
  provides(:registry_key) { true }
28
28
 
29
29
  description "Use the **registry_key** resource to create and delete registry keys in Microsoft Windows."
30
- introduced "11.0"
30
+ examples <<~'DOC'
31
+ **Create a registry key**
32
+
33
+ ```ruby
34
+ registry_key 'HKEY_LOCAL_MACHINE\\path-to-key\\Policies\\System' do
35
+ values [{
36
+ name: 'EnableLUA',
37
+ type: :dword,
38
+ data: 0
39
+ }]
40
+ action :create
41
+ end
42
+ ```
43
+
44
+ **Create a registry key with binary data: "\x01\x02\x03"**:
45
+
46
+ ```ruby
47
+ registry_key 'HKEY_CURRENT_USER\ChefTest' do
48
+ values [{
49
+ :name => "test",
50
+ :type => :binary,
51
+ :data => [0, 1, 2].map(&:chr).join
52
+ }]
53
+ action :create
54
+ end
55
+ ```
56
+
57
+ **Create 32-bit key in redirected wow6432 tree**
58
+
59
+ In 64-bit versions of Microsoft Windows, HKEY_LOCAL_MACHINE\SOFTWARE\Example is a re-directed key. In the following examples, because HKEY_LOCAL_MACHINE\SOFTWARE\Example is a 32-bit key, the output will be “Found 32-bit key” if they are run on a version of Microsoft Windows that is 64-bit:
60
+
61
+ ```ruby
62
+ registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Example' do
63
+ architecture :i386
64
+ recursive true
65
+ action :create
66
+ end
67
+ ```
68
+
69
+ **Set proxy settings to be the same as those used by Chef Infra Client**
70
+
71
+ ```ruby
72
+ proxy = URI.parse(Chef::Config[:http_proxy])
73
+ registry_key 'HKCU\Software\Microsoft\path\to\key\Internet Settings' do
74
+ values [{name: 'ProxyEnable', type: :reg_dword, data: 1},
75
+ {name: 'ProxyServer', data: "#{proxy.host}:#{proxy.port}"},
76
+ {name: 'ProxyOverride', type: :reg_string, data: <local>},
77
+ ]
78
+ action :create
79
+ end
80
+ ```
81
+
82
+ **Set the name of a registry key to "(Default)"**
83
+
84
+ ```ruby
85
+ registry_key 'Set (Default) value' do
86
+ key 'HKLM\Software\Test\Key\Path'
87
+ values [
88
+ {name: '', type: :string, data: 'test'},
89
+ ]
90
+ action :create
91
+ end
92
+ ```
93
+
94
+ **Delete a registry key value**
95
+
96
+ ```ruby
97
+ registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\path\to\key\AU' do
98
+ values [{
99
+ name: 'NoAutoRebootWithLoggedOnUsers',
100
+ type: :dword,
101
+ data: ''
102
+ }]
103
+ action :delete
104
+ end
105
+ ```
106
+
107
+ Note: If data: is not specified, you get an error: Missing data key in RegistryKey values hash
108
+
109
+ **Delete a registry key and its subkeys, recursively**
110
+
111
+ ```ruby
112
+ registry_key 'HKCU\SOFTWARE\Policies\path\to\key\Themes' do
113
+ recursive true
114
+ action :delete_key
115
+ end
116
+ ```
117
+
118
+ Note: Be careful when using the :delete_key action with the recursive attribute. This will delete the registry key, all of its values and all of the names, types, and data associated with them. This cannot be undone by Chef Infra Client.
119
+ DOC
31
120
 
32
121
  state_attrs :values
33
122
 
@@ -72,6 +161,8 @@ class Chef
72
161
 
73
162
  property :key, String, name_property: true
74
163
 
164
+ VALID_VALUE_HASH_KEYS = %i{name type data}.freeze
165
+
75
166
  def values(arg = nil)
76
167
  if not arg.nil?
77
168
  if arg.is_a?(Hash)
@@ -89,7 +180,7 @@ class Chef
89
180
  raise ArgumentError, "Missing name key in RegistryKey values hash" unless v.key?(:name)
90
181
 
91
182
  v.each_key do |key|
92
- raise ArgumentError, "Bad key #{key} in RegistryKey values hash" unless %i{name type data}.include?(key)
183
+ raise ArgumentError, "Bad key #{key} in RegistryKey values hash" unless VALID_VALUE_HASH_KEYS.include?(key)
93
184
  end
94
185
  raise ArgumentError, "Type of name => #{v[:name]} should be string" unless v[:name].is_a?(String)
95
186
 
@@ -43,7 +43,7 @@ class Chef
43
43
  description: "The route metric value."
44
44
 
45
45
  property :netmask, [String, nil],
46
- description: "The decimal representation of the network mask. For example: 255.255.255.0."
46
+ description: "The decimal representation of the network mask. For example: `255.255.255.0`."
47
47
 
48
48
  property :gateway, [String, nil],
49
49
  description: "The gateway for the route."
@@ -27,9 +27,9 @@ class Chef
27
27
 
28
28
  description "Use the **ruby** resource to execute scripts using the Ruby interpreter. This"\
29
29
  " resource may also use any of the actions and properties that are available"\
30
- " to the execute resource. Commands that are executed with this resource are (by"\
30
+ " to the **execute** resource. Commands that are executed with this resource are (by"\
31
31
  " their nature) not idempotent, as they are typically unique to the environment"\
32
- " in which they are run. Use not_if and only_if to guard this resource for idempotence."
32
+ " in which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
33
33
 
34
34
  def initialize(name, run_context = nil)
35
35
  super
@@ -33,7 +33,8 @@ property :revision, String,
33
33
  default: "HEAD"
34
34
 
35
35
  property :user, [String, Integer],
36
- description: "The system user that will own the checked-out code."
36
+ description: "The system user that will own the checked-out code.",
37
+ default_description: "`HOME` environment variable of the user running #{ChefUtils::Dist::Infra::CLIENT}"
37
38
 
38
39
  property :group, [String, Integer],
39
40
  description: "The system group that will own the checked-out code."
@@ -28,6 +28,87 @@ class Chef
28
28
  provides :git
29
29
 
30
30
  description "Use the **git** resource to manage source control resources that exist in a git repository. git version 1.6.5 (or higher) is required to use all of the functionality in the git resource."
31
+ examples <<~DOC
32
+ **Use the git mirror**
33
+
34
+ ```ruby
35
+ git '/opt/my_sources/couch' do
36
+ repository 'git://git.apache.org/couchdb.git'
37
+ revision 'master'
38
+ action :sync
39
+ end
40
+ ```
41
+
42
+ **Use different branches**
43
+
44
+ To use different branches, depending on the environment of the node:
45
+
46
+ ```ruby
47
+ branch_name = if node.chef_environment == 'QA'
48
+ 'staging'
49
+ else
50
+ 'master'
51
+ end
52
+
53
+ git '/home/user/deployment' do
54
+ repository 'git@github.com:git_site/deployment.git'
55
+ revision branch_name
56
+ action :sync
57
+ user 'user'
58
+ group 'test'
59
+ end
60
+ ```
61
+
62
+ Where the `branch_name` variable is set to staging or master, depending on the environment of the node. Once this is determined, the `branch_name` variable is used to set the revision for the repository. If the git status command is used after running the example above, it will return the branch name as `deploy`, as this is the default value. Run Chef Infra Client in debug mode to verify that the correct branches are being checked out:
63
+
64
+ ```
65
+ sudo chef-client -l debug
66
+ ```
67
+
68
+ **Install an application from git using bash**
69
+
70
+ The following example shows how Bash can be used to install a plug-in for rbenv named ruby-build, which is located in git version source control. First, the application is synchronized, and then Bash changes its working directory to the location in which ruby-build is located, and then runs a command.
71
+
72
+ ```ruby
73
+ git "#{Chef::Config[:file_cache_path]}/ruby-build" do
74
+ repository 'git://github.com/rbenv/ruby-build.git'
75
+ revision 'master'
76
+ action :sync
77
+ end
78
+
79
+ bash 'install_ruby_build' do
80
+ cwd "#{Chef::Config[:file_cache_path]}/ruby-build"
81
+ user 'rbenv'
82
+ group 'rbenv'
83
+ code <<-EOH
84
+ ./install.sh
85
+ EOH
86
+ environment 'PREFIX' => '/usr/local'
87
+ end
88
+ ```
89
+
90
+ **Notify a resource post-checkout**
91
+
92
+ ```ruby
93
+ git "#{Chef::Config[:file_cache_path]}/my_app" do
94
+ repository node['my_app']['git_repository']
95
+ revision node['my_app']['git_revision']
96
+ action :sync
97
+ notifies :run, 'bash[compile_my_app]', :immediately
98
+ end
99
+ ```
100
+
101
+ **Pass in environment variables**
102
+
103
+ ```ruby
104
+ git '/opt/my_sources/couch' do
105
+ repository 'git://git.apache.org/couchdb.git'
106
+ revision 'master'
107
+ environment 'VAR' => 'whatever'
108
+ action :sync
109
+ end
110
+ ```
111
+ DOC
31
112
 
32
113
  property :additional_remotes, Hash,
33
114
  description: "A Hash of additional remotes that are added to the git repository configuration.",
@@ -41,7 +122,7 @@ class Chef
41
122
  default: false
42
123
 
43
124
  property :enable_checkout, [TrueClass, FalseClass],
44
- description: "Check out a repo from master. Set to false when using the checkout_branch attribute to prevent the git resource from attempting to check out master from master.",
125
+ description: "Check out a repo from master. Set to `false` when using the `checkout_branch` attribute to prevent the git resource from attempting to check out `master` from `master`.",
45
126
  default: true
46
127
 
47
128
  property :remote, String,