chef 15.10.12 → 15.11.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +5 -3
- data/Rakefile +1 -1
- data/lib/chef/application/apply.rb +1 -1
- data/lib/chef/application/exit_code.rb +2 -2
- data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
- data/lib/chef/cookbook_version.rb +4 -4
- data/lib/chef/deprecated.rb +1 -1
- data/lib/chef/dsl/platform_introspection.rb +1 -1
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
- data/lib/chef/knife.rb +26 -20
- data/lib/chef/knife/bootstrap.rb +22 -21
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +12 -8
- data/lib/chef/knife/bootstrap/client_builder.rb +23 -19
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
- data/lib/chef/knife/cookbook_site_search.rb +1 -1
- data/lib/chef/knife/cookbook_site_show.rb +1 -1
- data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -3
- data/lib/chef/knife/ssh.rb +1 -1
- data/lib/chef/mixin/create_path.rb +8 -8
- data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
- data/lib/chef/provider/package/chocolatey.rb +3 -2
- data/lib/chef/provider/service/simple.rb +3 -3
- data/lib/chef/provider/windows_task.rb +1 -1
- data/lib/chef/resource/build_essential.rb +1 -1
- data/lib/chef/resource/launchd.rb +4 -4
- data/lib/chef/resource/macos_userdefaults.rb +3 -3
- data/lib/chef/resource/windows_firewall_rule.rb +8 -4
- data/lib/chef/resource/windows_share.rb +4 -4
- data/lib/chef/resource/windows_task.rb +13 -13
- data/lib/chef/resource_inspector.rb +4 -3
- data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/command_line_helper.rb +89 -0
- data/lib/chef/win32/api/file.rb +18 -18
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/process.rb +2 -2
- data/spec/functional/resource/chocolatey_package_spec.rb +29 -0
- data/spec/functional/resource/user/dscl_spec.rb +1 -1
- data/spec/functional/resource/user/mac_user_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -11
- data/spec/support/shared/functional/file_resource.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +10 -13
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +6 -0
- data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
- data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/osx_profile_spec.rb +2 -2
- data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
- data/spec/unit/provider/package/msu_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_service_spec.rb +1 -1
- data/spec/unit/provider_resolver_spec.rb +9 -9
- data/spec/unit/run_context_spec.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 284b837896f77e4369e5cf591eb17b9a71761df8524a920f36afd7112093eab4
|
4
|
+
data.tar.gz: 8d750cfd693024f1a1a0fd4b0cec42086be4562593dbfb426baece630fe6f2e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb3a42ffe7ac30522a82e35cb852bdf2593ca4d174bc751db126cd40cd8a4eafab1e71c2525242b0889ada8539e135d087ad7d835f3f42cff1863e41c22ca77d
|
7
|
+
data.tar.gz: e6c0733787eef6eff73bb4a0017f431c5cb7683ef9ff72ea5c673418b8ea4cc737f5559bf13f651f2737b11db4fef011a95220572b0ff9bd2e78ff3fb5d482e9
|
data/Gemfile
CHANGED
@@ -7,7 +7,6 @@ source "https://rubygems.org"
|
|
7
7
|
# of bundler versions prior to 1.12.0 (https://github.com/bundler/bundler/commit/193a14fe5e0d56294c7b370a0e59f93b2c216eed)
|
8
8
|
gem "chef", path: "."
|
9
9
|
|
10
|
-
# necessary until we release ohai 15
|
11
10
|
gem "ohai", git: "https://github.com/chef/ohai.git", branch: "15-stable"
|
12
11
|
|
13
12
|
gem "chef-utils", path: File.expand_path("../chef-utils", __FILE__) if File.exist?(File.expand_path("../chef-utils", __FILE__))
|
@@ -23,6 +22,9 @@ end
|
|
23
22
|
|
24
23
|
gem "cheffish", "~> 14"
|
25
24
|
|
25
|
+
# avoid bringing in the new http 4 gem that comes with other ffi baggage which breaks builds
|
26
|
+
gem "chef-telemetry", "=1.0.3"
|
27
|
+
|
26
28
|
group(:omnibus_package) do
|
27
29
|
gem "appbundler"
|
28
30
|
gem "rb-readline"
|
@@ -30,7 +32,7 @@ group(:omnibus_package) do
|
|
30
32
|
gem "inspec-core-bin", "~> 4.18" # need to provide the binaries for inspec
|
31
33
|
gem "chef-vault"
|
32
34
|
gem "ed25519" # ed25519 ssh key support done here as it's a native gem we can't put in train
|
33
|
-
gem "bcrypt_pbkdf" # ed25519 ssh key support done here as it's a native gem we can't put in train
|
35
|
+
gem "bcrypt_pbkdf", ">= 1.1.0.rc1" # ed25519 ssh key support done here as it's a native gem we can't put in train
|
34
36
|
end
|
35
37
|
|
36
38
|
group(:omnibus_package, :pry) do
|
@@ -65,7 +67,6 @@ group(:development, :test) do
|
|
65
67
|
gem "rspec-mocks", "~> 3.5"
|
66
68
|
gem "rspec-expectations", "~> 3.5"
|
67
69
|
gem "rspec_junit_formatter", "~> 0.2.0"
|
68
|
-
gem "simplecov"
|
69
70
|
gem "webmock"
|
70
71
|
gem "fauxhai-ng" # for chef-utils gem
|
71
72
|
end
|
@@ -84,6 +85,7 @@ eval_gemfile("./Gemfile.local") if File.exist?("./Gemfile.local")
|
|
84
85
|
# These lines added for Windows development only.
|
85
86
|
# For FFI to call into PowerShell we need the binaries and assemblies located
|
86
87
|
# in the Ruby bindir.
|
88
|
+
# The Powershell DLL source lives here: https://github.com/chef/chef-powershell-shim
|
87
89
|
#
|
88
90
|
# We copy (and overwrite) these files every time "bundle <exec|install>" is
|
89
91
|
# executed, just in case they have changed.
|
data/Rakefile
CHANGED
@@ -37,7 +37,7 @@ task :super_install do
|
|
37
37
|
sh("rake install")
|
38
38
|
end
|
39
39
|
|
40
|
-
# Templating the powershell extensions so we can inject distro constants
|
40
|
+
# Templating the powershell extensions so we can inject distro constants
|
41
41
|
template_file = ::File.join(::File.dirname(__FILE__), "distro", "templates", "powershell", "chef", "chef.psm1.erb")
|
42
42
|
psm1_path = ::File.join(::File.dirname(__FILE__), "distro", "powershell", "chef")
|
43
43
|
FileUtils.mkdir_p psm1_path
|
@@ -215,7 +215,7 @@ class Chef::Application::Apply < Chef::Application
|
|
215
215
|
Chef::Application.fatal!("#{e.class}: #{e.message}", e)
|
216
216
|
end
|
217
217
|
|
218
|
-
|
218
|
+
# Get this party started
|
219
219
|
def run(enforce_license = false)
|
220
220
|
reconfigure
|
221
221
|
check_license_acceptance if enforce_license
|
@@ -139,8 +139,8 @@ class Chef
|
|
139
139
|
def notify_on_deprecation(message)
|
140
140
|
Chef.deprecated(:exit_code, message)
|
141
141
|
rescue Chef::Exceptions::DeprecatedFeatureError
|
142
|
-
|
143
|
-
|
142
|
+
# Have to rescue this, otherwise this unhandled error preempts
|
143
|
+
# the current exit code assignment.
|
144
144
|
end
|
145
145
|
|
146
146
|
def non_standard_exit_code_warning(exit_code)
|
@@ -204,7 +204,7 @@ class Chef
|
|
204
204
|
@memory_store.create(path, name, data, *options)
|
205
205
|
|
206
206
|
elsif path[0] == "cookbooks" && path.length == 2
|
207
|
-
|
207
|
+
# Do nothing. The entry gets created when the cookbook is created.
|
208
208
|
|
209
209
|
# /policy_groups/GROUP/policies/NAME
|
210
210
|
elsif path[0] == "policy_groups" && path[2] == "policies"
|
@@ -724,8 +724,8 @@ class Chef
|
|
724
724
|
path[-1] = "#{path[-1]}.json"
|
725
725
|
end
|
726
726
|
|
727
|
-
|
728
|
-
|
727
|
+
# /acls/containers|nodes|... do NOT drop into the next elsif, and do
|
728
|
+
# not get .json appended
|
729
729
|
|
730
730
|
# /nodes|clients|.../x.json
|
731
731
|
elsif path.length == 2
|
@@ -71,7 +71,7 @@ class Chef
|
|
71
71
|
# Children are foo.json and bar.json in this case.
|
72
72
|
#
|
73
73
|
def children
|
74
|
-
|
74
|
+
# Grab the names of the children, append json, and make child entries
|
75
75
|
@children ||= root.get_json(api_path).keys.sort.map do |key|
|
76
76
|
make_child_entry(key, true)
|
77
77
|
end
|
@@ -19,7 +19,7 @@ class Chef
|
|
19
19
|
def children
|
20
20
|
result = []
|
21
21
|
seen = {}
|
22
|
-
|
22
|
+
# If multiple things have the same name, the first one wins.
|
23
23
|
multiplexed_dirs.each do |dir|
|
24
24
|
dir.children.each do |child|
|
25
25
|
if seen[child.name]
|
@@ -327,10 +327,10 @@ class Chef
|
|
327
327
|
|
328
328
|
# extract the preference part from the path.
|
329
329
|
if manifest_record_path =~ %r{(#{Regexp.escape(segment.to_s)}/[^/]+/#{Regexp.escape(dirname)})/.+$}
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
330
|
+
# Note the specificy_dirname includes the segment and
|
331
|
+
# dirname argument as above, which is what
|
332
|
+
# preferences_for_path returns. It could be
|
333
|
+
# "files/ubuntu-9.10/dirname", for example.
|
334
334
|
specificity_dirname = $1
|
335
335
|
|
336
336
|
# Record the specificity_dirname only if it's in the list of
|
data/lib/chef/deprecated.rb
CHANGED
@@ -72,7 +72,7 @@ class Chef
|
|
72
72
|
# Just in case someone uses a symbol in the config by mistake.
|
73
73
|
silence_spec = silence_spec.to_s
|
74
74
|
end
|
75
|
-
|
75
|
+
# Check for a silence by deprecation name, or by location.
|
76
76
|
self.class.deprecation_key == silence_spec || self.class.deprecation_id.to_s == silence_spec || "chef-#{self.class.deprecation_id}" == silence_spec.downcase || location.include?(silence_spec)
|
77
77
|
end
|
78
78
|
# check if this warning has been silenced by inline comment.
|
@@ -168,7 +168,7 @@ class Chef
|
|
168
168
|
has_platform
|
169
169
|
end
|
170
170
|
|
171
|
-
|
171
|
+
# Implementation class for determining platform family dependent values
|
172
172
|
class PlatformFamilyDependentValue
|
173
173
|
|
174
174
|
# Create a platform family dependent value object.
|
@@ -46,7 +46,7 @@ class Chef
|
|
46
46
|
when Chef::Exceptions::PrivateKeyMissing
|
47
47
|
error_description.section("Private Key Not Found:", <<~E)
|
48
48
|
Your private key could not be loaded. If the key file exists, ensure that it is
|
49
|
-
readable by #{Chef::Dist::
|
49
|
+
readable by #{Chef::Dist::PRODUCT}.
|
50
50
|
E
|
51
51
|
error_description.section("Relevant Config Settings:", <<~E)
|
52
52
|
client_key "#{api_key}"
|
@@ -99,7 +99,7 @@ class Chef
|
|
99
99
|
# redirect.
|
100
100
|
def describe_404_error(error_description)
|
101
101
|
error_description.section("Resource Not Found:", <<~E)
|
102
|
-
The
|
102
|
+
The #{Chef::Dist::SERVER_PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url is incorrect.
|
103
103
|
E
|
104
104
|
error_description.section("Relevant Config Settings:", <<~E)
|
105
105
|
chef_server_url "#{server_url}"
|
@@ -28,7 +28,7 @@ class Chef
|
|
28
28
|
humanize_http_exception(error_description)
|
29
29
|
when Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError
|
30
30
|
error_description.section("Network Error:", <<~E)
|
31
|
-
There was a network error connecting to the Chef
|
31
|
+
There was a network error connecting to the #{Chef::Dist::SERVER_PRODUCT}:
|
32
32
|
#{exception.message}
|
33
33
|
E
|
34
34
|
error_description.section("Relevant Config Settings:", <<~E)
|
@@ -39,14 +39,14 @@ class Chef
|
|
39
39
|
when Chef::Exceptions::PrivateKeyMissing
|
40
40
|
error_description.section("Private Key Not Found:", <<~E)
|
41
41
|
Your private key could not be loaded. If the key file exists, ensure that it is
|
42
|
-
readable by #{Chef::Dist::
|
42
|
+
readable by #{Chef::Dist::PRODUCT}.
|
43
43
|
E
|
44
44
|
error_description.section("Relevant Config Settings:", <<~E)
|
45
45
|
validation_key "#{api_key}"
|
46
46
|
E
|
47
47
|
when Chef::Exceptions::InvalidRedirect
|
48
48
|
error_description.section("Invalid Redirect:", <<~E)
|
49
|
-
Change your
|
49
|
+
Change your #{Chef::Dist::SERVER_PRODUCT} location in client.rb to the #{Chef::Dist::SERVER_PRODUCT}'s FQDN to avoid unwanted redirections.
|
50
50
|
E
|
51
51
|
when EOFError
|
52
52
|
describe_eof_error(error_description)
|
@@ -61,13 +61,13 @@ class Chef
|
|
61
61
|
when Net::HTTPUnauthorized
|
62
62
|
if clock_skew?
|
63
63
|
error_description.section("Authentication Error:", <<~E)
|
64
|
-
Failed to authenticate to the
|
64
|
+
Failed to authenticate to the #{Chef::Dist::SERVER_PRODUCT} (http 401).
|
65
65
|
The request failed because your clock has drifted by more than 15 minutes.
|
66
66
|
Syncing your clock to an NTP Time source should resolve the issue.
|
67
67
|
E
|
68
68
|
else
|
69
69
|
error_description.section("Authentication Error:", <<~E)
|
70
|
-
Failed to authenticate to the
|
70
|
+
Failed to authenticate to the #{Chef::Dist::SERVER_PRODUCT} (http 401).
|
71
71
|
E
|
72
72
|
|
73
73
|
error_description.section("Server Response:", format_rest_error)
|
@@ -81,7 +81,7 @@ class Chef
|
|
81
81
|
end
|
82
82
|
when Net::HTTPForbidden
|
83
83
|
error_description.section("Authorization Error:", <<~E)
|
84
|
-
Your validation client is not authorized to create the client for this node (HTTP 403).
|
84
|
+
Your validation client is not authorized to create the client for this node on the #{Chef::Dist::SERVER_PRODUCT} (HTTP 403).
|
85
85
|
E
|
86
86
|
error_description.section("Possible Causes:", <<~E)
|
87
87
|
* There may already be a client named "#{config[:node_name]}"
|
@@ -94,7 +94,7 @@ class Chef
|
|
94
94
|
error_description.section("Server Response:", format_rest_error)
|
95
95
|
when Net::HTTPNotFound
|
96
96
|
error_description.section("Resource Not Found:", <<~E)
|
97
|
-
The
|
97
|
+
The #{Chef::Dist::SERVER_PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url configuration is incorrect.
|
98
98
|
E
|
99
99
|
error_description.section("Relevant Config Settings:", <<~E)
|
100
100
|
chef_server_url "#{server_url}"
|
data/lib/chef/knife.rb
CHANGED
@@ -345,31 +345,35 @@ class Chef
|
|
345
345
|
exit(1)
|
346
346
|
end
|
347
347
|
|
348
|
-
#
|
349
|
-
|
350
|
-
|
348
|
+
# This is all set and default mixlib-config values. We only need the default
|
349
|
+
# values here (the set values are explicitly mixed in again later), but there is
|
350
|
+
# no mixlib-config API to get a Hash back with only the default values.
|
351
|
+
#
|
352
|
+
# Assumption: since config_file_defaults is the lowest precedence it doesn't matter
|
353
|
+
# that we include the set values here, but this is a hack and makes the name of the
|
354
|
+
# method a lie. FIXME: make the name not a lie by adding an API to mixlib-config.
|
355
|
+
#
|
356
|
+
# @api private
|
357
|
+
#
|
358
|
+
def config_file_defaults
|
359
|
+
Chef::Config[:knife].save(true) # this is like "dup" to a (real) Hash, and includes default values (and user set values)
|
351
360
|
end
|
352
361
|
|
353
|
-
#
|
354
|
-
#
|
362
|
+
# This is only the user-set mixlib-config values. We do not include the defaults
|
363
|
+
# here so that the config defaults do not override the cli defaults.
|
364
|
+
#
|
365
|
+
# @api private
|
355
366
|
#
|
356
|
-
# NOTE: due to weirdness in mixlib-config #has_key? is only true if the value has
|
357
|
-
# been set by the user -- the Chef::Config defaults return #has_key?() of false and
|
358
|
-
# this code DEPENDS on that functionality since applying the default values in
|
359
|
-
# Chef::Config[:knife] would break the defaults in the cli that we would otherwise
|
360
|
-
# overwrite.
|
361
367
|
def config_file_settings
|
362
|
-
|
363
|
-
if Chef::Config[:knife].key?(key)
|
364
|
-
memo[key] = Chef::Config[:knife][key]
|
365
|
-
end
|
366
|
-
end
|
368
|
+
Chef::Config[:knife].save(false) # this is like "dup" to a (real) Hash, and does not include default values (just user set values)
|
367
369
|
end
|
368
370
|
|
369
371
|
# config is merged in this order (inverse of precedence)
|
370
|
-
#
|
371
|
-
#
|
372
|
-
#
|
372
|
+
# config_file_defaults - Chef::Config[:knife] defaults from chef-config (XXX: this also includes the settings, but they get overwritten)
|
373
|
+
# default_config - mixlib-cli defaults (accessor from mixlib-cli)
|
374
|
+
# config_file_settings - Chef::Config[:knife] user settings from the client.rb file
|
375
|
+
# config - mixlib-cli settings (accessor from mixlib-cli)
|
376
|
+
#
|
373
377
|
def merge_configs
|
374
378
|
# Update our original_config - if someone has created a knife command
|
375
379
|
# instance directly, they are likely ot have set cmd.config values directly
|
@@ -377,7 +381,7 @@ class Chef
|
|
377
381
|
@original_config = config.dup
|
378
382
|
# other code may have a handle to the config object, so use Hash#replace to deliberately
|
379
383
|
# update-in-place.
|
380
|
-
config.replace(default_config.merge(config_file_settings).merge(config))
|
384
|
+
config.replace(config_file_defaults.merge(default_config).merge(config_file_settings).merge(config))
|
381
385
|
end
|
382
386
|
|
383
387
|
#
|
@@ -387,8 +391,9 @@ class Chef
|
|
387
391
|
# @return [Symbol,NilClass] return the source of the config key,
|
388
392
|
# one of:
|
389
393
|
# - :cli - this was explicitly provided on the CLI
|
390
|
-
# - :config - this came from Chef::Config[:knife]
|
394
|
+
# - :config - this came from Chef::Config[:knife] explicitly being set
|
391
395
|
# - :cli_default - came from a declared CLI `option`'s `default` value.
|
396
|
+
# - :config_default - this came from Chef::Config[:knife]'s defaults
|
392
397
|
# - nil - if the key could not be found in any source.
|
393
398
|
# This can happen when it is invalid, or has been
|
394
399
|
# set directly into #config without then calling #merge_config
|
@@ -396,6 +401,7 @@ class Chef
|
|
396
401
|
return :cli if @original_config.include? key
|
397
402
|
return :config if config_file_settings.key? key
|
398
403
|
return :cli_default if default_config.include? key
|
404
|
+
return :config_default if config_file_defaults.key? key # must come after :config check
|
399
405
|
|
400
406
|
nil
|
401
407
|
end
|
data/lib/chef/knife/bootstrap.rb
CHANGED
@@ -94,13 +94,13 @@ class Chef
|
|
94
94
|
description: "For WinRM basic authentication when using the 'ssl' auth method.",
|
95
95
|
boolean: true
|
96
96
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
97
|
+
# This option was provided in knife bootstrap windows winrm,
|
98
|
+
# but it is ignored in knife-windows/WinrmSession, and so remains unimplemeneted here.
|
99
|
+
# option :kerberos_keytab_file,
|
100
|
+
# :short => "-T KEYTAB_FILE",
|
101
|
+
# :long => "--keytab-file KEYTAB_FILE",
|
102
|
+
# :description => "The Kerberos keytab file used for authentication",
|
103
|
+
# :proc => Proc.new { |keytab| Chef::Config[:knife][:kerberos_keytab_file] = keytab }
|
104
104
|
|
105
105
|
option :kerberos_realm,
|
106
106
|
short: "-R KERBEROS_REALM",
|
@@ -1061,24 +1061,25 @@ class Chef
|
|
1061
1061
|
}
|
1062
1062
|
end
|
1063
1063
|
|
1064
|
-
#
|
1065
|
-
#
|
1066
|
-
#
|
1067
|
-
# is checked.
|
1064
|
+
# Knife plugins should just use the config hash and not call this method. In the
|
1065
|
+
# future there will be a way to deprecate Chef::Config options in addition to the
|
1066
|
+
# CLI options, which will eliminate this methods primary purpose.
|
1068
1067
|
#
|
1069
|
-
#
|
1070
|
-
#
|
1068
|
+
# In Chef-16 the single-argument verison of this function will be deprecated and
|
1069
|
+
# config_value(:whatver) should be converted to config[:whatever]. That never had
|
1070
|
+
# any purpose and never should have been used this way.
|
1071
1071
|
#
|
1072
|
-
|
1073
|
-
|
1072
|
+
# @api deprecated
|
1073
|
+
#
|
1074
|
+
def config_value(key, fallback_key = nil, default = nil)
|
1075
|
+
if config.key?(key)
|
1076
|
+
# the first key is the primary key so we check the merged hash first
|
1074
1077
|
config[key]
|
1078
|
+
elsif config.key?(fallback_key)
|
1079
|
+
# we get the old config option here (the deprecated cli option shouldn't exist)
|
1080
|
+
config[fallback_key]
|
1075
1081
|
else
|
1076
|
-
|
1077
|
-
if Chef::Config[:knife].key?(lookup_key) || config.key?(lookup_key)
|
1078
|
-
Chef::Config[:knife][lookup_key] || config[lookup_key]
|
1079
|
-
else
|
1080
|
-
default
|
1081
|
-
end
|
1082
|
+
default
|
1082
1083
|
end
|
1083
1084
|
end
|
1084
1085
|
|
@@ -21,7 +21,7 @@ class Chef
|
|
21
21
|
class ChefVaultHandler
|
22
22
|
|
23
23
|
# @return [Hash] knife merged config, typically @config
|
24
|
-
attr_accessor :
|
24
|
+
attr_accessor :config
|
25
25
|
|
26
26
|
# @return [Chef::Knife::UI] ui object for output
|
27
27
|
attr_accessor :ui
|
@@ -29,11 +29,15 @@ class Chef
|
|
29
29
|
# @return [Chef::ApiClient] vault client
|
30
30
|
attr_reader :client
|
31
31
|
|
32
|
-
# @param
|
32
|
+
# @param config [Hash] knife merged config, typically @config
|
33
33
|
# @param ui [Chef::Knife::UI] ui object for output
|
34
|
-
def initialize(
|
35
|
-
@
|
36
|
-
|
34
|
+
def initialize(config: {}, knife_config: nil, ui: nil)
|
35
|
+
@config = config
|
36
|
+
unless knife_config.nil?
|
37
|
+
# the knife_config argument becomes deprecated in Chef-16, don't use it
|
38
|
+
@config = knife_config
|
39
|
+
end
|
40
|
+
@ui = ui
|
37
41
|
end
|
38
42
|
|
39
43
|
# Updates the chef vault items for the newly created client.
|
@@ -85,17 +89,17 @@ class Chef
|
|
85
89
|
|
86
90
|
# @return [String] string with serialized JSON representing the chef vault items
|
87
91
|
def bootstrap_vault_json
|
88
|
-
|
92
|
+
config[:bootstrap_vault_json]
|
89
93
|
end
|
90
94
|
|
91
95
|
# @return [String] JSON text in a file representing the chef vault items
|
92
96
|
def bootstrap_vault_file
|
93
|
-
|
97
|
+
config[:bootstrap_vault_file]
|
94
98
|
end
|
95
99
|
|
96
100
|
# @return [Hash] Ruby object representing the chef vault items to create
|
97
101
|
def bootstrap_vault_item
|
98
|
-
|
102
|
+
config[:bootstrap_vault_item]
|
99
103
|
end
|
100
104
|
|
101
105
|
# Helper to return a ruby object represeting all the data bags and items
|
@@ -28,7 +28,7 @@ class Chef
|
|
28
28
|
class ClientBuilder
|
29
29
|
|
30
30
|
# @return [Hash] knife merged config, typically @config
|
31
|
-
attr_accessor :
|
31
|
+
attr_accessor :config
|
32
32
|
# @return [Hash] chef config object
|
33
33
|
attr_accessor :chef_config
|
34
34
|
# @return [Chef::Knife::UI] ui object for output
|
@@ -36,13 +36,17 @@ class Chef
|
|
36
36
|
# @return [Chef::ApiClient] client saved on run
|
37
37
|
attr_reader :client
|
38
38
|
|
39
|
-
# @param
|
39
|
+
# @param config [Hash] Hash of knife config settings
|
40
40
|
# @param chef_config [Hash] Hash of chef config settings
|
41
41
|
# @param ui [Chef::Knife::UI] UI object for output
|
42
|
-
def initialize(
|
43
|
-
@
|
44
|
-
|
45
|
-
|
42
|
+
def initialize(config: {}, knife_config: nil, chef_config: {}, ui: nil)
|
43
|
+
@config = config
|
44
|
+
unless knife_config.nil?
|
45
|
+
# the knife_config argument becomes deprecated in Chef-16, don't use it
|
46
|
+
@config = knife_config
|
47
|
+
end
|
48
|
+
@chef_config = chef_config
|
49
|
+
@ui = ui
|
46
50
|
end
|
47
51
|
|
48
52
|
# Main entry. Prompt the user to clean up any old client or node objects. Then create
|
@@ -77,34 +81,34 @@ class Chef
|
|
77
81
|
|
78
82
|
private
|
79
83
|
|
80
|
-
# @return [String] node name from the
|
84
|
+
# @return [String] node name from the config
|
81
85
|
def node_name
|
82
|
-
|
86
|
+
config[:chef_node_name]
|
83
87
|
end
|
84
88
|
|
85
|
-
# @return [String] enviroment from the
|
89
|
+
# @return [String] enviroment from the config
|
86
90
|
def environment
|
87
|
-
|
91
|
+
config[:environment]
|
88
92
|
end
|
89
93
|
|
90
|
-
# @return [String] run_list from the
|
94
|
+
# @return [String] run_list from the config
|
91
95
|
def run_list
|
92
|
-
|
96
|
+
config[:run_list]
|
93
97
|
end
|
94
98
|
|
95
|
-
# @return [String] policy_name from the
|
99
|
+
# @return [String] policy_name from the config
|
96
100
|
def policy_name
|
97
|
-
|
101
|
+
config[:policy_name]
|
98
102
|
end
|
99
103
|
|
100
|
-
# @return [String] policy_group from the
|
104
|
+
# @return [String] policy_group from the config
|
101
105
|
def policy_group
|
102
|
-
|
106
|
+
config[:policy_group]
|
103
107
|
end
|
104
108
|
|
105
|
-
# @return [Hash,Array] Object representation of json first-boot attributes from the
|
109
|
+
# @return [Hash,Array] Object representation of json first-boot attributes from the config
|
106
110
|
def first_boot_attributes
|
107
|
-
|
111
|
+
config[:first_boot_attributes]
|
108
112
|
end
|
109
113
|
|
110
114
|
# @return [String] chef server url from the Chef::Config
|
@@ -154,7 +158,7 @@ class Chef
|
|
154
158
|
node.environment(environment) if environment
|
155
159
|
node.policy_name = policy_name if policy_name
|
156
160
|
node.policy_group = policy_group if policy_group
|
157
|
-
(
|
161
|
+
(config[:tags] || []).each do |tag|
|
158
162
|
node.tags << tag
|
159
163
|
end
|
160
164
|
node
|