Skip to content

Commit 19caf04

Browse files
authored
Merge pull request #9399 from joshcooper/backport_lookup_server_facts
[Backport 7.x] Add server facts when looking up values
2 parents 072da6f + b8c2736 commit 19caf04

File tree

5 files changed

+56
-36
lines changed

5 files changed

+56
-36
lines changed

lib/puppet/application/lookup.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require_relative '../../puppet/application'
22
require_relative '../../puppet/pops'
33
require_relative '../../puppet/node'
4+
require_relative '../../puppet/node/server_facts'
45
require_relative '../../puppet/parser/compiler'
56

67
class Puppet::Application::Lookup < Puppet::Application
@@ -406,6 +407,7 @@ def generate_scope
406407
node.add_extra_facts(given_facts) if given_facts
407408
end
408409
node.environment = Puppet[:environment] if Puppet.settings.set_by_cli?(:environment)
410+
node.add_server_facts(Puppet::Node::ServerFacts.load)
409411
Puppet[:code] = 'undef' unless options[:compile]
410412
compiler = Puppet::Parser::Compiler.new(node)
411413
if options[:node]

lib/puppet/indirector/catalog/compiler.rb

+2-36
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require_relative '../../../puppet/environments'
22
require_relative '../../../puppet/node'
3+
require_relative '../../../puppet/node/server_facts'
34
require_relative '../../../puppet/resource/catalog'
45
require_relative '../../../puppet/indirector/code'
56
require_relative '../../../puppet/util/profiler'
@@ -425,41 +426,6 @@ def node_from_request(facts, request)
425426
#
426427
# See also set_server_facts in Puppet::Server::Compiler in puppetserver.
427428
def set_server_facts
428-
@server_facts = {}
429-
430-
# Add our server Puppet Enterprise version, if available.
431-
pe_version_file = '/opt/puppetlabs/server/pe_version'
432-
if File.readable?(pe_version_file) and !File.zero?(pe_version_file)
433-
@server_facts['pe_serverversion'] = File.read(pe_version_file).chomp
434-
end
435-
436-
# Add our server version to the fact list
437-
@server_facts["serverversion"] = Puppet.version.to_s
438-
439-
# And then add the server name and IP
440-
{"servername" => "fqdn",
441-
"serverip" => "ipaddress",
442-
"serverip6" => "ipaddress6"
443-
}.each do |var, fact|
444-
value = Puppet.runtime[:facter].value(fact)
445-
if !value.nil?
446-
@server_facts[var] = value
447-
end
448-
end
449-
450-
if @server_facts["servername"].nil?
451-
host = Puppet.runtime[:facter].value(:hostname)
452-
if host.nil?
453-
Puppet.warning _("Could not retrieve fact servername")
454-
elsif domain = Puppet.runtime[:facter].value(:domain) #rubocop:disable Lint/AssignmentInCondition
455-
@server_facts["servername"] = [host, domain].join(".")
456-
else
457-
@server_facts["servername"] = host
458-
end
459-
end
460-
461-
if @server_facts["serverip"].nil? && @server_facts["serverip6"].nil?
462-
Puppet.warning _("Could not retrieve either serverip or serverip6 fact")
463-
end
429+
@server_facts = Puppet::Node::ServerFacts.load
464430
end
465431
end

lib/puppet/node/server_facts.rb

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
class Puppet::Node::ServerFacts
4+
def self.load
5+
server_facts = {}
6+
7+
# Add our server Puppet Enterprise version, if available.
8+
pe_version_file = '/opt/puppetlabs/server/pe_version'
9+
if File.readable?(pe_version_file) and !File.zero?(pe_version_file)
10+
server_facts['pe_serverversion'] = File.read(pe_version_file).chomp
11+
end
12+
13+
# Add our server version to the fact list
14+
server_facts["serverversion"] = Puppet.version.to_s
15+
16+
# And then add the server name and IP
17+
{"servername" => "fqdn",
18+
"serverip" => "ipaddress",
19+
"serverip6" => "ipaddress6"}.each do |var, fact|
20+
value = Puppet.runtime[:facter].value(fact)
21+
if !value.nil?
22+
server_facts[var] = value
23+
end
24+
end
25+
26+
if server_facts["servername"].nil?
27+
host = Puppet.runtime[:facter].value(:hostname)
28+
if host.nil?
29+
Puppet.warning _("Could not retrieve fact servername")
30+
elsif domain = Puppet.runtime[:facter].value(:domain) #rubocop:disable Lint/AssignmentInCondition
31+
server_facts["servername"] = [host, domain].join(".")
32+
else
33+
server_facts["servername"] = host
34+
end
35+
end
36+
37+
if server_facts["serverip"].nil? && server_facts["serverip6"].nil?
38+
Puppet.warning _("Could not retrieve either serverip or serverip6 fact")
39+
end
40+
41+
server_facts
42+
end
43+
end

spec/fixtures/unit/application/environments/production/data/common.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ ab: "%{hiera('a')} and %{hiera('b')}"
2020

2121
g: "This is%{facts.cx} in facts hash"
2222

23+
h: "server version is %{server_facts.serverversion}"
24+
2325
lookup_options:
2426
a: first

spec/unit/application/lookup_spec.rb

+7
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,13 @@ def run_lookup(lookup)
543543
expect(run_lookup(lookup)).to eql("This is G from facts in facts hash")
544544
end
545545

546+
it 'looks up server facts' do
547+
lookup.options[:node] = node
548+
lookup.options[:render_as] = :s
549+
allow(lookup.command_line).to receive(:args).and_return(['h'])
550+
expect(run_lookup(lookup)).to eql("server version is #{Puppet.version}")
551+
end
552+
546553
describe 'when retrieving given facts' do
547554
before do
548555
lookup.options[:node] = node

0 commit comments

Comments
 (0)