Skip to content

Commit 1d74af0

Browse files
committed
(maint) Read system custom facts when running as user
When Facter is run as a user, the system custom facts are not available. Always take system custom facts into accound, and if Facter is running as another user, prepend this user custom facts directories to the list of search directories.
1 parent f0af74f commit 1d74af0

File tree

2 files changed

+21
-32
lines changed

2 files changed

+21
-32
lines changed

lib/facter/custom_facts/util/config.rb

+17-18
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,23 @@ def self.facts_cache_dir
3737
end
3838

3939
def self.setup_default_ext_facts_dirs
40-
if LegacyFacter::Util::Root.root?
41-
windows_dir = windows_data_dir
42-
Facter::Options[:default_external_dir] = if windows_dir
43-
[File.join(windows_dir, 'PuppetLabs', 'facter', 'facts.d')]
44-
else
45-
[
46-
'/etc/puppetlabs/facter/facts.d',
47-
'/etc/facter/facts.d/',
48-
'/opt/puppetlabs/facter/facts.d'
49-
]
50-
end
51-
elsif ENV['HOME']
52-
Facter::Options[:default_external_dir] =
53-
[File.join(ENV['HOME'], '.facter', 'facts.d'),
54-
File.join(ENV['HOME'], '.puppetlabs', 'opt', 'facter', 'facts.d')]
55-
else
56-
Facter::Options[:default_external_dir] = []
57-
end
40+
windows_dir = windows_data_dir
41+
Facter::Options[:default_external_dir] = if windows_dir
42+
[File.join(windows_dir, 'PuppetLabs', 'facter', 'facts.d')]
43+
else
44+
[
45+
'/etc/puppetlabs/facter/facts.d',
46+
'/etc/facter/facts.d/',
47+
'/opt/puppetlabs/facter/facts.d'
48+
]
49+
end
50+
51+
return unless !LegacyFacter::Util::Root.root? && ENV['HOME']
52+
53+
Facter::Options[:default_external_dir].prepend(
54+
File.join(ENV['HOME'], '.facter', 'facts.d'),
55+
File.join(ENV['HOME'], '.puppetlabs', 'opt', 'facter', 'facts.d')
56+
)
5857
end
5958

6059
if LegacyFacter::Util::Config.windows?

spec/custom_facts/util/config_spec.rb

+4-14
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,6 @@
66
describe LegacyFacter::Util::Config do
77
include PuppetlabsSpec::Files
88

9-
describe "ENV['HOME'] is unset", unless: LegacyFacter::Util::Root.root? do
10-
around do |example|
11-
Facter::Core::Execution.with_env('HOME' => nil) do
12-
example.run
13-
end
14-
end
15-
16-
it 'does not set @external_facts_dirs' do
17-
LegacyFacter::Util::Config.setup_default_ext_facts_dirs
18-
expect(LegacyFacter::Util::Config.external_facts_dirs).to be_empty
19-
end
20-
end
21-
229
describe 'is_windows? function' do
2310
it "detects windows if Ruby RbConfig::CONFIG['host_os'] returns a windows OS" do
2411
host_os = %w[mswin win32 dos mingw cygwin]
@@ -85,7 +72,10 @@
8572
LegacyFacter::Util::Config.setup_default_ext_facts_dirs
8673
expect(LegacyFacter::Util::Config.external_facts_dirs)
8774
.to eq [File.join(ENV['HOME'], '.facter', 'facts.d'),
88-
File.join(ENV['HOME'], '.puppetlabs', 'opt', 'facter', 'facts.d')]
75+
File.join(ENV['HOME'], '.puppetlabs', 'opt', 'facter', 'facts.d'),
76+
'/etc/puppetlabs/facter/facts.d',
77+
'/etc/facter/facts.d/',
78+
'/opt/puppetlabs/facter/facts.d']
8979
end
9080

9181
it 'includes additional values when user appends to the list' do

0 commit comments

Comments
 (0)