chef-config 12.15.19 → 12.16.42
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 +4 -4
- data/lib/chef-config/config.rb +28 -2
- data/lib/chef-config/exceptions.rb +1 -0
- data/lib/chef-config/version.rb +1 -1
- data/spec/unit/config_spec.rb +115 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1634767453969e0627f8d7dfc6a07804a7062842
|
4
|
+
data.tar.gz: f51e8c8dcf909ae9f433973147d0fdf2e1c084f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7fd44e43699b42b8657afaefbb5672915213a811dd7c9ea811bf00796a17412acace7feaddb804e137a7478c343ceea9cb7aceda2597a6919ced00878c59d17
|
7
|
+
data.tar.gz: 09f7056b8ed2054346e5618306c9a2b14e755ba677e0c08279d7c635eb373fc1d8073cf33b0e0d4f3519f7fdb5d2ca07c4852998ef6f27b39bb85c0a3c96ab50
|
data/lib/chef-config/config.rb
CHANGED
@@ -32,6 +32,7 @@ require "mixlib/shellout"
|
|
32
32
|
require "uri"
|
33
33
|
require "addressable/uri"
|
34
34
|
require "openssl"
|
35
|
+
require "yaml"
|
35
36
|
|
36
37
|
module ChefConfig
|
37
38
|
|
@@ -70,6 +71,25 @@ module ChefConfig
|
|
70
71
|
event_handlers << logger
|
71
72
|
end
|
72
73
|
|
74
|
+
def self.apply_extra_config_options(extra_config_options)
|
75
|
+
if extra_config_options
|
76
|
+
extra_parsed_options = extra_config_options.inject({}) do |memo, option|
|
77
|
+
# Sanity check value.
|
78
|
+
if option.empty? || !option.include?("=")
|
79
|
+
raise UnparsableConfigOption, "Unparsable config option #{option.inspect}"
|
80
|
+
end
|
81
|
+
# Split including whitespace if someone does truly odd like
|
82
|
+
# --config-option "foo = bar"
|
83
|
+
key, value = option.split(/\s*=\s*/, 2)
|
84
|
+
# Call to_sym because Chef::Config expects only symbol keys. Also
|
85
|
+
# runs a simple parse on the string for some common types.
|
86
|
+
memo[key.to_sym] = YAML.safe_load(value)
|
87
|
+
memo
|
88
|
+
end
|
89
|
+
merge!(extra_parsed_options)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
73
93
|
# Config file to load (client.rb, knife.rb, etc. defaults set differently in knife, chef-client, etc.)
|
74
94
|
configurable(:config_file)
|
75
95
|
|
@@ -837,7 +857,13 @@ module ChefConfig
|
|
837
857
|
# Full URL to the endpoint that will receive our data. If nil, the
|
838
858
|
# data collector will not run.
|
839
859
|
# Ex: http://my-data-collector.mycompany.com/ingest
|
840
|
-
default
|
860
|
+
default(:server_url) do
|
861
|
+
if config_parent.solo || config_parent.local_mode
|
862
|
+
nil
|
863
|
+
else
|
864
|
+
File.join(config_parent.chef_server_url, "/data-collector")
|
865
|
+
end
|
866
|
+
end
|
841
867
|
|
842
868
|
# An optional pre-shared token to pass as an HTTP header (x-data-collector-token)
|
843
869
|
# that can be used to determine whether or not the poster of this
|
@@ -966,7 +992,7 @@ module ChefConfig
|
|
966
992
|
# If there is no 'locale -a' then we return 'en_US.UTF-8' since that is the most commonly
|
967
993
|
# available English UTF-8 locale. However, all modern POSIXen should support 'locale -a'.
|
968
994
|
def self.guess_internal_locale
|
969
|
-
# https://github.com/
|
995
|
+
# https://github.com/chef/chef/issues/2181
|
970
996
|
# Some systems have the `locale -a` command, but the result has
|
971
997
|
# invalid characters for the default encoding.
|
972
998
|
#
|
data/lib/chef-config/version.rb
CHANGED
data/spec/unit/config_spec.rb
CHANGED
@@ -68,6 +68,91 @@ RSpec.describe ChefConfig::Config do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
describe "parsing arbitrary config from the CLI" do
|
72
|
+
|
73
|
+
def apply_config
|
74
|
+
described_class.apply_extra_config_options(extra_config_options)
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when no arbitrary config is given" do
|
78
|
+
|
79
|
+
let(:extra_config_options) { nil }
|
80
|
+
|
81
|
+
it "succeeds" do
|
82
|
+
expect { apply_config }.to_not raise_error
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
context "when given a simple string option" do
|
88
|
+
|
89
|
+
let(:extra_config_options) { [ "node_name=bobotclown" ] }
|
90
|
+
|
91
|
+
it "applies the string option" do
|
92
|
+
apply_config
|
93
|
+
expect(described_class[:node_name]).to eq("bobotclown")
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when given a blank value" do
|
99
|
+
|
100
|
+
let(:extra_config_options) { [ "http_retries=" ] }
|
101
|
+
|
102
|
+
it "sets the value to nil" do
|
103
|
+
# ensure the value is actually changed in the test
|
104
|
+
described_class[:http_retries] = 55
|
105
|
+
apply_config
|
106
|
+
expect(described_class[:http_retries]).to eq(nil)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context "when given spaces between `key = value`" do
|
111
|
+
|
112
|
+
let(:extra_config_options) { [ "node_name = bobo" ] }
|
113
|
+
|
114
|
+
it "handles the extra spaces and applies the config option" do
|
115
|
+
apply_config
|
116
|
+
expect(described_class[:node_name]).to eq("bobo")
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
context "when given an integer value" do
|
122
|
+
|
123
|
+
let(:extra_config_options) { [ "http_retries=9000" ] }
|
124
|
+
|
125
|
+
it "converts to a numeric type and applies the config option" do
|
126
|
+
apply_config
|
127
|
+
expect(described_class[:http_retries]).to eq(9000)
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when given a boolean" do
|
133
|
+
|
134
|
+
let(:extra_config_options) { [ "boolean_thing=true" ] }
|
135
|
+
|
136
|
+
it "converts to a boolean type and applies the config option" do
|
137
|
+
apply_config
|
138
|
+
expect(described_class[:boolean_thing]).to eq(true)
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
context "when given input that is not in key=value form" do
|
144
|
+
|
145
|
+
let(:extra_config_options) { [ "http_retries:9000" ] }
|
146
|
+
|
147
|
+
it "raises UnparsableConfigOption" do
|
148
|
+
message = 'Unparsable config option "http_retries:9000"'
|
149
|
+
expect { apply_config }.to raise_error(ChefConfig::UnparsableConfigOption, message)
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
71
156
|
describe "when configuring formatters" do
|
72
157
|
# if TTY and not(force-logger)
|
73
158
|
# formatter = configured formatter or default formatter
|
@@ -1042,4 +1127,34 @@ RSpec.describe ChefConfig::Config do
|
|
1042
1127
|
|
1043
1128
|
end
|
1044
1129
|
|
1130
|
+
describe "data collector URL" do
|
1131
|
+
|
1132
|
+
context "when using default settings" do
|
1133
|
+
|
1134
|
+
context "for Chef Client" do
|
1135
|
+
|
1136
|
+
it "configures the data collector URL as a relative path to the Chef Server URL" do
|
1137
|
+
ChefConfig::Config[:chef_server_url] = "https://chef.example/organizations/myorg"
|
1138
|
+
expect(ChefConfig::Config[:data_collector][:server_url]).to eq("https://chef.example/organizations/myorg/data-collector")
|
1139
|
+
end
|
1140
|
+
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
context "for Chef Solo" do
|
1144
|
+
|
1145
|
+
before do
|
1146
|
+
ChefConfig::Config[:solo] = true
|
1147
|
+
end
|
1148
|
+
|
1149
|
+
it "sets the data collector server URL to nil" do
|
1150
|
+
ChefConfig::Config[:chef_server_url] = "https://chef.example/organizations/myorg"
|
1151
|
+
expect(ChefConfig::Config[:data_collector][:server_url]).to be_nil
|
1152
|
+
end
|
1153
|
+
|
1154
|
+
end
|
1155
|
+
|
1156
|
+
end
|
1157
|
+
|
1158
|
+
end
|
1159
|
+
|
1045
1160
|
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: 12.
|
4
|
+
version: 12.16.42
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
170
|
version: '0'
|
171
171
|
requirements: []
|
172
172
|
rubyforge_project:
|
173
|
-
rubygems_version: 2.6.
|
173
|
+
rubygems_version: 2.6.8
|
174
174
|
signing_key:
|
175
175
|
specification_version: 4
|
176
176
|
summary: Chef's default configuration and config loading
|