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,88 @@
|
|
|
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 yaml 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
|
+
#{cached_fact_name}: "#{initial_fact_value}"
|
|
25
|
+
EOF
|
|
26
|
+
EOM
|
|
27
|
+
else
|
|
28
|
+
external_fact_content = <<EOM
|
|
29
|
+
#!/bin/sh
|
|
30
|
+
cat << EOF
|
|
31
|
+
#{cached_fact_name}: "#{initial_fact_value}"
|
|
32
|
+
EOF
|
|
33
|
+
EOM
|
|
34
|
+
end
|
|
35
|
+
create_remote_file(agent, external_fact, external_fact_content)
|
|
36
|
+
on(agent, "chmod +x '#{external_fact}'")
|
|
37
|
+
|
|
38
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
39
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
40
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
41
|
+
|
|
42
|
+
cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
|
|
43
|
+
|
|
44
|
+
# Setup facter conf
|
|
45
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
46
|
+
cached_fact_content = <<EOM
|
|
47
|
+
{
|
|
48
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
49
|
+
}
|
|
50
|
+
EOM
|
|
51
|
+
|
|
52
|
+
config = <<EOM
|
|
53
|
+
facts : {
|
|
54
|
+
ttls : [
|
|
55
|
+
{ "#{external_cachegroup}#{ext}" : 30 days }
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
EOM
|
|
59
|
+
create_remote_file(agent, config_file, config)
|
|
60
|
+
|
|
61
|
+
teardown do
|
|
62
|
+
on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
66
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
67
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
68
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
69
|
+
end
|
|
70
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
71
|
+
assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
76
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
77
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
|
|
78
|
+
|
|
79
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
80
|
+
|
|
81
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
82
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
83
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
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 json resolver 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 = 'initial_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 = '.json'
|
|
20
|
+
external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
|
|
21
|
+
|
|
22
|
+
external_fact_content = <<EOM
|
|
23
|
+
{
|
|
24
|
+
"#{cached_fact_name}": "#{initial_fact_value}"
|
|
25
|
+
}
|
|
26
|
+
EOM
|
|
27
|
+
create_remote_file(agent, external_fact, external_fact_content)
|
|
28
|
+
|
|
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, "#{external_cachegroup}#{ext}")
|
|
34
|
+
|
|
35
|
+
# Setup facter conf
|
|
36
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
37
|
+
cached_fact_content = <<EOM
|
|
38
|
+
{
|
|
39
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
40
|
+
}
|
|
41
|
+
EOM
|
|
42
|
+
|
|
43
|
+
config = <<EOM
|
|
44
|
+
facts : {
|
|
45
|
+
ttls : [
|
|
46
|
+
{ "#{external_cachegroup}#{ext}" : 30 days }
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
EOM
|
|
50
|
+
create_remote_file(agent, config_file, config)
|
|
51
|
+
|
|
52
|
+
teardown do
|
|
53
|
+
on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
57
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
58
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
59
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
60
|
+
end
|
|
61
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
62
|
+
assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
67
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
68
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
|
|
69
|
+
|
|
70
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
71
|
+
|
|
72
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
73
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
74
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
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 text resolver 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 = 'initial_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 = '.txt'
|
|
20
|
+
external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
|
|
21
|
+
|
|
22
|
+
external_fact_content = <<EOM
|
|
23
|
+
#{cached_fact_name}=#{initial_fact_value}
|
|
24
|
+
EOM
|
|
25
|
+
|
|
26
|
+
create_remote_file(agent, external_fact, external_fact_content)
|
|
27
|
+
|
|
28
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
29
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
30
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
31
|
+
|
|
32
|
+
cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
|
|
33
|
+
|
|
34
|
+
# Setup facter conf
|
|
35
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
36
|
+
cached_fact_content = <<EOM
|
|
37
|
+
{
|
|
38
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
39
|
+
}
|
|
40
|
+
EOM
|
|
41
|
+
|
|
42
|
+
config = <<EOM
|
|
43
|
+
facts : {
|
|
44
|
+
ttls : [
|
|
45
|
+
{ "#{external_cachegroup}#{ext}" : 30 days }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
EOM
|
|
49
|
+
create_remote_file(agent, config_file, config)
|
|
50
|
+
|
|
51
|
+
teardown do
|
|
52
|
+
on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
56
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
57
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
58
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
59
|
+
end
|
|
60
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
61
|
+
assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
66
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
67
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
|
|
68
|
+
|
|
69
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
70
|
+
|
|
71
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
72
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
73
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
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 yaml resolver 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 = 'initial_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 = '.yaml'
|
|
20
|
+
external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
|
|
21
|
+
|
|
22
|
+
external_fact_content = <<EOM
|
|
23
|
+
#{cached_fact_name}: "#{initial_fact_value}"
|
|
24
|
+
EOM
|
|
25
|
+
|
|
26
|
+
create_remote_file(agent, external_fact, external_fact_content)
|
|
27
|
+
|
|
28
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
29
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
30
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
31
|
+
|
|
32
|
+
cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
|
|
33
|
+
|
|
34
|
+
# Setup facter conf
|
|
35
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
36
|
+
cached_fact_content = <<EOM
|
|
37
|
+
{
|
|
38
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
39
|
+
}
|
|
40
|
+
EOM
|
|
41
|
+
|
|
42
|
+
config = <<EOM
|
|
43
|
+
facts : {
|
|
44
|
+
ttls : [
|
|
45
|
+
{ "#{external_cachegroup}#{ext}" : 30 days }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
EOM
|
|
49
|
+
create_remote_file(agent, config_file, config)
|
|
50
|
+
|
|
51
|
+
teardown do
|
|
52
|
+
on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
step "should create a JSON file for a fact that is to be cached" do
|
|
56
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
57
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
58
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
59
|
+
end
|
|
60
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
61
|
+
assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
step "should read from a cached JSON file for a fact that has been cached" do
|
|
66
|
+
on(agent, "rm -rf '#{cached_facts_dir}'")
|
|
67
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
|
|
68
|
+
|
|
69
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
70
|
+
|
|
71
|
+
on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
|
|
72
|
+
assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
|
|
73
|
+
assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# This test is intended to verify that when the ttls list in the config file is empty
|
|
2
|
+
# that the existing cached facts are removed
|
|
3
|
+
test_name "C100125: ttls config that is empty causes facter to remove existing cached facts" do
|
|
4
|
+
tag 'risk:high'
|
|
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_fact_name = 'uptime'
|
|
12
|
+
cached_fact_value = "CACHED_FACT_VALUE"
|
|
13
|
+
cached_fact_content = <<EOM
|
|
14
|
+
{
|
|
15
|
+
"#{cached_fact_name}": "#{cached_fact_value}"
|
|
16
|
+
}
|
|
17
|
+
EOM
|
|
18
|
+
|
|
19
|
+
config = <<EOM
|
|
20
|
+
facts : {
|
|
21
|
+
ttls : [
|
|
22
|
+
{ "#{cached_fact_name}" : 30 days }
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
EOM
|
|
26
|
+
|
|
27
|
+
config_no_cache = <<EOM
|
|
28
|
+
facts : {
|
|
29
|
+
ttls : [ ]
|
|
30
|
+
}
|
|
31
|
+
EOM
|
|
32
|
+
|
|
33
|
+
agents.each do |agent|
|
|
34
|
+
step "Agent #{agent}: create config file" do
|
|
35
|
+
config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
36
|
+
config_file = File.join(config_dir, "facter.conf")
|
|
37
|
+
cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
|
|
38
|
+
|
|
39
|
+
cached_fact_file = File.join(cached_facts_dir, cached_fact_name)
|
|
40
|
+
|
|
41
|
+
# Setup facter conf
|
|
42
|
+
on(agent, "mkdir -p '#{config_dir}'")
|
|
43
|
+
create_remote_file(agent, config_file, config)
|
|
44
|
+
|
|
45
|
+
teardown do
|
|
46
|
+
on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
|
|
47
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
step "Agent #{agent}: create config file with no cached facts" do
|
|
51
|
+
# Set up a known cached fact
|
|
52
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
53
|
+
on(agent, facter(""))
|
|
54
|
+
create_remote_file(agent, cached_fact_file, cached_fact_content)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
step "Agent #{agent}: clean out unused cache files on each facter run" do
|
|
58
|
+
# Create config file with no caching
|
|
59
|
+
no_cache_config_file = File.join(config_dir, "no-cache.conf")
|
|
60
|
+
create_remote_file(agent, no_cache_config_file, config_no_cache)
|
|
61
|
+
|
|
62
|
+
on(agent, facter("--config '#{no_cache_config_file}'")) do |facter_output|
|
|
63
|
+
assert_no_match(/#{cached_fact_value}/, facter_output.stdout, "Expected to not see the cached fact value")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Expect cache file to not exist
|
|
67
|
+
refute(agent.file_exist?("#{cached_fact_file}"), "Expected cache file to be absent")
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# This test verifies that a ttls configured cached facts when initially called
|
|
2
|
+
# create a json cache file
|
|
3
|
+
test_name "C99973: ttls configured cached facts create 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
|
+
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
|
+
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 create a JSON file for a fact that is to be cached" do
|
|
38
|
+
on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
|
|
39
|
+
on(agent, facter("--debug")) do |facter_output|
|
|
40
|
+
assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
|
|
41
|
+
end
|
|
42
|
+
on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
|
|
43
|
+
assert_match(/#{cached_factname}/, cat_output.stdout, "Expected cached fact file to contain fact information")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|