puppet 6.19.0-x64-mingw32 → 6.22.1-x64-mingw32
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 +3 -1
- data/Gemfile.lock +50 -39
- data/ext/project_data.yaml +2 -2
- 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/filebucket.rb +2 -2
- 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 +28 -18
- data/lib/puppet/defaults.rb +46 -20
- data/lib/puppet/environments.rb +54 -55
- data/lib/puppet/face/config.rb +10 -0
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +158 -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/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +2 -0
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/partition.rb +8 -0
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +3 -58
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -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 +69 -1
- data/lib/puppet/network/http/factory.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +70 -17
- 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/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/model/ast_transformer.rb +1 -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/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/service/systemd.rb +1 -1
- 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 +43 -15
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/fact_dif.rb +81 -0
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +295 -219
- data/man/man5/puppet.conf.5 +15 -7
- 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 +90 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +4 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -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-status.8 +1 -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/service/systemd/list_unit_files_services_vendor_preset +9 -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/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- 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/lib/puppet_spec/settings.rb +6 -1
- data/spec/spec_helper.rb +12 -5
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/facts_spec.rb +482 -3
- 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 +36 -1
- data/spec/unit/environments_spec.rb +221 -68
- data/spec/unit/face/config_spec.rb +27 -32
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +0 -11
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -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/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/service/compiler_spec.rb +49 -0
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +95 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- 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/key/file_spec.rb +0 -1
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/factory_spec.rb +19 -0
- data/spec/unit/network/http/handler_spec.rb +0 -5
- 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/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/dnfmodule_spec.rb +10 -1
- 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/service/systemd_spec.rb +11 -0
- 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 +71 -3
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/settings_spec.rb +543 -228
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- 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/rubygems_spec.rb +2 -2
- 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 +31 -16
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
@@ -0,0 +1,255 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'puppet/node/facts'
|
4
|
+
require 'puppet/indirector/facts/json'
|
5
|
+
|
6
|
+
def dir_containing_json_facts(hash)
|
7
|
+
jsondir = tmpdir('json_facts')
|
8
|
+
|
9
|
+
Puppet[:client_datadir] = jsondir
|
10
|
+
dir = File.join(jsondir, 'facts')
|
11
|
+
Dir.mkdir(dir)
|
12
|
+
hash.each_pair do |file, facts|
|
13
|
+
File.open(File.join(dir, file), 'wb') do |f|
|
14
|
+
f.write(JSON.dump(facts))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Puppet::Node::Facts::Json do
|
20
|
+
include PuppetSpec::Files
|
21
|
+
|
22
|
+
it "should be a subclass of the Json terminus" do
|
23
|
+
expect(Puppet::Node::Facts::Json.superclass).to equal(Puppet::Indirector::JSON)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should have documentation" do
|
27
|
+
expect(Puppet::Node::Facts::Json.doc).not_to be_nil
|
28
|
+
expect(Puppet::Node::Facts::Json.doc).not_to be_empty
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be registered with the facts indirection" do
|
32
|
+
indirection = Puppet::Indirector::Indirection.instance(:facts)
|
33
|
+
expect(Puppet::Node::Facts::Json.indirection).to equal(indirection)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have its name set to :json" do
|
37
|
+
expect(Puppet::Node::Facts::Json.name).to eq(:json)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow network requests" do
|
41
|
+
# Doesn't allow json as a network format, but allows `puppet facts upload`
|
42
|
+
# to update the JSON cache on a master.
|
43
|
+
expect(Puppet::Node::Facts::Json.new.allow_remote_requests?).to be(true)
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#search" do
|
47
|
+
def assert_search_matches(matching, nonmatching, query)
|
48
|
+
request = Puppet::Indirector::Request.new(:inventory, :search, nil, nil, query)
|
49
|
+
|
50
|
+
dir_containing_json_facts(matching.merge(nonmatching))
|
51
|
+
|
52
|
+
results = Puppet::Node::Facts::Json.new.search(request)
|
53
|
+
expect(results).to match_array(matching.values.map {|facts| facts.name})
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should return node names that match the search query options" do
|
57
|
+
assert_search_matches({
|
58
|
+
'matching.json' => Puppet::Node::Facts.new("matchingnode", "architecture" => "i386", 'processor_count' => '4'),
|
59
|
+
'matching1.json' => Puppet::Node::Facts.new("matchingnode1", "architecture" => "i386", 'processor_count' => '4', 'randomfact' => 'foo')
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "powerpc", 'processor_count' => '4'),
|
63
|
+
"nonmatching1.json" => Puppet::Node::Facts.new("nonmatchingnode1", "architecture" => "powerpc", 'processor_count' => '5'),
|
64
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '5'),
|
65
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3", 'processor_count' => '4'),
|
66
|
+
},
|
67
|
+
{'facts.architecture' => 'i386', 'facts.processor_count' => '4'}
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return empty array when no nodes match the search query options" do
|
72
|
+
assert_search_matches({}, {
|
73
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "powerpc", 'processor_count' => '10'),
|
74
|
+
"nonmatching1.json" => Puppet::Node::Facts.new("nonmatchingnode1", "architecture" => "powerpc", 'processor_count' => '5'),
|
75
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '5'),
|
76
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3", 'processor_count' => '4'),
|
77
|
+
},
|
78
|
+
{'facts.processor_count.lt' => '4', 'facts.processor_count.gt' => '4'}
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should return node names that match the search query options with the greater than operator" do
|
83
|
+
assert_search_matches({
|
84
|
+
'matching.json' => Puppet::Node::Facts.new("matchingnode", "architecture" => "i386", 'processor_count' => '5'),
|
85
|
+
'matching1.json' => Puppet::Node::Facts.new("matchingnode1", "architecture" => "powerpc", 'processor_count' => '10', 'randomfact' => 'foo')
|
86
|
+
},
|
87
|
+
{
|
88
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "powerpc", 'processor_count' => '4'),
|
89
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '3'),
|
90
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3" ),
|
91
|
+
},
|
92
|
+
{'facts.processor_count.gt' => '4'}
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should return node names that match the search query options with the less than operator" do
|
97
|
+
assert_search_matches({
|
98
|
+
'matching.json' => Puppet::Node::Facts.new("matchingnode", "architecture" => "i386", 'processor_count' => '5'),
|
99
|
+
'matching1.json' => Puppet::Node::Facts.new("matchingnode1", "architecture" => "powerpc", 'processor_count' => '30', 'randomfact' => 'foo')
|
100
|
+
},
|
101
|
+
{
|
102
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "powerpc", 'processor_count' => '50' ),
|
103
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '100'),
|
104
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3" ),
|
105
|
+
},
|
106
|
+
{'facts.processor_count.lt' => '50'}
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should return node names that match the search query options with the less than or equal to operator" do
|
111
|
+
assert_search_matches({
|
112
|
+
'matching.json' => Puppet::Node::Facts.new("matchingnode", "architecture" => "i386", 'processor_count' => '5'),
|
113
|
+
'matching1.json' => Puppet::Node::Facts.new("matchingnode1", "architecture" => "powerpc", 'processor_count' => '50', 'randomfact' => 'foo')
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "powerpc", 'processor_count' => '100' ),
|
117
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '5000'),
|
118
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3" ),
|
119
|
+
},
|
120
|
+
{'facts.processor_count.le' => '50'}
|
121
|
+
)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return node names that match the search query options with the greater than or equal to operator" do
|
125
|
+
assert_search_matches({
|
126
|
+
'matching.json' => Puppet::Node::Facts.new("matchingnode", "architecture" => "i386", 'processor_count' => '100'),
|
127
|
+
'matching1.json' => Puppet::Node::Facts.new("matchingnode1", "architecture" => "powerpc", 'processor_count' => '50', 'randomfact' => 'foo')
|
128
|
+
},
|
129
|
+
{
|
130
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "powerpc", 'processor_count' => '40'),
|
131
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '9' ),
|
132
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3" ),
|
133
|
+
},
|
134
|
+
{'facts.processor_count.ge' => '50'}
|
135
|
+
)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should return node names that match the search query options with the not equal operator" do
|
139
|
+
assert_search_matches({
|
140
|
+
'matching.json' => Puppet::Node::Facts.new("matchingnode", "architecture" => 'arm' ),
|
141
|
+
'matching1.json' => Puppet::Node::Facts.new("matchingnode1", "architecture" => 'powerpc', 'randomfact' => 'foo')
|
142
|
+
},
|
143
|
+
{
|
144
|
+
"nonmatching.json" => Puppet::Node::Facts.new("nonmatchingnode", "architecture" => "i386" ),
|
145
|
+
"nonmatching2.json" => Puppet::Node::Facts.new("nonmatchingnode2", "architecture" => "i386", 'processor_count' => '9' ),
|
146
|
+
"nonmatching3.json" => Puppet::Node::Facts.new("nonmatchingnode3" ),
|
147
|
+
},
|
148
|
+
{'facts.architecture.ne' => 'i386'}
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
def apply_timestamp(facts, timestamp)
|
153
|
+
facts.timestamp = timestamp
|
154
|
+
facts
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should be able to query based on meta.timestamp.gt" do
|
158
|
+
assert_search_matches({
|
159
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
160
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
161
|
+
},
|
162
|
+
{
|
163
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
164
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
165
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
166
|
+
},
|
167
|
+
{'meta.timestamp.gt' => '2010-10-15'}
|
168
|
+
)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should be able to query based on meta.timestamp.le" do
|
172
|
+
assert_search_matches({
|
173
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
174
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
175
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
176
|
+
},
|
177
|
+
{
|
178
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
179
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
180
|
+
},
|
181
|
+
{'meta.timestamp.le' => '2010-10-15'}
|
182
|
+
)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should be able to query based on meta.timestamp.lt" do
|
186
|
+
assert_search_matches({
|
187
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
188
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
189
|
+
},
|
190
|
+
{
|
191
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
192
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
193
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
194
|
+
},
|
195
|
+
{'meta.timestamp.lt' => '2010-10-15'}
|
196
|
+
)
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should be able to query based on meta.timestamp.ge" do
|
200
|
+
assert_search_matches({
|
201
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
202
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
203
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
204
|
+
},
|
205
|
+
{
|
206
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
207
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
208
|
+
},
|
209
|
+
{'meta.timestamp.ge' => '2010-10-15'}
|
210
|
+
)
|
211
|
+
end
|
212
|
+
|
213
|
+
it "should be able to query based on meta.timestamp.eq" do
|
214
|
+
assert_search_matches({
|
215
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
216
|
+
},
|
217
|
+
{
|
218
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
219
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
220
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
221
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
222
|
+
},
|
223
|
+
{'meta.timestamp.eq' => '2010-10-15'}
|
224
|
+
)
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should be able to query based on meta.timestamp" do
|
228
|
+
assert_search_matches({
|
229
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
230
|
+
},
|
231
|
+
{
|
232
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
233
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
234
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
235
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
236
|
+
},
|
237
|
+
{'meta.timestamp' => '2010-10-15'}
|
238
|
+
)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should be able to query based on meta.timestamp.ne" do
|
242
|
+
assert_search_matches({
|
243
|
+
'2010-11-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-01", {}), Time.parse("2010-11-01")),
|
244
|
+
'2010-11-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-11-10", {}), Time.parse("2010-11-10")),
|
245
|
+
'2010-10-01.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-01", {}), Time.parse("2010-10-01")),
|
246
|
+
'2010-10-10.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-10", {}), Time.parse("2010-10-10")),
|
247
|
+
},
|
248
|
+
{
|
249
|
+
'2010-10-15.json' => apply_timestamp(Puppet::Node::Facts.new("2010-10-15", {}), Time.parse("2010-10-15")),
|
250
|
+
},
|
251
|
+
{'meta.timestamp.ne' => '2010-10-15'}
|
252
|
+
)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
@@ -5,22 +5,40 @@ require 'puppet/indirector/file_bucket_file/file'
|
|
5
5
|
require 'puppet/indirector/file_bucket_file/rest'
|
6
6
|
|
7
7
|
describe Puppet::FileBucketFile::Selector do
|
8
|
+
let(:model) { Puppet::FileBucket::File.new('') }
|
9
|
+
let(:indirection) { Puppet::FileBucket::File.indirection }
|
10
|
+
let(:terminus) { indirection.terminus(:selector) }
|
11
|
+
|
8
12
|
%w[head find save search destroy].each do |method|
|
9
13
|
describe "##{method}" do
|
10
14
|
it "should proxy to rest terminus for https requests" do
|
11
|
-
|
15
|
+
key = "https://example.com/path/to/file"
|
12
16
|
|
13
|
-
|
17
|
+
expect(indirection.terminus(:rest)).to receive(method)
|
14
18
|
|
15
|
-
|
19
|
+
if method == 'save'
|
20
|
+
terminus.send(method, indirection.request(method, key, model))
|
21
|
+
else
|
22
|
+
terminus.send(method, indirection.request(method, key, nil))
|
23
|
+
end
|
16
24
|
end
|
17
25
|
|
18
26
|
it "should proxy to file terminus for other requests" do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
27
|
+
key = "file:///path/to/file"
|
28
|
+
|
29
|
+
case method
|
30
|
+
when 'save'
|
31
|
+
expect(indirection.terminus(:file)).to receive(method)
|
32
|
+
terminus.send(method, indirection.request(method, key, model))
|
33
|
+
when 'find', 'head'
|
34
|
+
expect(indirection.terminus(:file)).to receive(method)
|
35
|
+
terminus.send(method, indirection.request(method, key, nil))
|
36
|
+
else
|
37
|
+
# file terminus doesn't implement search or destroy
|
38
|
+
expect {
|
39
|
+
terminus.send(method, indirection.request(method, key, nil))
|
40
|
+
}.to raise_error(NoMethodError)
|
41
|
+
end
|
24
42
|
end
|
25
43
|
end
|
26
44
|
end
|
@@ -178,29 +178,25 @@ describe Puppet::Indirector::Indirection do
|
|
178
178
|
|
179
179
|
describe "creates a request" do
|
180
180
|
it "should create it with its name as the request's indirection name" do
|
181
|
-
expect(
|
182
|
-
@indirection.request(:funtest, "yayness")
|
181
|
+
expect(@indirection.request(:funtest, "yayness", nil).indirection_name).to eq(@indirection.name)
|
183
182
|
end
|
184
183
|
|
185
184
|
it "should require a method and key" do
|
186
|
-
|
187
|
-
|
185
|
+
request = @indirection.request(:funtest, "yayness", nil)
|
186
|
+
expect(request.method).to eq(:funtest)
|
187
|
+
expect(request.key).to eq("yayness")
|
188
188
|
end
|
189
189
|
|
190
190
|
it "should support optional arguments" do
|
191
|
-
expect(
|
192
|
-
@indirection.request(:funtest, "yayness", :one => :two)
|
191
|
+
expect(@indirection.request(:funtest, "yayness", nil, :one => :two).options).to eq(:one => :two)
|
193
192
|
end
|
194
193
|
|
195
194
|
it "should not pass options if none are supplied" do
|
196
|
-
expect(
|
197
|
-
@indirection.request(:funtest, "yayness")
|
195
|
+
expect(@indirection.request(:funtest, "yayness", nil).options).to eq({})
|
198
196
|
end
|
199
197
|
|
200
198
|
it "should return the request" do
|
201
|
-
request
|
202
|
-
expect(Puppet::Indirector::Request).to receive(:new).and_return(request)
|
203
|
-
expect(@indirection.request(:funtest, "yayness")).to equal(request)
|
199
|
+
expect(@indirection.request(:funtest, "yayness", nil)).to be_a(Puppet::Indirector::Request)
|
204
200
|
end
|
205
201
|
end
|
206
202
|
|
@@ -833,7 +829,7 @@ describe Puppet::Indirector::Indirection do
|
|
833
829
|
end
|
834
830
|
|
835
831
|
it "should not create a terminus instance until one is actually needed" do
|
836
|
-
expect(
|
832
|
+
expect(@indirection).not_to receive(:terminus)
|
837
833
|
Puppet::Indirector::Indirection.new(double('model'), :lazytest)
|
838
834
|
end
|
839
835
|
|
@@ -19,7 +19,6 @@ describe Puppet::SSL::Key::File do
|
|
19
19
|
allow(Puppet.settings).to receive(:use)
|
20
20
|
|
21
21
|
@searcher = Puppet::SSL::Key::File.new
|
22
|
-
allow(@searcher).to receive(:ca?).and_return(false)
|
23
22
|
expect(@searcher.public_key_path("whatever")).to eq(File.expand_path("/public/key/dir/whatever.pem"))
|
24
23
|
end
|
25
24
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/node'
|
3
|
+
require 'puppet/indirector/node/json'
|
4
|
+
|
5
|
+
describe Puppet::Node::Json do
|
6
|
+
describe '#save' do
|
7
|
+
subject(:indirection) { described_class.indirection }
|
8
|
+
|
9
|
+
let(:env) { Puppet::Node::Environment.create(:testing, []) }
|
10
|
+
let(:node) { Puppet::Node.new('node_name', :environment => env) }
|
11
|
+
let(:file) { File.join(Puppet[:client_datadir], "node", "node_name.json") }
|
12
|
+
|
13
|
+
before do
|
14
|
+
indirection.terminus_class = :json
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'saves the instance of the node as JSON to disk' do
|
18
|
+
indirection.save(node)
|
19
|
+
json = Puppet::FileSystem.read(file, :encoding => 'bom|utf-8')
|
20
|
+
content = Puppet::Util::Json.load(json)
|
21
|
+
expect(content["name"]).to eq('node_name')
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when node cannot be saved' do
|
25
|
+
it 'raises Errno::EISDIR' do
|
26
|
+
FileUtils.mkdir_p(file)
|
27
|
+
expect {
|
28
|
+
indirection.save(node)
|
29
|
+
}.to raise_error(Errno::EISDIR, /node_name.json/)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
require 'puppet/transaction/report'
|
4
|
-
require 'puppet/indirector/report/
|
4
|
+
require 'puppet/indirector/report/json'
|
5
5
|
|
6
|
-
describe Puppet::Transaction::Report::
|
6
|
+
describe Puppet::Transaction::Report::Json do
|
7
|
+
include PuppetSpec::Files
|
7
8
|
describe '#save' do
|
8
9
|
subject(:indirection) { described_class.indirection }
|
9
10
|
|
@@ -17,19 +18,17 @@ describe Puppet::Transaction::Report::Yaml do
|
|
17
18
|
let(:file) { request.path(:me) }
|
18
19
|
|
19
20
|
before do
|
20
|
-
|
21
|
-
end
|
21
|
+
Puppet[:lastrunreport] = File.join(Puppet[:statedir], "last_run_report.json")
|
22
22
|
|
23
|
-
|
24
|
-
indirection.save(report)
|
23
|
+
indirection.terminus_class = :json
|
25
24
|
end
|
26
25
|
|
27
|
-
it 'saves the instance of the report as
|
26
|
+
it 'saves the instance of the report as JSON to disk' do
|
27
|
+
|
28
28
|
indirection.save(report)
|
29
|
-
|
30
|
-
|
31
|
-
)
|
32
|
-
expect(content.host).to eq(certname)
|
29
|
+
json = Puppet::FileSystem.read(Puppet[:lastrunreport], :encoding => 'bom|utf-8')
|
30
|
+
content = Puppet::Util::Json.load(json)
|
31
|
+
expect(content["host"]).to eq(certname)
|
33
32
|
end
|
34
33
|
|
35
34
|
it 'allows mode overwrite' do
|
@@ -37,8 +36,7 @@ describe Puppet::Transaction::Report::Yaml do
|
|
37
36
|
indirection.save(report)
|
38
37
|
|
39
38
|
if Puppet::Util::Platform.windows?
|
40
|
-
|
41
|
-
mode = Puppet::Util::Windows::Security.get_mode(file)
|
39
|
+
mode = File.stat(file).mode
|
42
40
|
else
|
43
41
|
mode = Puppet::FileSystem.stat(file).mode
|
44
42
|
end
|
@@ -62,21 +60,12 @@ describe Puppet::Transaction::Report::Yaml do
|
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
65
|
-
context 'when repport is invalid' do
|
66
|
-
it 'logs error' do
|
67
|
-
expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
|
68
|
-
|
69
|
-
report.configuration_version = Class.new
|
70
|
-
indirection.save(report)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
63
|
context 'when report cannot be saved' do
|
75
|
-
it 'raises
|
64
|
+
it 'raises Error' do
|
76
65
|
FileUtils.mkdir_p(file)
|
77
66
|
expect {
|
78
67
|
indirection.save(report)
|
79
|
-
}.to raise_error(Errno::EISDIR, /last_run_report.
|
68
|
+
}.to raise_error(Errno::EISDIR, /last_run_report.json/)
|
80
69
|
end
|
81
70
|
end
|
82
71
|
end
|