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,58 @@
|
|
|
1
|
+
# This test verifies that expired cached facts are not used
|
|
2
|
+
test_name "C100037: ttls configured cached valued that are expired are not returned" do
|
|
3
|
+
tag 'risk:high'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
# This fact must be resolvable on ALL platforms
|
|
9
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
10
|
+
cached_factname = 'uptime'
|
|
11
|
+
|
|
12
|
+
config = <<EOM
|
|
13
|
+
facts : {
|
|
14
|
+
ttls : [
|
|
15
|
+
{ "#{cached_factname}" : 30 days }
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
EOM
|
|
19
|
+
|
|
20
|
+
cached_fact_value = "CACHED_FACT_VALUE"
|
|
21
|
+
cached_fact_content = <<EOM
|
|
22
|
+
{
|
|
23
|
+
"#{cached_factname}": "#{cached_fact_value}"
|
|
24
|
+
}
|
|
25
|
+
EOM
|
|
26
|
+
|
|
27
|
+
agents.each do |agent|
|
|
28
|
+
step "Agent #{agent}: create config file" do
|
|
29
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
30
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
31
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
32
|
+
|
|
33
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
34
|
+
|
|
35
|
+
# Setup facter conf
|
|
36
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
37
|
+
create_remote_file(agent, config_file, config)
|
|
38
|
+
|
|
39
|
+
teardown do
|
|
40
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
41
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
step "should not read from a cached JSON file for a fact that has been cached but the TTL expired" do
|
|
45
|
+
# Setup a known cached fact
|
|
46
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
47
|
+
on(agent, facter(""))
|
|
48
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
49
|
+
# Change the modified date to sometime in the far distant past
|
|
50
|
+
on(agent, "touch -mt 198001010000 '#{cached_fact_file}'")
|
|
51
|
+
|
|
52
|
+
on(agent, facter("#{cached_factname}")) do |facter_output|
|
|
53
|
+
assert_not_match(/#{cached_fact_value}/, facter_output.stdout, "Expected fact to not match the cached fact file")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_refresh_the_cached_value.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# This test verifies that cached facts that are expired are refreshed
|
|
2
|
+
test_name "C100040: ttls configured facts that are expired are refreshed" do
|
|
3
|
+
tag 'risk:high'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
# This fact must be resolvable on ALL platforms
|
|
9
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
10
|
+
cached_factname = 'uptime'
|
|
11
|
+
|
|
12
|
+
config = <<EOM
|
|
13
|
+
facts : {
|
|
14
|
+
ttls : [
|
|
15
|
+
{ "#{cached_factname}" : 30 days }
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
EOM
|
|
19
|
+
|
|
20
|
+
cached_fact_value = "EXPIRED_CACHED_FACT_VALUE"
|
|
21
|
+
cached_fact_content = <<EOM
|
|
22
|
+
{
|
|
23
|
+
"#{cached_factname}": "#{cached_fact_value}"
|
|
24
|
+
}
|
|
25
|
+
EOM
|
|
26
|
+
|
|
27
|
+
agents.each do |agent|
|
|
28
|
+
step "Agent #{agent}: create config file" do
|
|
29
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
30
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
31
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
32
|
+
|
|
33
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
34
|
+
|
|
35
|
+
# Setup facter conf
|
|
36
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
37
|
+
create_remote_file(agent, config_file, config)
|
|
38
|
+
|
|
39
|
+
teardown do
|
|
40
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
41
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
step "should refresh an expired cached fact" do
|
|
45
|
+
# Setup a known cached fact
|
|
46
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
47
|
+
on(agent, facter(""))
|
|
48
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
49
|
+
# Change the modified date to sometime in the far distant past
|
|
50
|
+
on(agent, "touch -mt 198001010000 '#{cached_fact_file}'")
|
|
51
|
+
# Force facter to recache
|
|
52
|
+
on(agent, facter("#{cached_factname}"))
|
|
53
|
+
|
|
54
|
+
# Read cached fact file content
|
|
55
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
56
|
+
assert_no_match(/#{cached_fact_value}/, cat_output.stdout, "Expected cached fact file to be refreshed")
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# This test verifies that cached facts are used while still valid
|
|
2
|
+
test_name "C100041: ttls configured cached facts are used while still valid" do
|
|
3
|
+
tag 'risk:high'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
# This fact must be resolvable on ALL platforms
|
|
9
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
10
|
+
cached_factname = 'uptime'
|
|
11
|
+
|
|
12
|
+
config = <<EOM
|
|
13
|
+
facts : {
|
|
14
|
+
ttls : [
|
|
15
|
+
{ "#{cached_factname}" : 30 days }
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
EOM
|
|
19
|
+
|
|
20
|
+
cached_fact_value = "CACHED_FACT_VALUE"
|
|
21
|
+
cached_fact_content = <<EOM
|
|
22
|
+
{
|
|
23
|
+
"#{cached_factname}": "#{cached_fact_value}"
|
|
24
|
+
}
|
|
25
|
+
EOM
|
|
26
|
+
|
|
27
|
+
agents.each do |agent|
|
|
28
|
+
step "Agent #{agent}: create config file" do
|
|
29
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
30
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
31
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
32
|
+
|
|
33
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
34
|
+
|
|
35
|
+
# Setup facter conf
|
|
36
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
37
|
+
create_remote_file(agent, config_file, config)
|
|
38
|
+
|
|
39
|
+
teardown do
|
|
40
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
41
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
45
|
+
# Setup a known cached fact
|
|
46
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
47
|
+
on(agent, facter(""))
|
|
48
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
49
|
+
|
|
50
|
+
on(agent, facter("#{cached_factname} --debug")) do
|
|
51
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
52
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# This test verifies that corrupt facts are refreshed with new values
|
|
2
|
+
test_name "C100042: ttls configured cached facts that are corrupt are refreshed with new values" do
|
|
3
|
+
tag 'risk:high'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
# This fact must be resolvable on ALL platforms
|
|
9
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
10
|
+
cached_factname = 'uptime'
|
|
11
|
+
|
|
12
|
+
config = <<EOM
|
|
13
|
+
facts : {
|
|
14
|
+
ttls : [
|
|
15
|
+
{ "#{cached_factname}" : 30 days }
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
EOM
|
|
19
|
+
|
|
20
|
+
agents.each do |agent|
|
|
21
|
+
step "Agent #{agent}: create config file" do
|
|
22
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
23
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
24
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
25
|
+
|
|
26
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
27
|
+
|
|
28
|
+
# Setup facter conf
|
|
29
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
30
|
+
create_remote_file(agent, config_file, config)
|
|
31
|
+
|
|
32
|
+
teardown do
|
|
33
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
34
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
step "should refresh a cached fact if cache file is corrupt" do
|
|
38
|
+
# Setup a known cached fact
|
|
39
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
40
|
+
on(agent, facter(""))
|
|
41
|
+
# Corrupt the cached fact file
|
|
42
|
+
create_remote_file(agent, cached_fact_file, 'ThisIsNotvalidJSON')
|
|
43
|
+
|
|
44
|
+
on(agent, facter("#{cached_factname}")) do
|
|
45
|
+
assert_match(/.+/, stdout, "Expected fact to be resolved")
|
|
46
|
+
end
|
|
47
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
48
|
+
assert_match(/#{cached_factname}/, cat_output.stdout, "Expected cachced fact to contain the fact name")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_empty_return_an_empty_value.rb
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# This test verifies that cached facts that are empty return an empty string
|
|
2
|
+
test_name "C100043: ttls configured cached facts that are empty, return an empty string" do
|
|
3
|
+
tag 'risk:high'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
# This fact must be resolvable on ALL platforms
|
|
9
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
10
|
+
cached_factname = 'uptime'
|
|
11
|
+
|
|
12
|
+
config = <<EOM
|
|
13
|
+
facts : {
|
|
14
|
+
ttls : [
|
|
15
|
+
{ "#{cached_factname}" : 30 days }
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
EOM
|
|
19
|
+
|
|
20
|
+
empty_cached_fact_content = <<EOM
|
|
21
|
+
{ }
|
|
22
|
+
EOM
|
|
23
|
+
|
|
24
|
+
agents.each do |agent|
|
|
25
|
+
step "Agent #{agent}: create config file" do
|
|
26
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
27
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
28
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
29
|
+
|
|
30
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
31
|
+
|
|
32
|
+
# Setup 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 '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
38
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
step "should return an empty string for an empty JSON document" do
|
|
42
|
+
# Setup a known cached fact
|
|
43
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
44
|
+
on(agent, facter(""))
|
|
45
|
+
create_remote_file(agent, cached_fact_file, empty_cached_fact_content)
|
|
46
|
+
|
|
47
|
+
on(agent, facter("#{cached_factname}")) do |facter_output|
|
|
48
|
+
assert_empty(facter_output.stdout.chomp, "Expected fact to be empty")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Verify that setting a ttls, creates a json file for the cached fact when run
|
|
2
|
+
# from puppet facts
|
|
3
|
+
test_name "C100038: with ttls configured create cached facts when run from puppet facts" 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
|
+
cached_factname = 'uptime'
|
|
12
|
+
config = <<EOM
|
|
13
|
+
facts : {
|
|
14
|
+
ttls : [
|
|
15
|
+
{ "#{cached_factname}" : 30 days }
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
EOM
|
|
19
|
+
|
|
20
|
+
agents.each do |agent|
|
|
21
|
+
step "Agent #{agent}: create config file" do
|
|
22
|
+
facter_conf_default_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
23
|
+
facter_conf_default_path = File.join(facter_conf_default_dir, "facter.conf")
|
|
24
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
25
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
26
|
+
|
|
27
|
+
on(agent, "mkdir -p '#{facter_conf_default_dir}'")
|
|
28
|
+
create_remote_file(agent, facter_conf_default_path, config)
|
|
29
|
+
|
|
30
|
+
teardown do
|
|
31
|
+
on(agent, "rm -rf '#{cached_facts_dir}' '#{facter_conf_default_dir}'", :acceptable_exit_codes => [0, 1])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
35
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
36
|
+
on(agent, puppet("facts --debug")) do |pupppet_fact_output|
|
|
37
|
+
assert_match(/caching values for .+ facts/, pupppet_fact_output.stdout, "Expected debug message to state that values will be cached")
|
|
38
|
+
end
|
|
39
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
40
|
+
assert_match(/#{cached_factname}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Verify that setting a ttls, puppet facts returns the cached value of the fact
|
|
2
|
+
test_name "C100039: ttls configured cached facts run from puppet facts return cached facts" do
|
|
3
|
+
tag 'risk:high'
|
|
4
|
+
|
|
5
|
+
require 'facter/acceptance/user_fact_utils'
|
|
6
|
+
extend Facter::Acceptance::UserFactUtils
|
|
7
|
+
|
|
8
|
+
# This fact must be resolvable on ALL platforms
|
|
9
|
+
# Do NOT use the 'kernel' fact as it is used to configure the tests
|
|
10
|
+
cached_factname = 'uptime'
|
|
11
|
+
config = <<EOM
|
|
12
|
+
facts : {
|
|
13
|
+
ttls : [
|
|
14
|
+
{ "#{cached_factname}" : 30 days }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
EOM
|
|
18
|
+
|
|
19
|
+
cached_value = "CACHED_FACT_VALUE"
|
|
20
|
+
cached_fact_content = <<EOM
|
|
21
|
+
{
|
|
22
|
+
"#{cached_factname}": "#{cached_value}"
|
|
23
|
+
}
|
|
24
|
+
EOM
|
|
25
|
+
|
|
26
|
+
agents.each do |agent|
|
|
27
|
+
step "Agent #{agent}: create config file" do
|
|
28
|
+
facter_conf_default_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
29
|
+
facter_conf_default_path = File.join(facter_conf_default_dir, "facter.conf")
|
|
30
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
31
|
+
cached_fact_file = File.join(cached_facts_dir, cached_factname)
|
|
32
|
+
|
|
33
|
+
on(agent, "mkdir -p '#{facter_conf_default_dir}'")
|
|
34
|
+
create_remote_file(agent, facter_conf_default_path, config)
|
|
35
|
+
|
|
36
|
+
teardown do
|
|
37
|
+
on(agent, "rm -rf '#{cached_facts_dir}' '#{facter_conf_default_dir}'", :acceptable_exit_codes => [0, 1])
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
41
|
+
step "call puppet facts to setup the cached fact" do
|
|
42
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
43
|
+
on(agent, puppet("facts"))
|
|
44
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
on(agent, puppet("facts --debug")) do |puppet_facts_output|
|
|
48
|
+
assert_match(/loading cached values for .+ facts/, puppet_facts_output.stdout, "Expected debug message to state that values are read from cache")
|
|
49
|
+
assert_match(/#{cached_value}/, puppet_facts_output.stdout, "Expected fact to match the cached fact file")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This test is intended to demonstrate that setting cli.verbose to true in the
|
|
2
|
+
# config file causes INFO level logging to output to stderr.
|
|
3
|
+
test_name "C99989: verbose config field prints verbose information to stderr" 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
|
+
verbose : 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(/INFO/, facter_output.stderr, "Expected stderr to contain verbose (INFO) statements")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This test checks that we can call facter with a --custom-dir and get a custom fact
|
|
2
|
+
# from that directory
|
|
3
|
+
test_name "C14905: custom fact command line option --custom-dir loads custom fact" 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
|
+
"single_fact"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
EOM
|
|
16
|
+
|
|
17
|
+
agents.each do |agent|
|
|
18
|
+
step "Agent #{agent}: create custom fact directory and a custom fact" 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
|
+
|
|
23
|
+
teardown do
|
|
24
|
+
on(agent, "rm -rf '#{custom_dir}'")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
step "Agent #{agent}: --custom-dir option should resolve custom facts from the specific directory" do
|
|
28
|
+
on(agent, facter("--custom-dir '#{custom_dir}' custom_fact")) do |facter_output|
|
|
29
|
+
assert_equal("single_fact", facter_output.stdout.chomp, "Incorrect custom fact value")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|