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
@@ -96,6 +96,17 @@ describe Chef::Resource::ZypperPackage, :requires_root, :suse_only do
96
96
  expect(zypper_package.updated_by_last_action?).to be false
97
97
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
98
98
  end
99
+
100
+ it "multipackage installs which result in nils from the superclass" do
101
+ # this looks weird, it tests an internal condition of the allow_nils behavior where the arrays passed to install_package will have
102
+ # nil values, and ensures that doesn't wind up creating weirdness in the resulting shell_out that causes it to fail
103
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
104
+ zypper_package.package_name(%w{chef_rpm chef_rpm})
105
+ zypper_package.version(["1.2", "1.10"])
106
+ zypper_package.run_action(:install)
107
+ expect(zypper_package.updated_by_last_action?).to be true
108
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
109
+ end
99
110
  end
100
111
 
101
112
  context "with versions" do
@@ -97,7 +97,8 @@ describe "chef-client" do
97
97
  before { file ".chef/knife.rb", "xxx.xxx" }
98
98
 
99
99
  it "should load .chef/knife.rb when -z is specified" do
100
- result = shell_out("#{chef_client} -z -o 'x::default'", cwd: path_to(""))
100
+ # On Solaris shell_out will invoke /bin/sh which doesn't understand how to correctly update ENV['PWD']
101
+ result = shell_out("#{chef_client} -z -o 'x::default'", cwd: path_to(""), env: { "PWD" => nil })
101
102
  # FATAL: Configuration error NoMethodError: undefined method `xxx' for nil:NilClass
102
103
  expect(result.stdout).to include("xxx")
103
104
  end
@@ -0,0 +1,81 @@
1
+ require "spec_helper"
2
+
3
+ require "support/shared/integration/integration_helper"
4
+ require "chef/mixin/shell_out"
5
+ require "chef-utils/dist"
6
+
7
+ describe "chef-client with audit mode" do
8
+
9
+ include IntegrationSupport
10
+ include Chef::Mixin::ShellOut
11
+
12
+ let(:chef_dir) { File.join(__dir__, "..", "..", "..", "bin") }
13
+
14
+ # Invoke `chef-client` as `ruby PATH/TO/chef-client`. This ensures the
15
+ # following constraints are satisfied:
16
+ # * Windows: windows can only run batch scripts as bare executables. Rubygems
17
+ # creates batch wrappers for installed gems, but we don't have batch wrappers
18
+ # in the source tree.
19
+ # * Other `chef-client` in PATH: A common case is running the tests on a
20
+ # machine that has omnibus chef installed. In that case we need to ensure
21
+ # we're running `chef-client` from the source tree and not the external one.
22
+ # cf. CHEF-4914
23
+ let(:chef_client) { "bundle exec #{ChefUtils::Dist::Infra::CLIENT} --minimal-ohai" }
24
+
25
+ when_the_repository "has a custom profile" do
26
+ let(:report_file) { path_to("report_file.json") }
27
+
28
+ before do
29
+ directory "profiles/my-profile" do
30
+ file "inspec.yml", <<~FILE
31
+ ---
32
+ name: my-profile
33
+ FILE
34
+
35
+ directory "controls" do
36
+ file "my_control.rb", <<~FILE
37
+ control "my control" do
38
+ describe Dir.home do
39
+ it { should be_kind_of String }
40
+ end
41
+ end
42
+ FILE
43
+ end
44
+ end
45
+
46
+ file "attributes.json", <<~FILE
47
+ {
48
+ "audit": {
49
+ "json_file": {
50
+ "location": "#{report_file}"
51
+ },
52
+ "profiles": {
53
+ "my-profile": {
54
+ "path": "#{path_to("profiles/my-profile")}"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ FILE
60
+ end
61
+
62
+ it "should complete with success" do
63
+ result = shell_out!("#{chef_client} --local-mode --json-attributes #{path_to("attributes.json")}", cwd: chef_dir)
64
+ result.error!
65
+
66
+ inspec_report = JSON.parse(File.read(report_file))
67
+ expect(inspec_report["profiles"].length).to eq(1)
68
+
69
+ profile = inspec_report["profiles"].first
70
+ expect(profile["name"]).to eq("my-profile")
71
+ expect(profile["controls"].length).to eq(1)
72
+
73
+ control = profile["controls"].first
74
+ expect(control["id"]).to eq("my control")
75
+ expect(control["results"].length).to eq(1)
76
+
77
+ result = control["results"].first
78
+ expect(result["status"]).to eq("passed")
79
+ end
80
+ end
81
+ end
@@ -39,7 +39,7 @@ describe "knife client key create", :workstation do
39
39
  it "creates a new client key with an expiration date" do
40
40
  date = "2017-12-31T23:59:59Z"
41
41
  knife("client key create -k new -e #{date} bah").should_succeed stderr: /^#{out}/, stdout: /.*BEGIN RSA PRIVATE KEY/
42
- knife("client key show bah new").should_succeed /expiration_date:.*#{date}/
42
+ knife("client key show bah new").should_succeed(/expiration_date:.*#{date}/)
43
43
  end
44
44
 
45
45
  it "refuses to add an already existing key" do
@@ -34,7 +34,7 @@ describe "knife node create", :workstation do
34
34
 
35
35
  it "creates a new validator node" do
36
36
  knife("node create bah").should_succeed out
37
- knife("node show bah").should_succeed /Node Name: bah/
37
+ knife("node show bah").should_succeed(/Node Name: bah/)
38
38
  end
39
39
 
40
40
  it "refuses to add an existing node" do
@@ -31,7 +31,7 @@ describe "knife node environment set", :workstation do
31
31
  end
32
32
 
33
33
  it "sets an environment on a node" do
34
- knife("node environment set cons lisp").should_succeed /chef_environment:.*lisp/
34
+ knife("node environment set cons lisp").should_succeed(/chef_environment:.*lisp/)
35
35
  knife("node show cons -a chef_environment").should_succeed <<~EOM
36
36
  cons:
37
37
  chef_environment: lisp
@@ -30,7 +30,7 @@ describe "knife node run list add", :workstation do
30
30
  end
31
31
 
32
32
  it "sets the run list" do
33
- knife("node run list add cons recipe[foo]").should_succeed /run_list:\s*recipe\[foo\]\n/
33
+ knife("node run list add cons recipe[foo]").should_succeed(/run_list:\s*recipe\[foo\]\n/)
34
34
  end
35
35
  end
36
36
 
@@ -40,15 +40,15 @@ describe "knife node run list add", :workstation do
40
40
  end
41
41
 
42
42
  it "appends to the run list" do
43
- knife("node run list add cons recipe[foo]").should_succeed /run_list:\n\s*recipe\[bar\]\n\s*recipe\[foo\]\n/m
43
+ knife("node run list add cons recipe[foo]").should_succeed(/run_list:\n\s*recipe\[bar\]\n\s*recipe\[foo\]\n/m)
44
44
  end
45
45
 
46
46
  it "adds to the run list before the specified item" do
47
- knife("node run list add cons -b recipe[bar] recipe[foo]").should_succeed /run_list:\n\s*recipe\[foo\]\n\s*recipe\[bar\]\n/m
47
+ knife("node run list add cons -b recipe[bar] recipe[foo]").should_succeed(/run_list:\n\s*recipe\[foo\]\n\s*recipe\[bar\]\n/m)
48
48
  end
49
49
 
50
50
  it "adds to the run list after the specified item" do
51
- knife("node run list add cons -a recipe[bar] recipe[foo]").should_succeed /run_list:\n\s*recipe\[bar\]\n\s*recipe\[foo\]\n/m
51
+ knife("node run list add cons -a recipe[bar] recipe[foo]").should_succeed(/run_list:\n\s*recipe\[bar\]\n\s*recipe\[foo\]\n/m)
52
52
  end
53
53
  end
54
54
  end
@@ -30,7 +30,7 @@ describe "knife node run list remove", :workstation do
30
30
  end
31
31
 
32
32
  it "removes the item from the run list" do
33
- knife("node run list remove cons recipe[bar]").should_succeed /run_list:\s*recipe\[foo\]\n/m
33
+ knife("node run list remove cons recipe[bar]").should_succeed(/run_list:\s*recipe\[foo\]\n/m)
34
34
  end
35
35
  end
36
36
  end
@@ -30,7 +30,7 @@ describe "knife node run list set", :workstation do
30
30
  end
31
31
 
32
32
  it "sets the run list" do
33
- knife("node run list set cons recipe[bar]").should_succeed /run_list:\s*recipe\[bar\]\n/m
33
+ knife("node run list set cons recipe[bar]").should_succeed(/run_list:\s*recipe\[bar\]\n/m)
34
34
  end
35
35
 
36
36
  it "with no role or recipe" do
@@ -30,7 +30,7 @@ describe "knife node show", :workstation do
30
30
  end
31
31
 
32
32
  it "shows the node" do
33
- knife("node show cons").should_succeed /Run List:\s*recipe\[bar\], recipe\[foo\]\n/m
33
+ knife("node show cons").should_succeed(/Run List:\s*recipe\[bar\], recipe\[foo\]\n/m)
34
34
  end
35
35
  end
36
36
  end
@@ -416,7 +416,7 @@ describe "notifications" do
416
416
  EOM
417
417
 
418
418
  result = shell_out("#{chef_client} -c \"#{path_to("config/client.rb")}\" --no-color -F doc -o 'x::default'", cwd: chef_dir)
419
- expect(result.stdout).to match /\* log\[a, b\] action write/
419
+ expect(result.stdout).to match(/\* log\[a, b\] action write/)
420
420
  result.error!
421
421
  end
422
422
 
@@ -30,8 +30,8 @@ describe "Recipe DSL methods" do
30
30
  recipe = converge do
31
31
  provider_thingy("blah") {}
32
32
  end
33
- expect(recipe.logged_warnings).to match /hello from Chef::Provider::ProviderThingy/
34
- expect(recipe.logged_warnings).to match /you must use 'provides' to provide DSL/i
33
+ expect(recipe.logged_warnings).to match(/hello from Chef::Provider::ProviderThingy/)
34
+ expect(recipe.logged_warnings).to match(/you must use 'provides' to provide DSL/i)
35
35
  end
36
36
  end
37
37
  end
@@ -28,6 +28,7 @@ describe "Recipe DSL methods" do
28
28
  def provider
29
29
  Provider
30
30
  end
31
+
31
32
  class Provider < Chef::Provider
32
33
  def load_current_resource; end
33
34
 
@@ -31,7 +31,7 @@ $LOAD_PATH.unshift File.expand_path("../chef-utils/lib", __dir__)
31
31
 
32
32
  require "rubygems"
33
33
  require "rspec/mocks"
34
-
34
+ require "rexml/document"
35
35
  require "webmock/rspec"
36
36
 
37
37
  require "chef"
@@ -68,7 +68,7 @@ end
68
68
 
69
69
  # If you want to load anything into the testing environment
70
70
  # without versioning it, add it to spec/support/local_gems.rb
71
- require "spec/support/local_gems.rb" if File.exist?(File.join(File.dirname(__FILE__), "support", "local_gems.rb"))
71
+ require "spec/support/local_gems" if File.exist?(File.join(File.dirname(__FILE__), "support", "local_gems.rb"))
72
72
 
73
73
  # Explicitly require spec helpers that need to load first
74
74
  require "spec/support/platform_helpers"
@@ -200,6 +200,7 @@ RSpec.configure do |config|
200
200
  # check for particular binaries we need
201
201
  config.filter_run_excluding choco_installed: true unless choco_installed?
202
202
  config.filter_run_excluding requires_ifconfig: true unless ifconfig?
203
+ config.filter_run_excluding pwsh_installed: true unless pwsh_installed?
203
204
 
204
205
  running_platform_arch = `uname -m`.strip unless windows?
205
206
 
@@ -309,8 +310,6 @@ RSpec.configure do |config|
309
310
  end
310
311
 
311
312
  require "webrick/utils"
312
- require "thread"
313
-
314
313
  # Webrick uses a centralized/synchronized timeout manager. It works by
315
314
  # starting a thread to check for timeouts on an interval. The timeout
316
315
  # checker thread cannot be stopped or canceled in any easy way, and it
@@ -29,7 +29,7 @@ class Chef
29
29
  end
30
30
 
31
31
  def pretty_kitty(arg = nil)
32
- if arg == true || arg == false
32
+ if [true, false].include?(arg)
33
33
  @pretty_kitty = arg
34
34
  end
35
35
  @pretty_kitty
@@ -26,7 +26,7 @@ class Chef
26
26
  end
27
27
 
28
28
  def something(arg = nil)
29
- if arg == true || arg == false
29
+ if [true, false].include?(arg)
30
30
  @something = arg
31
31
  end
32
32
  @something
@@ -5,21 +5,29 @@
5
5
  # 'i386-mingw32' (windows) or 'x86_64-darwin11.2.0' (unix). Useful for
6
6
  # testing code that mixes in platform specific modules like +Chef::Mixin::Securable+
7
7
  # or +Chef::FileAccessControl+
8
- def platform_mock(platform = :unix)
9
- allow(ChefUtils).to receive(:windows?).and_return(platform == :windows ? true : false)
10
- ENV["SYSTEMDRIVE"] = (platform == :windows ? "C:" : nil)
8
+ RSpec.configure do |c|
9
+ c.include(Module.new do
10
+ def platform_mock(platform = :unix)
11
+ case platform
12
+ when :windows
13
+ Chef::Config.set_defaults_for_windows
14
+ allow(ChefUtils).to receive(:windows?).and_return(true)
15
+ stub_const("ENV", ENV.to_hash.merge("SYSTEMDRIVE" => "C:"))
16
+ stub_const("RUBY_PLATFORM", "i386-mingw32")
17
+ stub_const("File::PATH_SEPARATOR", ";")
18
+ stub_const("File::ALT_SEPARATOR", "\\")
19
+ when :unix
20
+ Chef::Config.set_defaults_for_nix
21
+ allow(ChefUtils).to receive(:windows?).and_return(false)
22
+ stub_const("ENV", ENV.to_hash.merge("SYSTEMDRIVE" => nil))
23
+ stub_const("RUBY_PLATFORM", "x86_64-darwin11.2.0")
24
+ stub_const("File::PATH_SEPARATOR", ":")
25
+ stub_const("File::ALT_SEPARATOR", nil)
26
+ else
27
+ raise "#{__method__}: unrecognized platform '#{platform}', expected one of ':unix' or ':windows'"
28
+ end
11
29
 
12
- if platform == :windows
13
- Chef::Config.set_defaults_for_windows
14
- else
15
- Chef::Config.set_defaults_for_nix
16
- end
17
-
18
- if block_given?
19
- mock_constants({ "RUBY_PLATFORM" => (platform == :windows ? "i386-mingw32" : "x86_64-darwin11.2.0"),
20
- "File::PATH_SEPARATOR" => (platform == :windows ? ";" : ":"),
21
- "File::ALT_SEPARATOR" => (platform == :windows ? "\\" : nil) }) do
22
- yield
23
- end
24
- end
30
+ yield
31
+ end
32
+ end)
25
33
  end
@@ -2,11 +2,9 @@ require "fcntl"
2
2
  require "chef/mixin/shell_out"
3
3
  require "ohai/mixin/http_helper"
4
4
  require "ohai/mixin/gce_metadata"
5
- require "chef/mixin/powershell_out"
6
5
 
7
6
  class ShellHelpers
8
7
  extend Chef::Mixin::ShellOut
9
- extend Chef::Mixin::PowershellOut
10
8
  end
11
9
 
12
10
  # magic stolen from bundler/spec/support/less_than_proc.rb
@@ -242,6 +240,15 @@ def ifconfig?
242
240
  end
243
241
 
244
242
  def choco_installed?
245
- result = ShellHelpers.powershell_out("choco --version")
246
- result.stderr.empty? ? true : false
243
+ result = ShellHelpers.shell_out("choco --version")
244
+ result.stderr.empty?
245
+ rescue
246
+ false
247
+ end
248
+
249
+ def pwsh_installed?
250
+ result = ShellHelpers.shell_out("pwsh.exe --version")
251
+ result.stderr.empty?
252
+ rescue
253
+ false
247
254
  end
@@ -33,7 +33,7 @@ shared_examples_for "mandatory field missing" do
33
33
 
34
34
  it "prints a relevant error message" do
35
35
  expect { knife.run }.to raise_error(SystemExit)
36
- expect(stderr.string).to match /You must specify a #{fieldname}/
36
+ expect(stderr.string).to match(/You must specify a #{fieldname}/)
37
37
  end
38
38
  end
39
39
  end
@@ -47,16 +47,16 @@ shared_examples_for "a script resource" do
47
47
  end
48
48
 
49
49
  describe "when executing guards" do
50
- it "inherits exactly the :cwd, :environment, :group, :path, :user, and :umask attributes from a parent resource class" do
50
+ it "inherits exactly the :cwd, :domain, :environment, :group, :password, :path, :user, and :umask attributes from a parent resource class" do
51
51
  inherited_difference = Chef::Resource::Script.guard_inherited_attributes -
52
- %i{cwd environment group path user umask}
52
+ %i{cwd domain environment group password path user umask}
53
53
 
54
54
  expect(inherited_difference).to eq([])
55
55
  end
56
56
 
57
57
  it "when guard_interpreter is set to the default value, the guard command string should be evaluated by command execution and not through a resource" do
58
58
  expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate_block)
59
- expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).not_to receive(:evaluate_action)
59
+ expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).not_to receive(:evaluate)
60
60
  expect_any_instance_of(Chef::GuardInterpreter::DefaultGuardInterpreter).to receive(:evaluate).and_return(true)
61
61
  script_resource.only_if "echo hi"
62
62
  expect(script_resource.should_skip?(:run)).to eq(nil)
@@ -65,7 +65,7 @@ shared_examples_for "a script resource" do
65
65
  it "when a valid guard_interpreter resource is specified, a block should be used to evaluate the guard" do
66
66
  expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate_block)
67
67
  expect_any_instance_of(Chef::GuardInterpreter::DefaultGuardInterpreter).not_to receive(:evaluate)
68
- expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate_action).and_return(true)
68
+ expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate).and_return(true)
69
69
  script_resource.guard_interpreter :script
70
70
  script_resource.only_if "echo hi"
71
71
  expect(script_resource.should_skip?(:run)).to eq(nil)
@@ -35,7 +35,7 @@ shared_examples_for "a Windows script resource" do
35
35
  end
36
36
 
37
37
  it "should use a resource to evaluate the guard when guard_interpreter is not specified" do
38
- expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate_action).and_return(true)
38
+ expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate).and_return(true)
39
39
  expect_any_instance_of(Chef::GuardInterpreter::DefaultGuardInterpreter).not_to receive(:evaluate)
40
40
  windows_script_resource.only_if "echo hi"
41
41
  expect(windows_script_resource.should_skip?(:run)).to eq(nil)
@@ -18,7 +18,7 @@
18
18
 
19
19
  require "spec_helper"
20
20
  require "chef/exceptions"
21
- require "lib/chef/chef_fs/config.rb"
21
+ require "lib/chef/chef_fs/config"
22
22
 
23
23
  describe Chef::ChefFS::Config do
24
24
  describe "initialize" do
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require "spec_helper"
20
- require "lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb"
20
+ require "lib/chef/chef_fs/data_handler/data_bag_item_data_handler"
21
21
 
22
22
  class TestDataBag < Mash
23
23
  attr_accessor :name
@@ -129,6 +129,7 @@ shared_context "a client run" do
129
129
  expect(client.events).to receive(:register).with(instance_of(Chef::DataCollector::Reporter))
130
130
  expect(client.events).to receive(:register).with(instance_of(Chef::ResourceReporter))
131
131
  expect(client.events).to receive(:register).with(instance_of(Chef::ActionCollection))
132
+ expect(client.events).to receive(:register).with(instance_of(Chef::Compliance::Runner))
132
133
  end
133
134
 
134
135
  def stub_for_node_load
@@ -801,4 +802,20 @@ describe Chef::Client do
801
802
  allow_any_instance_of(Chef::RunLock).to receive(:save_pid).and_raise(NoMethodError)
802
803
  end
803
804
  end
805
+
806
+ describe "deprecated enforce_path_sanity" do
807
+ include_context "a client run"
808
+ include_context "converge completed"
809
+
810
+ it "print a warning, when enforce_path_sanity is passed" do
811
+ Chef::Config[:enforce_path_sanity] = true
812
+ expect(logger).to receive(:warn).with("`enforce_path_sanity` is deprecated, please use `enforce_default_paths` instead!")
813
+ client.run
814
+ end
815
+
816
+ it "should not print a warning, when enforce_path_sanity is not passed" do
817
+ expect(logger).not_to receive(:warn).with("`enforce_path_sanity` is deprecated, please use `enforce_default_paths` instead!")
818
+ client.run
819
+ end
820
+ end
804
821
  end