facter 4.0.26 → 4.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/actions/presuite.rb +1 -12
- data/.github/workflows/acceptance_tests.yml +4 -4
- data/.github/workflows/checks.yaml +9 -3
- data/.github/workflows/coverage.yaml +1 -1
- data/.github/workflows/unit_tests.yaml +2 -2
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +6 -4
- data/CHANGELOG.md +22 -0
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/acceptance/.beaker.yml +15 -0
- data/acceptance/.gitignore +12 -0
- data/acceptance/Gemfile +24 -0
- data/acceptance/Rakefile +2 -0
- data/acceptance/bin/ci-bootstrap-from-artifacts.sh +55 -0
- data/acceptance/config/aio/options.rb +6 -0
- data/acceptance/config/git/options.rb +3 -0
- data/acceptance/config/nodes/aix-53-power.yaml +7 -0
- data/acceptance/config/nodes/aix-61-power.yaml +7 -0
- data/acceptance/config/nodes/aix-71-power.yaml +7 -0
- data/acceptance/config/nodes/huaweios-6-powerpc.yaml +7 -0
- data/acceptance/config/nodes/solaris-10-sparc.yaml +9 -0
- data/acceptance/config/nodes/solaris-11-sparc.yaml +9 -0
- data/acceptance/lib/facter/acceptance/base_fact_utils.rb +565 -0
- data/acceptance/lib/facter/acceptance/user_fact_utils.rb +132 -0
- data/acceptance/lib/helper.rb +3 -0
- data/acceptance/lib/puppet/acceptance/common_utils.rb +10 -0
- data/acceptance/lib/puppet/acceptance/git_utils.rb +19 -0
- data/acceptance/lib/puppet/acceptance/install_utils.rb +58 -0
- data/acceptance/setup/aio/pre-suite/001_run_with_facter_ng.rb +75 -0
- data/acceptance/tests/custom_facts/cached_custom_fact.rb +82 -0
- data/acceptance/tests/custom_facts/conflicts_with_builtin_fact.rb +106 -0
- data/acceptance/tests/custom_facts/custom_fact_with_10001_weight_overrides_external_fact.rb +30 -0
- data/acceptance/tests/custom_facts/expand_command.rb +30 -0
- data/acceptance/tests/custom_facts/having_multiple_facts_in_one_file.rb +40 -0
- data/acceptance/tests/custom_facts/not_expand_command.rb +30 -0
- data/acceptance/tests/custom_facts/using_win32ole_should_not_hang.rb +33 -0
- data/acceptance/tests/custom_facts/weighted_cached_custom_facts.rb +94 -0
- data/acceptance/tests/custom_facts/windows_not_expand_command.rb +30 -0
- data/acceptance/tests/external_facts/env_var_overrides_external_fact.rb +46 -0
- data/acceptance/tests/external_facts/external_dir_overrides_default_external_fact.rb +34 -0
- data/acceptance/tests/external_facts/external_fact_overrides_custom_fact.rb +29 -0
- data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_10000_weight_or_less.rb +30 -0
- data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_confine.rb +35 -0
- data/acceptance/tests/external_facts/external_fact_stderr_messages_output_to_stderr.rb +49 -0
- data/acceptance/tests/external_facts/external_facts_only_run_once.rb +43 -0
- data/acceptance/tests/external_facts/fact_directory_precedence.rb +109 -0
- data/acceptance/tests/external_facts/handle_same_filename_in_different_dirs.rb +59 -0
- data/acceptance/tests/external_facts/non_root_users_default_external_fact_directory.rb +142 -0
- data/acceptance/tests/external_facts/root_uses_default_external_fact_dir.rb +34 -0
- data/acceptance/tests/external_facts/structured_executable_facts.rb +139 -0
- data/acceptance/tests/facter_returns_success_on_non_existent_fact.rb +9 -0
- data/acceptance/tests/facts/dmi.rb +51 -0
- data/acceptance/tests/facts/facterversion.rb +11 -0
- data/acceptance/tests/facts/identity.rb +52 -0
- data/acceptance/tests/facts/mountpoints_fact.rb +12 -0
- data/acceptance/tests/facts/networking_facts.rb +93 -0
- data/acceptance/tests/facts/nim_type.rb +12 -0
- data/acceptance/tests/facts/non_root_users_without_errors.rb +32 -0
- data/acceptance/tests/facts/operatingsystem_detection_after_clear_on_ubuntu.rb +26 -0
- data/acceptance/tests/facts/os_processors_and_kernel.rb +20 -0
- data/acceptance/tests/facts/osx_numeric_hostname.rb +23 -0
- data/acceptance/tests/facts/partitions.rb +37 -0
- data/acceptance/tests/facts/productname.rb +15 -0
- data/acceptance/tests/facts/ruby.rb +59 -0
- data/acceptance/tests/facts/ssh_key.rb +59 -0
- data/acceptance/tests/facts/validate_file_system_size_bytes.rb +37 -0
- data/acceptance/tests/facts/verify_tmpfs_file_system.rb +54 -0
- data/acceptance/tests/facts/windows_os.rb +64 -0
- data/acceptance/tests/load_libfacter.rb +66 -0
- data/acceptance/tests/no_errors_on_stderr.rb +10 -0
- data/acceptance/tests/options/color.rb +16 -0
- data/acceptance/tests/options/config.rb +27 -0
- data/acceptance/tests/options/config_file/blocklist.rb +35 -0
- data/acceptance/tests/options/config_file/blocklist_from_puppet_facts.rb +40 -0
- data/acceptance/tests/options/config_file/custom_dir_overridden_by_cli_custom_dir.rb +56 -0
- data/acceptance/tests/options/config_file/custom_facts.rb +42 -0
- data/acceptance/tests/options/config_file/custom_facts_list.rb +56 -0
- data/acceptance/tests/options/config_file/debug.rb +34 -0
- data/acceptance/tests/options/config_file/debug_override_config_file.rb +34 -0
- data/acceptance/tests/options/config_file/default_file_location.rb +37 -0
- data/acceptance/tests/options/config_file/external_dir_conflicts_with_cli_no_external_facts.rb +37 -0
- data/acceptance/tests/options/config_file/external_dir_overridden_by_cli_external_dir.rb +40 -0
- data/acceptance/tests/options/config_file/external_facts.rb +37 -0
- data/acceptance/tests/options/config_file/external_facts_list.rb +43 -0
- data/acceptance/tests/options/config_file/load_from_ruby.rb +73 -0
- data/acceptance/tests/options/config_file/log_level.rb +35 -0
- data/acceptance/tests/options/config_file/no_custom_facts_and_custom_dir.rb +43 -0
- data/acceptance/tests/options/config_file/no_custom_facts_and_facterlib.rb +43 -0
- data/acceptance/tests/options/config_file/no_custom_facts_and_load_path.rb +49 -0
- data/acceptance/tests/options/config_file/no_external_facts.rb +38 -0
- data/acceptance/tests/options/config_file/no_external_facts_and_external_dir.rb +34 -0
- data/acceptance/tests/options/config_file/no_ruby_disables_custom_facts.rb +52 -0
- data/acceptance/tests/options/config_file/no_ruby_disables_ruby_facts.rb +34 -0
- data/acceptance/tests/options/config_file/trace.rb +48 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_json_output.rb +92 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_text_output.rb +74 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_yaml_output.rb +88 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_json_resolver.rb +79 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_text_resolver.rb +78 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_yaml_resolver.rb +78 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_clear_by_empty_ttls_cache_list.rb +71 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_creates_json_cache_file.rb +48 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_do_not_read_the_old_cached_value.rb +58 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_refresh_the_cached_value.rb +61 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_read_from_the_cached_value.rb +57 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_corrupt_are_refreshed.rb +53 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_empty_return_an_empty_value.rb +53 -0
- data/acceptance/tests/options/config_file/ttls_puppet_facts_creates_json_for_cached_facts.rb +45 -0
- data/acceptance/tests/options/config_file/ttls_puppet_facts_honors_cached_facts.rb +54 -0
- data/acceptance/tests/options/config_file/verbose.rb +34 -0
- data/acceptance/tests/options/custom_facts.rb +34 -0
- data/acceptance/tests/options/custom_facts_facterlib.rb +33 -0
- data/acceptance/tests/options/custom_facts_list.rb +48 -0
- data/acceptance/tests/options/custom_facts_load_path.rb +42 -0
- data/acceptance/tests/options/debug.rb +12 -0
- data/acceptance/tests/options/external_facts.rb +28 -0
- data/acceptance/tests/options/external_facts_list.rb +35 -0
- data/acceptance/tests/options/help.rb +13 -0
- data/acceptance/tests/options/json.rb +43 -0
- data/acceptance/tests/options/list_block_groups.rb +15 -0
- data/acceptance/tests/options/list_block_groups_facter_4.rb +15 -0
- data/acceptance/tests/options/list_cache_groups.rb +65 -0
- data/acceptance/tests/options/log_level.rb +13 -0
- data/acceptance/tests/options/no_block.rb +34 -0
- data/acceptance/tests/options/no_cache_should_not_cache_facts.rb +43 -0
- data/acceptance/tests/options/no_cache_should_not_load_cached_facts.rb +58 -0
- data/acceptance/tests/options/no_cache_should_not_refresh_cached_facts.rb +63 -0
- data/acceptance/tests/options/no_color.rb +16 -0
- data/acceptance/tests/options/no_custom_facts.rb +34 -0
- data/acceptance/tests/options/no_custom_facts_and_custom_dir.rb +19 -0
- data/acceptance/tests/options/no_custom_facts_and_facterlib.rb +34 -0
- data/acceptance/tests/options/no_custom_facts_and_load_path.rb +43 -0
- data/acceptance/tests/options/no_external_facts.rb +28 -0
- data/acceptance/tests/options/no_external_facts_and_external_dir.rb +19 -0
- data/acceptance/tests/options/no_ruby.rb +44 -0
- data/acceptance/tests/options/puppet_facts.rb +37 -0
- data/acceptance/tests/options/show_legacy.rb +18 -0
- data/acceptance/tests/options/strict.rb +11 -0
- data/acceptance/tests/options/trace.rb +36 -0
- data/acceptance/tests/options/verbose.rb +12 -0
- data/acceptance/tests/options/version.rb +12 -0
- data/acceptance/tests/options/yaml.rb +43 -0
- data/acceptance/tests/ticket_1123_facter_with_invalid_locale.rb +23 -0
- data/acceptance/tests/ticket_1238_hostname_fqdn.rb +57 -0
- data/lib/custom_facts/core/execution/base.rb +18 -18
- data/lib/custom_facts/util/collection.rb +2 -7
- data/lib/custom_facts/util/config.rb +1 -1
- data/lib/custom_facts/util/directory_loader.rb +51 -24
- data/lib/custom_facts/util/fact.rb +10 -1
- data/lib/custom_facts/util/resolution.rb +1 -1
- data/lib/facts/aix/aio_agent_version.rb +14 -0
- data/lib/facts/bsd/processors/count.rb +17 -0
- data/lib/facts/bsd/processors/models.rb +23 -0
- data/lib/facts/bsd/processors/speed.rb +17 -0
- data/lib/facts/freebsd/disks.rb +15 -0
- data/lib/facts/freebsd/partitions.rb +15 -0
- data/lib/facts/freebsd/processors/count.rb +17 -0
- data/lib/facts/freebsd/processors/models.rb +23 -0
- data/lib/facts/freebsd/processors/speed.rb +17 -0
- data/lib/facts/linux/aio_agent_version.rb +14 -0
- data/lib/facts/linux/ec2_metadata.rb +47 -0
- data/lib/facts/linux/ec2_userdata.rb +47 -0
- data/lib/facts/linux/is_virtual.rb +2 -5
- data/lib/facts/linux/virtual.rb +1 -5
- data/lib/facts/macosx/aio_agent_version.rb +14 -0
- data/lib/facts/macosx/interfaces.rb +2 -2
- data/lib/facts/macosx/networking/dhcp.rb +17 -0
- data/lib/facts/macosx/networking/interfaces.rb +21 -0
- data/lib/facts/macosx/networking/ip.rb +4 -1
- data/lib/facts/macosx/networking/ip6.rb +21 -0
- data/lib/facts/macosx/networking/mac.rb +4 -1
- data/lib/facts/macosx/networking/mtu.rb +20 -0
- data/lib/facts/macosx/networking/netmask.rb +21 -0
- data/lib/facts/macosx/networking/netmask6.rb +21 -0
- data/lib/facts/macosx/networking/network.rb +21 -0
- data/lib/facts/macosx/networking/network6.rb +21 -0
- data/lib/facts/macosx/networking/primary.rb +17 -0
- data/lib/facts/macosx/networking/scope6.rb +20 -0
- data/lib/facts/solaris/aio_agent_version.rb +14 -0
- data/lib/facts/windows/aio_agent_version.rb +14 -0
- data/lib/facts/windows/ec2_metadata.rb +23 -0
- data/lib/facts/windows/ec2_userdata.rb +23 -0
- data/lib/facts_utils/hypervisors.rb +10 -0
- data/lib/framework/core/cache_manager.rb +42 -18
- data/lib/framework/core/fact/external/external_fact_manager.rb +3 -2
- data/lib/framework/core/fact_loaders/external_fact_loader.rb +3 -2
- data/lib/framework/formatters/legacy_fact_formatter.rb +6 -5
- data/lib/framework/parsers/query_parser.rb +14 -2
- data/lib/models/loaded_fact.rb +3 -1
- data/lib/models/resolved_fact.rb +1 -1
- data/lib/models/searched_fact.rb +1 -0
- data/lib/resolvers/{agent_resolver.rb → aio_agent_version.rb} +4 -3
- data/lib/resolvers/bsd/ffi/ffi_helper.rb +31 -0
- data/lib/resolvers/bsd/processors.rb +47 -0
- data/lib/resolvers/ec2.rb +77 -0
- data/lib/resolvers/freebsd/ffi/ffi_helper.rb +42 -0
- data/lib/resolvers/freebsd/geom_resolver.rb +109 -0
- data/lib/resolvers/freebsd/processors.rb +44 -0
- data/lib/resolvers/macosx/networking.rb +110 -0
- data/lib/resolvers/networking_linux_resolver.rb +8 -30
- data/lib/resolvers/utils/networking.rb +70 -0
- data/lib/resolvers/windows/aio_agent_version.rb +56 -0
- metadata +175 -5
- data/lib/resolvers/macosx/ipaddress_resolver.rb +0 -52
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# This test verifies that facter can load facts from a single custom-dir specified
|
|
2
|
+
# in the configuration file
|
|
3
|
+
test_name "C98143: config custom-dir allows single custom fact directory" do
|
|
4
|
+
tag 'risk:low'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
content = <<EOM
|
|
10
|
+
Facter.add('config_fact') do
|
|
11
|
+
setcode do
|
|
12
|
+
"config_value"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
EOM
|
|
16
|
+
|
|
17
|
+
agents.each do |agent|
|
|
18
|
+
step "Agent #{agent}: create custom fact directory and a custom fact and config file" do
|
|
19
|
+
custom_dir = agent.tmpdir('custom_dir')
|
|
20
|
+
custom_fact = File.join(custom_dir, 'custom_fact.rb')
|
|
21
|
+
create_remote_file(agent, custom_fact, content)
|
|
22
|
+
config_dir = agent.tmpdir("config_dir")
|
|
23
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
24
|
+
config_content = <<EOM
|
|
25
|
+
global : {
|
|
26
|
+
custom-dir : "#{custom_dir}",
|
|
27
|
+
}
|
|
28
|
+
EOM
|
|
29
|
+
create_remote_file(agent, config_file, config_content)
|
|
30
|
+
|
|
31
|
+
teardown do
|
|
32
|
+
on(agent, "rm -rf '#{custom_dir}' '#{config_dir}'")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
step "Agent #{agent}: resolve a fact from the configured custom-dir path" do
|
|
36
|
+
on(agent, facter("--config '#{config_file}' config_fact")) do |facter_output|
|
|
37
|
+
assert_equal("config_value", facter_output.stdout.chomp, "Incorrect custom fact value")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# This test verifies that facter can load facts from multiple custom-dir's specified
|
|
2
|
+
# in the configuration file
|
|
3
|
+
test_name "C99996: config custom-dir allows multiple custom fact directories" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
content_1 = <<EOM
|
|
10
|
+
Facter.add('config_fact_1') do
|
|
11
|
+
setcode do
|
|
12
|
+
"config_value_1"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
EOM
|
|
16
|
+
|
|
17
|
+
content_2 = <<EOM
|
|
18
|
+
Facter.add('config_fact_2') do
|
|
19
|
+
setcode do
|
|
20
|
+
"config_value_2"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
EOM
|
|
24
|
+
|
|
25
|
+
agents.each do |agent|
|
|
26
|
+
step "Agent #{agent}: create custom fact directories and a custom fact in each and a config file" do
|
|
27
|
+
custom_dir_1 = agent.tmpdir('custom_dir_1')
|
|
28
|
+
custom_dir_2 = agent.tmpdir('custom_dir_2')
|
|
29
|
+
custom_fact_1 = File.join(custom_dir_1, 'custom_fact.rb')
|
|
30
|
+
custom_fact_2 = File.join(custom_dir_2, 'custom_fact.rb')
|
|
31
|
+
create_remote_file(agent, custom_fact_1, content_1)
|
|
32
|
+
create_remote_file(agent, custom_fact_2, content_2)
|
|
33
|
+
|
|
34
|
+
config_dir = agent.tmpdir("config_dir")
|
|
35
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
36
|
+
config_content = <<EOM
|
|
37
|
+
global : {
|
|
38
|
+
custom-dir : [ "#{custom_dir_1}", "#{custom_dir_2}" ],
|
|
39
|
+
}
|
|
40
|
+
EOM
|
|
41
|
+
create_remote_file(agent, config_file, config_content)
|
|
42
|
+
|
|
43
|
+
teardown do
|
|
44
|
+
on(agent, "rm -rf '#{custom_dir_1}' '#{custom_dir_2}' '#{config_dir}'")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
step "Agent #{agent}: resolve a fact from each configured custom-dir path" do
|
|
48
|
+
on(agent, facter("--config '#{config_file}' --json")) do |facter_output|
|
|
49
|
+
results = JSON.parse(facter_output.stdout)
|
|
50
|
+
assert_equal("config_value_1", results['config_fact_1'], "Incorrect custom fact value for config_fact_1")
|
|
51
|
+
assert_equal("config_value_2", results['config_fact_2'], "Incorrect custom fact value for config_fact_2")
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This test is intended to demonstrate that setting the cli.debug field to true
|
|
2
|
+
# causes DEBUG information to be printed to stderr.
|
|
3
|
+
test_name "C99965: setting the debug config field to true prints debug info to stderr" do
|
|
4
|
+
tag 'risk:high'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
config = <<EOM
|
|
10
|
+
cli : {
|
|
11
|
+
debug : true
|
|
12
|
+
}
|
|
13
|
+
EOM
|
|
14
|
+
|
|
15
|
+
agents.each do |agent|
|
|
16
|
+
step "Agent #{agent}: create config file" do
|
|
17
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
18
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
19
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
20
|
+
create_remote_file(agent, config_file, config)
|
|
21
|
+
|
|
22
|
+
teardown do
|
|
23
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0,1])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
step "debug output should print when config file is loaded" do
|
|
27
|
+
on(agent, facter("")) do |facter_output|
|
|
28
|
+
assert_match(/DEBUG/, facter_output.stderr, "Expected DEBUG information in stderr")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This test verified that having debug set to false in the config file can be
|
|
2
|
+
# overridden by the command line option --debug
|
|
3
|
+
test_name "C100044: flags set on the command line override config file settings" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
config = <<EOM
|
|
10
|
+
cli : {
|
|
11
|
+
debug : false
|
|
12
|
+
}
|
|
13
|
+
EOM
|
|
14
|
+
|
|
15
|
+
agents.each do |agent|
|
|
16
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
17
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
18
|
+
|
|
19
|
+
teardown do
|
|
20
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
step "Agent #{agent}: create config file in default location" do
|
|
24
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
25
|
+
create_remote_file(agent, config_file, config)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
step "--debug flag should override debug=false in config file" do
|
|
29
|
+
on(agent, facter("--debug")) do |facter_output|
|
|
30
|
+
assert_match(/DEBUG/, facter_output.stderr, "Expected DEBUG information in stderr")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# This test is intended to demonstrate that Facter will load a config file
|
|
2
|
+
# saved at the default location without any special command line flags.
|
|
3
|
+
# On Unix, this location is /etc/puppetlabs/facter/facter.conf.
|
|
4
|
+
# On Windows, it is C:\ProgramData\PuppetLabs\facter\etc\facter.conf
|
|
5
|
+
test_name "C99991: config file is loaded from default location" do
|
|
6
|
+
tag 'risk:high'
|
|
7
|
+
|
|
8
|
+
config = <<EOM
|
|
9
|
+
cli : {
|
|
10
|
+
debug : true
|
|
11
|
+
}
|
|
12
|
+
EOM
|
|
13
|
+
|
|
14
|
+
agents.each do |agent|
|
|
15
|
+
step "Agent #{agent}: create config file" do
|
|
16
|
+
if agent['platform'] =~ /windows/
|
|
17
|
+
config_dir = 'C:\\ProgramData\\PuppetLabs\\facter\\etc'
|
|
18
|
+
else
|
|
19
|
+
config_dir = "/etc/puppetlabs/facter"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
23
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
24
|
+
create_remote_file(agent, config_file, config)
|
|
25
|
+
|
|
26
|
+
teardown do
|
|
27
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0,1])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
step "config file should be loaded automatically and turn DEBUG output on" do
|
|
31
|
+
on(agent, facter("")) do |facter_output|
|
|
32
|
+
assert_match(/DEBUG/, facter_output.stderr, "Expected DEBUG information in stderr")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/acceptance/tests/options/config_file/external_dir_conflicts_with_cli_no_external_facts.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# This test verifies that a configured external-dir conflicts with the command
|
|
2
|
+
# line option --no-external-facts
|
|
3
|
+
test_name "configured external-dir conflicts with command line --no-external-facts" do
|
|
4
|
+
tag 'risk:low'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
config = <<EOM
|
|
10
|
+
global : {
|
|
11
|
+
external-dir : "config/file/dir"
|
|
12
|
+
}
|
|
13
|
+
cli : {
|
|
14
|
+
debug : false
|
|
15
|
+
}
|
|
16
|
+
EOM
|
|
17
|
+
|
|
18
|
+
agents.each do |agent|
|
|
19
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
20
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
21
|
+
|
|
22
|
+
teardown do
|
|
23
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
step "Agent #{agent}: create config file in default location" do
|
|
27
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
28
|
+
create_remote_file(agent, config_file, config)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
step "conflict logic applies across settings sources" do
|
|
32
|
+
on(agent, facter("--no-external-facts"), :acceptable_exit_codes => [1]) do |facter_output|
|
|
33
|
+
assert_match(/no-external-facts and external-dir options conflict/, facter_output.stderr, "Facter should have warned about conflicting settings")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# This test verifies that the external-dir specified in the configuration file can be overridden by using
|
|
2
|
+
# --external-dir on the command line
|
|
3
|
+
test_name "C100016: config external-dir overridden by command line --external-dir" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'json'
|
|
7
|
+
require 'facter/acceptance/user_fact_utils'
|
|
8
|
+
extend Facter::Acceptance::UserFactUtils
|
|
9
|
+
|
|
10
|
+
agents.each do |agent|
|
|
11
|
+
step "Agent #{agent}: create 2 custom fact directories with facts and a config file pointing at 1 directory" do
|
|
12
|
+
external_config_dir = agent.tmpdir('external_dir')
|
|
13
|
+
external_cli_dir = agent.tmpdir('cli_external_dir')
|
|
14
|
+
external_config_fact = File.join(external_config_dir, 'external.txt')
|
|
15
|
+
external_cli_fact = File.join(external_cli_dir, 'external.txt')
|
|
16
|
+
create_remote_file(agent, external_config_fact, "config_fact=config_value")
|
|
17
|
+
create_remote_file(agent, external_cli_fact, "cli_fact=cli_value")
|
|
18
|
+
config_dir = agent.tmpdir("config_dir")
|
|
19
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
20
|
+
config_content = <<EOM
|
|
21
|
+
global : {
|
|
22
|
+
external-dir : "#{external_config_dir}",
|
|
23
|
+
}
|
|
24
|
+
EOM
|
|
25
|
+
create_remote_file(agent, config_file, config_content)
|
|
26
|
+
|
|
27
|
+
teardown do
|
|
28
|
+
on(agent, "rm -rf '#{external_config_dir}' '#{external_cli_dir}' '#{config_dir}'")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
step "Agent #{agent}: resolve a fact from the command line external-dir and not the config file" do
|
|
32
|
+
on(agent, facter("--config '#{config_file}' --external-dir '#{external_cli_dir}' --json")) do |facter_output|
|
|
33
|
+
results = JSON.parse(facter_output.stdout)
|
|
34
|
+
assert_equal("cli_value", results['cli_fact'], "Incorrect custom fact value for cli_fact")
|
|
35
|
+
assert_nil(results['config_fact'], "Config fact should not resolve and be nil")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# This test verifies that facter can load facts from a single external-dir specified
|
|
2
|
+
# in the configuration file
|
|
3
|
+
test_name "C98142: config external-dir allows single external fact directory" do
|
|
4
|
+
tag 'risk:low'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
agents.each do |agent|
|
|
10
|
+
step "Agent #{agent}: create an external fact directory with an external fact and a config file" do
|
|
11
|
+
external_dir = agent.tmpdir('external_dir')
|
|
12
|
+
ext = get_external_fact_script_extension(agent['platform'])
|
|
13
|
+
external_fact = File.join(external_dir, "external_fact#{ext}")
|
|
14
|
+
create_remote_file(agent, external_fact, external_fact_content(agent['platform'], 'single_fact', 'external_value'))
|
|
15
|
+
on(agent, "chmod +x '#{external_fact}'")
|
|
16
|
+
|
|
17
|
+
config_dir = agent.tmpdir("config_dir")
|
|
18
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
19
|
+
config_content = <<EOM
|
|
20
|
+
global : {
|
|
21
|
+
external-dir : "#{external_dir}",
|
|
22
|
+
}
|
|
23
|
+
EOM
|
|
24
|
+
create_remote_file(agent, config_file, config_content)
|
|
25
|
+
|
|
26
|
+
teardown do
|
|
27
|
+
on(agent, "rm -rf '#{external_dir}' '#{config_dir}'")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
step "Agent #{agent}: resolve a fact in the external-dir in the configuration file" do
|
|
31
|
+
on(agent, facter("--config '#{config_file}' single_fact")) do |facter_output|
|
|
32
|
+
assert_equal("external_value", facter_output.stdout.chomp, "Incorrect external fact value")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# facter should be able to load facts from multiple external-dir's specified
|
|
2
|
+
# in the configuration file
|
|
3
|
+
test_name "C99995: config file supports external-dir for multiple fact directories" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'json'
|
|
7
|
+
require 'facter/acceptance/user_fact_utils'
|
|
8
|
+
extend Facter::Acceptance::UserFactUtils
|
|
9
|
+
|
|
10
|
+
agents.each do |agent|
|
|
11
|
+
step "Agent #{agent}: create external fact directories and a external fact in each and a config file" do
|
|
12
|
+
external_dir_1 = agent.tmpdir('external_dir_1')
|
|
13
|
+
external_dir_2 = agent.tmpdir('external_dir_2')
|
|
14
|
+
ext = get_external_fact_script_extension(agent['platform'])
|
|
15
|
+
external_fact_1 = File.join(external_dir_1, "external_fact#{ext}")
|
|
16
|
+
external_fact_2 = File.join(external_dir_2, "external_fact#{ext}")
|
|
17
|
+
create_remote_file(agent, external_fact_1, external_fact_content(agent['platform'], 'external_fact_1', 'external_value_1'))
|
|
18
|
+
create_remote_file(agent, external_fact_2, external_fact_content(agent['platform'], 'external_fact_2', 'external_value_2'))
|
|
19
|
+
on(agent, "chmod +x '#{external_fact_1}' '#{external_fact_2}'")
|
|
20
|
+
|
|
21
|
+
config_dir = agent.tmpdir("config_dir")
|
|
22
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
23
|
+
config_content = <<EOM
|
|
24
|
+
global : {
|
|
25
|
+
external-dir : [ "#{external_dir_1}", "#{external_dir_2}" ],
|
|
26
|
+
}
|
|
27
|
+
EOM
|
|
28
|
+
create_remote_file(agent, config_file, config_content)
|
|
29
|
+
|
|
30
|
+
teardown do
|
|
31
|
+
on(agent, "rm -rf '#{external_dir_1}' '#{external_dir_2}' '#{config_dir}'")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
step "Agent #{agent}: resolve a fact from each configured external-dir path" do
|
|
35
|
+
on(agent, facter("--config '#{config_file}' --json")) do |facter_output|
|
|
36
|
+
results = JSON.parse(facter_output.stdout)
|
|
37
|
+
assert_equal("external_value_1", results['external_fact_1'], "Incorrect external fact value for external_fact_1")
|
|
38
|
+
assert_equal("external_value_2", results['external_fact_2'], "Incorrect external fact value for external_fact_2")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# This test is intended to demonstrate that Facter's config file will
|
|
2
|
+
# load correctly from the default location when Facter is required from Ruby.
|
|
3
|
+
# On *nix, this location is /etc/puppetlabs/facter/facter.conf.
|
|
4
|
+
# On Windows, it is C:\ProgramData\PuppetLabs\facter\etc\facter.conf
|
|
5
|
+
#
|
|
6
|
+
# The test also verifies that facter will search for external facts and custom facts
|
|
7
|
+
# in the directory paths defined with external-dir and custom-dir in the facter.conf file
|
|
8
|
+
test_name "C98141: config file is loaded when Facter is run from Puppet" do
|
|
9
|
+
tag 'risk:high'
|
|
10
|
+
|
|
11
|
+
require 'facter/acceptance/user_fact_utils'
|
|
12
|
+
extend Facter::Acceptance::UserFactUtils
|
|
13
|
+
|
|
14
|
+
agents.each do |agent|
|
|
15
|
+
# create paths for default facter.conf, external-dir, and custom-dir
|
|
16
|
+
|
|
17
|
+
# default facter.conf
|
|
18
|
+
facter_conf_default_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
19
|
+
facter_conf_default_path = File.join(facter_conf_default_dir, "facter.conf")
|
|
20
|
+
|
|
21
|
+
# external-dir
|
|
22
|
+
ext_fact_dir1 = agent.tmpdir('ext_fact_dir1')
|
|
23
|
+
ext_path1 = File.join(ext_fact_dir1, "test_ext_fact1.yaml")
|
|
24
|
+
ext_fact_dir2 = agent.tmpdir('ext_fact_dir2')
|
|
25
|
+
ext_path2 = File.join(ext_fact_dir2, "test_ext_fact2.yaml")
|
|
26
|
+
|
|
27
|
+
# custom-dir
|
|
28
|
+
cust_fact_dir = agent.tmpdir('custom_fact_dir')
|
|
29
|
+
cust_path = File.join(cust_fact_dir, "custom_fact.rb")
|
|
30
|
+
|
|
31
|
+
teardown do
|
|
32
|
+
on(agent, "rm -rf '#{facter_conf_default_dir}' '#{ext_fact_dir1}' '#{ext_fact_dir2}' '#{cust_fact_dir}'",
|
|
33
|
+
:acceptable_exit_codes => [0,1])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# create the directories
|
|
37
|
+
on(agent, "mkdir -p '#{facter_conf_default_dir}' '#{ext_fact_dir1}' '#{ext_fact_dir2}' '#{cust_fact_dir}'")
|
|
38
|
+
|
|
39
|
+
step "Agent #{agent}: create facter.conf, external fact, and custom fact files" do
|
|
40
|
+
|
|
41
|
+
create_remote_file(agent, facter_conf_default_path, <<-FILE)
|
|
42
|
+
global : {
|
|
43
|
+
external-dir : ["#{ext_fact_dir1}", "#{ext_fact_dir2}"],
|
|
44
|
+
custom-dir : ["#{cust_fact_dir}"]
|
|
45
|
+
}
|
|
46
|
+
FILE
|
|
47
|
+
|
|
48
|
+
create_remote_file(agent, ext_path1, <<-FILE)
|
|
49
|
+
externalfact1: 'This is external fact 1 in #{ext_fact_dir1} directory'
|
|
50
|
+
FILE
|
|
51
|
+
|
|
52
|
+
create_remote_file(agent, ext_path2, <<-FILE)
|
|
53
|
+
externalfact2: 'This is external fact 2 in #{ext_fact_dir2} directory'
|
|
54
|
+
FILE
|
|
55
|
+
|
|
56
|
+
create_remote_file(agent, cust_path, <<-FILE)
|
|
57
|
+
Facter.add('customfact') do
|
|
58
|
+
setcode do
|
|
59
|
+
'This is a custom fact in #{cust_fact_dir} directory'
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
FILE
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
step "running `puppet facts` should load the config file automatically and search all external-dir and custom-dir paths" do
|
|
66
|
+
on(agent, puppet('facts')) do |puppet_facts_output|
|
|
67
|
+
assert_match(/This is external fact 1 in #{ext_fact_dir1} directory/, puppet_facts_output.stdout, "Expected external fact")
|
|
68
|
+
assert_match(/This is external fact 2 in #{ext_fact_dir2} directory/, puppet_facts_output.stdout, "Expected external fact")
|
|
69
|
+
assert_match(/This is a custom fact in #{cust_fact_dir} directory/, puppet_facts_output.stdout, "Expected custom fact")
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# This test ensures that the cli.log-level config file setting works
|
|
2
|
+
# properly. The value of the setting should be a string indicating the
|
|
3
|
+
# logging level.
|
|
4
|
+
test_name "C99990: log-level setting can be used to specific logging level" do
|
|
5
|
+
tag 'risk:high'
|
|
6
|
+
|
|
7
|
+
require 'facter/acceptance/user_fact_utils'
|
|
8
|
+
extend Facter::Acceptance::UserFactUtils
|
|
9
|
+
|
|
10
|
+
config = <<EOM
|
|
11
|
+
cli : {
|
|
12
|
+
log-level : debug
|
|
13
|
+
}
|
|
14
|
+
EOM
|
|
15
|
+
|
|
16
|
+
agents.each do |agent|
|
|
17
|
+
step "Agent #{agent}: create config file" do
|
|
18
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
19
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
20
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
21
|
+
create_remote_file(agent, config_file, config)
|
|
22
|
+
|
|
23
|
+
teardown do
|
|
24
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
step "log-level set to debug should print DEBUG output to stderr" do
|
|
28
|
+
on(agent, facter("")) do |facter_output|
|
|
29
|
+
assert_match(/DEBUG/, facter_output.stderr, "Expected DEBUG information in stderr")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|