puppet 7.0.0-universal-darwin → 7.5.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -3
- data/Gemfile.lock +45 -33
- data/ext/build_defaults.yaml +0 -1
- data/ext/project_data.yaml +1 -0
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +11 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +16 -3
- data/lib/puppet/defaults.rb +14 -41
- data/lib/puppet/environments.rb +54 -55
- data/lib/puppet/face/facts.rb +26 -2
- data/lib/puppet/face/node/clean.rb +8 -0
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/ffi/windows/api_types.rb +1 -1
- data/lib/puppet/ffi/windows/constants.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +5 -2
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +2 -0
- data/lib/puppet/http/factory.rb +4 -0
- data/lib/puppet/indirector/facts/facter.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +67 -0
- data/lib/puppet/network/http.rb +5 -2
- data/lib/puppet/network/http/api.rb +10 -6
- data/lib/puppet/network/http/api/master.rb +3 -2
- data/lib/puppet/network/http/api/master/v3.rb +2 -25
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
- data/lib/puppet/network/http/api/server.rb +10 -0
- data/lib/puppet/network/http/api/server/v3.rb +39 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/parser/lexer2.rb +0 -4
- data/lib/puppet/pops/validation/checker4_0.rb +0 -1
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/settings.rb +33 -28
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +166 -146
- data/man/man5/puppet.conf.5 +14 -6
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- 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 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +8 -2
- 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 +2 -2
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +160 -3
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -7
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +21 -1
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/registry_spec.rb +6 -10
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/facts_spec.rb +58 -7
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/application_spec.rb +51 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +1 -56
- data/spec/unit/environments_spec.rb +221 -68
- data/spec/unit/face/node_spec.rb +14 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +9 -0
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/http/factory_spec.rb +19 -0
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +20 -5
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
- data/spec/unit/network/http/api/master_spec.rb +38 -0
- data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
- data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
- data/spec/unit/network/http/api_spec.rb +11 -11
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
- data/spec/unit/pops/validator/validator_spec.rb +20 -43
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +6 -8
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/settings_spec.rb +13 -6
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/certificate_request_spec.rb +4 -10
- data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/sid_spec.rb +6 -0
- data/spec/unit/util_spec.rb +13 -6
- metadata +33 -16
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
- data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -4,12 +4,12 @@ require 'puppet/node/environment'
|
|
4
4
|
require 'puppet/network/http'
|
5
5
|
require 'matchers/json'
|
6
6
|
|
7
|
-
describe Puppet::Network::HTTP::API::
|
7
|
+
describe Puppet::Network::HTTP::API::Server::V3::Environments do
|
8
8
|
include JSONMatchers
|
9
9
|
|
10
10
|
let(:environment) { Puppet::Node::Environment.create(:production, ["/first", "/second"], '/manifests') }
|
11
11
|
let(:loader) { Puppet::Environments::Static.new(environment) }
|
12
|
-
let(:handler) { Puppet::Network::HTTP::API::
|
12
|
+
let(:handler) { Puppet::Network::HTTP::API::Server::V3::Environments.new(loader) }
|
13
13
|
let(:request) { Puppet::Network::HTTP::Request.from_hash(:headers => { 'accept' => 'application/json' }) }
|
14
14
|
let(:response) { Puppet::Network::HTTP::MemoryResponse.new }
|
15
15
|
|
@@ -3,16 +3,16 @@ require 'spec_helper'
|
|
3
3
|
require 'puppet/network/http'
|
4
4
|
require 'puppet_spec/network'
|
5
5
|
|
6
|
-
describe Puppet::Network::HTTP::API::
|
6
|
+
describe Puppet::Network::HTTP::API::Server::V3 do
|
7
7
|
include PuppetSpec::Network
|
8
8
|
|
9
9
|
let(:response) { Puppet::Network::HTTP::MemoryResponse.new }
|
10
|
-
let(:
|
11
|
-
let(:
|
10
|
+
let(:server_url_prefix) { "#{Puppet::Network::HTTP::SERVER_URL_PREFIX}/v3" }
|
11
|
+
let(:server_routes) {
|
12
12
|
Puppet::Network::HTTP::Route.
|
13
|
-
path(Regexp.new("#{Puppet::Network::HTTP::
|
13
|
+
path(Regexp.new("#{Puppet::Network::HTTP::SERVER_URL_PREFIX}/")).
|
14
14
|
any.
|
15
|
-
chain(Puppet::Network::HTTP::API::
|
15
|
+
chain(Puppet::Network::HTTP::API::Server::V3.routes)
|
16
16
|
}
|
17
17
|
|
18
18
|
# simulate puppetserver registering its authconfigloader class
|
@@ -26,53 +26,53 @@ describe Puppet::Network::HTTP::API::Master::V3 do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it "mounts the environments endpoint" do
|
29
|
-
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
30
|
-
|
29
|
+
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_url_prefix}/environments")
|
30
|
+
server_routes.process(request, response)
|
31
31
|
|
32
32
|
expect(response.code).to eq(200)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "matches only complete routes" do
|
36
|
-
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
37
|
-
expect {
|
36
|
+
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_url_prefix}/foo/environments")
|
37
|
+
expect { server_routes.process(request, response) }.to raise_error(Puppet::Network::HTTP::Error::HTTPNotFoundError)
|
38
38
|
|
39
|
-
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
40
|
-
expect {
|
39
|
+
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_url_prefix}/foo/environment/production")
|
40
|
+
expect { server_routes.process(request, response) }.to raise_error(Puppet::Network::HTTP::Error::HTTPNotFoundError)
|
41
41
|
end
|
42
42
|
|
43
43
|
it "mounts indirected routes" do
|
44
44
|
request = Puppet::Network::HTTP::Request.
|
45
|
-
from_hash(:path => "#{
|
45
|
+
from_hash(:path => "#{server_url_prefix}/node/foo",
|
46
46
|
:params => {:environment => "production"},
|
47
47
|
:headers => {"accept" => "application/json"})
|
48
|
-
|
48
|
+
server_routes.process(request, response)
|
49
49
|
|
50
50
|
expect(response.code).to eq(200)
|
51
51
|
end
|
52
52
|
|
53
53
|
it "responds to unknown paths by raising not_found_error" do
|
54
|
-
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
54
|
+
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_url_prefix}/unknown")
|
55
55
|
|
56
56
|
expect {
|
57
|
-
|
57
|
+
server_routes.process(request, response)
|
58
58
|
}.to raise_error(not_found_error)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "checks authorization for indirected routes" do
|
62
62
|
Puppet::Network::Authorization.authconfigloader_class = nil
|
63
63
|
|
64
|
-
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
64
|
+
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_url_prefix}/catalog/foo")
|
65
65
|
expect {
|
66
|
-
|
66
|
+
server_routes.process(request, response)
|
67
67
|
}.to raise_error(Puppet::Network::HTTP::Error::HTTPNotAuthorizedError, %r{Not Authorized: Forbidden request: /puppet/v3/catalog/foo \(method GET\)})
|
68
68
|
end
|
69
69
|
|
70
70
|
it "checks authorization for environments" do
|
71
71
|
Puppet::Network::Authorization.authconfigloader_class = nil
|
72
72
|
|
73
|
-
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
73
|
+
request = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_url_prefix}/environments")
|
74
74
|
expect {
|
75
|
-
|
75
|
+
server_routes.process(request, response)
|
76
76
|
}.to raise_error(Puppet::Network::HTTP::Error::HTTPNotAuthorizedError, %r{Not Authorized: Forbidden request: /puppet/v3/environments \(method GET\)})
|
77
77
|
end
|
78
78
|
end
|
@@ -36,12 +36,12 @@ describe Puppet::Network::HTTP::API do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
describe "Puppet API" do
|
39
|
-
let(:handler) { PuppetSpec::Handler.new(Puppet::Network::HTTP::API.
|
39
|
+
let(:handler) { PuppetSpec::Handler.new(Puppet::Network::HTTP::API.server_routes,
|
40
40
|
Puppet::Network::HTTP::API.not_found_upgrade) }
|
41
41
|
|
42
|
-
let(:
|
42
|
+
let(:server_prefix) { Puppet::Network::HTTP::SERVER_URL_PREFIX }
|
43
43
|
|
44
|
-
it "raises a not-found error for non-CA or
|
44
|
+
it "raises a not-found error for non-CA or server routes and suggests an upgrade" do
|
45
45
|
req = Puppet::Network::HTTP::Request.from_hash(:path => "/unknown")
|
46
46
|
res = {}
|
47
47
|
handler.process(req, res)
|
@@ -50,13 +50,13 @@ describe Puppet::Network::HTTP::API do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
describe "when processing Puppet 3 routes" do
|
53
|
-
it "gives an upgrade message for
|
53
|
+
it "gives an upgrade message for server routes" do
|
54
54
|
req = Puppet::Network::HTTP::Request.from_hash(:path => "/production/node/foo")
|
55
55
|
res = {}
|
56
56
|
handler.process(req, res)
|
57
57
|
expect(res[:status]).to eq(404)
|
58
58
|
expect(res[:body]).to include("Puppet version: #{Puppet.version}")
|
59
|
-
expect(res[:body]).to include("Supported /puppet API versions: #{Puppet::Network::HTTP::
|
59
|
+
expect(res[:body]).to include("Supported /puppet API versions: #{Puppet::Network::HTTP::SERVER_URL_VERSIONS}")
|
60
60
|
end
|
61
61
|
|
62
62
|
it "gives an upgrade message for CA routes" do
|
@@ -65,11 +65,11 @@ describe Puppet::Network::HTTP::API do
|
|
65
65
|
handler.process(req, res)
|
66
66
|
expect(res[:status]).to eq(404)
|
67
67
|
expect(res[:body]).to include("Puppet version: #{Puppet.version}")
|
68
|
-
expect(res[:body]).to include("Supported /puppet API versions: #{Puppet::Network::HTTP::
|
68
|
+
expect(res[:body]).to include("Supported /puppet API versions: #{Puppet::Network::HTTP::SERVER_URL_VERSIONS}")
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
describe "when processing
|
72
|
+
describe "when processing server routes" do
|
73
73
|
# simulate puppetserver registering its authconfigloader class
|
74
74
|
around :each do |example|
|
75
75
|
Puppet::Network::Authorization.authconfigloader_class = Object
|
@@ -81,7 +81,7 @@ describe Puppet::Network::HTTP::API do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
it "responds to v3 indirector requests" do
|
84
|
-
req = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
84
|
+
req = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_prefix}/v3/node/foo",
|
85
85
|
:params => {:environment => "production"},
|
86
86
|
:headers => {'accept' => "application/json"})
|
87
87
|
res = {}
|
@@ -90,18 +90,18 @@ describe Puppet::Network::HTTP::API do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it "responds to v3 environments requests" do
|
93
|
-
req = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
93
|
+
req = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_prefix}/v3/environments")
|
94
94
|
res = {}
|
95
95
|
handler.process(req, res)
|
96
96
|
expect(res[:status]).to eq(200)
|
97
97
|
end
|
98
98
|
|
99
99
|
it "responds with a not found error to non-v3 requests and does not suggest an upgrade" do
|
100
|
-
req = Puppet::Network::HTTP::Request.from_hash(:path => "#{
|
100
|
+
req = Puppet::Network::HTTP::Request.from_hash(:path => "#{server_prefix}/unknown")
|
101
101
|
res = {}
|
102
102
|
handler.process(req, res)
|
103
103
|
expect(res[:status]).to eq(404)
|
104
|
-
expect(res[:body]).to include("No route for GET #{
|
104
|
+
expect(res[:body]).to include("No route for GET #{server_prefix}/unknown")
|
105
105
|
expect(res[:body]).not_to include("Puppet version: #{Puppet.version}")
|
106
106
|
end
|
107
107
|
end
|
@@ -240,20 +240,9 @@ describe Puppet::Parser::Compiler do
|
|
240
240
|
end
|
241
241
|
|
242
242
|
describe "when compiling" do
|
243
|
-
def compile_methods
|
244
|
-
[:set_node_parameters, :evaluate_main, :evaluate_ast_node, :evaluate_node_classes, :evaluate_generators, :fail_on_unevaluated,
|
245
|
-
:finish, :store, :extract, :evaluate_relationships]
|
246
|
-
end
|
247
|
-
|
248
|
-
# Stub all of the main compile methods except the ones we're specifically interested in.
|
249
|
-
def compile_stub(*except)
|
250
|
-
(compile_methods - except).each { |m| allow(@compiler).to receive(m) }
|
251
|
-
end
|
252
|
-
|
253
243
|
it "should set node parameters as variables in the top scope" do
|
254
244
|
params = {"a" => "b", "c" => "d"}
|
255
245
|
allow(@node).to receive(:parameters).and_return(params)
|
256
|
-
compile_stub(:set_node_parameters)
|
257
246
|
@compiler.compile
|
258
247
|
expect(@compiler.topscope['a']).to eq("b")
|
259
248
|
expect(@compiler.topscope['c']).to eq("d")
|
@@ -262,13 +251,11 @@ describe Puppet::Parser::Compiler do
|
|
262
251
|
it "should set node parameters that are of Symbol type as String variables in the top scope" do
|
263
252
|
params = {"a" => :b}
|
264
253
|
allow(@node).to receive(:parameters).and_return(params)
|
265
|
-
compile_stub(:set_node_parameters)
|
266
254
|
@compiler.compile
|
267
255
|
expect(@compiler.topscope['a']).to eq("b")
|
268
256
|
end
|
269
257
|
|
270
258
|
it "should set the node's environment as a string variable in top scope" do
|
271
|
-
compile_stub(:set_node_parameters)
|
272
259
|
@node.merge({'wat' => 'this is how the sausage is made'})
|
273
260
|
@compiler.compile
|
274
261
|
expect(@compiler.topscope['environment']).to eq("testing")
|
@@ -276,7 +263,6 @@ describe Puppet::Parser::Compiler do
|
|
276
263
|
end
|
277
264
|
|
278
265
|
it "sets the environment based on node.environment instead of the parameters" do
|
279
|
-
compile_stub(:set_node_parameters)
|
280
266
|
@node.parameters['environment'] = "Not actually #{@node.environment.name}"
|
281
267
|
|
282
268
|
@compiler.compile
|
@@ -286,23 +272,21 @@ describe Puppet::Parser::Compiler do
|
|
286
272
|
it "should set the client and server versions on the catalog" do
|
287
273
|
params = {"clientversion" => "2", "serverversion" => "3"}
|
288
274
|
allow(@node).to receive(:parameters).and_return(params)
|
289
|
-
compile_stub(:set_node_parameters)
|
290
275
|
@compiler.compile
|
291
276
|
expect(@compiler.catalog.client_version).to eq("2")
|
292
277
|
expect(@compiler.catalog.server_version).to eq("3")
|
293
278
|
end
|
294
279
|
|
295
280
|
it "should evaluate the main class if it exists" do
|
296
|
-
compile_stub(:evaluate_main)
|
297
281
|
main_class = @known_resource_types.add Puppet::Resource::Type.new(:hostclass, "")
|
282
|
+
@compiler.topscope.source = main_class
|
283
|
+
|
298
284
|
expect(main_class).to receive(:evaluate_code).with(be_a(Puppet::Parser::Resource))
|
299
|
-
expect(@compiler.topscope).to receive(:source=).with(main_class)
|
300
285
|
|
301
286
|
@compiler.compile
|
302
287
|
end
|
303
288
|
|
304
289
|
it "should create a new, empty 'main' if no main class exists" do
|
305
|
-
compile_stub(:evaluate_main)
|
306
290
|
@compiler.compile
|
307
291
|
expect(@known_resource_types.find_hostclass("")).to be_instance_of(Puppet::Resource::Type)
|
308
292
|
end
|
@@ -325,7 +309,7 @@ describe Puppet::Parser::Compiler do
|
|
325
309
|
@compiler.add_collection(colls[0])
|
326
310
|
@compiler.add_collection(colls[1])
|
327
311
|
|
328
|
-
|
312
|
+
allow(@compiler).to receive(:fail_on_unevaluated)
|
329
313
|
@compiler.compile
|
330
314
|
end
|
331
315
|
|
@@ -418,22 +418,27 @@ describe Puppet::Parser::Resource do
|
|
418
418
|
end
|
419
419
|
|
420
420
|
describe "when merging overrides" do
|
421
|
+
def resource_type(name)
|
422
|
+
double(name, :child_of? => false)
|
423
|
+
end
|
424
|
+
|
421
425
|
before do
|
422
|
-
@source = "source1"
|
426
|
+
@source = resource_type("source1")
|
423
427
|
@resource = mkresource :source => @source
|
424
428
|
@override = mkresource :source => @source
|
425
429
|
end
|
426
430
|
|
427
431
|
it "should fail when the override was not created by a parent class" do
|
428
|
-
@override.source = "source2"
|
429
|
-
expect(@override.source).to receive(:child_of?).with(
|
432
|
+
@override.source = resource_type("source2")
|
433
|
+
expect(@override.source).to receive(:child_of?).with(@source).and_return(false)
|
430
434
|
expect { @resource.merge(@override) }.to raise_error(Puppet::ParseError)
|
431
435
|
end
|
432
436
|
|
433
437
|
it "should succeed when the override was created in the current scope" do
|
434
|
-
@
|
438
|
+
@source3 = resource_type("source3")
|
439
|
+
@resource.source = @source3
|
435
440
|
@override.source = @resource.source
|
436
|
-
expect(@override.source).not_to receive(:child_of?).with(
|
441
|
+
expect(@override.source).not_to receive(:child_of?).with(@source3)
|
437
442
|
params = {:a => :b, :c => :d}
|
438
443
|
expect(@override).to receive(:parameters).and_return(params)
|
439
444
|
expect(@resource).to receive(:override_parameter).with(:b)
|
@@ -442,9 +447,10 @@ describe Puppet::Parser::Resource do
|
|
442
447
|
end
|
443
448
|
|
444
449
|
it "should succeed when a parent class created the override" do
|
445
|
-
@
|
446
|
-
@
|
447
|
-
|
450
|
+
@source3 = resource_type("source3")
|
451
|
+
@resource.source = @source3
|
452
|
+
@override.source = resource_type("source4")
|
453
|
+
expect(@override.source).to receive(:child_of?).with(@source3).and_return(true)
|
448
454
|
params = {:a => :b, :c => :d}
|
449
455
|
expect(@override).to receive(:parameters).and_return(params)
|
450
456
|
expect(@resource).to receive(:override_parameter).with(:b)
|
@@ -57,9 +57,10 @@ describe Puppet::Parser::TemplateWrapper do
|
|
57
57
|
expect(tw.all_tags).to eq(["tag1","tag2"])
|
58
58
|
end
|
59
59
|
|
60
|
-
it "
|
61
|
-
expect
|
62
|
-
|
60
|
+
it "raises not implemented error" do
|
61
|
+
expect {
|
62
|
+
tw.tags
|
63
|
+
}.to raise_error(NotImplementedError, /Call 'all_tags' instead/)
|
63
64
|
end
|
64
65
|
|
65
66
|
it "raises error on access to removed in-scope variables via method calls" do
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet_spec/compiler'
|
3
|
+
|
4
|
+
describe Puppet::Pops::Evaluator::DeferredResolver do
|
5
|
+
include PuppetSpec::Compiler
|
6
|
+
|
7
|
+
let(:environment) { Puppet::Node::Environment.create(:testing, []) }
|
8
|
+
let(:facts) { Puppet::Node::Facts.new('node.example.com') }
|
9
|
+
|
10
|
+
it 'resolves deferred values in a catalog' do
|
11
|
+
catalog = compile_to_catalog(<<~END)
|
12
|
+
notify { "deferred":
|
13
|
+
message => Deferred("join", [[1,2,3], ":"])
|
14
|
+
}
|
15
|
+
END
|
16
|
+
described_class.resolve_and_replace(facts, catalog)
|
17
|
+
|
18
|
+
expect(catalog.resource(:notify, 'deferred')[:message]).to eq('1:2:3')
|
19
|
+
end
|
20
|
+
end
|
@@ -94,10 +94,6 @@ describe 'Lexer2' do
|
|
94
94
|
"private" => :PRIVATE,
|
95
95
|
"type" => :TYPE,
|
96
96
|
"attr" => :ATTR,
|
97
|
-
"application" => :APPLICATION,
|
98
|
-
"consumes" => :CONSUMES,
|
99
|
-
"produces" => :PRODUCES,
|
100
|
-
"site" => :SITE,
|
101
97
|
}.each do |string, name|
|
102
98
|
it "should lex a keyword from '#{string}'" do
|
103
99
|
expect(tokens_scanned_from(string)).to match_tokens2(name)
|
@@ -344,18 +344,6 @@ describe "validating 4x" do
|
|
344
344
|
end
|
345
345
|
end
|
346
346
|
|
347
|
-
it 'produces a syntax error for application' do
|
348
|
-
expect {
|
349
|
-
parse('application test {}')
|
350
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'application'/)
|
351
|
-
end
|
352
|
-
|
353
|
-
it 'produces a syntax error for capability mapping' do
|
354
|
-
expect {
|
355
|
-
parse('Foo produces Sql {}')
|
356
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'produces'/)
|
357
|
-
end
|
358
|
-
|
359
347
|
it 'produces an error for collect expressions with virtual query' do
|
360
348
|
acceptor = validate(parse("User <| title == 'admin' |>"))
|
361
349
|
expect(acceptor.error_count).to eql(1)
|
@@ -410,12 +398,6 @@ describe "validating 4x" do
|
|
410
398
|
expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
|
411
399
|
end
|
412
400
|
|
413
|
-
it 'produces a syntax error for site definitions' do
|
414
|
-
expect {
|
415
|
-
parse('site {}')
|
416
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'site'/)
|
417
|
-
end
|
418
|
-
|
419
401
|
context 'validating apply() blocks' do
|
420
402
|
it 'allows empty apply() blocks' do
|
421
403
|
acceptor = validate(parse('apply("foo.example.com") { }'))
|
@@ -468,18 +450,6 @@ describe "validating 4x" do
|
|
468
450
|
expect(acceptor.error_count).to eql(0)
|
469
451
|
end
|
470
452
|
|
471
|
-
it 'produces a syntax error for application' do
|
472
|
-
expect {
|
473
|
-
parse('apply("foo.example.com") { application test {} }')
|
474
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'application'/)
|
475
|
-
end
|
476
|
-
|
477
|
-
it 'produces a syntax error for capability mapping' do
|
478
|
-
expect {
|
479
|
-
parse('apply("foo.example.com") { Foo produces Sql {} }')
|
480
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'produces'/)
|
481
|
-
end
|
482
|
-
|
483
453
|
it 'produces an error for class expressions' do
|
484
454
|
acceptor = validate(parse('apply("foo.example.com") { class test {} }'))
|
485
455
|
expect(acceptor.error_count).to eql(1)
|
@@ -503,12 +473,6 @@ describe "validating 4x" do
|
|
503
473
|
expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
|
504
474
|
end
|
505
475
|
|
506
|
-
it 'produces an error for site definitions' do
|
507
|
-
expect {
|
508
|
-
parse('apply("foo.example.com") { site {} }')
|
509
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'site'/)
|
510
|
-
end
|
511
|
-
|
512
476
|
it 'produces an error for apply() inside apply()' do
|
513
477
|
acceptor = validate(parse('apply("foo.example.com") { apply("foo.example.com") { } }'))
|
514
478
|
expect(acceptor.error_count).to eql(1)
|
@@ -1010,14 +974,27 @@ describe "validating 4x" do
|
|
1010
974
|
expect(acceptor.errors[2].source_pos.line).to eql(5)
|
1011
975
|
end
|
1012
976
|
end
|
1013
|
-
|
977
|
+
[
|
978
|
+
"application",
|
979
|
+
"consumes",
|
980
|
+
"produces",
|
981
|
+
"site",
|
982
|
+
].each do |kw|
|
983
|
+
it "allow usage of #{kw} keyword (it was reserved in puppet 6.x)" do
|
984
|
+
source = <<-SOURCE
|
985
|
+
class foo (
|
986
|
+
$#{kw},
|
987
|
+
) {
|
988
|
+
notice $#{kw}
|
989
|
+
}
|
990
|
+
|
991
|
+
class { foo:
|
992
|
+
#{kw} => 'bar'
|
993
|
+
}
|
994
|
+
SOURCE
|
1014
995
|
|
1015
|
-
|
1016
|
-
|
1017
|
-
it "raises a syntax error in #{word} clauses" do
|
1018
|
-
expect {
|
1019
|
-
parse("foo #{word} Bar {}")
|
1020
|
-
}.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at '#{word}'/)
|
996
|
+
acceptor = validate(parse(source, 'path/foo/manifests/init.pp'))
|
997
|
+
expect(acceptor.error_count).to eql(0)
|
1021
998
|
end
|
1022
999
|
end
|
1023
1000
|
end
|