Skip to content

Commit 2a228e7

Browse files
authored
Merge pull request #2565 from AriaXLi/FACT-3192/--puppet_--no-external-facts
(FACT-3192) facter -p --no-external-facts should not raise
2 parents 8e38ac9 + aeaf26b commit 2a228e7

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

lib/facter/framework/core/options/options_validator.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,15 @@ def self.conflicting_configs(options)
5555
no_custom_facts = !options[:custom_facts]
5656
puppet = options[:puppet]
5757
custom_dir = options[:custom_dir].nil? ? false : options[:custom_dir].any?
58-
external_dir = options[:external_dir].nil? ? false : options[:external_dir].any?
59-
58+
default_external_dir = Facter::OptionStore.default_external_dir
59+
# --puppet/-p option adds an external directory and is not an explicitly
60+
# set external_dir from cli or config file
61+
default_external_dir += [Puppet[:pluginfactdest]] if puppet && const_defined?('Puppet')
62+
external_dir = if options[:external_dir].nil? || options[:external_dir].none?
63+
false
64+
else
65+
options[:external_dir] != default_external_dir
66+
end
6067
[
6168
{ 'no-ruby' => no_ruby, 'custom-dir' => custom_dir },
6269
{ 'no-external-facts' => !options[:external_facts], 'external-dir' => external_dir },
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
global : {
2+
external-dir : ""
3+
no-external-facts : true,
4+
}

spec/framework/core/options/options_validator_spec.rb

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
allow(Facter::Log).to receive(:new).and_return(logger)
99
end
1010

11-
context 'when options are invalid pairs' do
11+
context 'when CLI options are invalid pairs' do
1212
let(:options) { ['--puppet', '--no-ruby'] }
1313
let(:error_code) { 1 }
1414

@@ -24,6 +24,17 @@
2424
end
2525
end
2626

27+
context 'when config file options are invalid pairs' do
28+
let(:error_code) { 1 }
29+
30+
it 'writes message and exit' do
31+
expect { Facter::Options.init_from_cli({ config: 'spec/fixtures/invalid_option_pairs.conf' }) }.to raise_error(
32+
an_instance_of(SystemExit)
33+
.and(having_attributes(status: error_code))
34+
)
35+
end
36+
end
37+
2738
context 'when options are duplicated' do
2839
let(:options) { ['--puppet', '-p'] }
2940
let(:error_code) { 1 }
@@ -47,5 +58,19 @@
4758
expect { Facter::OptionsValidator.validate(options) }.not_to raise_error
4859
end
4960
end
61+
62+
context 'when parsing resolved options' do
63+
# rubocop:disable Style/BlockDelimiters
64+
let(:options) {
65+
{ puppet: true, external_facts: false, external_dir: Facter::OptionStore.default_external_dir + [''],
66+
ruby: true, custom_facts: true }
67+
}
68+
# rubocop:enable Style/BlockDelimiters
69+
70+
it 'writes message and exit' do
71+
stub_const('Puppet', { pluginfactdest: '' })
72+
expect { Facter::OptionsValidator.validate_configs(options) }.not_to raise_error
73+
end
74+
end
5075
end
5176
end

0 commit comments

Comments
 (0)