puppet 4.0.0 → 4.1.0
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/ext/build_defaults.yaml +8 -35
- data/ext/debian/puppet.default +0 -5
- data/ext/debian/puppet.init +1 -15
- data/lib/hiera/puppet_function.rb +15 -4
- data/lib/puppet/application/agent.rb +5 -0
- data/lib/puppet/application/apply.rb +23 -2
- data/lib/puppet/application/device.rb +8 -3
- data/lib/puppet/application/master.rb +16 -5
- data/lib/puppet/configurer.rb +7 -5
- data/lib/puppet/defaults.rb +18 -0
- data/lib/puppet/environments.rb +1 -1
- data/lib/puppet/error.rb +27 -1
- data/lib/puppet/file_serving/metadata.rb +13 -8
- data/lib/puppet/file_serving/terminus_helper.rb +7 -8
- data/lib/puppet/file_system.rb +13 -0
- data/lib/puppet/file_system/file_impl.rb +4 -0
- data/lib/puppet/file_system/memory_impl.rb +4 -0
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/functions.rb +33 -3
- data/lib/puppet/functions/defined.rb +130 -0
- data/lib/puppet/functions/regsubst.rb +1 -1
- data/lib/puppet/functions/split.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +11 -0
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/node.rb +17 -1
- data/lib/puppet/node/environment.rb +4 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +4 -0
- data/lib/puppet/parser/compiler.rb +9 -0
- data/lib/puppet/parser/functions/defined.rb +25 -1
- data/lib/puppet/parser/functions/file.rb +3 -1
- data/lib/puppet/parser/scope.rb +11 -2
- data/lib/puppet/parser/templatewrapper.rb +2 -1
- data/lib/puppet/pops.rb +4 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +25 -5
- data/lib/puppet/pops/evaluator/closure.rb +28 -2
- data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -11
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +4 -0
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +4 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +43 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +7 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +48 -14
- data/lib/puppet/pops/evaluator/runtime3_support.rb +10 -5
- data/lib/puppet/pops/functions/dispatch.rb +6 -1
- data/lib/puppet/pops/functions/dispatcher.rb +7 -1
- data/lib/puppet/pops/issue_reporter.rb +42 -16
- data/lib/puppet/pops/issues.rb +116 -2
- data/lib/puppet/pops/loader/loader.rb +11 -0
- data/lib/puppet/pops/loader/loader_paths.rb +67 -6
- data/lib/puppet/pops/loader/module_loaders.rb +19 -8
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +78 -0
- data/lib/puppet/pops/loaders.rb +6 -4
- data/lib/puppet/pops/migration/migration_checker.rb +54 -0
- data/lib/puppet/pops/model/factory.rb +5 -1
- data/lib/puppet/pops/model/model_label_provider.rb +2 -0
- data/lib/puppet/pops/model/model_meta.rb +5 -1
- data/lib/puppet/pops/parser/egrammar.ra +9 -10
- data/lib/puppet/pops/parser/eparser.rb +1061 -1047
- data/lib/puppet/pops/parser/epp_support.rb +18 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +7 -1
- data/lib/puppet/pops/parser/heredoc_support.rb +12 -11
- data/lib/puppet/pops/parser/interpolation_support.rb +7 -1
- data/lib/puppet/pops/parser/lexer2.rb +29 -12
- data/lib/puppet/pops/parser/lexer_support.rb +52 -23
- data/lib/puppet/pops/parser/parser_support.rb +11 -14
- data/lib/puppet/pops/parser/slurp_support.rb +22 -6
- data/lib/puppet/pops/types/type_calculator.rb +156 -55
- data/lib/puppet/pops/types/type_factory.rb +66 -13
- data/lib/puppet/pops/types/type_parser.rb +22 -13
- data/lib/puppet/pops/types/types.rb +23 -4
- data/lib/puppet/pops/types/types_meta.rb +13 -2
- data/lib/puppet/pops/validation.rb +25 -2
- data/lib/puppet/pops/validation/checker4_0.rb +63 -31
- data/lib/puppet/provider/group/windows_adsi.rb +8 -4
- data/lib/puppet/provider/mount/parsed.rb +145 -2
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +11 -2
- data/lib/puppet/provider/package/pkgng.rb +134 -0
- data/lib/puppet/provider/package/portage.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +0 -3
- data/lib/puppet/provider/package/windows/exe_package.rb +0 -1
- data/lib/puppet/provider/package/windows/msi_package.rb +0 -1
- data/lib/puppet/provider/package/zypper.rb +50 -15
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +32 -7
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/user/openbsd.rb +1 -0
- data/lib/puppet/provider/user/windows_adsi.rb +45 -2
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/catalog.rb +0 -4
- data/lib/puppet/settings.rb +19 -0
- data/lib/puppet/type/file.rb +1 -0
- data/lib/puppet/type/file/ensure.rb +1 -1
- data/lib/puppet/type/mount.rb +9 -1
- data/lib/puppet/type/scheduled_task.rb +13 -0
- data/lib/puppet/type/tidy.rb +3 -1
- data/lib/puppet/type/user.rb +32 -0
- data/lib/puppet/type/yumrepo.rb +5 -5
- data/lib/puppet/util/log.rb +50 -8
- data/lib/puppet/util/log/destinations.rb +23 -2
- data/lib/puppet/util/logging.rb +37 -1
- data/lib/puppet/util/run_mode.rb +1 -14
- data/lib/puppet/util/windows/adsi.rb +130 -58
- data/lib/puppet/version.rb +1 -1
- data/man/man5/puppet.conf.5 +48 -6
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +4 -1
- data/man/man8/puppet-apply.8 +4 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.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 +6 -3
- 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-file.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-inspect.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-master.8 +4 -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-resource_type.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +3 -1
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +1 -10
- data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +93 -85
- data/spec/fixtures/unit/provider/mount/parsed/aix.mount +11 -7
- data/spec/fixtures/unit/provider/package/pkgng/pkg.info +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query +1 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +1 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +3 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
- data/spec/integration/application/apply_spec.rb +49 -0
- data/spec/integration/faces/plugin_spec.rb +0 -4
- data/spec/integration/indirector/facts/facter_spec.rb +59 -0
- data/spec/integration/parser/compiler_spec.rb +850 -0
- data/spec/integration/parser/resource_expressions_spec.rb +3 -0
- data/spec/integration/parser/scope_spec.rb +26 -5
- data/spec/integration/transaction_spec.rb +1 -1
- data/spec/integration/type/file_spec.rb +318 -41
- data/spec/integration/util/windows/security_spec.rb +14 -5
- data/spec/lib/matchers/resource.rb +22 -1
- data/spec/lib/puppet_spec/matchers.rb +6 -4
- data/spec/unit/application/master_spec.rb +33 -7
- data/spec/unit/data_providers/function_data_provider_spec.rb +10 -1
- data/spec/unit/file_serving/metadata_spec.rb +1 -1
- data/spec/unit/file_serving/terminus_helper_spec.rb +2 -3
- data/spec/unit/file_system_spec.rb +38 -0
- data/spec/unit/functions/defined_spec.rb +289 -0
- data/spec/unit/functions/hiera_spec.rb +8 -6
- data/spec/unit/functions/regsubst_spec.rb +4 -0
- data/spec/unit/functions/split_spec.rb +8 -0
- data/spec/unit/functions4_spec.rb +97 -2
- data/spec/unit/indirector/facts/facter_spec.rb +7 -0
- data/spec/unit/node_spec.rb +6 -0
- data/spec/unit/parser/functions/file_spec.rb +7 -1
- data/spec/unit/parser/functions/template_spec.rb +1 -1
- data/spec/unit/parser/scope_spec.rb +2 -2
- data/spec/unit/parser/templatewrapper_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +19 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +84 -18
- data/spec/unit/pops/evaluator/variables_spec.rb +1 -1
- data/spec/unit/pops/issues_spec.rb +16 -16
- data/spec/unit/pops/loaders/loaders_spec.rb +106 -48
- data/spec/unit/pops/migration_spec.rb +53 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +142 -1
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +26 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +205 -12
- data/spec/unit/pops/validation_spec.rb +66 -0
- data/spec/unit/pops/validator/validator_spec.rb +1 -1
- data/spec/unit/provider/group/windows_adsi_spec.rb +57 -9
- data/spec/unit/provider/mount/parsed_spec.rb +31 -5
- data/spec/unit/provider/package/apt_spec.rb +5 -0
- data/spec/unit/provider/package/pip_spec.rb +9 -0
- data/spec/unit/provider/package/pkgng_spec.rb +172 -0
- data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -1
- data/spec/unit/provider/package/windows/msi_package_spec.rb +0 -1
- data/spec/unit/provider/package/zypper_spec.rb +50 -19
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +312 -70
- data/spec/unit/provider/service/base_spec.rb +38 -27
- data/spec/unit/provider/service/debian_spec.rb +8 -0
- data/spec/unit/provider/service/freebsd_spec.rb +1 -0
- data/spec/unit/provider/service/gentoo_spec.rb +1 -0
- data/spec/unit/provider/service/init_spec.rb +18 -0
- data/spec/unit/provider/service/openbsd_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +1 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +134 -5
- data/spec/unit/settings_spec.rb +11 -0
- data/spec/unit/util/log_spec.rb +113 -0
- data/spec/unit/util/windows/adsi_spec.rb +135 -41
- data/spec/unit/util/windows/sid_spec.rb +0 -10
- metadata +48 -2
@@ -164,6 +164,9 @@ describe "Puppet resource expressions" do
|
|
164
164
|
path => '/somewhere',
|
165
165
|
* => $y }" => "File[$t][mode] == '0666' and File[$t][owner] == 'the_x' and File[$t][path] == '/somewhere'")
|
166
166
|
|
167
|
+
produces("notify{title:}; Notify[title] { * => { message => set}}" => "Notify[title][message] == 'set'")
|
168
|
+
produces("Notify { * => { message => set}}; notify{title:}" => "Notify[title][message] == 'set'")
|
169
|
+
|
167
170
|
fails("notify { title: unknown => value }" => /Invalid parameter: 'unknown'/)
|
168
171
|
|
169
172
|
# this really needs to be a better error message.
|
@@ -36,8 +36,30 @@ describe "Two step scoping for variables" do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
it "issues error about built-in variable when reassigning to name" do
|
40
|
+
enc_node = Puppet::Node.new("the_node", { :parameters => { } })
|
41
|
+
|
42
|
+
expect {
|
43
|
+
compile_to_catalog("$name = 'never in a 0xF4240 years'", enc_node)
|
44
|
+
}.to raise_error(
|
45
|
+
Puppet::Error,
|
46
|
+
/Cannot reassign built in \(or already assigned\) variable '\$name' at line 1(\:7)? on node the_node/
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "issues error about built-in variable when reassigning to title" do
|
51
|
+
enc_node = Puppet::Node.new("the_node", { :parameters => { } })
|
52
|
+
|
53
|
+
expect {
|
54
|
+
compile_to_catalog("$title = 'never in a 0xF4240 years'", enc_node)
|
55
|
+
}.to raise_error(
|
56
|
+
Puppet::Error,
|
57
|
+
/Cannot reassign built in \(or already assigned\) variable '\$title' at line 1(\:8)? on node the_node/
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "when using a template ignores the dynamic value of the var when using the @varname syntax" do
|
62
|
+
expect_the_message_to_be('node_msg') do <<-MANIFEST
|
41
63
|
node default {
|
42
64
|
$var = "node_msg"
|
43
65
|
include foo
|
@@ -589,12 +611,11 @@ describe "Two step scoping for variables" do
|
|
589
611
|
|
590
612
|
it "does not allow the enc to specify an existing top scope var" do
|
591
613
|
enc_node = Puppet::Node.new("the_node", { :parameters => { "var" => 'from_enc' } })
|
592
|
-
|
593
614
|
expect {
|
594
615
|
compile_to_catalog("$var = 'top scope'", enc_node)
|
595
616
|
}.to raise_error(
|
596
|
-
|
597
|
-
|
617
|
+
Puppet::Error,
|
618
|
+
/Cannot reassign variable '\$var' at line 1(\:6)? on node the_node/
|
598
619
|
)
|
599
620
|
end
|
600
621
|
|
@@ -229,7 +229,7 @@ describe Puppet::Transaction do
|
|
229
229
|
notify.expects(:pre_run_check).raises(Puppet::Error, "fail for testing")
|
230
230
|
|
231
231
|
catalog = mk_catalog(file, notify)
|
232
|
-
catalog.apply
|
232
|
+
expect { catalog.apply }.to raise_error(Puppet::Error, /Some pre-run checks failed/)
|
233
233
|
expect(Puppet::FileSystem.exist?(path)).not_to be_truthy
|
234
234
|
end
|
235
235
|
|
@@ -93,20 +93,77 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
93
93
|
expect(Puppet::FileSystem.exist?(source)).to be_falsey
|
94
94
|
end
|
95
95
|
|
96
|
+
describe "when ensure is present using an empty file" do
|
97
|
+
before(:each) do
|
98
|
+
catalog.add_resource(described_class.new(:path => path, :ensure => :present, :backup => :false))
|
99
|
+
end
|
100
|
+
|
101
|
+
context "file is present" do
|
102
|
+
before(:each) do
|
103
|
+
FileUtils.touch(path)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should do nothing" do
|
107
|
+
report = catalog.apply.report
|
108
|
+
expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
|
109
|
+
expect(Puppet::FileSystem.exist?(path)).to be_truthy
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should log nothing" do
|
113
|
+
logs = catalog.apply.report.logs
|
114
|
+
expect(logs).to be_empty
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "file is not present" do
|
119
|
+
it "should create the file" do
|
120
|
+
report = catalog.apply.report
|
121
|
+
expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
|
122
|
+
expect(Puppet::FileSystem.exist?(path)).to be_truthy
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should log that the file was created" do
|
126
|
+
logs = catalog.apply.report.logs
|
127
|
+
expect(logs.first.source).to eq("/File[#{path}]/ensure")
|
128
|
+
expect(logs.first.message).to eq("created")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
96
133
|
describe "when ensure is absent" do
|
97
|
-
|
98
|
-
FileUtils.touch(path)
|
134
|
+
before(:each) do
|
99
135
|
catalog.add_resource(described_class.new(:path => path, :ensure => :absent, :backup => :false))
|
100
|
-
report = catalog.apply.report
|
101
|
-
expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
|
102
|
-
expect(Puppet::FileSystem.exist?(path)).to be_falsey
|
103
136
|
end
|
104
137
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
138
|
+
context "file is present" do
|
139
|
+
before(:each) do
|
140
|
+
FileUtils.touch(path)
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should remove the file" do
|
144
|
+
report = catalog.apply.report
|
145
|
+
expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
|
146
|
+
expect(Puppet::FileSystem.exist?(path)).to be_falsey
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should log that the file was removed" do
|
150
|
+
logs = catalog.apply.report.logs
|
151
|
+
expect(logs.first.source).to eq("/File[#{path}]/ensure")
|
152
|
+
expect(logs.first.message).to eq("removed")
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context "file is not present" do
|
157
|
+
it "should do nothing" do
|
158
|
+
report = catalog.apply.report
|
159
|
+
expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
|
160
|
+
expect(Puppet::FileSystem.exist?(path)).to be_falsey
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should log nothing" do
|
164
|
+
logs = catalog.apply.report.logs
|
165
|
+
expect(logs).to be_empty
|
166
|
+
end
|
110
167
|
end
|
111
168
|
|
112
169
|
# issue #14599
|
@@ -215,7 +272,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
215
272
|
FileUtils.mkdir(path)
|
216
273
|
set_mode(0777, path)
|
217
274
|
|
218
|
-
catalog.add_resource described_class.new(:path => path, :ensure => :file, :mode => 0666, :backup => false, :force => true)
|
275
|
+
catalog.add_resource described_class.new(:path => path, :ensure => :file, :mode => '0666', :backup => false, :force => true)
|
219
276
|
catalog.apply
|
220
277
|
|
221
278
|
expect(get_mode(path) & 07777).to eq(0666)
|
@@ -356,14 +413,26 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
356
413
|
expect(get_mode(path) & 07777).to eq(0600)
|
357
414
|
end
|
358
415
|
|
359
|
-
|
360
|
-
|
416
|
+
context "overwriting a file" do
|
417
|
+
before :each do
|
418
|
+
FileUtils.touch(path)
|
419
|
+
set_mode(0644, path)
|
420
|
+
catalog.add_resource described_class.new(:path => path, :source => link, :mode => '0600', :links => :follow)
|
421
|
+
end
|
361
422
|
|
362
|
-
|
363
|
-
|
423
|
+
it "should overwrite the file" do
|
424
|
+
catalog.apply
|
364
425
|
|
365
|
-
|
366
|
-
|
426
|
+
expect(File).to be_file(path)
|
427
|
+
expect(get_mode(path) & 07777).to eq(0600)
|
428
|
+
end
|
429
|
+
|
430
|
+
it "should log that the mode changed" do
|
431
|
+
report = catalog.apply.report
|
432
|
+
|
433
|
+
expect(report.logs.first.message).to eq("mode changed '0644' to '0600'")
|
434
|
+
expect(report.logs.first.source).to eq("/File[#{path}]/mode")
|
435
|
+
end
|
367
436
|
end
|
368
437
|
end
|
369
438
|
|
@@ -981,32 +1050,114 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
981
1050
|
end
|
982
1051
|
|
983
1052
|
CHECKSUM_TYPES_TO_TRY.each do |checksum_type, checksum|
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
catalog.add_resource described_class.send(:new, @options)
|
989
|
-
catalog.apply
|
990
|
-
expect(File.read(path)).to eq("this is some content, yo")
|
1053
|
+
describe "when checksum_type is #{checksum_type}" do
|
1054
|
+
before(:each) do
|
1055
|
+
@options = {:path => path, :content => CHECKSUM_PLAINTEXT, :checksum => checksum_type}
|
1056
|
+
end
|
991
1057
|
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
end
|
1058
|
+
context "when changing the content" do
|
1059
|
+
before :each do
|
1060
|
+
FileUtils.touch(path)
|
1061
|
+
catalog.add_resource described_class.send(:new, @options)
|
1062
|
+
end
|
998
1063
|
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1064
|
+
it "should overwrite contents" do
|
1065
|
+
catalog.apply
|
1066
|
+
expect(Puppet::FileSystem.binread(path)).to eq(CHECKSUM_PLAINTEXT)
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
it "should log that content changed" do
|
1070
|
+
report = catalog.apply.report
|
1071
|
+
expect(report.logs.first.source).to eq("/File[#{path}]/content")
|
1072
|
+
expect(report.logs.first.message).to match(/content changed '{#{checksum_type}}[0-9a-f]*' to '{#{checksum_type}}#{checksum}'/)
|
1073
|
+
end
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
context "ensure is present" do
|
1077
|
+
before(:each) do
|
1078
|
+
@options[:ensure] = "present"
|
1079
|
+
end
|
1004
1080
|
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1081
|
+
it "should create a file with content" do
|
1082
|
+
catalog.add_resource described_class.send(:new, @options)
|
1083
|
+
catalog.apply
|
1084
|
+
expect(Puppet::FileSystem.binread(path)).to eq(CHECKSUM_PLAINTEXT)
|
1085
|
+
|
1086
|
+
second_catalog = Puppet::Resource::Catalog.new
|
1087
|
+
second_catalog.add_resource described_class.send(:new, @options)
|
1088
|
+
status = second_catalog.apply.report.resource_statuses["File[#{path}]"]
|
1089
|
+
expect(status).not_to be_failed
|
1090
|
+
expect(status).not_to be_changed
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
it "should log the content checksum" do
|
1094
|
+
catalog.add_resource described_class.send(:new, @options)
|
1095
|
+
report = catalog.apply.report
|
1096
|
+
expect(report.logs.first.source).to eq("/File[#{path}]/ensure")
|
1097
|
+
expect(report.logs.first.message).to eq("defined content as '{#{checksum_type}}#{checksum}'")
|
1098
|
+
|
1099
|
+
second_catalog = Puppet::Resource::Catalog.new
|
1100
|
+
second_catalog.add_resource described_class.send(:new, @options)
|
1101
|
+
logs = second_catalog.apply.report.logs
|
1102
|
+
expect(logs).to be_empty
|
1103
|
+
end
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
context "ensure is omitted" do
|
1107
|
+
it "should create a file with content" do
|
1108
|
+
catalog.add_resource described_class.send(:new, @options)
|
1109
|
+
catalog.apply
|
1110
|
+
expect(Puppet::FileSystem.binread(path)).to eq(CHECKSUM_PLAINTEXT)
|
1111
|
+
|
1112
|
+
second_catalog = Puppet::Resource::Catalog.new
|
1113
|
+
second_catalog.add_resource described_class.send(:new, @options)
|
1114
|
+
status = second_catalog.apply.report.resource_statuses["File[#{path}]"]
|
1115
|
+
expect(status).not_to be_failed
|
1116
|
+
expect(status).not_to be_changed
|
1117
|
+
end
|
1118
|
+
|
1119
|
+
it "should log the content checksum" do
|
1120
|
+
catalog.add_resource described_class.send(:new, @options)
|
1121
|
+
report = catalog.apply.report
|
1122
|
+
expect(report.logs.first.source).to eq("/File[#{path}]/ensure")
|
1123
|
+
expect(report.logs.first.message).to eq("defined content as '{#{checksum_type}}#{checksum}'")
|
1124
|
+
|
1125
|
+
second_catalog = Puppet::Resource::Catalog.new
|
1126
|
+
second_catalog.add_resource described_class.send(:new, @options)
|
1127
|
+
logs = second_catalog.apply.report.logs
|
1128
|
+
expect(logs).to be_empty
|
1129
|
+
end
|
1130
|
+
end
|
1131
|
+
|
1132
|
+
context "both content and ensure are set" do
|
1133
|
+
before(:each) do
|
1134
|
+
@options[:ensure] = "file"
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
it "should create files with content" do
|
1138
|
+
catalog.add_resource described_class.send(:new, @options)
|
1139
|
+
catalog.apply
|
1140
|
+
expect(Puppet::FileSystem.binread(path)).to eq(CHECKSUM_PLAINTEXT)
|
1141
|
+
|
1142
|
+
second_catalog = Puppet::Resource::Catalog.new
|
1143
|
+
second_catalog.add_resource described_class.send(:new, @options)
|
1144
|
+
status = second_catalog.apply.report.resource_statuses["File[#{path}]"]
|
1145
|
+
expect(status).not_to be_failed
|
1146
|
+
expect(status).not_to be_changed
|
1147
|
+
end
|
1148
|
+
|
1149
|
+
it "should log the content checksum" do
|
1150
|
+
catalog.add_resource described_class.send(:new, @options)
|
1151
|
+
report = catalog.apply.report
|
1152
|
+
expect(report.logs.first.source).to eq("/File[#{path}]/ensure")
|
1153
|
+
expect(report.logs.first.message).to eq("defined content as '{#{checksum_type}}#{checksum}'")
|
1154
|
+
|
1155
|
+
second_catalog = Puppet::Resource::Catalog.new
|
1156
|
+
second_catalog.add_resource described_class.send(:new, @options)
|
1157
|
+
logs = second_catalog.apply.report.logs
|
1158
|
+
expect(logs).to be_empty
|
1159
|
+
end
|
1160
|
+
end
|
1010
1161
|
end
|
1011
1162
|
end
|
1012
1163
|
|
@@ -1111,7 +1262,6 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
1111
1262
|
@sids = {
|
1112
1263
|
:current_user => Puppet::Util::Windows::SID.name_to_sid(Puppet::Util::Windows::ADSI::User.current_user_name),
|
1113
1264
|
:system => Win32::Security::SID::LocalSystem,
|
1114
|
-
:admin => Puppet::Util::Windows::SID.name_to_sid("Administrator"),
|
1115
1265
|
:guest => Puppet::Util::Windows::SID.name_to_sid("Guest"),
|
1116
1266
|
:users => Win32::Security::SID::BuiltinUsers,
|
1117
1267
|
:power_users => Win32::Security::SID::PowerUsers,
|
@@ -1377,4 +1527,131 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
1377
1527
|
|
1378
1528
|
raise "Got #{status_failures.length} failure(s) while applying: #{status_fail_msg}"
|
1379
1529
|
end
|
1530
|
+
|
1531
|
+
describe "copying a file that is a link to a file", :if => Puppet.features.manages_symlinks? do
|
1532
|
+
let(:target) { tmpfile('target') }
|
1533
|
+
let(:link) { tmpfile('link') }
|
1534
|
+
let(:copy) { tmpfile('copy') }
|
1535
|
+
it "should copy the target of the link if :links => follow" do
|
1536
|
+
catalog.add_resource described_class.new(
|
1537
|
+
:name => target,
|
1538
|
+
:ensure => "present",
|
1539
|
+
:content => "Jenny I got your number / I need to make you mine")
|
1540
|
+
catalog.add_resource described_class.new(
|
1541
|
+
:name => link,
|
1542
|
+
:ensure => "link",
|
1543
|
+
:target => target)
|
1544
|
+
catalog.add_resource described_class.new(
|
1545
|
+
:name => copy,
|
1546
|
+
:ensure => "present",
|
1547
|
+
:source => link,
|
1548
|
+
:links => "follow")
|
1549
|
+
catalog.apply
|
1550
|
+
expect(Puppet::FileSystem).to be_file(copy)
|
1551
|
+
expect(File.read(target)).to eq(File.read(copy))
|
1552
|
+
end
|
1553
|
+
|
1554
|
+
it "should copy the link itself if :links => manage" do
|
1555
|
+
catalog.add_resource described_class.new(
|
1556
|
+
:name => target,
|
1557
|
+
:ensure => "present",
|
1558
|
+
:content => "Jenny I got your number / I need to make you mine")
|
1559
|
+
catalog.add_resource described_class.new(
|
1560
|
+
:name => link,
|
1561
|
+
:ensure => "link",
|
1562
|
+
:target => target)
|
1563
|
+
catalog.add_resource described_class.new(
|
1564
|
+
:name => copy,
|
1565
|
+
:ensure => "present",
|
1566
|
+
:source => link,
|
1567
|
+
:links => "manage")
|
1568
|
+
catalog.apply
|
1569
|
+
expect(Puppet::FileSystem).to be_symlink(copy)
|
1570
|
+
expect(File.read(link)).to eq(File.read(copy))
|
1571
|
+
end
|
1572
|
+
end
|
1573
|
+
|
1574
|
+
describe "copying a file that is a link to a directory", :if => Puppet.features.manages_symlinks? do
|
1575
|
+
let(:target) { tmpdir('target') }
|
1576
|
+
let(:link) { tmpfile('link') }
|
1577
|
+
let(:copy) { tmpfile('copy') }
|
1578
|
+
context "when the recurse attribute is false" do
|
1579
|
+
it "should copy the top-level directory if :links => follow" do
|
1580
|
+
catalog.add_resource described_class.new(
|
1581
|
+
:name => target,
|
1582
|
+
:ensure => "directory")
|
1583
|
+
catalog.add_resource described_class.new(
|
1584
|
+
:name => link,
|
1585
|
+
:ensure => "link",
|
1586
|
+
:target => target)
|
1587
|
+
catalog.add_resource described_class.new(
|
1588
|
+
:name => copy,
|
1589
|
+
:ensure => "present",
|
1590
|
+
:source => link,
|
1591
|
+
:recurse => false,
|
1592
|
+
:links => "follow")
|
1593
|
+
catalog.apply
|
1594
|
+
expect(Puppet::FileSystem).to be_directory(copy)
|
1595
|
+
end
|
1596
|
+
|
1597
|
+
it "should copy the link itself if :links => manage" do
|
1598
|
+
catalog.add_resource described_class.new(
|
1599
|
+
:name => target,
|
1600
|
+
:ensure => "directory")
|
1601
|
+
catalog.add_resource described_class.new(
|
1602
|
+
:name => link,
|
1603
|
+
:ensure => "link",
|
1604
|
+
:target => target)
|
1605
|
+
catalog.add_resource described_class.new(
|
1606
|
+
:name => copy,
|
1607
|
+
:ensure => "present",
|
1608
|
+
:source => link,
|
1609
|
+
:recurse => false,
|
1610
|
+
:links => "manage")
|
1611
|
+
catalog.apply
|
1612
|
+
expect(Puppet::FileSystem).to be_symlink(copy)
|
1613
|
+
expect(Dir.entries(link)).to eq(Dir.entries(copy))
|
1614
|
+
end
|
1615
|
+
end
|
1616
|
+
|
1617
|
+
context "and the recurse attribute is true" do
|
1618
|
+
it "should recursively copy the directory if :links => follow" do
|
1619
|
+
catalog.add_resource described_class.new(
|
1620
|
+
:name => target,
|
1621
|
+
:ensure => "directory")
|
1622
|
+
catalog.add_resource described_class.new(
|
1623
|
+
:name => link,
|
1624
|
+
:ensure => "link",
|
1625
|
+
:target => target)
|
1626
|
+
catalog.add_resource described_class.new(
|
1627
|
+
:name => copy,
|
1628
|
+
:ensure => "present",
|
1629
|
+
:source => link,
|
1630
|
+
:recurse => true,
|
1631
|
+
:links => "follow")
|
1632
|
+
catalog.apply
|
1633
|
+
expect(Puppet::FileSystem).to be_directory(copy)
|
1634
|
+
expect(Dir.entries(target)).to eq(Dir.entries(copy))
|
1635
|
+
end
|
1636
|
+
|
1637
|
+
it "should copy the link itself if :links => manage" do
|
1638
|
+
catalog.add_resource described_class.new(
|
1639
|
+
:name => target,
|
1640
|
+
:ensure => "directory")
|
1641
|
+
catalog.add_resource described_class.new(
|
1642
|
+
:name => link,
|
1643
|
+
:ensure => "link",
|
1644
|
+
:target => target)
|
1645
|
+
catalog.add_resource described_class.new(
|
1646
|
+
:name => copy,
|
1647
|
+
:ensure => "present",
|
1648
|
+
:source => link,
|
1649
|
+
:recurse => true,
|
1650
|
+
:links => "manage")
|
1651
|
+
catalog.apply
|
1652
|
+
expect(Puppet::FileSystem).to be_symlink(copy)
|
1653
|
+
expect(Dir.entries(link)).to eq(Dir.entries(copy))
|
1654
|
+
end
|
1655
|
+
end
|
1656
|
+
end
|
1380
1657
|
end
|