puppet 7.13.1-universal-darwin → 7.16.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CODEOWNERS +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +30 -30
- data/lib/puppet/application/lookup.rb +25 -23
- data/lib/puppet/configurer.rb +8 -14
- data/lib/puppet/defaults.rb +11 -1
- data/lib/puppet/face/generate.rb +2 -0
- data/lib/puppet/functions/next.rb +18 -1
- data/lib/puppet/functions/tree_each.rb +0 -1
- data/lib/puppet/generate/type.rb +9 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +21 -17
- data/lib/puppet/ssl/ssl_provider.rb +10 -7
- data/lib/puppet/type/exec.rb +1 -1
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/util/monkey_patches.rb +0 -2
- data/lib/puppet/util/yaml.rb +5 -1
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +5 -9763
- data/man/man5/puppet.conf.5 +13 -2
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/integration/application/lookup_spec.rb +65 -57
- data/spec/integration/application/resource_spec.rb +6 -2
- data/spec/integration/http/client_spec.rb +30 -0
- data/spec/unit/configurer_spec.rb +124 -61
- data/spec/unit/confiner_spec.rb +6 -6
- data/spec/unit/face/generate_spec.rb +64 -0
- data/spec/unit/node_spec.rb +6 -0
- data/spec/unit/type/user_spec.rb +67 -0
- data/spec/unit/util/windows_spec.rb +23 -0
- metadata +5 -3
data/man/man5/puppet.conf.5
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPETCONF" "5" "
|
4
|
+
.TH "PUPPETCONF" "5" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
\fBThis page is autogenerated; any changes will get overwritten\fR
|
6
6
|
.
|
7
7
|
.SH "Configuration settings"
|
@@ -929,7 +929,7 @@ The time to wait for data to be read from an HTTP connection\. If nothing is rea
|
|
929
929
|
The HTTP User\-Agent string to send when making network requests\.
|
930
930
|
.
|
931
931
|
.IP "\(bu" 4
|
932
|
-
\fIDefault\fR: \fBPuppet/7\.
|
932
|
+
\fIDefault\fR: \fBPuppet/7\.16\.0 Ruby/2\.7\.5\-p203 (x86_64\-linux)\fR
|
933
933
|
.
|
934
934
|
.IP "" 0
|
935
935
|
.
|
@@ -2045,6 +2045,17 @@ Whether to only use the cached catalog rather than compiling a new catalog on ev
|
|
2045
2045
|
.
|
2046
2046
|
.IP "" 0
|
2047
2047
|
.
|
2048
|
+
.SS "use_last_environment"
|
2049
|
+
Puppet saves both the initial and converged environment in the last_run_summary file\. If they differ, and this setting is set to true, we will use the last converged environment and skip the node request\.
|
2050
|
+
.
|
2051
|
+
.P
|
2052
|
+
When set to false, we will do the node request and ignore the environment data from the last_run_summary file\.
|
2053
|
+
.
|
2054
|
+
.IP "\(bu" 4
|
2055
|
+
\fIDefault\fR: \fBtrue\fR
|
2056
|
+
.
|
2057
|
+
.IP "" 0
|
2058
|
+
.
|
2048
2059
|
.SS "use_srv_records"
|
2049
2060
|
Whether the server will search for SRV records in DNS for the current domain\.
|
2050
2061
|
.
|
data/man/man8/puppet-agent.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-AGENT" "8" "
|
4
|
+
.TH "PUPPET\-AGENT" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-agent\fR \- The puppet agent daemon
|
data/man/man8/puppet-apply.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-APPLY" "8" "
|
4
|
+
.TH "PUPPET\-APPLY" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-apply\fR \- Apply Puppet manifests locally
|
data/man/man8/puppet-catalog.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-CATALOG" "8" "
|
4
|
+
.TH "PUPPET\-CATALOG" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-catalog\fR \- Compile, save, view, and convert catalogs\.
|
data/man/man8/puppet-config.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-CONFIG" "8" "
|
4
|
+
.TH "PUPPET\-CONFIG" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-config\fR \- Interact with Puppet\'s settings\.
|
data/man/man8/puppet-describe.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-DESCRIBE" "8" "
|
4
|
+
.TH "PUPPET\-DESCRIBE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-describe\fR \- Display help about resource types
|
data/man/man8/puppet-device.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-DEVICE" "8" "
|
4
|
+
.TH "PUPPET\-DEVICE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-device\fR \- Manage remote network devices
|
data/man/man8/puppet-doc.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-DOC" "8" "
|
4
|
+
.TH "PUPPET\-DOC" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-doc\fR \- Generate Puppet references
|
data/man/man8/puppet-epp.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-EPP" "8" "
|
4
|
+
.TH "PUPPET\-EPP" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-epp\fR \- Interact directly with the EPP template parser/renderer\.
|
data/man/man8/puppet-facts.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-FACTS" "8" "
|
4
|
+
.TH "PUPPET\-FACTS" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-facts\fR \- Retrieve and store facts\.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-FILEBUCKET" "8" "
|
4
|
+
.TH "PUPPET\-FILEBUCKET" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-filebucket\fR \- Store and retrieve files in a filebucket
|
data/man/man8/puppet-generate.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-GENERATE" "8" "
|
4
|
+
.TH "PUPPET\-GENERATE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-generate\fR \- Generates Puppet code from Ruby definitions\.
|
data/man/man8/puppet-help.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-HELP" "8" "
|
4
|
+
.TH "PUPPET\-HELP" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-help\fR \- Display Puppet help\.
|
data/man/man8/puppet-lookup.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-LOOKUP" "8" "
|
4
|
+
.TH "PUPPET\-LOOKUP" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-lookup\fR \- Interactive Hiera lookup
|
data/man/man8/puppet-module.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-MODULE" "8" "
|
4
|
+
.TH "PUPPET\-MODULE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-module\fR \- Creates, installs and searches for modules on the Puppet Forge\.
|
data/man/man8/puppet-node.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-NODE" "8" "
|
4
|
+
.TH "PUPPET\-NODE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-node\fR \- View and manage node definitions\.
|
data/man/man8/puppet-parser.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-PARSER" "8" "
|
4
|
+
.TH "PUPPET\-PARSER" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-parser\fR \- Interact directly with the parser\.
|
data/man/man8/puppet-plugin.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-PLUGIN" "8" "
|
4
|
+
.TH "PUPPET\-PLUGIN" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-plugin\fR \- Interact with the Puppet plugin system\.
|
data/man/man8/puppet-report.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-REPORT" "8" "
|
4
|
+
.TH "PUPPET\-REPORT" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-report\fR \- Create, display, and submit reports\.
|
data/man/man8/puppet-resource.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-RESOURCE" "8" "
|
4
|
+
.TH "PUPPET\-RESOURCE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-resource\fR \- The resource abstraction layer shell
|
data/man/man8/puppet-script.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-SCRIPT" "8" "
|
4
|
+
.TH "PUPPET\-SCRIPT" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-script\fR \- Run a puppet manifests as a script without compiling a catalog
|
data/man/man8/puppet-ssl.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-SSL" "8" "
|
4
|
+
.TH "PUPPET\-SSL" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-ssl\fR \- Manage SSL keys and certificates for puppet SSL clients
|
data/man/man8/puppet.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET" "8" "
|
4
|
+
.TH "PUPPET" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\fR
|
@@ -25,4 +25,4 @@ Specialized:
|
|
25
25
|
catalog Compile, save, view, and convert catalogs\. describe Display help about resource types device Manage remote network devices doc Generate Puppet references epp Interact directly with the EPP template parser/renderer\. facts Retrieve and store facts\. filebucket Store and retrieve files in a filebucket generate Generates Puppet code from Ruby definitions\. node View and manage node definitions\. parser Interact directly with the parser\. plugin Interact with the Puppet plugin system\. script Run a puppet manifests as a script without compiling a catalog ssl Manage SSL keys and certificates for puppet SSL clients
|
26
26
|
.
|
27
27
|
.P
|
28
|
-
See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v7\.
|
28
|
+
See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v7\.16\.0
|
@@ -7,7 +7,7 @@ describe 'lookup' do
|
|
7
7
|
include PuppetSpec::Files
|
8
8
|
|
9
9
|
context 'with an environment' do
|
10
|
-
let(:fqdn) { Puppet
|
10
|
+
let(:fqdn) { Puppet[:certname] }
|
11
11
|
let(:env_name) { 'spec' }
|
12
12
|
let(:env_dir) { tmpdir('environments') }
|
13
13
|
let(:environment_files) do
|
@@ -43,11 +43,10 @@ describe 'lookup' do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
let(:app) { Puppet::Application[:lookup] }
|
46
|
-
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
|
47
|
-
let(:environments) { Puppet::Environments::Directories.new(populated_env_dir, []) }
|
48
46
|
let(:facts) { Puppet::Node::Facts.new("facts", {'my_fact' => 'my_fact_value'}) }
|
49
47
|
let(:cert) { pem_content('oid.pem') }
|
50
48
|
|
49
|
+
let(:node) { Puppet::Node.new('testnode', :facts => facts) }
|
51
50
|
let(:populated_env_dir) do
|
52
51
|
dir_contained_in(env_dir, environment_files)
|
53
52
|
env_dir
|
@@ -56,73 +55,72 @@ describe 'lookup' do
|
|
56
55
|
before do
|
57
56
|
stub_request(:get, "https://puppet:8140/puppet-ca/v1/certificate/#{fqdn}").to_return(body: cert)
|
58
57
|
allow(Puppet::Node::Facts.indirection).to receive(:find).and_return(facts)
|
59
|
-
end
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
allow(app.command_line).to receive(:args).and_return(key)
|
64
|
-
if explain
|
65
|
-
app.options[:explain] = true
|
66
|
-
app.options[:render_as] = :s
|
67
|
-
else
|
68
|
-
app.options[:render_as] = :json
|
69
|
-
end
|
70
|
-
options.each_pair { |k, v| app.options[k] = v }
|
71
|
-
capture = StringIO.new
|
72
|
-
saved_stdout = $stdout
|
73
|
-
begin
|
74
|
-
$stdout = capture
|
75
|
-
expect { app.run_command }.to exit_with(0)
|
76
|
-
ensure
|
77
|
-
$stdout = saved_stdout
|
78
|
-
end
|
79
|
-
out = capture.string.strip
|
80
|
-
if explain
|
81
|
-
out
|
82
|
-
else
|
83
|
-
out.empty? ? nil : JSON.parse("[#{out}]")[0]
|
84
|
-
end
|
85
|
-
end
|
59
|
+
Puppet[:environment] = env_name
|
60
|
+
Puppet[:environmentpath] = populated_env_dir
|
86
61
|
|
87
|
-
|
88
|
-
|
62
|
+
http = Puppet::HTTP::Client.new(ssl_context: Puppet::SSL::SSLProvider.new.create_insecure_context)
|
63
|
+
Puppet.runtime[:http] = http
|
89
64
|
end
|
90
65
|
|
91
|
-
|
92
|
-
|
93
|
-
example.run
|
94
|
-
end
|
66
|
+
def expect_lookup_with_output(exitcode, out)
|
67
|
+
expect { app.run }.to exit_with(exitcode).and output(out).to_stdout
|
95
68
|
end
|
96
69
|
|
97
70
|
it 'finds data in the environment' do
|
98
|
-
|
71
|
+
app.command_line.args << 'a'
|
72
|
+
expect_lookup_with_output(0, /value a/)
|
99
73
|
end
|
100
74
|
|
101
|
-
it
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
75
|
+
it "resolves hiera data using a top-level node parameter" do
|
76
|
+
File.write(File.join(env_dir, env_name, 'hiera.yaml'), <<~YAML)
|
77
|
+
---
|
78
|
+
version: 5
|
79
|
+
hierarchy:
|
80
|
+
- name: "Per Node"
|
81
|
+
data_hash: yaml_data
|
82
|
+
path: "%{my_fact}.yaml"
|
83
|
+
YAML
|
84
|
+
|
85
|
+
File.write(File.join(env_dir, env_name, 'data', "my_fact_value.yaml"), <<~YAML)
|
86
|
+
---
|
87
|
+
a: value from per node data
|
88
|
+
YAML
|
89
|
+
|
90
|
+
app.command_line.args << 'a'
|
91
|
+
expect_lookup_with_output(0, /--- value from per node data/)
|
92
|
+
end
|
106
93
|
|
107
|
-
|
94
|
+
it 'loads trusted information from the node certificate' do
|
95
|
+
Puppet.settings[:node_terminus] = 'exec'
|
96
|
+
expect_any_instance_of(Puppet::Node::Exec).to receive(:find) do |args|
|
97
|
+
info = Puppet.lookup(:trusted_information)
|
98
|
+
expect(info.certname).to eq(fqdn)
|
99
|
+
expect(info.extensions).to eq({ "1.3.6.1.4.1.34380.1.2.1.1" => "somevalue" })
|
100
|
+
end.and_return(node)
|
101
|
+
|
102
|
+
app.command_line.args << 'a' << '--compile'
|
103
|
+
expect_lookup_with_output(0, /--- value a/)
|
108
104
|
end
|
109
105
|
|
110
106
|
it 'loads external facts when running without --node' do
|
111
107
|
expect(Puppet::Util).not_to receive(:skip_external_facts)
|
112
108
|
expect(Facter).not_to receive(:load_external)
|
113
|
-
|
109
|
+
|
110
|
+
app.command_line.args << 'a'
|
111
|
+
expect_lookup_with_output(0, /--- value a/)
|
114
112
|
end
|
115
113
|
|
116
114
|
describe 'when using --node' do
|
117
115
|
let(:fqdn) { 'random_node' }
|
118
116
|
|
119
117
|
it 'skips loading of external facts' do
|
120
|
-
app.
|
118
|
+
app.command_line.args << 'a' << '--node' << fqdn
|
121
119
|
|
122
120
|
expect(Puppet::Node::Facts.indirection).to receive(:find).and_return(facts)
|
123
|
-
expect(Facter).to receive(:load_external).
|
124
|
-
expect(Facter).to receive(:load_external).
|
125
|
-
|
121
|
+
expect(Facter).to receive(:load_external).twice.with(false)
|
122
|
+
expect(Facter).to receive(:load_external).twice.with(true)
|
123
|
+
expect_lookup_with_output(0, /--- value a/)
|
126
124
|
end
|
127
125
|
end
|
128
126
|
|
@@ -130,29 +128,32 @@ describe 'lookup' do
|
|
130
128
|
require 'puppet/indirector/node/exec'
|
131
129
|
require 'puppet/indirector/node/plain'
|
132
130
|
|
133
|
-
let(:node) { Puppet::Node.new('testnode', :facts => facts
|
131
|
+
let(:node) { Puppet::Node.new('testnode', :facts => facts) }
|
134
132
|
|
135
133
|
it ':plain without --compile' do
|
136
134
|
Puppet.settings[:node_terminus] = 'exec'
|
137
135
|
expect_any_instance_of(Puppet::Node::Plain).to receive(:find).and_return(node)
|
138
136
|
expect_any_instance_of(Puppet::Node::Exec).not_to receive(:find)
|
139
|
-
|
137
|
+
|
138
|
+
app.command_line.args << 'a'
|
139
|
+
expect_lookup_with_output(0, /--- value a/)
|
140
140
|
end
|
141
141
|
|
142
142
|
it 'configured in Puppet settings with --compile' do
|
143
143
|
Puppet.settings[:node_terminus] = 'exec'
|
144
144
|
expect_any_instance_of(Puppet::Node::Plain).not_to receive(:find)
|
145
145
|
expect_any_instance_of(Puppet::Node::Exec).to receive(:find).and_return(node)
|
146
|
-
|
146
|
+
|
147
|
+
app.command_line.args << 'a' << '--compile'
|
148
|
+
expect_lookup_with_output(0, /--- value a/)
|
147
149
|
end
|
148
150
|
end
|
149
151
|
|
150
152
|
context 'configured with the wrong environment' do
|
151
|
-
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
|
152
153
|
it 'does not find data in non-existing environment' do
|
153
|
-
Puppet
|
154
|
-
|
155
|
-
|
154
|
+
Puppet[:environment] = 'doesntexist'
|
155
|
+
app.command_line.args << 'a'
|
156
|
+
expect { app.run }.to raise_error(Puppet::Environments::EnvironmentNotFound, /Could not find a directory environment named 'doesntexist'/)
|
156
157
|
end
|
157
158
|
end
|
158
159
|
|
@@ -197,15 +198,22 @@ describe 'lookup' do
|
|
197
198
|
end
|
198
199
|
|
199
200
|
it 'finds data in the module' do
|
200
|
-
|
201
|
+
app.command_line.args << 'mod_a::b'
|
202
|
+
expect_lookup_with_output(0, /value mod_a::b \(from mod_a\)/)
|
201
203
|
end
|
202
204
|
|
203
205
|
it 'finds quoted keys in the module' do
|
204
|
-
|
206
|
+
app.command_line.args << "'mod_a::a.quoted.key'"
|
207
|
+
expect_lookup_with_output(0, /value mod_a::a.quoted.key \(from mod_a\)/)
|
205
208
|
end
|
206
209
|
|
207
210
|
it 'merges hashes from environment and module when merge strategy hash is used' do
|
208
|
-
|
211
|
+
app.command_line.args << 'mod_a::hash_a' << '--merge' << 'hash'
|
212
|
+
expect_lookup_with_output(0, <<~END)
|
213
|
+
---
|
214
|
+
a: value mod_a::hash_a.a (from environment)
|
215
|
+
b: value mod_a::hash_a.b (from mod_a)
|
216
|
+
END
|
209
217
|
end
|
210
218
|
end
|
211
219
|
end
|
@@ -28,14 +28,18 @@ describe "puppet resource", unless: Puppet::Util::Platform.jruby? do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'lists types from the default environment' do
|
31
|
+
begin
|
31
32
|
modulepath = File.join(Puppet[:codedir], 'modules', 'test', 'lib', 'puppet', 'type')
|
32
33
|
FileUtils.mkdir_p(modulepath)
|
33
|
-
File.write(File.join(modulepath, '
|
34
|
+
File.write(File.join(modulepath, 'test_resource_spec.rb'), 'Puppet::Type.newtype(:test_resource_spec)')
|
34
35
|
resource.command_line.args = ['--types']
|
35
36
|
|
36
37
|
expect {
|
37
38
|
resource.run
|
38
|
-
}.to exit_with(0).and output(/
|
39
|
+
}.to exit_with(0).and output(/test_resource_spec/).to_stdout
|
40
|
+
ensure
|
41
|
+
Puppet::Type.rmtype(:test_resource_spec)
|
42
|
+
end
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
@@ -77,6 +77,12 @@ describe Puppet::HTTP::Client, unless: Puppet::Util::Platform.jruby? do
|
|
77
77
|
}
|
78
78
|
}
|
79
79
|
|
80
|
+
let(:systemstore) do
|
81
|
+
res = tmpfile('systemstore')
|
82
|
+
File.write(res, https_server.ca_cert)
|
83
|
+
res
|
84
|
+
end
|
85
|
+
|
80
86
|
it "mutually authenticates the connection" do
|
81
87
|
client_context = ssl_provider.create_context(
|
82
88
|
cacerts: [https_server.ca_cert], crls: [https_server.ca_crl],
|
@@ -88,6 +94,30 @@ describe Puppet::HTTP::Client, unless: Puppet::Util::Platform.jruby? do
|
|
88
94
|
expect(res).to be_success
|
89
95
|
end
|
90
96
|
end
|
97
|
+
|
98
|
+
it "connects when the server's CA is in the system store and the connection is mutually authenticated using create_context" do
|
99
|
+
Puppet::Util.withenv("SSL_CERT_FILE" => systemstore) do
|
100
|
+
client_context = ssl_provider.create_context(
|
101
|
+
cacerts: [https_server.ca_cert], crls: [https_server.ca_crl],
|
102
|
+
client_cert: https_server.server_cert, private_key: https_server.server_key,
|
103
|
+
revocation: false, include_system_store: true
|
104
|
+
)
|
105
|
+
https_server.start_server(ctx_proc: ctx_proc) do |port|
|
106
|
+
res = client.get(URI("https://127.0.0.1:#{port}"), options: {ssl_context: client_context})
|
107
|
+
expect(res).to be_success
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "connects when the server's CA is in the system store and the connection is mutually authenticated uning load_context" do
|
113
|
+
Puppet::Util.withenv("SSL_CERT_FILE" => systemstore) do
|
114
|
+
client_context = ssl_provider.load_context(revocation: false, include_system_store: true)
|
115
|
+
https_server.start_server(ctx_proc: ctx_proc) do |port|
|
116
|
+
res = client.get(URI("https://127.0.0.1:#{port}"), options: {ssl_context: client_context})
|
117
|
+
expect(res).to be_success
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
91
121
|
end
|
92
122
|
|
93
123
|
context "with a system trust store" do
|