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
@@ -0,0 +1,127 @@
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 ConfigShow < Knife
24
+ banner "knife config show [OPTION...] (options)\nDisplays the value of Chef::Config[OPTION] (or all config values)"
25
+
26
+ option :all,
27
+ short: "-a",
28
+ long: "--all",
29
+ description: "Include options that are not set in the configuration.",
30
+ default: false
31
+
32
+ option :raw,
33
+ short: "-r",
34
+ long: "--raw",
35
+ description: "Display a each value with no formatting.",
36
+ default: false
37
+
38
+ def run
39
+ if config[:format] == "summary" && !config[:raw]
40
+ # If using the default, human-readable output, also show which config files are being loaded.
41
+ # Some of this is a bit hacky since it duplicates
42
+ wcl = self.class.config_loader
43
+ if wcl.credentials_found
44
+ loading_from("credentials", ChefConfig::PathHelper.home(".chef", "credentials"))
45
+ end
46
+ if wcl.config_location
47
+ loading_from("configuration", wcl.config_location)
48
+ end
49
+
50
+ if Chef::Config[:config_d_dir]
51
+ wcl.find_dot_d(Chef::Config[:config_d_dir]).each do |path|
52
+ loading_from(".d/ configuration", path)
53
+ end
54
+ end
55
+ end
56
+
57
+ # Dump the whole config, including defaults is --all was given.
58
+ config_data = Chef::Config.save(config[:all])
59
+ # Two special cases, these are set during knife startup but we don't usually care about them.
60
+ unless config[:all]
61
+ config_data.delete(:color)
62
+ # Only keep these if true, false is much less important because it's the default.
63
+ config_data.delete(:local_mode) unless config_data[:local_mode]
64
+ config_data.delete(:enforce_default_paths) unless config_data[:enforce_default_paths]
65
+ config_data.delete(:enforce_path_sanity) unless config_data[:enforce_path_sanity]
66
+ end
67
+
68
+ # Extract the data to show.
69
+ output_data = {}
70
+ if @name_args.empty?
71
+ output_data = config_data
72
+ else
73
+ @name_args.each do |filter|
74
+ if filter =~ %r{^/(.*)/(i?)$}
75
+ # It's a regex.
76
+ filter_re = Regexp.new($1, $2 ? Regexp::IGNORECASE : 0)
77
+ config_data.each do |key, value|
78
+ output_data[key] = value if key.to_s&.match?(filter_re)
79
+ end
80
+ else
81
+ # It's a dotted path string.
82
+ filter_parts = filter.split(/\./)
83
+ extract = lambda do |memo, filter_part|
84
+ memo.is_a?(Hash) ? memo[filter_part.to_sym] : nil
85
+ end
86
+ # Check against both config_data and all of the data, so that even
87
+ # in non-all mode, if you ask for a key that isn't in the non-all
88
+ # data, it will check against the broader set.
89
+ output_data[filter] = filter_parts.inject(config_data, &extract) || filter_parts.inject(Chef::Config.save(true), &extract)
90
+ end
91
+ end
92
+ end
93
+
94
+ # Fix up some values.
95
+ output_data.each do |key, value|
96
+ if value == STDOUT
97
+ output_data[key] = "STDOUT"
98
+ elsif value == STDERR
99
+ output_data[key] = "STDERR"
100
+ end
101
+ end
102
+
103
+ # Show the data.
104
+ if config[:raw]
105
+ output_data.each_value do |value|
106
+ ui.msg(value)
107
+ end
108
+ else
109
+ ui.output(output_data)
110
+ end
111
+ end
112
+
113
+ private
114
+
115
+ # Display a banner about loading from a config file.
116
+ #
117
+ # @api private
118
+ # @param type_of_file [String] Description of the file for the banner.
119
+ # @param path [String] Path of the file.
120
+ # @return [nil]
121
+ def loading_from(type_of_file, path)
122
+ path = Pathname.new(path).realpath
123
+ ui.msg(ui.color("Loading from #{type_of_file} file #{path}", :yellow))
124
+ end
125
+ end
126
+ end
127
+ end
@@ -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