Skip to content

Commit af5d1b1

Browse files
(maint) Merge up 6a2beb8 to main
Generated by CI * commit '6a2beb84aa910a815de3628165d7f08fed0df3b1': (PUP-1460) Skip retrieving checksum for FIFO and socket files (PUP-7479) Prioritize `--environment` flag over ENC for lookup
2 parents fb4a1dc + 6a2beb8 commit af5d1b1

File tree

4 files changed

+107
-27
lines changed

4 files changed

+107
-27
lines changed

acceptance/tests/parser_functions/puppet_lookup_cmd.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2596,6 +2596,15 @@ def data()
25962596
"lookup in ENC specified environment failed"
25972597
)
25982598

2599+
step "--compile uses environment specified in --envrionment flag"
2600+
r = on(master, puppet('lookup', '--compile', "--node #{@node1}", "--confdir #{@confdir}", "--facts #{@coderoot}/facts.yaml", "--environment env1", 'environment_key'))
2601+
result = r.stdout
2602+
assert_match(
2603+
/env-env1 hiera provided value/,
2604+
result,
2605+
"env1 environment_key lookup failed, expected 'env-env1 hiera"
2606+
)
2607+
25992608
step "without --compile does not use environment specified in ENC"
26002609
r = on(master, puppet('lookup', "--node #{@node1}", "--confdir #{@confdir}", "--facts #{@coderoot}/facts.yaml", 'environment_key'))
26012610
result = r.stdout
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
test_name "should be able to handle fifo files"
2+
tag 'audit:high',
3+
'audit:acceptance'
4+
confine :except, :platform => /windows/
5+
6+
def ensure_content_to_file_manifest(file_path, ensure_value)
7+
return <<-MANIFEST
8+
file { "#{file_path}":
9+
ensure => #{ensure_value},
10+
content => "Hello World"
11+
}
12+
MANIFEST
13+
end
14+
15+
agents.each do |agent|
16+
tmp_path = agent.tmpdir("tmpdir")
17+
fifo_path = "#{tmp_path}/myfifo"
18+
19+
teardown do
20+
agent.rm_rf(tmp_path)
21+
end
22+
23+
step "create fifo" do
24+
on(agent, "mkfifo #{fifo_path}")
25+
end
26+
27+
step "check that fifo got created" do
28+
on(agent, "ls -l #{fifo_path}") do |result|
29+
assert(result.stdout.start_with?('p'))
30+
end
31+
end
32+
33+
step "puppet ensures given fifo is present" do
34+
apply_manifest_on(agent, ensure_content_to_file_manifest(fifo_path, 'present'), :acceptable_exit_codes => [2]) do
35+
assert_match(/Warning: .+ Ensure set to :present but file type is fifo so no content will be synced/, stderr)
36+
end
37+
end
38+
39+
step "check that given file is still a fifo" do
40+
on(agent, "ls -l #{fifo_path}") do |result|
41+
assert(result.stdout.start_with?('p'))
42+
end
43+
end
44+
45+
step "puppet ensures given fifo is a regular file" do
46+
apply_manifest_on(agent, ensure_content_to_file_manifest(fifo_path, 'file'), :acceptable_exit_codes => [0]) do
47+
assert_match(/Notice: .+\/myfifo\]\/ensure: defined content as '{/, stdout)
48+
assert_no_match(/Warning: .+ Ensure set to :present but file type is fifo so no content will be synced/, stderr)
49+
end
50+
end
51+
52+
step "check that given fifo is now a regular file" do
53+
on(agent, "ls -l #{fifo_path}") do |result|
54+
assert(result.stdout.start_with?('-'))
55+
end
56+
end
57+
58+
step "check that given file now has desired content" do
59+
on(agent, "cat #{fifo_path}") do |result|
60+
assert_equal('Hello World', result.stdout)
61+
end
62+
end
63+
end

lib/puppet/application/lookup.rb

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -363,32 +363,28 @@ def generate_scope
363363
end
364364

365365
unless node.is_a?(Puppet::Node) # to allow unit tests to pass a node instance
366-
facts = Puppet::Node::Facts.indirection.find(node, :environment => Puppet.lookup(:current_environment))
367-
368-
facts = Puppet::Node::Facts.new(node, {}) if facts.nil?
369-
facts.add_extra_values(given_facts) if given_facts
370-
371-
if facts.values.empty?
372-
raise _("No facts available for target node: %{node}") % { node: node}
373-
end
374-
375-
ni = Puppet::Node.indirection
376-
tc = ni.terminus_class
377-
378-
service = Puppet.runtime[:http]
379-
session = service.create_session
380-
cert = session.route_to(:ca)
381-
382-
cert = cert.get_certificate(node)
383-
trusted = Puppet::Context::TrustedInformation.new(true, node, cert)
384-
385-
Puppet.override(trusted_information: trusted) do
386-
if tc == :plain || options[:compile]
387-
node = ni.find(node, facts: facts)
388-
else
389-
ni.terminus_class = :plain
390-
node = ni.find(node, facts: facts)
391-
ni.terminus_class = tc
366+
facts = retrieve_node_facts(node, given_facts)
367+
if Puppet.settings.set_by_cli?('environment')
368+
node = Puppet::Node.new(node, :classes => nil, :parameters => nil, :facts => facts, :environment => Puppet.settings.value('environment'))
369+
else
370+
ni = Puppet::Node.indirection
371+
tc = ni.terminus_class
372+
373+
service = Puppet.runtime[:http]
374+
session = service.create_session
375+
cert = session.route_to(:ca)
376+
377+
cert = cert.get_certificate(node)
378+
trusted = Puppet::Context::TrustedInformation.new(true, node, cert)
379+
380+
Puppet.override(trusted_information: trusted) do
381+
if tc == :plain || options[:compile]
382+
node = ni.find(node, facts: facts)
383+
else
384+
ni.terminus_class = :plain
385+
node = ni.find(node, facts: facts)
386+
ni.terminus_class = tc
387+
end
392388
end
393389
end
394390
else
@@ -405,4 +401,16 @@ def generate_scope
405401
compiler.compile { |catalog| yield(compiler.topscope); catalog }
406402
end
407403
end
404+
405+
def retrieve_node_facts(node, given_facts)
406+
facts = Puppet::Node::Facts.indirection.find(node, :environment => Puppet.lookup(:current_environment))
407+
408+
facts = Puppet::Node::Facts.new(node, {}) if facts.nil?
409+
facts.add_extra_values(given_facts) if given_facts
410+
411+
if facts.values.empty?
412+
raise _("No facts available for target node: %{node}") % { node: node}
413+
end
414+
facts
415+
end
408416
end

lib/puppet/type/file/data_sync.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def retrieve_checksum(resource)
7979
return :absent unless stat
8080
ftype = stat.ftype
8181
# Don't even try to manage the content on directories or links
82-
return nil if ["directory","link"].include?(ftype)
82+
return nil if ['directory', 'link', 'fifo', 'socket'].include?(ftype)
8383

8484
begin
8585
resource.parameter(:checksum).sum_file(resource[:path])

0 commit comments

Comments
 (0)