Skip to content

Commit 6198a9a

Browse files
committed
(PUP-3399) autorequire local file sources
1 parent 8004d4c commit 6198a9a

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

lib/puppet/type/file.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,13 @@ def self.title_patterns
396396
end
397397
# if the resource is a link, make sure the target is created first
398398
req << self[:target] if self[:target]
399+
# if the resource has a source set, make sure it is created first
400+
self[:source]&.each do |src|
401+
req << src.delete_prefix('file://') if src.start_with?('file://')
402+
# the source gets translated to file:///D:/source instead of file://D:/source
403+
# see https://github.com/puppetlabs/puppet/commit/5fea1dc64829e9c8178937764faccd51131b2a77
404+
req << src.delete_prefix('file:///') if src.start_with?('file:///') && Puppet::Util::Platform.windows?
405+
end
399406
req
400407
end
401408

spec/unit/type/file_spec.rb

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,53 @@
12911291
end
12921292
end
12931293

1294+
describe "source" do
1295+
it "should require file resource when specified with the source property" do
1296+
file = described_class.new(:path => File.expand_path("/foo"), :ensure => :file, :source => File.expand_path("/bar"))
1297+
source = described_class.new(:path => File.expand_path("/bar"), :ensure => :file)
1298+
catalog.add_resource file
1299+
catalog.add_resource source
1300+
reqs = file.autorequire
1301+
expect(reqs.size).to eq(1)
1302+
expect(reqs[0].source).to eq(source)
1303+
expect(reqs[0].target).to eq(file)
1304+
end
1305+
1306+
it "should require file resource when specified with the source property as file: URI" do
1307+
file = described_class.new(:path => File.expand_path("/foo"), :ensure => :file, :source => "file://#{File.expand_path("/bar")}")
1308+
source = described_class.new(:path => File.expand_path("/bar"), :ensure => :file)
1309+
catalog.add_resource file
1310+
catalog.add_resource source
1311+
reqs = file.autorequire
1312+
expect(reqs.size).to eq(1)
1313+
expect(reqs[0].source).to eq(source)
1314+
expect(reqs[0].target).to eq(file)
1315+
end
1316+
1317+
it "should require file resource when specified with the source property as an array" do
1318+
file = described_class.new(:path => File.expand_path("/foo"), :ensure => :file, :source => [File.expand_path("/bar")])
1319+
source = described_class.new(:path => File.expand_path("/bar"), :ensure => :file)
1320+
catalog.add_resource file
1321+
catalog.add_resource source
1322+
reqs = file.autorequire
1323+
expect(reqs.size).to eq(1)
1324+
expect(reqs[0].source).to eq(source)
1325+
expect(reqs[0].target).to eq(file)
1326+
end
1327+
1328+
it "should not require source if source is not local" do
1329+
file = described_class.new(:path => File.expand_path('/foo'), :ensure => :file, :source => 'puppet:///modules/nfs/conf')
1330+
catalog.add_resource file
1331+
expect(file.autorequire.size).to eq(0)
1332+
end
1333+
1334+
it "should not require source if source is not managed" do
1335+
file = described_class.new(:path => File.expand_path('/foo'), :ensure => :file, :source => File.expand_path('/bar'))
1336+
catalog.add_resource file
1337+
expect(file.autorequire.size).to eq(0)
1338+
end
1339+
end
1340+
12941341
describe "directories" do
12951342
it "should autorequire its parent directory" do
12961343
dir = described_class.new(:path => File.dirname(path))

0 commit comments

Comments
 (0)