chef 16.4.41-universal-mingw32 → 16.5.64-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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/knife +1 -1
  5. data/chef.gemspec +2 -1
  6. data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
  7. data/ext/win32-eventlog/Rakefile +2 -2
  8. data/ext/win32-eventlog/chef-log.man.erb +4 -4
  9. data/lib/chef/application.rb +18 -16
  10. data/lib/chef/application/apply.rb +12 -7
  11. data/lib/chef/application/base.rb +26 -23
  12. data/lib/chef/application/client.rb +10 -4
  13. data/lib/chef/application/exit_code.rb +13 -4
  14. data/lib/chef/application/knife.rb +22 -11
  15. data/lib/chef/application/solo.rb +2 -1
  16. data/lib/chef/application/windows_service.rb +14 -14
  17. data/lib/chef/application/windows_service_manager.rb +6 -6
  18. data/lib/chef/chef_fs/knife.rb +2 -2
  19. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  20. data/lib/chef/client.rb +10 -11
  21. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  22. data/lib/chef/cookbook/synchronizer.rb +2 -2
  23. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  24. data/lib/chef/cookbook_uploader.rb +1 -1
  25. data/lib/chef/data_collector.rb +6 -5
  26. data/lib/chef/data_collector/config_validation.rb +22 -13
  27. data/lib/chef/data_collector/run_end_message.rb +2 -2
  28. data/lib/chef/data_collector/run_start_message.rb +1 -1
  29. data/lib/chef/deprecated.rb +1 -1
  30. data/lib/chef/deprecation/warnings.rb +2 -2
  31. data/lib/chef/digester.rb +2 -2
  32. data/lib/chef/dsl/chef_vault.rb +1 -1
  33. data/lib/chef/dsl/data_query.rb +2 -2
  34. data/lib/chef/dsl/platform_introspection.rb +1 -1
  35. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  36. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  37. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  38. data/lib/chef/environment.rb +2 -2
  39. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  40. data/lib/chef/exceptions.rb +4 -4
  41. data/lib/chef/file_access_control/windows.rb +5 -1
  42. data/lib/chef/formatters/doc.rb +7 -6
  43. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  44. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  45. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  46. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  47. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  48. data/lib/chef/formatters/minimal.rb +5 -4
  49. data/lib/chef/http.rb +6 -4
  50. data/lib/chef/http/auth_credentials.rb +5 -1
  51. data/lib/chef/http/authenticator.rb +1 -1
  52. data/lib/chef/http/basic_client.rb +4 -2
  53. data/lib/chef/http/decompressor.rb +1 -1
  54. data/lib/chef/http/http_request.rb +7 -5
  55. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  56. data/lib/chef/http/ssl_policies.rb +1 -1
  57. data/lib/chef/json_compat.rb +1 -1
  58. data/lib/chef/knife.rb +4 -4
  59. data/lib/chef/knife/bootstrap.rb +16 -14
  60. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  61. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  62. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  63. data/lib/chef/knife/client_create.rb +3 -3
  64. data/lib/chef/knife/config_get.rb +8 -97
  65. data/lib/chef/knife/config_get_profile.rb +9 -9
  66. data/lib/chef/knife/config_list.rb +139 -0
  67. data/lib/chef/knife/config_list_profiles.rb +8 -98
  68. data/lib/chef/knife/config_show.rb +127 -0
  69. data/lib/chef/knife/config_use.rb +61 -0
  70. data/lib/chef/knife/config_use_profile.rb +9 -24
  71. data/lib/chef/knife/configure.rb +2 -2
  72. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  73. data/lib/chef/knife/core/object_loader.rb +1 -1
  74. data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
  75. data/lib/chef/knife/exec.rb +2 -2
  76. data/lib/chef/knife/node_show.rb +2 -2
  77. data/lib/chef/knife/serve.rb +3 -3
  78. data/lib/chef/knife/ssh.rb +16 -1
  79. data/lib/chef/knife/ssl_check.rb +3 -3
  80. data/lib/chef/knife/status.rb +2 -2
  81. data/lib/chef/knife/user_create.rb +2 -2
  82. data/lib/chef/knife/yaml_convert.rb +1 -1
  83. data/lib/chef/local_mode.rb +2 -2
  84. data/lib/chef/log/syslog.rb +2 -2
  85. data/lib/chef/log/winevt.rb +2 -2
  86. data/lib/chef/mixin/deep_merge.rb +0 -12
  87. data/lib/chef/mixin/openssl_helper.rb +1 -4
  88. data/lib/chef/mixin/template.rb +2 -2
  89. data/lib/chef/mixin/uris.rb +2 -2
  90. data/lib/chef/mixin/versioned_api.rb +1 -2
  91. data/lib/chef/monkey_patches/net_http.rb +4 -4
  92. data/lib/chef/node_map.rb +2 -2
  93. data/lib/chef/policy_builder/policyfile.rb +2 -2
  94. data/lib/chef/provider.rb +0 -4
  95. data/lib/chef/provider/file.rb +2 -2
  96. data/lib/chef/provider/ifconfig.rb +1 -1
  97. data/lib/chef/provider/launchd.rb +2 -2
  98. data/lib/chef/provider/mount/linux.rb +63 -0
  99. data/lib/chef/provider/package/rubygems.rb +21 -18
  100. data/lib/chef/provider/package/snap.rb +0 -1
  101. data/lib/chef/provider/package/windows.rb +2 -2
  102. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  103. data/lib/chef/provider/package/zypper.rb +1 -1
  104. data/lib/chef/provider/remote_file/content.rb +3 -0
  105. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  106. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  107. data/lib/chef/provider/route.rb +2 -6
  108. data/lib/chef/provider/service/macosx.rb +2 -2
  109. data/lib/chef/provider/template_finder.rb +2 -10
  110. data/lib/chef/provider/user/dscl.rb +3 -3
  111. data/lib/chef/provider/user/mac.rb +1 -1
  112. data/lib/chef/provider/windows_task.rb +1 -2
  113. data/lib/chef/provider/zypper_repository.rb +2 -2
  114. data/lib/chef/provider_resolver.rb +1 -1
  115. data/lib/chef/providers.rb +1 -0
  116. data/lib/chef/recipe.rb +2 -2
  117. data/lib/chef/resource.rb +1 -1
  118. data/lib/chef/resource/apt_repository.rb +1 -1
  119. data/lib/chef/resource/bff_package.rb +22 -0
  120. data/lib/chef/resource/breakpoint.rb +57 -2
  121. data/lib/chef/resource/build_essential.rb +1 -1
  122. data/lib/chef/resource/cab_package.rb +29 -0
  123. data/lib/chef/resource/chef_client_cron.rb +32 -25
  124. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  125. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  126. data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
  127. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  128. data/lib/chef/resource/chef_gem.rb +10 -10
  129. data/lib/chef/resource/chef_handler.rb +148 -4
  130. data/lib/chef/resource/chef_sleep.rb +2 -2
  131. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  132. data/lib/chef/resource/cookbook_file.rb +2 -2
  133. data/lib/chef/resource/cron/cron_d.rb +0 -1
  134. data/lib/chef/resource/dnf_package.rb +2 -2
  135. data/lib/chef/resource/dsc_resource.rb +0 -1
  136. data/lib/chef/resource/dsc_script.rb +2 -2
  137. data/lib/chef/resource/execute.rb +6 -6
  138. data/lib/chef/resource/file.rb +4 -4
  139. data/lib/chef/resource/gem_package.rb +5 -5
  140. data/lib/chef/resource/homebrew_package.rb +3 -3
  141. data/lib/chef/resource/homebrew_update.rb +5 -5
  142. data/lib/chef/resource/hostname.rb +2 -2
  143. data/lib/chef/resource/launchd.rb +2 -1
  144. data/lib/chef/resource/locale.rb +2 -2
  145. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  146. data/lib/chef/resource/notify_group.rb +0 -1
  147. data/lib/chef/resource/ohai.rb +46 -3
  148. data/lib/chef/resource/ohai_hint.rb +33 -0
  149. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  150. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  151. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  152. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  153. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  154. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  155. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  156. data/lib/chef/resource/osx_profile.rb +77 -13
  157. data/lib/chef/resource/plist.rb +1 -1
  158. data/lib/chef/resource/powershell_package_source.rb +5 -5
  159. data/lib/chef/resource/reboot.rb +2 -2
  160. data/lib/chef/resource/remote_file.rb +3 -3
  161. data/lib/chef/resource/rhsm_register.rb +22 -10
  162. data/lib/chef/resource/ruby_block.rb +2 -2
  163. data/lib/chef/resource/scm/subversion.rb +2 -2
  164. data/lib/chef/resource/service.rb +3 -3
  165. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  166. data/lib/chef/resource/support/cron.d.erb +1 -1
  167. data/lib/chef/resource/support/cron_access.erb +1 -1
  168. data/lib/chef/resource/support/sudoer.erb +1 -1
  169. data/lib/chef/resource/support/ulimit.erb +1 -1
  170. data/lib/chef/resource/sysctl.rb +1 -5
  171. data/lib/chef/resource/systemd_unit.rb +2 -2
  172. data/lib/chef/resource/template.rb +2 -2
  173. data/lib/chef/resource/windows_ad_join.rb +10 -3
  174. data/lib/chef/resource/windows_certificate.rb +6 -4
  175. data/lib/chef/resource/windows_firewall_profile.rb +22 -20
  176. data/lib/chef/resource/windows_package.rb +28 -5
  177. data/lib/chef/resource/windows_printer.rb +5 -3
  178. data/lib/chef/resource/windows_printer_port.rb +6 -4
  179. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  180. data/lib/chef/resource/windows_workgroup.rb +3 -3
  181. data/lib/chef/resource/yum_package.rb +2 -2
  182. data/lib/chef/resources.rb +3 -1
  183. data/lib/chef/run_context.rb +2 -2
  184. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  185. data/lib/chef/run_lock.rb +2 -2
  186. data/lib/chef/search/query.rb +4 -5
  187. data/lib/chef/shell.rb +31 -26
  188. data/lib/chef/shell/ext.rb +11 -11
  189. data/lib/chef/shell/shell_session.rb +2 -2
  190. data/lib/chef/train_transport.rb +5 -104
  191. data/lib/chef/util/diff.rb +3 -3
  192. data/lib/chef/util/powershell/cmdlet.rb +3 -1
  193. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  194. data/lib/chef/util/threaded_job_queue.rb +0 -2
  195. data/lib/chef/version.rb +1 -1
  196. data/lib/chef/win32/crypto.rb +1 -1
  197. data/lib/chef/win32/registry.rb +1 -2
  198. data/spec/data/shef-config.rb +1 -1
  199. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  200. data/spec/functional/resource/aix_service_spec.rb +2 -2
  201. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  202. data/spec/functional/resource/insserv_spec.rb +1 -1
  203. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  204. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  205. data/spec/functional/resource/windows_task_spec.rb +13 -13
  206. data/spec/functional/version_spec.rb +3 -3
  207. data/spec/integration/client/client_spec.rb +4 -4
  208. data/spec/integration/client/exit_code_spec.rb +3 -2
  209. data/spec/integration/client/ipv6_spec.rb +1 -1
  210. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  211. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  212. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  213. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  214. data/spec/integration/ohai/ohai_spec.rb +61 -0
  215. data/spec/integration/recipes/remote_directory.rb +1 -1
  216. data/spec/integration/solo/solo_spec.rb +5 -5
  217. data/spec/spec_helper.rb +6 -3
  218. data/spec/stress/win32/file_spec.rb +1 -1
  219. data/spec/support/chef_helpers.rb +2 -2
  220. data/spec/support/matchers/leak.rb +2 -2
  221. data/spec/support/platform_helpers.rb +16 -34
  222. data/spec/support/shared/functional/securable_resource.rb +108 -27
  223. data/spec/support/shared/functional/win32_service.rb +1 -1
  224. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  225. data/spec/tiny_server.rb +0 -1
  226. data/spec/unit/application/client_spec.rb +2 -2
  227. data/spec/unit/application/exit_code_spec.rb +10 -0
  228. data/spec/unit/application_spec.rb +4 -6
  229. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  230. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  231. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  232. data/spec/unit/cookbook_spec.rb +2 -2
  233. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  234. data/spec/unit/data_collector_spec.rb +0 -113
  235. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  236. data/spec/unit/file_access_control_spec.rb +1 -1
  237. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  238. data/spec/unit/knife/core/ui_spec.rb +1 -0
  239. data/spec/unit/knife/ssh_spec.rb +2 -2
  240. data/spec/unit/lwrp_spec.rb +3 -3
  241. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  242. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  243. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  244. data/spec/unit/mixin/securable_spec.rb +2 -2
  245. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  246. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  247. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  248. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  249. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  250. data/spec/unit/provider/route_spec.rb +0 -2
  251. data/spec/unit/recipe_spec.rb +1 -1
  252. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  253. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  254. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  255. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  256. data/spec/unit/resource/launchd_spec.rb +8 -0
  257. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  258. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  259. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  260. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  261. data/spec/unit/run_lock_spec.rb +5 -1
  262. data/spec/unit/runner_spec.rb +1 -2
  263. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  264. data/spec/unit/shell/shell_session_spec.rb +35 -64
  265. data/spec/unit/shell_spec.rb +16 -19
  266. data/spec/unit/train_transport_spec.rb +14 -13
  267. data/spec/unit/util/selinux_spec.rb +2 -0
  268. data/tasks/rspec.rb +0 -2
  269. metadata +41 -17
  270. data/lib/chef/dist.rb +0 -68
  271. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -17,7 +17,7 @@ require "spec_helper"
17
17
  require "support/shared/integration/integration_helper"
18
18
  require "support/shared/context/config"
19
19
 
20
- describe "knife config get", :workstation do
20
+ describe "knife config show", :workstation do
21
21
  include IntegrationSupport
22
22
  include KnifeSupport
23
23
 
@@ -27,7 +27,7 @@ describe "knife config get", :workstation do
27
27
 
28
28
  when_the_repository("has a custom env") do
29
29
  subject do
30
- cmd = knife("config", "get", *cmd_args, instance_filter: lambda { |instance|
30
+ cmd = knife("config", "show", *cmd_args, instance_filter: lambda { |instance|
31
31
  # Clear the stub set up in KnifeSupport.
32
32
  allow(File).to receive(:file?).and_call_original
33
33
  # Lies, damn lies, and config files. We need to allow normal config loading
@@ -47,7 +47,7 @@ describe "knife config get", :workstation do
47
47
  ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
48
48
  # Clear these out because they are cached permanently.
49
49
  ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
50
- Chef::Knife::ConfigGet.reset_config_loader!
50
+ Chef::Knife::ConfigShow.reset_config_loader!
51
51
  begin
52
52
  ex.run
53
53
  ensure
@@ -17,7 +17,7 @@ require "spec_helper"
17
17
  require "support/shared/integration/integration_helper"
18
18
  require "support/shared/context/config"
19
19
 
20
- describe "knife config use-profile", :workstation do
20
+ describe "knife config use", :workstation do
21
21
  include IntegrationSupport
22
22
  include KnifeSupport
23
23
 
@@ -26,15 +26,15 @@ describe "knife config use-profile", :workstation do
26
26
  let(:cmd_args) { [] }
27
27
 
28
28
  when_the_repository("has a custom env") do
29
- let(:knife_use_profile) do
30
- knife("config", "use-profile", *cmd_args, instance_filter: lambda { |instance|
29
+ let(:knife_use) do
30
+ knife("config", "use", *cmd_args, instance_filter: lambda { |instance|
31
31
  # Fake the failsafe check because this command doesn't actually process knife.rb.
32
32
  $__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
33
33
  allow(File).to receive(:file?).and_call_original
34
34
  })
35
35
  end
36
36
 
37
- subject { knife_use_profile.stdout }
37
+ subject { knife_use.stdout }
38
38
 
39
39
  around do |ex|
40
40
  # Store and reset the value of some env vars.
@@ -45,7 +45,7 @@ describe "knife config use-profile", :workstation do
45
45
  ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
46
46
  # Clear these out because they are cached permanently.
47
47
  ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
48
- Chef::Knife::ConfigUseProfile.reset_config_loader!
48
+ Chef::Knife::ConfigUse.reset_config_loader!
49
49
  begin
50
50
  ex.run
51
51
  ensure
@@ -68,8 +68,51 @@ describe "knife config use-profile", :workstation do
68
68
  end
69
69
 
70
70
  context "with no argument" do
71
- subject { knife_use_profile.stderr }
72
- it { is_expected.to eq "FATAL: You must specify a profile\n" }
71
+ context "with no configuration" do
72
+ it { is_expected.to eq "default\n" }
73
+ end
74
+
75
+ context "with --profile" do
76
+ let(:cmd_args) { %w{--profile production} }
77
+ it { is_expected.to eq "production\n" }
78
+ end
79
+
80
+ context "with an environment variable" do
81
+ around do |ex|
82
+ old_chef_profile = ENV["CHEF_PROFILE"]
83
+ begin
84
+ ENV["CHEF_PROFILE"] = "staging"
85
+ ex.run
86
+ ensure
87
+ ENV["CHEF_PROFILE"] = old_chef_profile
88
+ end
89
+ end
90
+
91
+ it { is_expected.to eq "staging\n" }
92
+ end
93
+
94
+ context "with a context file" do
95
+ before { file(".chef/context", "development\n") }
96
+ it { is_expected.to eq "development\n" }
97
+ end
98
+
99
+ context "with a context file under $CHEF_HOME" do
100
+ before do
101
+ file("chefhome/.chef/context", "other\n")
102
+ ENV["CHEF_HOME"] = path_to("chefhome")
103
+ end
104
+
105
+ it { is_expected.to eq "other\n" }
106
+ end
107
+
108
+ context "with a context file under $KNIFE_HOME" do
109
+ before do
110
+ file("knifehome/.chef/context", "other\n")
111
+ ENV["KNIFE_HOME"] = path_to("knifehome")
112
+ end
113
+
114
+ it { is_expected.to eq "other\n" }
115
+ end
73
116
  end
74
117
 
75
118
  context "with an argument" do
@@ -88,14 +131,14 @@ describe "knife config use-profile", :workstation do
88
131
 
89
132
  context "with no credentials file" do
90
133
  let(:cmd_args) { %w{production} }
91
- subject { knife_use_profile.stderr }
134
+ subject { knife_use.stderr }
92
135
  it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
93
136
  end
94
137
 
95
138
  context "with an empty credentials file" do
96
139
  let(:cmd_args) { %w{production} }
97
140
  before { file(".chef/credentials", "") }
98
- subject { knife_use_profile.stderr }
141
+ subject { knife_use.stderr }
99
142
  it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
100
143
  end
101
144
 
@@ -107,7 +150,7 @@ describe "knife config use-profile", :workstation do
107
150
  client_key = "testkey.pem"
108
151
  chef_server_url = "https://example.com/organizations/testorg"
109
152
  EOH
110
- subject { knife_use_profile }
153
+ subject { knife_use }
111
154
  it { expect { subject }.to raise_error ChefConfig::ConfigurationError, "Profile staging doesn't exist. Please add it to #{path_to(".chef/credentials")} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles." }
112
155
  end
113
156
 
@@ -62,7 +62,7 @@ describe "Knife cookbook API integration with IPv6", :workstation, :not_supporte
62
62
  Dir.mktmpdir
63
63
  end
64
64
 
65
- let(:chef_dir) { File.join(File.dirname(__FILE__), "..", "..", "..", "bin") }
65
+ let(:chef_dir) { File.join(__dir__, "..", "..", "..", "bin") }
66
66
  let(:knife) { "ruby '#{chef_dir}/knife'" }
67
67
 
68
68
  let(:knife_config_flag) { "-c '#{path_to("config/knife.rb")}'" }
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+ require "chef/mixin/shell_out"
3
+ require "benchmark" unless defined?(Benchmark)
4
+
5
+ describe "ohai" do
6
+ include Chef::Mixin::ShellOut
7
+
8
+ let(:ohai) { "bundle exec ohai" }
9
+
10
+ describe "testing ohai performance" do
11
+ # The purpose of this test is to generally find misconfigured DNS on
12
+ # CI testers. If this fails, it is probably because the forward+reverse
13
+ # DNS lookup that node[:hostname] needs is timing out and failing.
14
+ #
15
+ # If it is failing spuriously, it may mean DNS is failing spuriously, the
16
+ # best solution will be to make sure that `hostname -f`-like behavior hits
17
+ # /etc/hosts and not DNS.
18
+ #
19
+ # If it still fails supriously, it is possible that the server has high
20
+ # CPU load (e.g. due to background processes) which are contending with the
21
+ # running tests (disable the screensaver on servers, stop playing Fortnite
22
+ # while you're running tests, etc).
23
+ #
24
+ # If this just fails due to I/O being very slow and ruby being very slow to
25
+ # startup then that still indicates that the tester configuration needs
26
+ # fixing. The fact that this will fail on a windows box on a virt that doesn't
27
+ # use an SSD is because we have a higher bar for the tests to run successfully
28
+ # and that configuration is broken, so this test is red for a reason.
29
+ #
30
+ # This will probably fail on raspberry pi's or something like that as well. That
31
+ # is not a bug. We will never accept a raspberry pi as a CI tester for our
32
+ # software. Feel free to manually delete and thereby skip this file in your
33
+ # own testing harness, but that is not our concern, we are testing behavior
34
+ # that is critical to our infrastructure and must run in our tests.
35
+ #
36
+ # XXX: unfortunately this is so slow on our windows testers (~9 seconds on one
37
+ # tester) that we can't enable it for windows unless we get some better perf there.
38
+ #
39
+ it "the hostname plugin must return in under 4 seconds (see comments in code)" do
40
+ # unfortunately this doesn't look stable enough to enable
41
+ skip "we need to do more performance work on windows and s390x testers before this can be enabled"
42
+ delta = Benchmark.realtime do
43
+ shell_out!("#{ohai} hostname")
44
+ end
45
+ expect(delta).to be < 4
46
+ end
47
+
48
+ # The purpose of this is to give some indication of if shell_out is slow or
49
+ # if the hostname plugin itself is slow. If this test is also failing that we
50
+ # almost certainly have some kind of issue with DNS timeouts, etc. If this
51
+ # test succeeds and the other one fails, then it can be some kind of shelling-out
52
+ # issue or poor performance due to I/O on starting up ruby to run ohai, etc.
53
+ #
54
+ it "the hostname plugin must return in under 2 seconds when called from pure ruby" do
55
+ delta = Benchmark.realtime do
56
+ Ohai::System.new.all_plugins(["hostname"])
57
+ end
58
+ expect(delta).to be < 2
59
+ end
60
+ end
61
+ end
@@ -5,7 +5,7 @@ describe Chef::Resource::RemoteDirectory do
5
5
  include Chef::Mixin::ShellOut
6
6
 
7
7
  # Until Cheffish::RSpec has cookbook support, we have to run the whole client
8
- let(:chef_dir) { File.join(File.dirname(__FILE__), "..", "..", "..", "bin") }
8
+ let(:chef_dir) { File.join(__dir__, "..", "..", "..", "bin") }
9
9
 
10
10
  # Invoke `chef-client` as `ruby PATH/TO/chef-client`. This ensures the
11
11
  # following constraints are satisfied:
@@ -5,20 +5,20 @@ require "chef/run_lock"
5
5
  require "chef/config"
6
6
  require "timeout"
7
7
  require "fileutils"
8
+ require "chef-utils"
8
9
  require "chef/win32/security" if ChefUtils.windows?
9
- require "chef/dist"
10
10
 
11
- describe Chef::Dist::SOLOEXEC do
11
+ describe ChefUtils::Dist::Solo::EXEC do
12
12
  include IntegrationSupport
13
13
  include Chef::Mixin::ShellOut
14
14
 
15
- let(:chef_dir) { File.join(File.dirname(__FILE__), "..", "..", "..") }
15
+ let(:chef_dir) { File.join(__dir__, "..", "..", "..") }
16
16
 
17
17
  let(:cookbook_x_100_metadata_rb) { cb_metadata("x", "1.0.0") }
18
18
 
19
19
  let(:cookbook_ancient_100_metadata_rb) { cb_metadata("ancient", "1.0.0") }
20
20
 
21
- let(:chef_solo) { "bundle exec #{Chef::Dist::SOLOEXEC} --legacy-mode --minimal-ohai" }
21
+ let(:chef_solo) { "bundle exec #{ChefUtils::Dist::Solo::EXEC} --legacy-mode --minimal-ohai" }
22
22
 
23
23
  when_the_repository "creates nodes" do
24
24
  let(:nodes_dir) { File.join(@repository_dir, "nodes") }
@@ -183,7 +183,7 @@ describe Chef::Dist::SOLOEXEC do
183
183
  # run_lock gets stuck we can discover it.
184
184
  expect do
185
185
  Timeout.timeout(120) do
186
- chef_dir = File.join(File.dirname(__FILE__), "..", "..", "..")
186
+ chef_dir = File.join(__dir__, "..", "..", "..")
187
187
 
188
188
  threads = []
189
189
 
@@ -141,9 +141,10 @@ RSpec.configure do |config|
141
141
 
142
142
  config.filter_run_excluding windows_only: true unless windows?
143
143
  config.filter_run_excluding not_supported_on_windows: true if windows?
144
- config.filter_run_excluding not_supported_on_macos: true if mac_osx?
145
- config.filter_run_excluding macos_only: true unless mac_osx?
146
- config.filter_run_excluding macos_1014: true unless mac_osx_1014?
144
+ config.filter_run_excluding not_supported_on_macos: true if macos?
145
+ config.filter_run_excluding macos_only: true unless macos?
146
+ config.filter_run_excluding macos_1013: true unless macos_1013?
147
+ config.filter_run_excluding macos_gte_1014: true unless macos_gte_1014?
147
148
  config.filter_run_excluding not_supported_on_aix: true if aix?
148
149
  config.filter_run_excluding not_supported_on_solaris: true if solaris?
149
150
  config.filter_run_excluding not_supported_on_gce: true if gce?
@@ -242,6 +243,8 @@ RSpec.configure do |config|
242
243
 
243
244
  Chef::Log.setup!
244
245
 
246
+ Chef::ServerAPIVersions.instance.reset!
247
+
245
248
  Chef::Config[:log_level] = :fatal
246
249
  Chef::Log.level(Chef::Config[:log_level])
247
250
 
@@ -21,7 +21,7 @@ require "chef/win32/file" if windows?
21
21
 
22
22
  describe "Chef::ReservedNames::Win32::File", :windows_only do
23
23
  before(:each) do
24
- @path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "data", "old_home_dir", "my-dot-emacs"))
24
+ @path = File.expand_path(File.join(__dir__, "..", "..", "data", "old_home_dir", "my-dot-emacs"))
25
25
  end
26
26
 
27
27
  it "should not leak significant memory", :volatile do
@@ -14,8 +14,8 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
- CHEF_SPEC_DATA = File.expand_path(File.dirname(__FILE__) + "/../data/")
18
- CHEF_SPEC_ASSETS = File.expand_path(File.dirname(__FILE__) + "/../functional/assets/")
17
+ CHEF_SPEC_DATA = File.expand_path(__dir__ + "/../data/")
18
+ CHEF_SPEC_ASSETS = File.expand_path(__dir__ + "/../functional/assets/")
19
19
  CHEF_SPEC_BACKUP_PATH = File.join(Dir.tmpdir, "test-backup-path")
20
20
 
21
21
  def sha256_checksum(path)
@@ -61,10 +61,10 @@ module Matchers
61
61
  def profiler
62
62
  @profiler ||= begin
63
63
  if ChefUtils.windows?
64
- require File.join(File.dirname(__FILE__), "..", "platforms", "prof", "win32")
64
+ require File.join(__dir__, "..", "platforms", "prof", "win32")
65
65
  RSpec::Prof::Win32::Profiler.new
66
66
  else
67
- require File.join(File.dirname(__FILE__), "..", "prof", "gc")
67
+ require File.join(__dir__, "..", "prof", "gc")
68
68
  RSpec::Prof::GC::Profiler.new
69
69
  end
70
70
  end
@@ -3,7 +3,6 @@ require "chef/mixin/shell_out"
3
3
  require "ohai/mixin/http_helper"
4
4
  require "ohai/mixin/gce_metadata"
5
5
  require "chef/mixin/powershell_out"
6
- require "chef/version_class"
7
6
 
8
7
  class ShellHelpers
9
8
  extend Chef::Mixin::ShellOut
@@ -27,11 +26,11 @@ class DependencyProc < Proc
27
26
  end
28
27
 
29
28
  def ruby_64bit?
30
- !!(RbConfig::CONFIG["host_cpu"] =~ /x86_64/)
29
+ RbConfig::CONFIG["host_cpu"].include?("x86_64")
31
30
  end
32
31
 
33
32
  def ruby_32bit?
34
- !!(RbConfig::CONFIG["host_cpu"] =~ /i686/)
33
+ RbConfig::CONFIG["host_cpu"].include?("i686")
35
34
  end
36
35
 
37
36
  def windows?
@@ -58,17 +57,17 @@ end
58
57
  def windows_2012r2?
59
58
  return false unless windows?
60
59
 
61
- (host_version && host_version.start_with?("6.3"))
60
+ (win32_os_version && win32_os_version.start_with?("6.3"))
62
61
  end
63
62
 
64
63
  def windows_gte_10?
65
64
  return false unless windows?
66
65
 
67
- Gem::Requirement.new(">= 10").satisfied_by?(Gem::Version.new(host_version))
66
+ Gem::Requirement.new(">= 10").satisfied_by?(Gem::Version.new(win32_os_version))
68
67
  end
69
68
 
70
- def host_version
71
- @host_version ||= begin
69
+ def win32_os_version
70
+ @win32_os_version ||= begin
72
71
  wmi = WmiLite::Wmi.new
73
72
  host = wmi.first_of("Win32_OperatingSystem")
74
73
  host["version"]
@@ -95,26 +94,12 @@ def windows_user_right?(right)
95
94
  Chef::ReservedNames::Win32::Security.get_account_right(ENV["USERNAME"]).include?(right)
96
95
  end
97
96
 
98
- def mac_osx_1014?
99
- if mac_osx?
100
- ver = Chef::Version.new(ohai[:platform_version])
101
- return ver.major == 10 && ver.minor == 14
102
- end
103
-
104
- false
97
+ def macos_1013?
98
+ macos? && Gem::Requirement.new("~> 10.13.0").satisfied_by?(Gem::Version.new(ohai[:platform_version]))
105
99
  end
106
100
 
107
- def mac_osx?
108
- if File.exist? "/usr/bin/sw_vers"
109
- result = ShellHelpers.shell_out("/usr/bin/sw_vers")
110
- result.stdout.each_line do |line|
111
- if /^ProductName:\sMac OS X.*$/.match?(line)
112
- return true
113
- end
114
- end
115
- end
116
-
117
- false
101
+ def macos_gte_1014?
102
+ macos? && Gem::Requirement.new(">= 10.14").satisfied_by?(Gem::Version.new(ohai[:platform_version]))
118
103
  end
119
104
 
120
105
  # detects if the hardware is 64-bit (evaluates to true in "WOW64" mode in a 32-bit app on a 64-bit system)
@@ -127,26 +112,24 @@ def windows32?
127
112
  windows? && !windows64?
128
113
  end
129
114
 
130
- # def jruby?
131
-
132
115
  def unix?
133
116
  !windows?
134
117
  end
135
118
 
136
119
  def linux?
137
- RUBY_PLATFORM.match?(/linux/)
120
+ RUBY_PLATFORM.include?("linux")
138
121
  end
139
122
 
140
123
  def macos?
141
- RUBY_PLATFORM.match?(/darwin/)
124
+ RUBY_PLATFORM.include?("darwin")
142
125
  end
143
126
 
144
127
  def solaris?
145
- RUBY_PLATFORM.match?(/solaris/)
128
+ RUBY_PLATFORM.include?("solaris")
146
129
  end
147
130
 
148
131
  def freebsd?
149
- RUBY_PLATFORM.match?(/freebsd/)
132
+ RUBY_PLATFORM.include?("freebsd")
150
133
  end
151
134
 
152
135
  def intel_64bit?
@@ -182,7 +165,7 @@ def debian_family?
182
165
  end
183
166
 
184
167
  def aix?
185
- RUBY_PLATFORM.match?(/aix/)
168
+ RUBY_PLATFORM.include?("aix")
186
169
  end
187
170
 
188
171
  def wpar?
@@ -216,8 +199,7 @@ def selinux_enabled?
216
199
  end
217
200
 
218
201
  def suse?
219
- ::File.exist?("/etc/SuSE-release") ||
220
- ( ::File.exist?("/etc/os-release") && /sles|suse/.match?(File.read("/etc/os-release")) )
202
+ !!(ohai[:platform_family] == "suse")
221
203
  end
222
204
 
223
205
  def root?
@@ -242,48 +242,100 @@ shared_examples_for "a securable resource with existing target" do
242
242
  include_context "use Windows permissions"
243
243
 
244
244
  describe "when setting owner" do
245
- before do
246
- resource.owner(SID.admin_account_name)
247
- resource.run_action(:create)
248
- end
245
+ context "with user name" do
246
+ before do
247
+ resource.owner(SID.admin_account_name)
248
+ resource.run_action(:create)
249
+ end
249
250
 
250
- it "should set the owner" do
251
- expect(descriptor.owner).to eq(SID.Administrator)
251
+ it "should set the owner" do
252
+ expect(descriptor.owner).to eq(SID.Administrator)
253
+ end
254
+
255
+ it "is marked as updated only if changes are made" do
256
+ expect(resource.updated_by_last_action?).to eq(expect_updated?)
257
+ end
252
258
  end
253
259
 
254
- it "is marked as updated only if changes are made" do
255
- expect(resource.updated_by_last_action?).to eq(expect_updated?)
260
+ context "with SID" do
261
+ before do
262
+ resource.owner(SID.Administrator.to_s)
263
+ resource.run_action(:create)
264
+ end
265
+
266
+ it "should set the owner" do
267
+ expect(descriptor.owner).to eq(SID.Administrator)
268
+ end
269
+
270
+ it "is marked as updated only if changes are made" do
271
+ expect(resource.updated_by_last_action?).to eq(expect_updated?)
272
+ end
256
273
  end
257
274
  end
258
275
 
259
276
  describe "when setting group" do
260
- before do
261
- resource.group("Administrators")
262
- resource.run_action(:create)
263
- end
277
+ context "with group name" do
278
+ before do
279
+ resource.group("Administrators")
280
+ resource.run_action(:create)
281
+ end
282
+
283
+ it "should set the group" do
284
+ expect(descriptor.group).to eq(SID.Administrators)
285
+ end
264
286
 
265
- it "should set the group" do
266
- expect(descriptor.group).to eq(SID.Administrators)
287
+ it "is marked as updated only if changes are made" do
288
+ expect(resource.updated_by_last_action?).to eq(expect_updated?)
289
+ end
267
290
  end
268
291
 
269
- it "is marked as updated only if changes are made" do
270
- expect(resource.updated_by_last_action?).to eq(expect_updated?)
292
+ context "with group SID" do
293
+ before do
294
+ resource.group(SID.Administrators.to_s)
295
+ resource.run_action(:create)
296
+ end
297
+
298
+ it "should set the group" do
299
+ expect(descriptor.group).to eq(SID.Administrators)
300
+ end
301
+
302
+ it "is marked as updated only if changes are made" do
303
+ expect(resource.updated_by_last_action?).to eq(expect_updated?)
304
+ end
271
305
  end
272
306
  end
273
307
 
274
308
  describe "when setting rights and deny_rights" do
275
- before do
276
- resource.deny_rights(:modify, "Guest")
277
- resource.rights(:read, "Guest")
278
- resource.run_action(:create)
279
- end
309
+ context "with user name" do
310
+ before do
311
+ resource.deny_rights(:modify, "Guest")
312
+ resource.rights(:read, "Guest")
313
+ resource.run_action(:create)
314
+ end
280
315
 
281
- it "should set the rights and deny_rights" do
282
- expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_modify_perms) + allowed_acl(SID.Guest, expected_read_perms))
316
+ it "should set the rights and deny_rights" do
317
+ expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_modify_perms) + allowed_acl(SID.Guest, expected_read_perms))
318
+ end
319
+
320
+ it "is marked as updated only if changes are made" do
321
+ expect(resource.updated_by_last_action?).to eq(expect_updated?)
322
+ end
283
323
  end
284
324
 
285
- it "is marked as updated only if changes are made" do
286
- expect(resource.updated_by_last_action?).to eq(expect_updated?)
325
+ context "with SID" do
326
+ before do
327
+ resource.deny_rights(:modify, SID.Guest.to_s)
328
+ resource.rights(:read, SID.Guest.to_s)
329
+ resource.run_action(:create)
330
+ end
331
+
332
+ it "should set the rights and deny_rights" do
333
+ expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_modify_perms) + allowed_acl(SID.Guest, expected_read_perms))
334
+ end
335
+
336
+ it "is marked as updated only if changes are made" do
337
+ expect(resource.updated_by_last_action?).to eq(expect_updated?)
338
+ end
287
339
  end
288
340
  end
289
341
  end
@@ -302,12 +354,18 @@ shared_examples_for "a securable resource without existing target" do
302
354
  expect(descriptor.owner).to eq(SID.default_security_object_owner)
303
355
  end
304
356
 
305
- it "sets owner when owner is specified" do
357
+ it "sets owner when owner is specified by name" do
306
358
  resource.owner "Guest"
307
359
  resource.run_action(:create)
308
360
  expect(descriptor.owner).to eq(SID.Guest)
309
361
  end
310
362
 
363
+ it "sets owner when owner is specified by SID" do
364
+ resource.owner SID.Guest.to_s
365
+ resource.run_action(:create)
366
+ expect(descriptor.owner).to eq(SID.Guest)
367
+ end
368
+
311
369
  it "fails to set owner when owner has invalid characters" do
312
370
  expect { resource.owner 'Lance "The Nose" Glindenberry III' }.to raise_error(Chef::Exceptions::ValidationFailed)
313
371
  end
@@ -339,12 +397,18 @@ shared_examples_for "a securable resource without existing target" do
339
397
  expect(descriptor.group).to eq(SID.default_security_object_group)
340
398
  end
341
399
 
342
- it "sets group when group is specified" do
400
+ it "sets group when group is specified by name" do
343
401
  resource.group "Everyone"
344
402
  resource.run_action(:create)
345
403
  expect(descriptor.group).to eq(SID.Everyone)
346
404
  end
347
405
 
406
+ it "sets group when group is specified by SID" do
407
+ resource.group SID.Everyone.to_s
408
+ resource.run_action(:create)
409
+ expect(descriptor.group).to eq(SID.Everyone)
410
+ end
411
+
348
412
  it "fails to set group when group has invalid characters" do
349
413
  expect { resource.group 'Lance "The Nose" Glindenberry III' }.to raise_error(Chef::Exceptions::ValidationFailed)
350
414
  end
@@ -406,6 +470,17 @@ shared_examples_for "a securable resource without existing target" do
406
470
  allowed_acl(SID.Guest, expected_modify_perms)
407
471
  )
408
472
  end
473
+
474
+ it "multiple rights with SID" do
475
+ resource.rights(:read, SID.Everyone.to_s)
476
+ resource.rights(:modify, SID.Guest.to_s)
477
+ resource.run_action(:create)
478
+
479
+ expect(explicit_aces).to eq(
480
+ allowed_acl(SID.Everyone, expected_read_perms) +
481
+ allowed_acl(SID.Guest, expected_modify_perms)
482
+ )
483
+ end
409
484
  end
410
485
  end
411
486
 
@@ -443,6 +518,12 @@ shared_examples_for "a securable resource without existing target" do
443
518
  expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_full_control_perms))
444
519
  end
445
520
 
521
+ it "using SID" do
522
+ resource.deny_rights(:full_control, SID.Guest.to_s)
523
+ resource.run_action(:create)
524
+ expect(explicit_aces).to eq(denied_acl(SID.Guest, expected_full_control_perms))
525
+ end
526
+
446
527
  it "deny_rights ahead of rights" do
447
528
  resource.rights(:read, "Everyone")
448
529
  resource.deny_rights(:modify, "Guest")