chef-config 12.15.19 → 12.16.42
Sign up to get free protection for your applications and to get access to all the features.
- 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
|