chef-config 14.2.0 → 14.3.37

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82a2d07937047a9e9d9fea817417563a68368e7c87671308a463de5bcc49f282
4
- data.tar.gz: d365d128642d35f31debfae00cb1bf2910f4821c57cdcc0df61b7b370fe368b5
3
+ metadata.gz: 8143b86ea4c5fd0ec8d4b8623aee402b2c0ade39738133a99c14f7338ff3327d
4
+ data.tar.gz: 607162e7ef57736d7ecd7154a27c4ee132bd8c61452c758084b4dcb16768ce26
5
5
  SHA512:
6
- metadata.gz: 6d46bf5104d8b214c37a9088528257ac9c84a4da29b35365b37655f2ef50fa75d6ceb6b649bc105e4aa19f2a48a809908e5fa40bd73a0094b32933bc94fc4b8d
7
- data.tar.gz: 742a71ca0bca091bfb7c8aba9e96cdcfb120d958c1518d8e907717f0c699db2459b4b2e08aa17abcb3cdadca285f64920763c508d7449eff622dd3f6bfabc675
6
+ metadata.gz: 81d3a5a11e0281b00c0ae18da2298e3c0227df063597734431423febe7728c0f805a815e4f6d2fd74f465724ee2a1da45bb3fbbc5022a29758e322810e1d26c1
7
+ data.tar.gz: b88d7a8a2d4fa5d5abf31839763cee4437e51bff8369ac17061f695f55b9fd3145399f98027801c9e8f0a2752e546184d764581c662f3146bdbb65caf8459624
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ ChefConfig::PackageTask.new(File.expand_path("..", __FILE__), "ChefConfig", "che
4
4
  package.module_path = "chef-config"
5
5
  end
6
6
 
7
- task :default => :spec
7
+ task default: :spec
8
8
 
9
9
  begin
10
10
  require "rspec/core/rake_task"
data/chef-config.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.require_paths = ["lib"]
17
17
 
18
18
  spec.add_dependency "mixlib-shellout", "~> 2.0"
19
- spec.add_dependency "mixlib-config", "~> 2.0"
19
+ spec.add_dependency "mixlib-config", ">= 2.2.12", "< 3.0"
20
20
  spec.add_dependency "fuzzyurl"
21
21
  spec.add_dependency "addressable"
22
22
  spec.add_dependency "tomlrb", "~> 1.2"
@@ -286,7 +286,7 @@ module ChefConfig
286
286
  # the cache path.
287
287
  unless path_accessible?(primary_cache_path) || path_accessible?(primary_cache_root)
288
288
  secondary_cache_path = PathHelper.join(user_home, ".chef")
289
- ChefConfig.logger.info("Unable to access cache at #{primary_cache_path}. Switching cache to #{secondary_cache_path}")
289
+ ChefConfig.logger.trace("Unable to access cache at #{primary_cache_path}. Switching cache to #{secondary_cache_path}")
290
290
  secondary_cache_path
291
291
  else
292
292
  primary_cache_path
@@ -656,7 +656,15 @@ module ChefConfig
656
656
  #
657
657
  # If chef-zero is enabled, this defaults to nil (no authentication).
658
658
  default(:validation_key) { chef_zero.enabled ? nil : platform_specific_path("/etc/chef/validation.pem") }
659
- default :validation_client_name, "chef-validator"
659
+ default :validation_client_name do
660
+ # If the URL is set and looks like a normal Chef Server URL, extract the
661
+ # org name and use that as part of the default.
662
+ if chef_server_url.to_s =~ %r{/organizations/(.*)$}
663
+ "#{$1}-validator"
664
+ else
665
+ "chef-validator"
666
+ end
667
+ end
660
668
 
661
669
  default :validation_key_contents, nil
662
670
  # When creating a new client via the validation_client account, Chef 11
@@ -698,7 +706,7 @@ module ChefConfig
698
706
 
699
707
  # Deprecated:
700
708
  # Move this to the default value of syntax_cache_path when this is removed.
701
- default(:cache_options) { { :path => PathHelper.join(config_dir, "syntaxcache") } }
709
+ default(:cache_options) { { path: PathHelper.join(config_dir, "syntaxcache") } }
702
710
 
703
711
  # Whether errors should be raised for deprecation warnings. When set to
704
712
  # `false` (the default setting), a warning is emitted but code using
@@ -715,6 +723,11 @@ module ChefConfig
715
723
  ENV.key?("CHEF_TREAT_DEPRECATION_WARNINGS_AS_ERRORS")
716
724
  end
717
725
 
726
+ # Which deprecations warnings to silence. Can be set to `true` to silence
727
+ # all warnings, or an array of strings like either `"deprecation_type"` or
728
+ # `"filename.rb:lineno"`.
729
+ default :silence_deprecation_warnings, []
730
+
718
731
  # Whether the resource count should be updated for log resource
719
732
  # on running chef-client
720
733
  default :count_log_resource_updates, true
@@ -957,10 +970,10 @@ module ChefConfig
957
970
  # TODO add some post-file-parsing logic that automatically calls this so
958
971
  # users don't have to
959
972
  def self.export_proxies
960
- export_proxy("http", http_proxy, http_proxy_user, http_proxy_pass) if http_proxy
961
- export_proxy("https", https_proxy, https_proxy_user, https_proxy_pass) if https_proxy
962
- export_proxy("ftp", ftp_proxy, ftp_proxy_user, ftp_proxy_pass) if ftp_proxy
963
- export_no_proxy(no_proxy) if no_proxy
973
+ export_proxy("http", http_proxy, http_proxy_user, http_proxy_pass) if key?(:http_proxy) && http_proxy
974
+ export_proxy("https", https_proxy, https_proxy_user, https_proxy_pass) if key?(:https_proxy) && https_proxy
975
+ export_proxy("ftp", ftp_proxy, ftp_proxy_user, ftp_proxy_pass) if key?(:ftp_proxy) && ftp_proxy
976
+ export_no_proxy(no_proxy) if key?(:no_proxy) && no_proxy
964
977
  end
965
978
 
966
979
  # Character classes for Addressable
@@ -28,7 +28,7 @@ module ChefConfig
28
28
 
29
29
  return unless File.file?(credentials_file)
30
30
 
31
- context = File.read(context_file) if File.file?(context_file)
31
+ context = File.read(context_file).strip if File.file?(context_file)
32
32
 
33
33
  environment = ENV.fetch("CHEF_PROFILE", nil)
34
34
 
@@ -19,17 +19,22 @@ require "chef-config/path_helper"
19
19
  module ChefConfig
20
20
  module Mixin
21
21
  module DotD
22
+ # Find available configuration files in a `.d/` style include directory.
23
+ #
24
+ # @api internal
25
+ # @param path [String] Base .d/ path to load from.
26
+ # @return [Array<String>]
27
+ def find_dot_d(path)
28
+ Dir["#{PathHelper.escape_glob_dir(path)}/*.rb"].select { |entry| File.file?(entry) }.sort
29
+ end
30
+
31
+ # Load configuration from a `.d/` style include directory.
32
+ #
33
+ # @api internal
34
+ # @param path [String] Base .d/ path to load from.
35
+ # @return [void]
22
36
  def load_dot_d(path)
23
- dot_d_files =
24
- begin
25
- entries = Array.new
26
- entries << Dir.glob(File.join(
27
- ChefConfig::PathHelper.escape_glob_dir(path), "*.rb"))
28
- entries.flatten.select do |entry|
29
- File.file?(entry)
30
- end
31
- end
32
- dot_d_files.sort.map do |conf|
37
+ find_dot_d(path).each do |conf|
33
38
  apply_config(IO.read(conf), conf)
34
39
  end
35
40
  end
@@ -131,10 +131,10 @@ module ChefConfig
131
131
  end
132
132
  end
133
133
 
134
- task :package => :package_components
134
+ task package: :package_components
135
135
 
136
136
  desc "Build and install component dependencies"
137
- task :install_components => :package_components do
137
+ task install_components: :package_components do
138
138
  component_full_paths.each do |component_path|
139
139
  Dir.chdir(component_path) do
140
140
  sh "rake install"
@@ -142,7 +142,7 @@ module ChefConfig
142
142
  end
143
143
  end
144
144
 
145
- task :install => :install_components
145
+ task install: :install_components
146
146
 
147
147
  desc "Clean up builds of component dependencies"
148
148
  task :clobber_component_packages do
@@ -153,7 +153,7 @@ module ChefConfig
153
153
  end
154
154
  end
155
155
 
156
- task :clobber_package => :clobber_component_packages
156
+ task clobber_package: :clobber_component_packages
157
157
 
158
158
  desc "Update the version number for component dependencies"
159
159
  task :update_components_versions do
@@ -166,12 +166,12 @@ module ChefConfig
166
166
 
167
167
  namespace :version do
168
168
  desc "Regenerate lib/#{module_path}/version.rb from VERSION file"
169
- task :update => :update_components_versions do
169
+ task update: :update_components_versions do
170
170
  update_version_rb
171
171
  update_gemfile_lock
172
172
  end
173
173
 
174
- task :bump => %w{version:bump_patch version:update}
174
+ task bump: %w{version:bump_patch version:update}
175
175
 
176
176
  task :show do
177
177
  puts version
@@ -201,41 +201,41 @@ module ChefConfig
201
201
 
202
202
  def update_version_rb # rubocop:disable Lint/NestedMethodDefinition
203
203
  puts "Updating #{version_rb_path} to include version #{version} ..."
204
- contents = <<-VERSION_RB
205
- # Copyright:: Copyright 2010-2016, Chef Software, Inc.
206
- # License:: Apache License, Version 2.0
207
- #
208
- # Licensed under the Apache License, Version 2.0 (the "License");
209
- # you may not use this file except in compliance with the License.
210
- # You may obtain a copy of the License at
211
- #
212
- # http://www.apache.org/licenses/LICENSE-2.0
213
- #
214
- # Unless required by applicable law or agreed to in writing, software
215
- # distributed under the License is distributed on an "AS IS" BASIS,
216
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
217
- # See the License for the specific language governing permissions and
218
- # limitations under the License.
219
-
220
- #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
221
- # NOTE: This file is generated by running `rake version` in the top level of
222
- # this repo. Do not edit this manually. Edit the VERSION file and run the rake
223
- # task instead.
224
- #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
225
- #{"\nrequire \"chef/version_string\"\n" if use_versionstring}
226
- #{class_or_module} #{module_name}
227
- #{module_name.upcase}_ROOT = File.expand_path("../..", __FILE__)
228
- VERSION = #{use_versionstring ? "Chef::VersionString.new(\"#{version}\")" : "\"#{version}\""}
229
- end
204
+ contents = <<~VERSION_RB
205
+ # Copyright:: Copyright 2010-2016, Chef Software, Inc.
206
+ # License:: Apache License, Version 2.0
207
+ #
208
+ # Licensed under the Apache License, Version 2.0 (the "License");
209
+ # you may not use this file except in compliance with the License.
210
+ # You may obtain a copy of the License at
211
+ #
212
+ # http://www.apache.org/licenses/LICENSE-2.0
213
+ #
214
+ # Unless required by applicable law or agreed to in writing, software
215
+ # distributed under the License is distributed on an "AS IS" BASIS,
216
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
217
+ # See the License for the specific language governing permissions and
218
+ # limitations under the License.
219
+
220
+ #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
221
+ # NOTE: This file is generated by running `rake version` in the top level of
222
+ # this repo. Do not edit this manually. Edit the VERSION file and run the rake
223
+ # task instead.
224
+ #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
225
+ #{"\nrequire \"chef/version_string\"\n" if use_versionstring}
226
+ #{class_or_module} #{module_name}
227
+ #{module_name.upcase}_ROOT = File.expand_path("../..", __FILE__)
228
+ VERSION = #{use_versionstring ? "Chef::VersionString.new(\"#{version}\")" : "\"#{version}\""}
229
+ end
230
230
 
231
- #
232
- # NOTE: the Chef::Version class is defined in version_class.rb
233
- #
234
- # NOTE: DO NOT Use the Chef::Version class on #{module_name}::VERSIONs. The
235
- # Chef::Version class is for _cookbooks_ only, and cannot handle
236
- # pre-release versions like "10.14.0.rc.2". Please use Rubygem's
237
- # Gem::Version class instead.
238
- #
231
+ #
232
+ # NOTE: the Chef::Version class is defined in version_class.rb
233
+ #
234
+ # NOTE: DO NOT Use the Chef::Version class on #{module_name}::VERSIONs. The
235
+ # Chef::Version class is for _cookbooks_ only, and cannot handle
236
+ # pre-release versions like "10.14.0.rc.2". Please use Rubygem's
237
+ # Gem::Version class instead.
238
+ #
239
239
  VERSION_RB
240
240
  IO.write(version_rb_path, contents)
241
241
  end
@@ -252,7 +252,7 @@ end
252
252
  end
253
253
  end
254
254
 
255
- task :version => "version:update"
255
+ task version: "version:update"
256
256
 
257
257
  gemspec_platform_to_install = ""
258
258
  Dir[File.expand_path("*.gemspec", root_path)].reverse_each do |gemspec_path|
@@ -264,7 +264,7 @@ end
264
264
  end
265
265
 
266
266
  desc "Build and install a #{module_path} gem"
267
- task :install => [:package] do
267
+ task install: [:package] do
268
268
  with_clean_env do
269
269
  full_module_path = File.join(full_package_dir, module_path)
270
270
  sh %{gem install #{full_module_path}-#{version}#{gemspec_platform_to_install}.gem --no-rdoc --no-ri}
@@ -276,7 +276,7 @@ end
276
276
  end
277
277
 
278
278
  desc "Build it, tag it and ship it"
279
- task :ship => [:clobber_package, :gem] do
279
+ task ship: [:clobber_package, :gem] do
280
280
  sh("git tag #{version}")
281
281
  sh("git push #{git_remote} --tags")
282
282
  Dir[File.expand_path("*.gem", full_package_dir)].reverse_each do |built_gem|
@@ -172,6 +172,18 @@ module ChefConfig
172
172
  Pathname.new(cleanpath(to)).relative_path_from(Pathname.new(cleanpath(from)))
173
173
  end
174
174
 
175
+ # Set the project-specific home directory environment variable.
176
+ #
177
+ # This can be used to allow per-tool home directory aliases like $KNIFE_HOME.
178
+ #
179
+ # @param [env_var] Key for an environment variable to use.
180
+ # @return [nil]
181
+ def self.per_tool_home_environment=(env_var)
182
+ @@per_tool_home_environment = env_var
183
+ # Reset this in case .home was already called.
184
+ @@home_dir = nil
185
+ end
186
+
175
187
  # Retrieves the "home directory" of the current user while trying to ascertain the existence
176
188
  # of said directory. The path returned uses / for all separators (the ruby standard format).
177
189
  # If the home directory doesn't exist or an error is otherwise encountered, nil is returned.
@@ -185,7 +197,9 @@ module ChefConfig
185
197
  # Home-path discovery is performed once. If a path is discovered, that value is memoized so
186
198
  # that subsequent calls to home_dir don't bounce around.
187
199
  #
188
- # See self.all_homes.
200
+ # @see all_homes
201
+ # @param args [Array<String>] Path components to look for under the home directory.
202
+ # @return [String]
189
203
  def self.home(*args)
190
204
  @@home_dir ||= all_homes { |p| break p }
191
205
  if @@home_dir
@@ -203,6 +217,8 @@ module ChefConfig
203
217
  # if no block is provided.
204
218
  def self.all_homes(*args)
205
219
  paths = []
220
+ paths << ENV[@@per_tool_home_environment] if defined?(@@per_tool_home_environment) && @@per_tool_home_environment && ENV[@@per_tool_home_environment]
221
+ paths << ENV["CHEF_HOME"] if ENV["CHEF_HOME"]
206
222
  if ChefConfig.windows?
207
223
  # By default, Ruby uses the the following environment variables to determine Dir.home:
208
224
  # HOME
@@ -13,15 +13,15 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
17
17
  # NOTE: This file is generated by running `rake version` in the top level of
18
18
  # this repo. Do not edit this manually. Edit the VERSION file and run the rake
19
19
  # task instead.
20
- #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
20
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21
21
 
22
22
  module ChefConfig
23
23
  CHEFCONFIG_ROOT = File.expand_path("../..", __FILE__)
24
- VERSION = "14.2.0"
24
+ VERSION = "14.3.37".freeze
25
25
  end
26
26
 
27
27
  #
@@ -83,6 +83,8 @@ module ChefConfig
83
83
  end
84
84
 
85
85
  load_dot_d(Config[:config_d_dir]) if Config[:config_d_dir]
86
+
87
+ apply_defaults
86
88
  end
87
89
 
88
90
  # (Private API, public for test purposes)
@@ -147,31 +149,36 @@ module ChefConfig
147
149
  end
148
150
 
149
151
  def apply_credentials(creds, profile)
152
+ # Store the profile used in case other things want it.
150
153
  Config.profile ||= profile
154
+ # Validate the credentials data.
151
155
  if creds.key?("node_name") && creds.key?("client_name")
152
156
  raise ChefConfig::ConfigurationError, "Do not specify both node_name and client_name. You should prefer client_name."
153
157
  end
154
- Config.node_name = creds.fetch("node_name") if creds.key?("node_name")
155
- Config.node_name = creds.fetch("client_name") if creds.key?("client_name")
156
- Config.chef_server_url = creds.fetch("chef_server_url") if creds.key?("chef_server_url")
157
- Config.validation_client_name = creds.fetch("validation_client_name") if creds.key?("validation_client_name")
158
-
159
- Config.knife.merge!(Hash[creds.fetch("knife", {}).map { |k, v| [k.to_sym, v] }])
160
-
161
- extract_key(creds, "validation_key", :validation_key, :validation_key_contents)
162
- extract_key(creds, "validator_key", :validation_key, :validation_key_contents)
163
- extract_key(creds, "client_key", :client_key, :client_key_contents)
158
+ # Load credentials data into the Chef configuration.
159
+ creds.each do |key, value|
160
+ case key.to_s
161
+ when "client_name"
162
+ # Special case because it's weird to set your username via `node_name`.
163
+ Config.node_name = value
164
+ when "validation_key", "validator_key"
165
+ extract_key(value, :validation_key, :validation_key_contents)
166
+ when "client_key"
167
+ extract_key(value, :client_key, :client_key_contents)
168
+ when "knife"
169
+ Config.knife.merge!(Hash[value.map { |k, v| [k.to_sym, v] }])
170
+ else
171
+ Config[key.to_sym] = value
172
+ end
173
+ end
164
174
  @credentials_found = true
165
175
  end
166
176
 
167
- def extract_key(creds, name, config_path, config_contents)
168
- return unless creds.has_key?(name)
169
-
170
- val = creds.fetch(name)
171
- if val.start_with?("-----BEGIN RSA PRIVATE KEY-----")
172
- Config.send(config_contents, val)
177
+ def extract_key(key_value, config_path, config_contents)
178
+ if key_value.start_with?("-----BEGIN RSA PRIVATE KEY-----")
179
+ Config.send(config_contents, key_value)
173
180
  else
174
- abs_path = Pathname.new(val).expand_path(home_chef_dir)
181
+ abs_path = Pathname.new(key_value).expand_path(home_chef_dir)
175
182
  Config.send(config_path, abs_path)
176
183
  end
177
184
  end
@@ -205,6 +212,54 @@ module ChefConfig
205
212
  raise ChefConfig::ConfigurationError, message
206
213
  end
207
214
 
215
+ # Apply default configuration values for workstation-style tools.
216
+ #
217
+ # Global defaults should go in {ChefConfig::Config} instead, this is only
218
+ # for things like `knife` and `chef`.
219
+ #
220
+ # @api private
221
+ # @since 14.3
222
+ # @return [void]
223
+ def apply_defaults
224
+ # If we don't have a better guess use the username.
225
+ Config[:node_name] ||= Etc.getlogin
226
+ # If we don't have a key (path or inline) check user.pem and $node_name.pem.
227
+ unless Config.key?(:client_key) || Config.key?(:client_key_contents)
228
+ Config[:client_key] = find_default_key(["#{Config[:node_name]}.pem", "user.pem"])
229
+ end
230
+ # Similarly look for a validation key file, though this should be less
231
+ # common these days.
232
+ unless Config.key?(:validation_key) || Config.key?(:validation_key_contents)
233
+ Config[:validation_key] = find_default_key(["#{Config[:validation_client_name]}.pem", "validator.pem", "validation.pem"])
234
+ end
235
+ end
236
+
237
+ # Look for a default key file.
238
+ #
239
+ # This searches for any of a list of possible default keys, checking both
240
+ # the local `.chef/` folder and the home directory `~/.chef/`. Returns `nil`
241
+ # if no matching file is found.
242
+ #
243
+ # @api private
244
+ # @since 14.3
245
+ # @param key_names [Array<String>] A list of possible filenames to check for.
246
+ # The first one found will be returned.
247
+ # @return [String, nil]
248
+ def find_default_key(key_names)
249
+ key_names.each do |filename|
250
+ path = Pathname.new(filename)
251
+ # If we have a config location (like ./.chef/), look there first.
252
+ if config_location
253
+ local_path = path.expand_path(File.dirname(config_location))
254
+ return local_path.to_s if local_path.exist?
255
+ end
256
+ # Then check ~/.chef.
257
+ home_path = path.expand_path(home_chef_dir)
258
+ return home_path.to_s if home_path.exist?
259
+ end
260
+ nil
261
+ end
262
+
208
263
  def highlight_config_error(file, line)
209
264
  config_file_lines = []
210
265
  IO.readlines(file).each_with_index { |l, i| config_file_lines << "#{(i + 1).to_s.rjust(3)}: #{l.chomp}" }
data/spec/spec_helper.rb CHANGED
@@ -32,8 +32,8 @@ RSpec.configure do |config|
32
32
  config.filter_run :focus
33
33
  config.run_all_when_everything_filtered = true
34
34
 
35
- config.filter_run_excluding :windows_only => true unless ChefConfig.windows?
36
- config.filter_run_excluding :unix_only => true if ChefConfig.windows?
35
+ config.filter_run_excluding windows_only: true unless ChefConfig.windows?
36
+ config.filter_run_excluding unix_only: true if ChefConfig.windows?
37
37
 
38
38
  # Limits the available syntax to the non-monkey patched syntax that is
39
39
  # recommended. For more details, see:
@@ -1191,4 +1191,22 @@ RSpec.describe ChefConfig::Config do
1191
1191
 
1192
1192
  end
1193
1193
 
1194
+ describe "validation_client_name" do
1195
+ context "with a normal server URL" do
1196
+ before { ChefConfig::Config[:chef_server_url] = "https://chef.example/organizations/myorg" }
1197
+
1198
+ it "sets the validation client to myorg-validator" do
1199
+ expect(ChefConfig::Config[:validation_client_name]).to eq "myorg-validator"
1200
+ end
1201
+ end
1202
+
1203
+ context "with an unusual server URL" do
1204
+ before { ChefConfig::Config[:chef_server_url] = "https://chef.example/myorg" }
1205
+
1206
+ it "sets the validation client to chef-validator" do
1207
+ expect(ChefConfig::Config[:validation_client_name]).to eq "chef-validator"
1208
+ end
1209
+ end
1210
+ end
1211
+
1194
1212
  end
@@ -271,6 +271,70 @@ RSpec.describe ChefConfig::WorkstationConfigLoader do
271
271
  config_loader.load
272
272
  expect(ChefConfig::Config.config_file).to eq(explicit_config_location)
273
273
  end
274
+
275
+ it "loads a default value for node_name" do
276
+ allow(Etc).to receive(:getlogin).and_return("notauser")
277
+ config_loader.load
278
+ expect(ChefConfig::Config.node_name).to eq("notauser")
279
+ end
280
+
281
+ context "with a user.pem" do
282
+ before do
283
+ allow(Etc).to receive(:getlogin).and_return("notauser")
284
+ allow(FileTest).to receive(:exist?).and_call_original
285
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../notauser.pem", explicit_config_location)).and_return(false)
286
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../user.pem", explicit_config_location)).and_return(true)
287
+ end
288
+
289
+ it "loads a default value for client_key" do
290
+ config_loader.load
291
+ expect(ChefConfig::Config.client_key).to eq(File.expand_path("../user.pem", explicit_config_location))
292
+ end
293
+ end
294
+
295
+ context "with a notauser.pem" do
296
+ before do
297
+ allow(Etc).to receive(:getlogin).and_return("notauser")
298
+ allow(FileTest).to receive(:exist?).and_call_original
299
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../notauser.pem", explicit_config_location)).and_return(true)
300
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../user.pem", explicit_config_location)).and_return(false)
301
+ end
302
+
303
+ it "loads a default value for client_key" do
304
+ config_loader.load
305
+ expect(ChefConfig::Config.client_key).to eq(File.expand_path("../notauser.pem", explicit_config_location))
306
+ end
307
+ end
308
+
309
+ context "with a valclient.pem" do
310
+ before do
311
+ ChefConfig::Config.validation_client_name = "valclient"
312
+ allow(FileTest).to receive(:exist?).and_call_original
313
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../valclient.pem", explicit_config_location)).and_return(true)
314
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../validator.pem", explicit_config_location)).and_return(false)
315
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../validation.pem", explicit_config_location)).and_return(false)
316
+ end
317
+
318
+ it "loads a default value for validation_key" do
319
+ config_loader.load
320
+ expect(ChefConfig::Config.validation_key).to eq(File.expand_path("../valclient.pem", explicit_config_location))
321
+ end
322
+ end
323
+
324
+ context "with a validator.pem" do
325
+ before do
326
+ ChefConfig::Config.validation_client_name = "valclient"
327
+ allow(FileTest).to receive(:exist?).and_call_original
328
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../valclient.pem", explicit_config_location)).and_return(false)
329
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../validator.pem", explicit_config_location)).and_return(true)
330
+ allow(FileTest).to receive(:exist?).with(File.expand_path("../validation.pem", explicit_config_location)).and_return(false)
331
+ end
332
+
333
+ it "loads a default value for validation_key" do
334
+ config_loader.load
335
+ expect(ChefConfig::Config.validation_key).to eq(File.expand_path("../validator.pem", explicit_config_location))
336
+ end
337
+ end
274
338
  end
275
339
 
276
340
  context "and has a syntax error" do
@@ -389,11 +453,12 @@ RSpec.describe ChefConfig::WorkstationConfigLoader do
389
453
 
390
454
  context "and has a default profile" do
391
455
  let(:content) do
392
- content = <<EOH
393
- [default]
394
- node_name = 'barney'
395
- client_key = "barney_rubble.pem"
396
- chef_server_url = "https://api.chef.io/organizations/bedrock"
456
+ content = <<~EOH
457
+ [default]
458
+ node_name = 'barney'
459
+ client_key = "barney_rubble.pem"
460
+ chef_server_url = "https://api.chef.io/organizations/bedrock"
461
+ invalid_config_option1234 = "foobar"
397
462
  EOH
398
463
  content
399
464
  end
@@ -403,21 +468,22 @@ EOH
403
468
  expect(ChefConfig::Config.chef_server_url).to eq("https://api.chef.io/organizations/bedrock")
404
469
  expect(ChefConfig::Config.client_key.to_s).to eq("#{home}/.chef/barney_rubble.pem")
405
470
  expect(ChefConfig::Config.profile.to_s).to eq("default")
471
+ expect(ChefConfig::Config[:invalid_config_option1234]).to eq("foobar")
406
472
  end
407
473
  end
408
474
 
409
475
  context "and has a default profile with knife settings" do
410
476
  let(:content) do
411
- content = <<EOH
412
- [default]
413
- node_name = 'barney'
414
- client_key = "barney_rubble.pem"
415
- chef_server_url = "https://api.chef.io/organizations/bedrock"
416
- knife = {
417
- secret_file = "/home/barney/.chef/encrypted_data_bag_secret.pem"
418
- }
419
- [default.knife]
420
- ssh_user = "knife_ssh_user"
477
+ content = <<~EOH
478
+ [default]
479
+ node_name = 'barney'
480
+ client_key = "barney_rubble.pem"
481
+ chef_server_url = "https://api.chef.io/organizations/bedrock"
482
+ knife = {
483
+ secret_file = "/home/barney/.chef/encrypted_data_bag_secret.pem"
484
+ }
485
+ [default.knife]
486
+ ssh_user = "knife_ssh_user"
421
487
  EOH
422
488
  content
423
489
  end
@@ -434,21 +500,21 @@ EOH
434
500
 
435
501
  context "and has a profile containing a full key" do
436
502
  let(:content) do
437
- content = <<EOH
438
- [default]
439
- client_key = """
440
- -----BEGIN RSA PRIVATE KEY-----
441
- foo
442
- """
503
+ content = <<~EOH
504
+ [default]
505
+ client_key = """
506
+ -----BEGIN RSA PRIVATE KEY-----
507
+ foo
508
+ """
443
509
  EOH
444
510
  content
445
511
  end
446
512
 
447
513
  it "applies the expected config" do
448
514
  expect { config_loader.load_credentials }.not_to raise_error
449
- expect(ChefConfig::Config.client_key_contents).to eq(<<EOH
450
- -----BEGIN RSA PRIVATE KEY-----
451
- foo
515
+ expect(ChefConfig::Config.client_key_contents).to eq(<<~EOH
516
+ -----BEGIN RSA PRIVATE KEY-----
517
+ foo
452
518
  EOH
453
519
  )
454
520
  end
@@ -456,15 +522,15 @@ EOH
456
522
 
457
523
  context "and has several profiles" do
458
524
  let(:content) do
459
- content = <<EOH
460
- [default]
461
- client_name = "default"
462
- [environment]
463
- client_name = "environment"
464
- [explicit]
465
- client_name = "explicit"
466
- [context]
467
- client_name = "context"
525
+ content = <<~EOH
526
+ [default]
527
+ client_name = "default"
528
+ [environment]
529
+ client_name = "environment"
530
+ [explicit]
531
+ client_name = "explicit"
532
+ [context]
533
+ client_name = "context"
468
534
  EOH
469
535
  content
470
536
  end
@@ -503,10 +569,10 @@ EOH
503
569
 
504
570
  context "and contains both node_name and client_name" do
505
571
  let(:content) do
506
- content = <<EOH
507
- [default]
508
- node_name = 'barney'
509
- client_name = 'barney'
572
+ content = <<~EOH
573
+ [default]
574
+ node_name = 'barney'
575
+ client_name = 'barney'
510
576
  EOH
511
577
  content
512
578
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-config
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.2.0
4
+ version: 14.3.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-04 00:00:00.000000000 Z
11
+ date: 2018-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: mixlib-config
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.0'
33
+ version: 2.2.12
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '3.0'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
- version: '2.0'
43
+ version: 2.2.12
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: fuzzyurl
43
49
  requirement: !ruby/object:Gem::Requirement