chef 16.4.41 → 16.5.64

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 (268) 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/lib/chef/application.rb +18 -16
  7. data/lib/chef/application/apply.rb +12 -7
  8. data/lib/chef/application/base.rb +26 -23
  9. data/lib/chef/application/client.rb +10 -4
  10. data/lib/chef/application/exit_code.rb +13 -4
  11. data/lib/chef/application/knife.rb +22 -11
  12. data/lib/chef/application/solo.rb +2 -1
  13. data/lib/chef/application/windows_service.rb +14 -14
  14. data/lib/chef/application/windows_service_manager.rb +6 -6
  15. data/lib/chef/chef_fs/knife.rb +2 -2
  16. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  17. data/lib/chef/client.rb +10 -11
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  19. data/lib/chef/cookbook/synchronizer.rb +2 -2
  20. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  21. data/lib/chef/cookbook_uploader.rb +1 -1
  22. data/lib/chef/data_collector.rb +6 -5
  23. data/lib/chef/data_collector/config_validation.rb +22 -13
  24. data/lib/chef/data_collector/run_end_message.rb +2 -2
  25. data/lib/chef/data_collector/run_start_message.rb +1 -1
  26. data/lib/chef/deprecated.rb +1 -1
  27. data/lib/chef/deprecation/warnings.rb +2 -2
  28. data/lib/chef/digester.rb +2 -2
  29. data/lib/chef/dsl/chef_vault.rb +1 -1
  30. data/lib/chef/dsl/data_query.rb +2 -2
  31. data/lib/chef/dsl/platform_introspection.rb +1 -1
  32. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  33. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  34. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  35. data/lib/chef/environment.rb +2 -2
  36. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  37. data/lib/chef/exceptions.rb +4 -4
  38. data/lib/chef/file_access_control/windows.rb +5 -1
  39. data/lib/chef/formatters/doc.rb +7 -6
  40. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  41. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  42. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  43. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  44. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  45. data/lib/chef/formatters/minimal.rb +5 -4
  46. data/lib/chef/http.rb +6 -4
  47. data/lib/chef/http/auth_credentials.rb +5 -1
  48. data/lib/chef/http/authenticator.rb +1 -1
  49. data/lib/chef/http/basic_client.rb +4 -2
  50. data/lib/chef/http/decompressor.rb +1 -1
  51. data/lib/chef/http/http_request.rb +7 -5
  52. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  53. data/lib/chef/http/ssl_policies.rb +1 -1
  54. data/lib/chef/json_compat.rb +1 -1
  55. data/lib/chef/knife.rb +4 -4
  56. data/lib/chef/knife/bootstrap.rb +16 -14
  57. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  58. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  59. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  60. data/lib/chef/knife/client_create.rb +3 -3
  61. data/lib/chef/knife/config_get.rb +8 -97
  62. data/lib/chef/knife/config_get_profile.rb +9 -9
  63. data/lib/chef/knife/config_list.rb +139 -0
  64. data/lib/chef/knife/config_list_profiles.rb +8 -98
  65. data/lib/chef/knife/config_show.rb +127 -0
  66. data/lib/chef/knife/config_use.rb +61 -0
  67. data/lib/chef/knife/config_use_profile.rb +9 -24
  68. data/lib/chef/knife/configure.rb +2 -2
  69. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  70. data/lib/chef/knife/core/object_loader.rb +1 -1
  71. data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
  72. data/lib/chef/knife/exec.rb +2 -2
  73. data/lib/chef/knife/node_show.rb +2 -2
  74. data/lib/chef/knife/serve.rb +3 -3
  75. data/lib/chef/knife/ssh.rb +16 -1
  76. data/lib/chef/knife/ssl_check.rb +3 -3
  77. data/lib/chef/knife/status.rb +2 -2
  78. data/lib/chef/knife/user_create.rb +2 -2
  79. data/lib/chef/knife/yaml_convert.rb +1 -1
  80. data/lib/chef/local_mode.rb +2 -2
  81. data/lib/chef/log/syslog.rb +2 -2
  82. data/lib/chef/log/winevt.rb +2 -2
  83. data/lib/chef/mixin/deep_merge.rb +0 -12
  84. data/lib/chef/mixin/openssl_helper.rb +1 -4
  85. data/lib/chef/mixin/template.rb +2 -2
  86. data/lib/chef/mixin/uris.rb +2 -2
  87. data/lib/chef/mixin/versioned_api.rb +1 -2
  88. data/lib/chef/monkey_patches/net_http.rb +4 -4
  89. data/lib/chef/node_map.rb +2 -2
  90. data/lib/chef/policy_builder/policyfile.rb +2 -2
  91. data/lib/chef/provider.rb +0 -4
  92. data/lib/chef/provider/file.rb +2 -2
  93. data/lib/chef/provider/ifconfig.rb +1 -1
  94. data/lib/chef/provider/launchd.rb +2 -2
  95. data/lib/chef/provider/mount/linux.rb +63 -0
  96. data/lib/chef/provider/package/rubygems.rb +21 -18
  97. data/lib/chef/provider/package/snap.rb +0 -1
  98. data/lib/chef/provider/package/windows.rb +2 -2
  99. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  100. data/lib/chef/provider/package/zypper.rb +1 -1
  101. data/lib/chef/provider/remote_file/content.rb +3 -0
  102. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  103. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  104. data/lib/chef/provider/route.rb +2 -6
  105. data/lib/chef/provider/service/macosx.rb +2 -2
  106. data/lib/chef/provider/template_finder.rb +2 -10
  107. data/lib/chef/provider/user/dscl.rb +3 -3
  108. data/lib/chef/provider/user/mac.rb +1 -1
  109. data/lib/chef/provider/windows_task.rb +1 -2
  110. data/lib/chef/provider/zypper_repository.rb +2 -2
  111. data/lib/chef/provider_resolver.rb +1 -1
  112. data/lib/chef/providers.rb +1 -0
  113. data/lib/chef/recipe.rb +2 -2
  114. data/lib/chef/resource.rb +1 -1
  115. data/lib/chef/resource/apt_repository.rb +1 -1
  116. data/lib/chef/resource/bff_package.rb +22 -0
  117. data/lib/chef/resource/breakpoint.rb +57 -2
  118. data/lib/chef/resource/build_essential.rb +1 -1
  119. data/lib/chef/resource/cab_package.rb +29 -0
  120. data/lib/chef/resource/chef_client_cron.rb +32 -25
  121. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  122. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  123. data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
  124. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  125. data/lib/chef/resource/chef_gem.rb +10 -10
  126. data/lib/chef/resource/chef_handler.rb +148 -4
  127. data/lib/chef/resource/chef_sleep.rb +2 -2
  128. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  129. data/lib/chef/resource/cookbook_file.rb +2 -2
  130. data/lib/chef/resource/cron/cron_d.rb +0 -1
  131. data/lib/chef/resource/dnf_package.rb +2 -2
  132. data/lib/chef/resource/dsc_resource.rb +0 -1
  133. data/lib/chef/resource/dsc_script.rb +2 -2
  134. data/lib/chef/resource/execute.rb +6 -6
  135. data/lib/chef/resource/file.rb +4 -4
  136. data/lib/chef/resource/gem_package.rb +5 -5
  137. data/lib/chef/resource/homebrew_package.rb +3 -3
  138. data/lib/chef/resource/homebrew_update.rb +5 -5
  139. data/lib/chef/resource/hostname.rb +2 -2
  140. data/lib/chef/resource/launchd.rb +2 -1
  141. data/lib/chef/resource/locale.rb +2 -2
  142. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  143. data/lib/chef/resource/notify_group.rb +0 -1
  144. data/lib/chef/resource/ohai.rb +46 -3
  145. data/lib/chef/resource/ohai_hint.rb +33 -0
  146. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  147. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  148. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  149. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  150. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  151. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  152. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  153. data/lib/chef/resource/osx_profile.rb +77 -13
  154. data/lib/chef/resource/plist.rb +1 -1
  155. data/lib/chef/resource/powershell_package_source.rb +5 -5
  156. data/lib/chef/resource/reboot.rb +2 -2
  157. data/lib/chef/resource/remote_file.rb +3 -3
  158. data/lib/chef/resource/rhsm_register.rb +22 -10
  159. data/lib/chef/resource/ruby_block.rb +2 -2
  160. data/lib/chef/resource/scm/subversion.rb +2 -2
  161. data/lib/chef/resource/service.rb +3 -3
  162. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  163. data/lib/chef/resource/support/cron.d.erb +1 -1
  164. data/lib/chef/resource/support/cron_access.erb +1 -1
  165. data/lib/chef/resource/support/sudoer.erb +1 -1
  166. data/lib/chef/resource/support/ulimit.erb +1 -1
  167. data/lib/chef/resource/sysctl.rb +1 -5
  168. data/lib/chef/resource/systemd_unit.rb +2 -2
  169. data/lib/chef/resource/template.rb +2 -2
  170. data/lib/chef/resource/windows_ad_join.rb +10 -3
  171. data/lib/chef/resource/windows_certificate.rb +6 -4
  172. data/lib/chef/resource/windows_firewall_profile.rb +22 -20
  173. data/lib/chef/resource/windows_package.rb +28 -5
  174. data/lib/chef/resource/windows_printer.rb +5 -3
  175. data/lib/chef/resource/windows_printer_port.rb +6 -4
  176. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  177. data/lib/chef/resource/windows_workgroup.rb +3 -3
  178. data/lib/chef/resource/yum_package.rb +2 -2
  179. data/lib/chef/resources.rb +3 -1
  180. data/lib/chef/run_context.rb +2 -2
  181. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  182. data/lib/chef/run_lock.rb +2 -2
  183. data/lib/chef/search/query.rb +4 -5
  184. data/lib/chef/shell.rb +31 -26
  185. data/lib/chef/shell/ext.rb +11 -11
  186. data/lib/chef/shell/shell_session.rb +2 -2
  187. data/lib/chef/train_transport.rb +5 -104
  188. data/lib/chef/util/diff.rb +3 -3
  189. data/lib/chef/util/powershell/cmdlet.rb +3 -1
  190. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  191. data/lib/chef/util/threaded_job_queue.rb +0 -2
  192. data/lib/chef/version.rb +1 -1
  193. data/lib/chef/win32/crypto.rb +1 -1
  194. data/lib/chef/win32/registry.rb +1 -2
  195. data/spec/data/shef-config.rb +1 -1
  196. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  197. data/spec/functional/resource/aix_service_spec.rb +2 -2
  198. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  199. data/spec/functional/resource/insserv_spec.rb +1 -1
  200. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  201. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  202. data/spec/functional/resource/windows_task_spec.rb +13 -13
  203. data/spec/functional/version_spec.rb +3 -3
  204. data/spec/integration/client/client_spec.rb +4 -4
  205. data/spec/integration/client/exit_code_spec.rb +3 -2
  206. data/spec/integration/client/ipv6_spec.rb +1 -1
  207. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  208. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  209. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  210. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  211. data/spec/integration/ohai/ohai_spec.rb +61 -0
  212. data/spec/integration/recipes/remote_directory.rb +1 -1
  213. data/spec/integration/solo/solo_spec.rb +5 -5
  214. data/spec/spec_helper.rb +6 -3
  215. data/spec/stress/win32/file_spec.rb +1 -1
  216. data/spec/support/chef_helpers.rb +2 -2
  217. data/spec/support/matchers/leak.rb +2 -2
  218. data/spec/support/platform_helpers.rb +16 -34
  219. data/spec/support/shared/functional/securable_resource.rb +108 -27
  220. data/spec/support/shared/functional/win32_service.rb +1 -1
  221. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  222. data/spec/tiny_server.rb +0 -1
  223. data/spec/unit/application/client_spec.rb +2 -2
  224. data/spec/unit/application/exit_code_spec.rb +10 -0
  225. data/spec/unit/application_spec.rb +4 -6
  226. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  227. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  228. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  229. data/spec/unit/cookbook_spec.rb +2 -2
  230. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  231. data/spec/unit/data_collector_spec.rb +0 -113
  232. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  233. data/spec/unit/file_access_control_spec.rb +1 -1
  234. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  235. data/spec/unit/knife/core/ui_spec.rb +1 -0
  236. data/spec/unit/knife/ssh_spec.rb +2 -2
  237. data/spec/unit/lwrp_spec.rb +3 -3
  238. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  239. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  240. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  241. data/spec/unit/mixin/securable_spec.rb +2 -2
  242. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  243. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  244. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  245. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  246. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  247. data/spec/unit/provider/route_spec.rb +0 -2
  248. data/spec/unit/recipe_spec.rb +1 -1
  249. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  250. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  251. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  252. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  253. data/spec/unit/resource/launchd_spec.rb +8 -0
  254. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  255. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  256. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  257. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  258. data/spec/unit/run_lock_spec.rb +5 -1
  259. data/spec/unit/runner_spec.rb +1 -2
  260. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  261. data/spec/unit/shell/shell_session_spec.rb +35 -64
  262. data/spec/unit/shell_spec.rb +16 -19
  263. data/spec/unit/train_transport_spec.rb +14 -13
  264. data/spec/unit/util/selinux_spec.rb +2 -0
  265. data/tasks/rspec.rb +0 -2
  266. metadata +41 -17
  267. data/lib/chef/dist.rb +0 -68
  268. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -0,0 +1,61 @@
1
+ #
2
+ # Author:: Vivek Singh (<vsingh@chef.io>)
3
+ # Copyright:: Copyright (c) Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require_relative "../knife"
20
+
21
+ class Chef
22
+ class Knife
23
+ class ConfigUse < Knife
24
+ banner "knife config use [PROFILE]"
25
+
26
+ deps do
27
+ require "fileutils" unless defined?(FileUtils)
28
+ end
29
+
30
+ # Disable normal config loading since this shouldn't fail if the profile
31
+ # doesn't exist of the config is otherwise corrupted.
32
+ def configure_chef
33
+ apply_computed_config
34
+ end
35
+
36
+ def run
37
+ profile = @name_args[0]&.strip
38
+ if profile.nil? || profile.empty?
39
+ ui.msg(self.class.config_loader.credentials_profile(config[:profile]))
40
+ else
41
+ credentials_data = self.class.config_loader.parse_credentials_file
42
+ context_file = ChefConfig::PathHelper.home(".chef", "context").freeze
43
+
44
+ if credentials_data.nil? || credentials_data.empty?
45
+ ui.fatal("No profiles found, #{self.class.config_loader.credentials_file_path} does not exist or is empty")
46
+ exit 1
47
+ end
48
+
49
+ if credentials_data[profile].nil?
50
+ raise ChefConfig::ConfigurationError, "Profile #{profile} doesn't exist. Please add it to #{self.class.config_loader.credentials_file_path} 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."
51
+ else
52
+ # Ensure the .chef/ folder exists.
53
+ FileUtils.mkdir_p(File.dirname(context_file))
54
+ IO.write(context_file, "#{profile}\n")
55
+ ui.msg("Set default profile to #{profile}")
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -16,23 +16,21 @@
16
16
  #
17
17
 
18
18
  require_relative "../knife"
19
+ require_relative "./config_use"
19
20
 
20
21
  class Chef
21
22
  class Knife
22
- class ConfigUseProfile < Knife
23
- banner "knife config use-profile PROFILE"
23
+ class ConfigUseProfile < ConfigUse
24
24
 
25
- deps do
26
- require "fileutils" unless defined?(FileUtils)
27
- end
25
+ # Handle the subclassing (knife doesn't do this :()
26
+ dependency_loaders.concat(superclass.dependency_loaders)
28
27
 
29
- # Disable normal config loading since this shouldn't fail if the profile
30
- # doesn't exist of the config is otherwise corrupted.
31
- def configure_chef
32
- apply_computed_config
33
- end
28
+ banner "knife config use-profile PROFILE"
29
+ category "deprecated"
34
30
 
35
31
  def run
32
+ Chef::Log.warn("knife config use-profile has been deprecated in favor of knife config use. This will be removed in the major release version!")
33
+
36
34
  credentials_data = self.class.config_loader.parse_credentials_file
37
35
  context_file = ChefConfig::PathHelper.home(".chef", "context").freeze
38
36
  profile = @name_args[0]&.strip
@@ -42,21 +40,8 @@ class Chef
42
40
  exit 1
43
41
  end
44
42
 
45
- if credentials_data.nil? || credentials_data.empty?
46
- ui.fatal("No profiles found, #{self.class.config_loader.credentials_file_path} does not exist or is empty")
47
- exit 1
48
- end
49
-
50
- if credentials_data[profile].nil?
51
- raise ChefConfig::ConfigurationError, "Profile #{profile} doesn't exist. Please add it to #{self.class.config_loader.credentials_file_path} 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."
52
- else
53
- # Ensure the .chef/ folder exists.
54
- FileUtils.mkdir_p(File.dirname(context_file))
55
- IO.write(context_file, "#{profile}\n")
56
- ui.msg("Set default profile to #{profile}")
57
- end
43
+ super
58
44
  end
59
-
60
45
  end
61
46
  end
62
47
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../knife"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  class Knife
@@ -119,7 +119,7 @@ class Chef
119
119
  if config[:initial]
120
120
  @new_client_name = config[:node_name] || ask_question("Please enter a name for the new user: ", default: Etc.getlogin)
121
121
  @admin_client_name = config[:admin_client_name] || ask_question("Please enter the existing admin name: ", default: "admin")
122
- @admin_client_key = config[:admin_client_key] || ask_question("Please enter the location of the existing admin's private key: ", default: "#{Chef::Dist::SERVER_CONF_DIR}/admin.pem")
122
+ @admin_client_key = config[:admin_client_key] || ask_question("Please enter the location of the existing admin's private key: ", default: "#{ChefUtils::Dist::Server::CONF_DIR}/admin.pem")
123
123
  @admin_client_key = File.expand_path(@admin_client_key)
124
124
  else
125
125
  @new_client_name = config[:node_name] || ask_question("Please enter an existing username or clientname for the API: ", default: Etc.getlogin)
@@ -19,7 +19,7 @@
19
19
  require_relative "../../run_list"
20
20
  require_relative "../../util/path_helper"
21
21
  require "pathname" unless defined?(Pathname)
22
- require_relative "../../dist"
22
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
23
23
 
24
24
  class Chef
25
25
  class Knife
@@ -184,7 +184,7 @@ class Chef
184
184
 
185
185
  def start_chef
186
186
  # If the user doesn't have a client path configure, let bash use the PATH for what it was designed for
187
- client_path = chef_config[:chef_client_path] || "#{Chef::Dist::CLIENT}"
187
+ client_path = chef_config[:chef_client_path] || ChefUtils::Dist::Infra::CLIENT
188
188
  s = "#{client_path} -j /etc/chef/first-boot.json"
189
189
  if config[:verbosity] && config[:verbosity] >= 3
190
190
  s << " -l trace"
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "ffi_yajl" unless defined?(FFI_Yajl)
19
+ autoload :FFI_Yajl, "ffi_yajl"
20
20
  require_relative "../../util/path_helper"
21
21
  require_relative "../../data_bag_item"
22
22
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  require_relative "bootstrap_context"
20
20
  require_relative "../../util/path_helper"
21
- require_relative "../../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -175,7 +175,7 @@ class Chef
175
175
  bootstrap_environment_option = bootstrap_environment.nil? ? "" : " -E #{bootstrap_environment}"
176
176
 
177
177
  start_chef = "SET \"PATH=%SYSTEM32%;%SystemRoot%;%SYSTEM32%\\Wbem;%SYSTEM32%\\WindowsPowerShell\\v1.0\\;C:\\ruby\\bin;#{c_opscode_dir}\\bin;#{c_opscode_dir}\\embedded\\bin\;%PATH%\"\n"
178
- start_chef << "#{Chef::Dist::CLIENT} -c #{client_rb} -j #{first_boot}#{bootstrap_environment_option}\n"
178
+ start_chef << "#{ChefUtils::Dist::Infra::CLIENT} -c #{client_rb} -j #{first_boot}#{bootstrap_environment_option}\n"
179
179
  end
180
180
 
181
181
  def win_wget
@@ -288,7 +288,7 @@ class Chef
288
288
  end
289
289
 
290
290
  def local_download_path
291
- "%TEMP%\\#{Chef::Dist::CLIENT}-latest.msi"
291
+ "%TEMP%\\#{ChefUtils::Dist::Infra::CLIENT}-latest.msi"
292
292
  end
293
293
 
294
294
  # Build a URL to query www.chef.io that will redirect to the correct
@@ -365,7 +365,7 @@ class Chef
365
365
  <<~EOH
366
366
  @set MSIERRORCODE=!ERRORLEVEL!
367
367
  @if ERRORLEVEL 1 (
368
- @echo WARNING: Failed to install #{Chef::Dist::PRODUCT} MSI package in remote context with status code !MSIERRORCODE!.
368
+ @echo WARNING: Failed to install #{ChefUtils::Dist::Infra::PRODUCT} MSI package in remote context with status code !MSIERRORCODE!.
369
369
  @echo WARNING: This may be due to a defect in operating system update KB2918614: http://support.microsoft.com/kb/2918614
370
370
  @set OLDLOGLOCATION="%CHEF_CLIENT_MSI_LOG_PATH%-fail.log"
371
371
  @move "%CHEF_CLIENT_MSI_LOG_PATH%" "!OLDLOGLOCATION!" > NUL
@@ -374,26 +374,26 @@ class Chef
374
374
  @schtasks /create /f /sc once /st 00:00:00 /tn chefclientbootstraptask /ru SYSTEM /rl HIGHEST /tr \"cmd /c #{command} & sleep 2 & waitfor /s %computername% /si chefclientinstalldone\"
375
375
 
376
376
  @if ERRORLEVEL 1 (
377
- @echo ERROR: Failed to create #{Chef::Dist::PRODUCT} installation scheduled task with status code !ERRORLEVEL! > "&2"
377
+ @echo ERROR: Failed to create #{ChefUtils::Dist::Infra::PRODUCT} installation scheduled task with status code !ERRORLEVEL! > "&2"
378
378
  ) else (
379
- @echo Successfully created scheduled task to install #{Chef::Dist::PRODUCT}.
379
+ @echo Successfully created scheduled task to install #{ChefUtils::Dist::Infra::PRODUCT}.
380
380
  @schtasks /run /tn chefclientbootstraptask
381
381
  @if ERRORLEVEL 1 (
382
- @echo ERROR: Failed to execute #{Chef::Dist::PRODUCT} installation scheduled task with status code !ERRORLEVEL!. > "&2"
382
+ @echo ERROR: Failed to execute #{ChefUtils::Dist::Infra::PRODUCT} installation scheduled task with status code !ERRORLEVEL!. > "&2"
383
383
  ) else (
384
- @echo Successfully started #{Chef::Dist::PRODUCT} installation scheduled task.
384
+ @echo Successfully started #{ChefUtils::Dist::Infra::PRODUCT} installation scheduled task.
385
385
  @echo Waiting for installation to complete -- this may take a few minutes...
386
386
  waitfor chefclientinstalldone /t 600
387
387
  if ERRORLEVEL 1 (
388
- @echo ERROR: Timed out waiting for #{Chef::Dist::PRODUCT} package to install
388
+ @echo ERROR: Timed out waiting for #{ChefUtils::Dist::Infra::PRODUCT} package to install
389
389
  ) else (
390
- @echo Finished waiting for #{Chef::Dist::PRODUCT} package to install.
390
+ @echo Finished waiting for #{ChefUtils::Dist::Infra::PRODUCT} package to install.
391
391
  )
392
392
  @schtasks /delete /f /tn chefclientbootstraptask > NUL
393
393
  )
394
394
  )
395
395
  ) else (
396
- @echo Successfully installed #{Chef::Dist::PRODUCT} package.
396
+ @echo Successfully installed #{ChefUtils::Dist::Infra::PRODUCT} package.
397
397
  )
398
398
  EOH
399
399
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../knife"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef::Knife::Exec < Chef::Knife
23
23
 
@@ -30,7 +30,7 @@ class Chef::Knife::Exec < Chef::Knife
30
30
  option :exec,
31
31
  short: "-E CODE",
32
32
  long: "--exec CODE",
33
- description: "A string of #{Chef::Dist::PRODUCT} code to execute."
33
+ description: "A string of #{ChefUtils::Dist::Infra::PRODUCT} code to execute."
34
34
 
35
35
  option :script_path,
36
36
  short: "-p PATH:PATH",
@@ -18,7 +18,7 @@
18
18
 
19
19
  require_relative "../knife"
20
20
  require_relative "core/node_presenter"
21
- require_relative "../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -42,7 +42,7 @@ class Chef
42
42
  option :environment,
43
43
  short: "-E",
44
44
  long: "--environment",
45
- description: "Show only the #{Chef::Dist::PRODUCT} environment."
45
+ description: "Show only the #{ChefUtils::Dist::Infra::PRODUCT} environment."
46
46
 
47
47
  def run
48
48
  ui.use_presenter Knife::Core::NodePresenter
@@ -16,7 +16,7 @@
16
16
 
17
17
  require_relative "../knife"
18
18
  require_relative "../local_mode"
19
- require_relative "../dist"
19
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
20
20
 
21
21
  class Chef
22
22
  class Knife
@@ -30,11 +30,11 @@ class Chef
30
30
 
31
31
  option :chef_repo_path,
32
32
  long: "--chef-repo-path PATH",
33
- description: "Overrides the location of #{Chef::Dist::PRODUCT} repo. Default is specified by chef_repo_path in the config."
33
+ description: "Overrides the location of #{ChefUtils::Dist::Infra::PRODUCT} repo. Default is specified by chef_repo_path in the config."
34
34
 
35
35
  option :chef_zero_host,
36
36
  long: "--chef-zero-host IP",
37
- description: "Overrides the host upon which #{Chef::Dist::ZERO} listens. Default is 127.0.0.1."
37
+ description: "Overrides the host upon which #{ChefUtils::Dist::Zero::PRODUCT} listens. Default is 127.0.0.1."
38
38
 
39
39
  def configure_chef
40
40
  super
@@ -358,11 +358,21 @@ class Chef
358
358
  subsession ||= session
359
359
  command = fixup_sudo(command)
360
360
  command.force_encoding("binary") if command.respond_to?(:force_encoding)
361
+ begin
362
+ open_session(subsession, command)
363
+ rescue => e
364
+ open_session(subsession, command, true)
365
+ end
366
+ end
367
+
368
+ def open_session(subsession, command, pty = false)
369
+ stderr = ""
370
+ exit_status = 0
361
371
  subsession.open_channel do |chan|
362
372
  if config[:on_error] && exit_status != 0
363
373
  chan.close
364
374
  else
365
- chan.request_pty
375
+ chan.request_pty if pty
366
376
  chan.exec command do |ch, success|
367
377
  raise ArgumentError, "Cannot execute #{command}" unless success
368
378
 
@@ -373,6 +383,11 @@ class Chef
373
383
  ichannel.send_data("#{get_password}\n")
374
384
  end
375
385
  end
386
+
387
+ ch.on_extended_data do |_, _type, data|
388
+ stderr += data
389
+ end
390
+
376
391
  ch.on_request "exit-status" do |ichannel, data|
377
392
  exit_status = [exit_status, data.read_long].max
378
393
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../knife"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  class Knife
@@ -190,7 +190,7 @@ class Chef
190
190
  #{ui.color("TO FIX THIS ERROR:", :bold)}
191
191
 
192
192
  If the server you are connecting to uses a self-signed certificate, you must
193
- configure #{Chef::Dist::PRODUCT} to trust that server's certificate.
193
+ configure #{ChefUtils::Dist::Infra::PRODUCT} to trust that server's certificate.
194
194
 
195
195
  By default, the certificate is stored in the following location on the host
196
196
  where your chef-server runs:
@@ -234,7 +234,7 @@ class Chef
234
234
  end
235
235
 
236
236
  def debug_chef_ssl_config
237
- ui.err "#{Chef::Dist::PRODUCT} SSL Configuration:"
237
+ ui.err "#{ChefUtils::Dist::Infra::PRODUCT} SSL Configuration:"
238
238
  ui.err "* ssl_ca_path: #{configuration.ssl_ca_path.inspect}"
239
239
  ui.err "* ssl_ca_file: #{configuration.ssl_ca_file.inspect}"
240
240
  ui.err "* trusted_certs_dir: #{configuration.trusted_certs_dir.inspect}"
@@ -19,7 +19,7 @@
19
19
  require_relative "../knife"
20
20
  require_relative "core/status_presenter"
21
21
  require_relative "core/node_presenter"
22
- require_relative "../dist"
22
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
23
23
 
24
24
  class Chef
25
25
  class Knife
@@ -44,7 +44,7 @@ class Chef
44
44
 
45
45
  option :hide_by_mins,
46
46
  long: "--hide-by-mins MINS",
47
- description: "Hide nodes that have run #{Chef::Dist::CLIENT} in the last MINS minutes"
47
+ description: "Hide nodes that have run #{ChefUtils::Dist::Infra::CLIENT} in the last MINS minutes"
48
48
 
49
49
  def append_to_query(term)
50
50
  @query << " AND " unless @query.empty?
@@ -18,7 +18,7 @@
18
18
  #
19
19
 
20
20
  require_relative "../knife"
21
- require_relative "../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -42,7 +42,7 @@ class Chef
42
42
  option :prevent_keygen,
43
43
  short: "-k",
44
44
  long: "--prevent-keygen",
45
- description: "API V1 (#{Chef::Dist::SERVER_PRODUCT} 12.1+) only. Prevent server from generating a default key pair for you. Cannot be passed with --user-key.",
45
+ description: "API V1 (#{ChefUtils::Dist::Server::PRODUCT} 12.1+) only. Prevent server from generating a default key pair for you. Cannot be passed with --user-key.",
46
46
  boolean: true
47
47
 
48
48
  banner "knife user create USERNAME DISPLAY_NAME FIRST_NAME LAST_NAME EMAIL PASSWORD (options)"
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "yaml" unless defined?(YAML)
19
+ autoload :YAML, "yaml"
20
20
  require_relative "../knife"
21
21
  class Chef::Knife::YamlConvert < Chef::Knife
22
22
 
@@ -15,9 +15,9 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
+ require "chef-utils" unless defined?(ChefUtils)
18
19
  require_relative "config"
19
20
  require_relative "monkey_patches/webrick-utils" if ChefUtils.windows?
20
- require_relative "dist"
21
21
 
22
22
  class Chef
23
23
  module LocalMode
@@ -79,7 +79,7 @@ class Chef
79
79
 
80
80
  local_mode_url = @chef_zero_server.local_mode_url
81
81
 
82
- Chef::Log.info("Started #{Chef::Dist::ZERO} at #{local_mode_url} with #{@chef_fs.fs_description}")
82
+ Chef::Log.info("Started #{ChefUtils::Dist::Zero::PRODUCT} at #{local_mode_url} with #{@chef_fs.fs_description}")
83
83
  Chef::Config.chef_server_url = local_mode_url
84
84
  end
85
85
  end
@@ -19,7 +19,7 @@
19
19
  require "logger"
20
20
  require "syslog-logger"
21
21
  require_relative "../mixin/unformatter"
22
- require_relative "../dist"
22
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
23
23
 
24
24
  class Chef
25
25
  class Log
@@ -33,7 +33,7 @@ class Chef
33
33
 
34
34
  attr_accessor :sync, :formatter
35
35
 
36
- def initialize(program_name = "#{Chef::Dist::CLIENT}", facility = ::Syslog::LOG_DAEMON, logopts = nil)
36
+ def initialize(program_name = ChefUtils::Dist::Infra::CLIENT, facility = ::Syslog::LOG_DAEMON, logopts = nil)
37
37
  super
38
38
  return if defined? ::Logger::Syslog::SYSLOG
39
39
 
@@ -19,7 +19,7 @@
19
19
  require_relative "../event_loggers/base"
20
20
  require_relative "../platform/query_helpers"
21
21
  require_relative "../mixin/unformatter"
22
- require_relative "../dist"
22
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
23
23
 
24
24
  class Chef
25
25
  class Log
@@ -37,7 +37,7 @@ class Chef
37
37
  FATAL_EVENT_ID = 10104
38
38
 
39
39
  # Since we must install the event logger, this is not really configurable
40
- SOURCE = Chef::Dist::SHORT.freeze
40
+ SOURCE = ChefUtils::Dist::Infra::SHORT.freeze
41
41
 
42
42
  include Chef::Mixin::Unformatter
43
43