Skip to content

Commit 52e6707

Browse files
authored
Merge pull request #9392 from joshcooper/lookup_server_facts
Add server facts when looking up values
2 parents ed4eee5 + 719efae commit 52e6707

File tree

5 files changed

+56
-35
lines changed

5 files changed

+56
-35
lines changed

lib/puppet/application/lookup.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require_relative '../../puppet/application'
44
require_relative '../../puppet/pops'
55
require_relative '../../puppet/node'
6+
require_relative '../../puppet/node/server_facts'
67
require_relative '../../puppet/parser/compiler'
78

89
class Puppet::Application::Lookup < Puppet::Application
@@ -403,6 +404,7 @@ def generate_scope
403404
end
404405
end
405406
node.environment = Puppet[:environment] if Puppet.settings.set_by_cli?(:environment)
407+
node.add_server_facts(Puppet::Node::ServerFacts.load)
406408
Puppet[:code] = 'undef' unless options[:compile]
407409
compiler = Puppet::Parser::Compiler.new(node)
408410
if options[:node]

lib/puppet/indirector/catalog/compiler.rb

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require_relative '../../../puppet/environments'
44
require_relative '../../../puppet/node'
5+
require_relative '../../../puppet/node/server_facts'
56
require_relative '../../../puppet/resource/catalog'
67
require_relative '../../../puppet/indirector/code'
78
require_relative '../../../puppet/util/profiler'
@@ -426,40 +427,6 @@ def node_from_request(facts, request)
426427
#
427428
# See also set_server_facts in Puppet::Server::Compiler in puppetserver.
428429
def set_server_facts
429-
@server_facts = {}
430-
431-
# Add our server Puppet Enterprise version, if available.
432-
pe_version_file = '/opt/puppetlabs/server/pe_version'
433-
if File.readable?(pe_version_file) and !File.zero?(pe_version_file)
434-
@server_facts['pe_serverversion'] = File.read(pe_version_file).chomp
435-
end
436-
437-
# Add our server version to the fact list
438-
@server_facts["serverversion"] = Puppet.version.to_s
439-
440-
# And then add the server name and IP
441-
{ "servername" => "networking.fqdn",
442-
"serverip" => "networking.ip",
443-
"serverip6" => "networking.ip6" }.each do |var, fact|
444-
value = Puppet.runtime[:facter].value(fact)
445-
unless value.nil?
446-
@server_facts[var] = value
447-
end
448-
end
449-
450-
if @server_facts["servername"].nil?
451-
host = Puppet.runtime[:facter].value('networking.hostname')
452-
if host.nil?
453-
Puppet.warning _("Could not retrieve fact servername")
454-
elsif domain = Puppet.runtime[:facter].value('networking.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
430+
@server_facts = Puppet::Node::ServerFacts.load
464431
end
465432
end

lib/puppet/node/server_facts.rb

Lines changed: 43 additions & 0 deletions
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" => "networking.fqdn",
18+
"serverip" => "networking.ip",
19+
"serverip6" => "networking.ip6" }.each do |var, fact|
20+
value = Puppet.runtime[:facter].value(fact)
21+
unless value.nil?
22+
server_facts[var] = value
23+
end
24+
end
25+
26+
if server_facts["servername"].nil?
27+
host = Puppet.runtime[:facter].value('networking.hostname')
28+
if host.nil?
29+
Puppet.warning _("Could not retrieve fact servername")
30+
elsif domain = Puppet.runtime[:facter].value('networking.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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,13 @@ def run_lookup(lookup)
546546
expect(run_lookup(lookup)).to eql("This is G from facts in facts hash")
547547
end
548548

549+
it 'looks up server facts' do
550+
lookup.options[:node] = node
551+
lookup.options[:render_as] = :s
552+
allow(lookup.command_line).to receive(:args).and_return(['h'])
553+
expect(run_lookup(lookup)).to eql("server version is #{Puppet.version}")
554+
end
555+
549556
describe 'when retrieving given facts' do
550557
before do
551558
lookup.options[:node] = node

0 commit comments

Comments
 (0)