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,43 @@
|
|
|
1
|
+
# This test verifies that setting both custom-dir and no-custom-facts results in an error
|
|
2
|
+
test_name "C99994: config option no-custom-facts conflicts with custom-dir" do
|
|
3
|
+
tag 'risk:low'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
content = <<EOM
|
|
9
|
+
Facter.add('custom_fact') do
|
|
10
|
+
setcode do
|
|
11
|
+
"testvalue"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
EOM
|
|
15
|
+
|
|
16
|
+
agents.each do |agent|
|
|
17
|
+
step "Agent #{agent}: create a custom fact directory and fact and a config file" do
|
|
18
|
+
custom_dir = agent.tmpdir('custom_dir')
|
|
19
|
+
custom_fact = File.join(custom_dir, 'custom_fact.rb')
|
|
20
|
+
create_remote_file(agent, custom_fact, content)
|
|
21
|
+
|
|
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
|
+
no-custom-facts : true,
|
|
28
|
+
}
|
|
29
|
+
EOM
|
|
30
|
+
create_remote_file(agent, config_file, config_content)
|
|
31
|
+
|
|
32
|
+
teardown do
|
|
33
|
+
on(agent, "rm -rf '#{custom_fact}' '#{config_dir}'")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
step "Agent #{agent}: config option no-custom-facts : true and custom-dir should result in an options conflict error" do
|
|
37
|
+
on(agent, facter("--config '#{config_file}'"), :acceptable_exit_codes => 1) do |facter_output|
|
|
38
|
+
assert_match(/options conflict/, facter_output.stderr, "Output does not contain error string")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# This test verifies that setting no-custom-facts in the config file disables
|
|
2
|
+
# finding facts under the environment variable FACTERLIB
|
|
3
|
+
test_name "C99997: config option no-custom-facts : true does not load facts from FACTERLIB" 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('custom_fact') do
|
|
11
|
+
setcode do
|
|
12
|
+
"testvalue"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
EOM
|
|
16
|
+
|
|
17
|
+
agents.each do |agent|
|
|
18
|
+
step "Agent #{agent}: create a custom fact directory and fact and a config file" do
|
|
19
|
+
facterlib_dir = agent.tmpdir('facterlib')
|
|
20
|
+
custom_fact = File.join(facterlib_dir, 'custom_fact.rb')
|
|
21
|
+
create_remote_file(agent, custom_fact, content)
|
|
22
|
+
|
|
23
|
+
config_dir = agent.tmpdir("config_dir")
|
|
24
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
25
|
+
config_content = <<EOM
|
|
26
|
+
global : {
|
|
27
|
+
no-custom-facts : true,
|
|
28
|
+
}
|
|
29
|
+
EOM
|
|
30
|
+
create_remote_file(agent, config_file, config_content)
|
|
31
|
+
|
|
32
|
+
teardown do
|
|
33
|
+
on(agent, "rm -rf '#{facterlib_dir}' '#{config_dir}'")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
step "Agent #{agent}: no-custom-facts should ignore the FACTERLIB environment variable" do
|
|
37
|
+
on(agent, facter("--config '#{config_file}' custom_fact", :environment => {'FACTERLIB' => facterlib_dir})) do |facter_output|
|
|
38
|
+
assert_equal("", facter_output.stdout.chomp, "Custom fact in FACTERLIB should not have resolved")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# This test verifies that setting no-custom-facts in the config file disables the
|
|
2
|
+
# the loading of custom facts in facter directories under the $LOAD_PATH
|
|
3
|
+
test_name "C100004: config file option no-custom-facts : true does not load $LOAD_PATH facter directories" do
|
|
4
|
+
confine :except, :platform => 'cisco_nexus' # see BKR-749
|
|
5
|
+
tag 'risk:low'
|
|
6
|
+
|
|
7
|
+
require 'puppet/acceptance/common_utils'
|
|
8
|
+
extend Puppet::Acceptance::CommandUtils
|
|
9
|
+
|
|
10
|
+
require 'facter/acceptance/user_fact_utils'
|
|
11
|
+
extend Facter::Acceptance::UserFactUtils
|
|
12
|
+
|
|
13
|
+
content = <<EOM
|
|
14
|
+
Facter.add('custom_fact') do
|
|
15
|
+
setcode do
|
|
16
|
+
"testvalue"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
EOM
|
|
20
|
+
|
|
21
|
+
agents.each do |agent|
|
|
22
|
+
step("Agent #{agent}: determine the load path and create a custom facter directory on it and a config file") do
|
|
23
|
+
ruby_path = on(agent, "#{ruby_command(agent)} -e 'puts $LOAD_PATH[0]'").stdout.chomp
|
|
24
|
+
load_path_facter_dir = File.join(ruby_path, 'facter')
|
|
25
|
+
on(agent, "mkdir -p \"#{load_path_facter_dir}\"")
|
|
26
|
+
custom_fact = File.join(load_path_facter_dir, 'custom_fact.rb')
|
|
27
|
+
create_remote_file(agent, custom_fact, content)
|
|
28
|
+
|
|
29
|
+
config_dir = agent.tmpdir("config_dir")
|
|
30
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
31
|
+
config_content = <<EOM
|
|
32
|
+
global : {
|
|
33
|
+
no-custom-facts : true,
|
|
34
|
+
}
|
|
35
|
+
EOM
|
|
36
|
+
create_remote_file(agent, config_file, config_content)
|
|
37
|
+
|
|
38
|
+
teardown do
|
|
39
|
+
on(agent, "rm -rf '#{load_path_facter_dir}' '#{config_dir}'")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
step("Agent #{agent}: using config no-custom-facts : true should not resolve facts in facter directories on the $LOAD_PATH") do
|
|
43
|
+
on(agent, facter("--config '#{config_file}' custom_fact")) do |facter_output|
|
|
44
|
+
assert_equal("", facter_output.stdout.chomp, "Custom fact in $LOAD_PATH/facter should not have resolved")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# This test verifies that no-external-facts : true set in the configuration file
|
|
2
|
+
# does not load external facts
|
|
3
|
+
test_name "C99962: config no-external-facts : true does not load external facts" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
agents.each do |agent|
|
|
10
|
+
step "Agent #{agent}: create external fact directory and 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'], 'external_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
|
+
no-external-facts : true,
|
|
22
|
+
}
|
|
23
|
+
EOM
|
|
24
|
+
create_remote_file(agent, config_file, config_content)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
teardown do
|
|
28
|
+
on(agent, "rm -rf '#{external_dir}' '#{config_dir}'")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
step "Agent #{agent}: --no-external-facts option should not load external facts" do
|
|
32
|
+
on(agent, facter("--no-external-facts external_fact")) do |facter_output|
|
|
33
|
+
assert_equal("", facter_output.stdout.chomp, "External fact should not have resolved")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This test verifies that setting external-dir and no-external-facts in the config file
|
|
2
|
+
# results in an error
|
|
3
|
+
test_name "C99993: config option no-external-facts conflicts with external-dir" 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 the exernal-dir and a config file" do
|
|
11
|
+
external_dir = agent.tmpdir('external_dir')
|
|
12
|
+
|
|
13
|
+
config_dir = agent.tmpdir("config_dir")
|
|
14
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
15
|
+
config_content = <<EOM
|
|
16
|
+
global : {
|
|
17
|
+
external-dir : "#{external_dir}"
|
|
18
|
+
no-external-facts : true,
|
|
19
|
+
}
|
|
20
|
+
EOM
|
|
21
|
+
create_remote_file(agent, config_file, config_content)
|
|
22
|
+
|
|
23
|
+
teardown do
|
|
24
|
+
on(agent, "rm -rf '#{external_dir}' '#{config_dir}'")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
step "Agent #{agent}: config option no-external-facts : true and external-dir should result in an options conflict error" do
|
|
28
|
+
on(agent, facter("--config '#{config_file}'"), :acceptable_exit_codes => 1) do |facter_output|
|
|
29
|
+
assert_match(/options conflict/, facter_output.stderr, "Output does not contain error string")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# This test is intended to demonstrate that the global.no-ruby config file field
|
|
2
|
+
# disables custom fact lookup.
|
|
3
|
+
test_name "C100045: config no-ruby to true should disable custom facts" do
|
|
4
|
+
tag 'risk:high'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
config = <<EOM
|
|
10
|
+
global : {
|
|
11
|
+
no-ruby : true
|
|
12
|
+
}
|
|
13
|
+
EOM
|
|
14
|
+
|
|
15
|
+
custom_fact_content = <<EOM
|
|
16
|
+
Facter.add('custom_fact') do
|
|
17
|
+
setcode do
|
|
18
|
+
"testvalue"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
EOM
|
|
22
|
+
|
|
23
|
+
agents.each do |agent|
|
|
24
|
+
step "Agent #{agent}: create config file" do
|
|
25
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
26
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
27
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
28
|
+
create_remote_file(agent, config_file, config)
|
|
29
|
+
|
|
30
|
+
teardown do
|
|
31
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0,1])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
step "no-ruby option should disable custom facts" do
|
|
35
|
+
step "Agent #{agent}: create custom fact directory and custom fact" do
|
|
36
|
+
custom_dir = get_user_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
37
|
+
on(agent, "mkdir -p '#{custom_dir}'")
|
|
38
|
+
custom_fact = File.join(custom_dir, 'custom_fact.rb')
|
|
39
|
+
create_remote_file(agent, custom_fact, custom_fact_content)
|
|
40
|
+
|
|
41
|
+
teardown do
|
|
42
|
+
on(agent, "rm -rf '#{custom_dir}'", :acceptable_exit_codes => [0,1])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
on(agent, facter("custom_fact", :environment => { 'FACTERLIB' => custom_dir })) do |facter_output|
|
|
46
|
+
assert_equal("", facter_output.stdout.chomp, "Expected custom fact to be disabled when no-ruby is true")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This test verifies that the global.no-ruby config file field disables
|
|
2
|
+
# ruby facts
|
|
3
|
+
test_name "C99964: no-ruby config field flag disables requiring Ruby" do
|
|
4
|
+
tag 'risk:high'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
config = <<EOM
|
|
10
|
+
global : {
|
|
11
|
+
no-ruby : 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 "no-ruby option should disable Ruby and facts requiring Ruby" do
|
|
27
|
+
on(agent, facter("ruby")) do |facter_output|
|
|
28
|
+
assert_equal("", facter_output.stdout.chomp, "Expected Ruby and Ruby fact to be disabled")
|
|
29
|
+
assert_equal("", facter_output.stderr.chomp, "Expected no warnings about Ruby on stderr")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# This test is intended to demonstrate that setting the cli.trace field to true
|
|
2
|
+
# enables backtrace reporting for errors in custom facts.
|
|
3
|
+
test_name "C99988: trace config field enables backtraces for custom facts" do
|
|
4
|
+
tag 'risk:high'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
erroring_custom_fact = <<EOM
|
|
10
|
+
Facter.add('custom_fact') do
|
|
11
|
+
setcode do
|
|
12
|
+
non_existent_value
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
EOM
|
|
16
|
+
|
|
17
|
+
config = <<EOM
|
|
18
|
+
cli : {
|
|
19
|
+
trace : true
|
|
20
|
+
}
|
|
21
|
+
EOM
|
|
22
|
+
|
|
23
|
+
agents.each do |agent|
|
|
24
|
+
step "Agent #{agent}: create custom fact directory and executable custom fact" do
|
|
25
|
+
custom_dir = get_user_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
26
|
+
on(agent, "mkdir -p '#{custom_dir}'")
|
|
27
|
+
custom_fact = File.join(custom_dir, "custom_fact.rb")
|
|
28
|
+
create_remote_file(agent, custom_fact, erroring_custom_fact)
|
|
29
|
+
on(agent, "chmod +x '#{custom_fact}'")
|
|
30
|
+
|
|
31
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
32
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
33
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
34
|
+
create_remote_file(agent, config_file, config)
|
|
35
|
+
|
|
36
|
+
teardown do
|
|
37
|
+
on(agent, "rm -rf '#{custom_dir}' '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
step "trace setting should provide a backtrace for a custom fact with errors" do
|
|
41
|
+
on(agent, facter("--custom-dir '#{custom_dir}' custom_fact"), :acceptable_exit_codes => [1]) do |facter_output|
|
|
42
|
+
assert_match(/backtrace:\s+#{custom_fact}/, facter_output.stderr, "Expected a backtrace for erroneous custom fact")
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# This test verifies that a ttls configured cached facts when initially called
|
|
2
|
+
# create a json cache file
|
|
3
|
+
test_name "ttls configured cached external execution resolver with json output creates and read json cache files" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
# This fact must be resolvable on ALL platforms
|
|
10
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
11
|
+
external_cachegroup = 'external_fact'
|
|
12
|
+
cached_fact_name = 'single_fact'
|
|
13
|
+
initial_fact_value = 'external_value'
|
|
14
|
+
cached_fact_value = 'cached_external_value'
|
|
15
|
+
|
|
16
|
+
agents.each do |agent|
|
|
17
|
+
step "Agent #{agent}: create config file" do
|
|
18
|
+
external_dir = agent.tmpdir('external_dir')
|
|
19
|
+
ext = get_external_fact_script_extension(agent['platform'])
|
|
20
|
+
external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
|
|
21
|
+
if agent['platform'] =~ /windows/
|
|
22
|
+
external_fact_content = <<EOM
|
|
23
|
+
cat << EOF
|
|
24
|
+
{
|
|
25
|
+
"#{cached_fact_name}": "#{initial_fact_value}"
|
|
26
|
+
}
|
|
27
|
+
EOF
|
|
28
|
+
EOM
|
|
29
|
+
else
|
|
30
|
+
external_fact_content = <<EOM
|
|
31
|
+
#!/bin/sh
|
|
32
|
+
cat << EOF
|
|
33
|
+
{
|
|
34
|
+
"#{cached_fact_name}": "#{initial_fact_value}"
|
|
35
|
+
}
|
|
36
|
+
EOF
|
|
37
|
+
EOM
|
|
38
|
+
end
|
|
39
|
+
create_remote_file(agent, external_fact, external_fact_content)
|
|
40
|
+
on(agent, "chmod +x '#{external_fact}'")
|
|
41
|
+
|
|
42
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
43
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
44
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
45
|
+
|
|
46
|
+
cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
|
|
47
|
+
|
|
48
|
+
# Setup facter conf
|
|
49
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
50
|
+
cached_fact_content = <<EOM
|
|
51
|
+
{
|
|
52
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
53
|
+
}
|
|
54
|
+
EOM
|
|
55
|
+
|
|
56
|
+
config = <<EOM
|
|
57
|
+
facts : {
|
|
58
|
+
ttls : [
|
|
59
|
+
{ "#{external_cachegroup}#{ext}" : 30 days }
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
EOM
|
|
63
|
+
create_remote_file(agent, config_file, config)
|
|
64
|
+
|
|
65
|
+
teardown do
|
|
66
|
+
on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
70
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
71
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
72
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
73
|
+
end
|
|
74
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
75
|
+
assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
80
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
81
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
|
|
82
|
+
|
|
83
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
84
|
+
|
|
85
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
86
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
87
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# This test verifies that a ttls configured cached facts when initially called
|
|
2
|
+
# create a json cache file
|
|
3
|
+
test_name "ttls configured cached external execution resolver with text output creates and read json cache files" do
|
|
4
|
+
tag 'risk:medium'
|
|
5
|
+
|
|
6
|
+
require 'facter/acceptance/user_fact_utils'
|
|
7
|
+
extend Facter::Acceptance::UserFactUtils
|
|
8
|
+
|
|
9
|
+
# This fact must be resolvable on ALL platforms
|
|
10
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
11
|
+
external_cachegroup = 'external_fact'
|
|
12
|
+
cached_fact_name = 'single_fact'
|
|
13
|
+
initial_fact_value = 'external_value'
|
|
14
|
+
cached_fact_value = 'cached_external_value'
|
|
15
|
+
|
|
16
|
+
agents.each do |agent|
|
|
17
|
+
step "Agent #{agent}: create config file" do
|
|
18
|
+
external_dir = agent.tmpdir('external_dir')
|
|
19
|
+
ext = get_external_fact_script_extension(agent['platform'])
|
|
20
|
+
external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
|
|
21
|
+
create_remote_file(agent, external_fact, external_fact_content(agent['platform'], cached_fact_name, initial_fact_value))
|
|
22
|
+
on(agent, "chmod +x '#{external_fact}'")
|
|
23
|
+
|
|
24
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
25
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
26
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
27
|
+
|
|
28
|
+
cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
|
|
29
|
+
|
|
30
|
+
# Setup facter conf
|
|
31
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
32
|
+
cached_fact_content = <<EOM
|
|
33
|
+
{
|
|
34
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
35
|
+
}
|
|
36
|
+
EOM
|
|
37
|
+
|
|
38
|
+
config = <<EOM
|
|
39
|
+
facts : {
|
|
40
|
+
ttls : [
|
|
41
|
+
{ "#{external_cachegroup}#{ext}" : 30 days }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
EOM
|
|
45
|
+
create_remote_file(agent, config_file, config)
|
|
46
|
+
|
|
47
|
+
teardown do
|
|
48
|
+
on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
52
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
53
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
54
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
55
|
+
end
|
|
56
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
57
|
+
assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
62
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
63
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
|
|
64
|
+
|
|
65
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
66
|
+
|
|
67
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
68
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
69
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|