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.
Files changed (206) hide show
  1. checksums.yaml +4 -4
  2. data/.github/actions/presuite.rb +1 -12
  3. data/.github/workflows/acceptance_tests.yml +4 -4
  4. data/.github/workflows/checks.yaml +9 -3
  5. data/.github/workflows/coverage.yaml +1 -1
  6. data/.github/workflows/unit_tests.yaml +2 -2
  7. data/.rubocop.yml +5 -0
  8. data/.rubocop_todo.yml +6 -4
  9. data/CHANGELOG.md +22 -0
  10. data/Rakefile +2 -1
  11. data/VERSION +1 -1
  12. data/acceptance/.beaker.yml +15 -0
  13. data/acceptance/.gitignore +12 -0
  14. data/acceptance/Gemfile +24 -0
  15. data/acceptance/Rakefile +2 -0
  16. data/acceptance/bin/ci-bootstrap-from-artifacts.sh +55 -0
  17. data/acceptance/config/aio/options.rb +6 -0
  18. data/acceptance/config/git/options.rb +3 -0
  19. data/acceptance/config/nodes/aix-53-power.yaml +7 -0
  20. data/acceptance/config/nodes/aix-61-power.yaml +7 -0
  21. data/acceptance/config/nodes/aix-71-power.yaml +7 -0
  22. data/acceptance/config/nodes/huaweios-6-powerpc.yaml +7 -0
  23. data/acceptance/config/nodes/solaris-10-sparc.yaml +9 -0
  24. data/acceptance/config/nodes/solaris-11-sparc.yaml +9 -0
  25. data/acceptance/lib/facter/acceptance/base_fact_utils.rb +565 -0
  26. data/acceptance/lib/facter/acceptance/user_fact_utils.rb +132 -0
  27. data/acceptance/lib/helper.rb +3 -0
  28. data/acceptance/lib/puppet/acceptance/common_utils.rb +10 -0
  29. data/acceptance/lib/puppet/acceptance/git_utils.rb +19 -0
  30. data/acceptance/lib/puppet/acceptance/install_utils.rb +58 -0
  31. data/acceptance/setup/aio/pre-suite/001_run_with_facter_ng.rb +75 -0
  32. data/acceptance/tests/custom_facts/cached_custom_fact.rb +82 -0
  33. data/acceptance/tests/custom_facts/conflicts_with_builtin_fact.rb +106 -0
  34. data/acceptance/tests/custom_facts/custom_fact_with_10001_weight_overrides_external_fact.rb +30 -0
  35. data/acceptance/tests/custom_facts/expand_command.rb +30 -0
  36. data/acceptance/tests/custom_facts/having_multiple_facts_in_one_file.rb +40 -0
  37. data/acceptance/tests/custom_facts/not_expand_command.rb +30 -0
  38. data/acceptance/tests/custom_facts/using_win32ole_should_not_hang.rb +33 -0
  39. data/acceptance/tests/custom_facts/weighted_cached_custom_facts.rb +94 -0
  40. data/acceptance/tests/custom_facts/windows_not_expand_command.rb +30 -0
  41. data/acceptance/tests/external_facts/env_var_overrides_external_fact.rb +46 -0
  42. data/acceptance/tests/external_facts/external_dir_overrides_default_external_fact.rb +34 -0
  43. data/acceptance/tests/external_facts/external_fact_overrides_custom_fact.rb +29 -0
  44. data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_10000_weight_or_less.rb +30 -0
  45. data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_confine.rb +35 -0
  46. data/acceptance/tests/external_facts/external_fact_stderr_messages_output_to_stderr.rb +49 -0
  47. data/acceptance/tests/external_facts/external_facts_only_run_once.rb +43 -0
  48. data/acceptance/tests/external_facts/fact_directory_precedence.rb +109 -0
  49. data/acceptance/tests/external_facts/handle_same_filename_in_different_dirs.rb +59 -0
  50. data/acceptance/tests/external_facts/non_root_users_default_external_fact_directory.rb +142 -0
  51. data/acceptance/tests/external_facts/root_uses_default_external_fact_dir.rb +34 -0
  52. data/acceptance/tests/external_facts/structured_executable_facts.rb +139 -0
  53. data/acceptance/tests/facter_returns_success_on_non_existent_fact.rb +9 -0
  54. data/acceptance/tests/facts/dmi.rb +51 -0
  55. data/acceptance/tests/facts/facterversion.rb +11 -0
  56. data/acceptance/tests/facts/identity.rb +52 -0
  57. data/acceptance/tests/facts/mountpoints_fact.rb +12 -0
  58. data/acceptance/tests/facts/networking_facts.rb +93 -0
  59. data/acceptance/tests/facts/nim_type.rb +12 -0
  60. data/acceptance/tests/facts/non_root_users_without_errors.rb +32 -0
  61. data/acceptance/tests/facts/operatingsystem_detection_after_clear_on_ubuntu.rb +26 -0
  62. data/acceptance/tests/facts/os_processors_and_kernel.rb +20 -0
  63. data/acceptance/tests/facts/osx_numeric_hostname.rb +23 -0
  64. data/acceptance/tests/facts/partitions.rb +37 -0
  65. data/acceptance/tests/facts/productname.rb +15 -0
  66. data/acceptance/tests/facts/ruby.rb +59 -0
  67. data/acceptance/tests/facts/ssh_key.rb +59 -0
  68. data/acceptance/tests/facts/validate_file_system_size_bytes.rb +37 -0
  69. data/acceptance/tests/facts/verify_tmpfs_file_system.rb +54 -0
  70. data/acceptance/tests/facts/windows_os.rb +64 -0
  71. data/acceptance/tests/load_libfacter.rb +66 -0
  72. data/acceptance/tests/no_errors_on_stderr.rb +10 -0
  73. data/acceptance/tests/options/color.rb +16 -0
  74. data/acceptance/tests/options/config.rb +27 -0
  75. data/acceptance/tests/options/config_file/blocklist.rb +35 -0
  76. data/acceptance/tests/options/config_file/blocklist_from_puppet_facts.rb +40 -0
  77. data/acceptance/tests/options/config_file/custom_dir_overridden_by_cli_custom_dir.rb +56 -0
  78. data/acceptance/tests/options/config_file/custom_facts.rb +42 -0
  79. data/acceptance/tests/options/config_file/custom_facts_list.rb +56 -0
  80. data/acceptance/tests/options/config_file/debug.rb +34 -0
  81. data/acceptance/tests/options/config_file/debug_override_config_file.rb +34 -0
  82. data/acceptance/tests/options/config_file/default_file_location.rb +37 -0
  83. data/acceptance/tests/options/config_file/external_dir_conflicts_with_cli_no_external_facts.rb +37 -0
  84. data/acceptance/tests/options/config_file/external_dir_overridden_by_cli_external_dir.rb +40 -0
  85. data/acceptance/tests/options/config_file/external_facts.rb +37 -0
  86. data/acceptance/tests/options/config_file/external_facts_list.rb +43 -0
  87. data/acceptance/tests/options/config_file/load_from_ruby.rb +73 -0
  88. data/acceptance/tests/options/config_file/log_level.rb +35 -0
  89. data/acceptance/tests/options/config_file/no_custom_facts_and_custom_dir.rb +43 -0
  90. data/acceptance/tests/options/config_file/no_custom_facts_and_facterlib.rb +43 -0
  91. data/acceptance/tests/options/config_file/no_custom_facts_and_load_path.rb +49 -0
  92. data/acceptance/tests/options/config_file/no_external_facts.rb +38 -0
  93. data/acceptance/tests/options/config_file/no_external_facts_and_external_dir.rb +34 -0
  94. data/acceptance/tests/options/config_file/no_ruby_disables_custom_facts.rb +52 -0
  95. data/acceptance/tests/options/config_file/no_ruby_disables_ruby_facts.rb +34 -0
  96. data/acceptance/tests/options/config_file/trace.rb +48 -0
  97. data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_json_output.rb +92 -0
  98. data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_text_output.rb +74 -0
  99. data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_yaml_output.rb +88 -0
  100. data/acceptance/tests/options/config_file/ttls_cached_external_json_resolver.rb +79 -0
  101. data/acceptance/tests/options/config_file/ttls_cached_external_text_resolver.rb +78 -0
  102. data/acceptance/tests/options/config_file/ttls_cached_external_yaml_resolver.rb +78 -0
  103. data/acceptance/tests/options/config_file/ttls_cached_facts_clear_by_empty_ttls_cache_list.rb +71 -0
  104. data/acceptance/tests/options/config_file/ttls_cached_facts_creates_json_cache_file.rb +48 -0
  105. data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_do_not_read_the_old_cached_value.rb +58 -0
  106. data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_refresh_the_cached_value.rb +61 -0
  107. data/acceptance/tests/options/config_file/ttls_cached_facts_read_from_the_cached_value.rb +57 -0
  108. data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_corrupt_are_refreshed.rb +53 -0
  109. data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_empty_return_an_empty_value.rb +53 -0
  110. data/acceptance/tests/options/config_file/ttls_puppet_facts_creates_json_for_cached_facts.rb +45 -0
  111. data/acceptance/tests/options/config_file/ttls_puppet_facts_honors_cached_facts.rb +54 -0
  112. data/acceptance/tests/options/config_file/verbose.rb +34 -0
  113. data/acceptance/tests/options/custom_facts.rb +34 -0
  114. data/acceptance/tests/options/custom_facts_facterlib.rb +33 -0
  115. data/acceptance/tests/options/custom_facts_list.rb +48 -0
  116. data/acceptance/tests/options/custom_facts_load_path.rb +42 -0
  117. data/acceptance/tests/options/debug.rb +12 -0
  118. data/acceptance/tests/options/external_facts.rb +28 -0
  119. data/acceptance/tests/options/external_facts_list.rb +35 -0
  120. data/acceptance/tests/options/help.rb +13 -0
  121. data/acceptance/tests/options/json.rb +43 -0
  122. data/acceptance/tests/options/list_block_groups.rb +15 -0
  123. data/acceptance/tests/options/list_block_groups_facter_4.rb +15 -0
  124. data/acceptance/tests/options/list_cache_groups.rb +65 -0
  125. data/acceptance/tests/options/log_level.rb +13 -0
  126. data/acceptance/tests/options/no_block.rb +34 -0
  127. data/acceptance/tests/options/no_cache_should_not_cache_facts.rb +43 -0
  128. data/acceptance/tests/options/no_cache_should_not_load_cached_facts.rb +58 -0
  129. data/acceptance/tests/options/no_cache_should_not_refresh_cached_facts.rb +63 -0
  130. data/acceptance/tests/options/no_color.rb +16 -0
  131. data/acceptance/tests/options/no_custom_facts.rb +34 -0
  132. data/acceptance/tests/options/no_custom_facts_and_custom_dir.rb +19 -0
  133. data/acceptance/tests/options/no_custom_facts_and_facterlib.rb +34 -0
  134. data/acceptance/tests/options/no_custom_facts_and_load_path.rb +43 -0
  135. data/acceptance/tests/options/no_external_facts.rb +28 -0
  136. data/acceptance/tests/options/no_external_facts_and_external_dir.rb +19 -0
  137. data/acceptance/tests/options/no_ruby.rb +44 -0
  138. data/acceptance/tests/options/puppet_facts.rb +37 -0
  139. data/acceptance/tests/options/show_legacy.rb +18 -0
  140. data/acceptance/tests/options/strict.rb +11 -0
  141. data/acceptance/tests/options/trace.rb +36 -0
  142. data/acceptance/tests/options/verbose.rb +12 -0
  143. data/acceptance/tests/options/version.rb +12 -0
  144. data/acceptance/tests/options/yaml.rb +43 -0
  145. data/acceptance/tests/ticket_1123_facter_with_invalid_locale.rb +23 -0
  146. data/acceptance/tests/ticket_1238_hostname_fqdn.rb +57 -0
  147. data/lib/custom_facts/core/execution/base.rb +18 -18
  148. data/lib/custom_facts/util/collection.rb +2 -7
  149. data/lib/custom_facts/util/config.rb +1 -1
  150. data/lib/custom_facts/util/directory_loader.rb +51 -24
  151. data/lib/custom_facts/util/fact.rb +10 -1
  152. data/lib/custom_facts/util/resolution.rb +1 -1
  153. data/lib/facts/aix/aio_agent_version.rb +14 -0
  154. data/lib/facts/bsd/processors/count.rb +17 -0
  155. data/lib/facts/bsd/processors/models.rb +23 -0
  156. data/lib/facts/bsd/processors/speed.rb +17 -0
  157. data/lib/facts/freebsd/disks.rb +15 -0
  158. data/lib/facts/freebsd/partitions.rb +15 -0
  159. data/lib/facts/freebsd/processors/count.rb +17 -0
  160. data/lib/facts/freebsd/processors/models.rb +23 -0
  161. data/lib/facts/freebsd/processors/speed.rb +17 -0
  162. data/lib/facts/linux/aio_agent_version.rb +14 -0
  163. data/lib/facts/linux/ec2_metadata.rb +47 -0
  164. data/lib/facts/linux/ec2_userdata.rb +47 -0
  165. data/lib/facts/linux/is_virtual.rb +2 -5
  166. data/lib/facts/linux/virtual.rb +1 -5
  167. data/lib/facts/macosx/aio_agent_version.rb +14 -0
  168. data/lib/facts/macosx/interfaces.rb +2 -2
  169. data/lib/facts/macosx/networking/dhcp.rb +17 -0
  170. data/lib/facts/macosx/networking/interfaces.rb +21 -0
  171. data/lib/facts/macosx/networking/ip.rb +4 -1
  172. data/lib/facts/macosx/networking/ip6.rb +21 -0
  173. data/lib/facts/macosx/networking/mac.rb +4 -1
  174. data/lib/facts/macosx/networking/mtu.rb +20 -0
  175. data/lib/facts/macosx/networking/netmask.rb +21 -0
  176. data/lib/facts/macosx/networking/netmask6.rb +21 -0
  177. data/lib/facts/macosx/networking/network.rb +21 -0
  178. data/lib/facts/macosx/networking/network6.rb +21 -0
  179. data/lib/facts/macosx/networking/primary.rb +17 -0
  180. data/lib/facts/macosx/networking/scope6.rb +20 -0
  181. data/lib/facts/solaris/aio_agent_version.rb +14 -0
  182. data/lib/facts/windows/aio_agent_version.rb +14 -0
  183. data/lib/facts/windows/ec2_metadata.rb +23 -0
  184. data/lib/facts/windows/ec2_userdata.rb +23 -0
  185. data/lib/facts_utils/hypervisors.rb +10 -0
  186. data/lib/framework/core/cache_manager.rb +42 -18
  187. data/lib/framework/core/fact/external/external_fact_manager.rb +3 -2
  188. data/lib/framework/core/fact_loaders/external_fact_loader.rb +3 -2
  189. data/lib/framework/formatters/legacy_fact_formatter.rb +6 -5
  190. data/lib/framework/parsers/query_parser.rb +14 -2
  191. data/lib/models/loaded_fact.rb +3 -1
  192. data/lib/models/resolved_fact.rb +1 -1
  193. data/lib/models/searched_fact.rb +1 -0
  194. data/lib/resolvers/{agent_resolver.rb → aio_agent_version.rb} +4 -3
  195. data/lib/resolvers/bsd/ffi/ffi_helper.rb +31 -0
  196. data/lib/resolvers/bsd/processors.rb +47 -0
  197. data/lib/resolvers/ec2.rb +77 -0
  198. data/lib/resolvers/freebsd/ffi/ffi_helper.rb +42 -0
  199. data/lib/resolvers/freebsd/geom_resolver.rb +109 -0
  200. data/lib/resolvers/freebsd/processors.rb +44 -0
  201. data/lib/resolvers/macosx/networking.rb +110 -0
  202. data/lib/resolvers/networking_linux_resolver.rb +8 -30
  203. data/lib/resolvers/utils/networking.rb +70 -0
  204. data/lib/resolvers/windows/aio_agent_version.rb +56 -0
  205. metadata +175 -5
  206. data/lib/resolvers/macosx/ipaddress_resolver.rb +0 -52
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d90029b76954a57efa0f989018162ae7f86e26d9b111db2167086de82ef55f57
4
- data.tar.gz: 65abc86b8335b04f49e533286313e86602050b097140b8462c911cb6cf44b139
3
+ metadata.gz: 2e1b413834535a34f7dac34136145899d86ad7b19365d96ffe123b2011bed6fc
4
+ data.tar.gz: 1fd66831beb687d29381fc4fd49fecd414f178e5ef4e758918033034fc6faec3
5
5
  SHA512:
6
- metadata.gz: d94ca6623630e5889c10472cdfd083c3b34ba6f200c8e3ddf1bcdbe16f00a59a674b350e5c2bf0e7f99dd0339a26899bd5a7525096a2b1e36a341e9b2adac116
7
- data.tar.gz: c0909ade0eab953884e87e4fe731453c1ef60e1fea653ed7d65c4d0891cdc8f75d21221a07e4a68389e1c0f280ecb18975455e1802d1864135c1115c4fc44eed
6
+ metadata.gz: 0d0607ee1bbfcbc7c3de2b30d73cfd457a553dad1dbdec7a8febd39738db9b17f7913db973fd1d23ec8a579625128bcf2e987b0fd682c6cd1a2fcd33a475b2d4
7
+ data.tar.gz: c3269d4ea6b70bc43bee5551d704d13252daa535944332e1ba5d8616921f8b4290579f5a630a6945469db1fef8446e322f772f58552a36349411ba90af85d73e
@@ -10,17 +10,6 @@ def install_facter_3_dependencies
10
10
  run('bundle install')
11
11
  end
12
12
 
13
- def use_custom_beaker
14
- message('USE CUSTOM BEAKER')
15
- beaker_path, _ = run('bundle info beaker --path', FACTER_3_ACCEPTANCE_PATH)
16
- Dir.chdir(beaker_path.split("\n").last) do
17
- run('git init')
18
- run("git remote add origin https://github.com/Filipovici-Andrei/beaker.git")
19
- run('git fetch')
20
- run("git reset --hard origin/github_actions")
21
- end
22
- end
23
-
24
13
  def initialize_beaker
25
14
  beaker_platform_with_options = platform_with_options(beaker_platform)
26
15
 
@@ -35,6 +24,7 @@ def beaker_platform
35
24
  {
36
25
  'ubuntu-18.04' => 'ubuntu1804-64a',
37
26
  'ubuntu-16.04' => 'ubuntu1604-64a',
27
+ 'ubuntu-20.04' => 'ubuntu2004-64a',
38
28
  'macos-10.15' => 'osx1015-64a',
39
29
  'windows-2016' => 'windows2016-64a',
40
30
  'windows-2019' => 'windows2019-64a'
@@ -135,7 +125,6 @@ HOST_PLATFORM = ARGV[0]
135
125
  install_bundler
136
126
 
137
127
  Dir.chdir(FACTER_3_ACCEPTANCE_PATH) { install_facter_3_dependencies }
138
- use_custom_beaker
139
128
 
140
129
  Dir.chdir(FACTER_3_ACCEPTANCE_PATH) do
141
130
  initialize_beaker
@@ -4,17 +4,17 @@ name: Acceptance tests
4
4
  on:
5
5
  push:
6
6
  branches:
7
- - master
7
+ - 4.x
8
8
  pull_request:
9
9
  branches:
10
- - master
10
+ - 4.x
11
11
 
12
12
  jobs:
13
13
  acceptance_tests:
14
14
  name: Platform
15
15
  strategy:
16
16
  matrix:
17
- os: [windows-2016, windows-2019, ubuntu-16.04, ubuntu-18.04, macos-10.15]
17
+ os: [windows-2016, windows-2019, ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15]
18
18
  runs-on: ${{ matrix.os }}
19
19
  env:
20
20
  FACTER_3_ROOT: facter_3
@@ -31,7 +31,7 @@ jobs:
31
31
  uses: actions/checkout@v2
32
32
  with:
33
33
  repository: puppetlabs/facter
34
- ref: windows_github
34
+ ref: github_acceptance_tests
35
35
  path: facter_3
36
36
 
37
37
  - name: Install Ruby 2.6
@@ -4,10 +4,10 @@ name: Checks
4
4
  on:
5
5
  push:
6
6
  branches:
7
- - master
7
+ - 4.x
8
8
  pull_request:
9
9
  branches:
10
- - master
10
+ - 4.x
11
11
 
12
12
  jobs:
13
13
  rubocop_checks:
@@ -29,7 +29,13 @@ jobs:
29
29
  name: RuboCop TODO
30
30
  steps:
31
31
  - uses: actions/checkout@v1
32
- - uses: gimmyxd/rtc-action@0.0.5
32
+ - uses: gimmyxd/rtc-action@0.2.1
33
+ env:
34
+ RTC_TOKEN: ${{ secrets.RTC_TOKEN }}
35
+ UPDATE_PR: false
36
+
37
+ # forces the job to fail if there are any new offences
38
+ FORCE_ERROR_EXIT: true
33
39
 
34
40
  commit_checks:
35
41
  runs-on: ubuntu-18.04
@@ -4,7 +4,7 @@ name: Coverage
4
4
  on:
5
5
  push:
6
6
  branches:
7
- - master
7
+ - 4.x
8
8
 
9
9
  jobs:
10
10
  coverage_checks:
@@ -4,10 +4,10 @@ name: Unit tests
4
4
  on:
5
5
  push:
6
6
  branches:
7
- - master
7
+ - 4.x
8
8
  pull_request:
9
9
  branches:
10
- - master
10
+ - 4.x
11
11
 
12
12
  jobs:
13
13
  linux_unit_tests:
@@ -3,6 +3,8 @@ inherit_from: .rubocop_todo.yml
3
3
 
4
4
  AllCops:
5
5
  TargetRubyVersion: 2.3
6
+ Exclude:
7
+ - acceptance/**/*
6
8
 
7
9
  require:
8
10
  - rubocop-performance
@@ -29,6 +31,7 @@ Metrics/MethodLength:
29
31
  - 'lib/custom_facts/core/execution/windows.rb'
30
32
  - 'lib/custom_facts/core/execution/base.rb'
31
33
  - 'lib/framework/detector/os_detector.rb'
34
+ - 'lib/resolvers/bsd/ffi/ffi_helper.rb'
32
35
 
33
36
  Metrics/ModuleLength:
34
37
  Max: 100
@@ -56,6 +59,7 @@ Metrics/AbcSize:
56
59
  - 'lib/custom_facts/core/execution/windows.rb'
57
60
  - 'lib/custom_facts/core/execution/base.rb'
58
61
  - 'lib/custom_facts/core/resolvable.rb'
62
+ - 'lib/resolvers/bsd/ffi/ffi_helper.rb'
59
63
 
60
64
  Metrics/PerceivedComplexity:
61
65
  Exclude:
@@ -80,6 +84,7 @@ Metrics/ClassLength:
80
84
  - 'lib/framework/core/options/option_store.rb'
81
85
  - 'lib/framework/cli/cli.rb'
82
86
  - 'lib/resolvers/networking_linux_resolver.rb'
87
+ - 'lib/framework/core/cache_manager.rb'
83
88
 
84
89
  Naming/AccessorMethodName:
85
90
  Exclude:
@@ -1,12 +1,12 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --exclude-limit 1000`
3
- # on 2020-05-11 09:20:37 +0300 using RuboCop version 0.74.0.
3
+ # on 2020-06-11 15:48:25 +0300 using RuboCop version 0.81.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 81
9
+ # Offense count: 82
10
10
  # Configuration parameters: CustomTransform, IgnoreMethods.
11
11
  RSpec/FilePath:
12
12
  Exclude:
@@ -41,6 +41,7 @@ RSpec/FilePath:
41
41
  - 'spec/facter/resolvers/dmi_resolver_spec.rb'
42
42
  - 'spec/facter/resolvers/filesystems_resolver_spec.rb'
43
43
  - 'spec/facter/resolvers/fips_enabled_resolver_spec.rb'
44
+ - 'spec/facter/resolvers/freebsd/ffi_helper_spec.rb'
44
45
  - 'spec/facter/resolvers/identity_resolver_spec.rb'
45
46
  - 'spec/facter/resolvers/load_averages_resolver_spec.rb'
46
47
  - 'spec/facter/resolvers/macosx/dmi_resolver_spec.rb'
@@ -110,7 +111,7 @@ RSpec/LeakyConstantDeclaration:
110
111
  - 'spec/facter/resolvers/macosx/mountpoints_resolver_spec.rb'
111
112
  - 'spec/facter/resolvers/utils/windows/network_utils_spec.rb'
112
113
 
113
- # Offense count: 99
114
+ # Offense count: 96
114
115
  # Configuration parameters: EnforcedStyle.
115
116
  # SupportedStyles: have_received, receive
116
117
  RSpec/MessageSpies:
@@ -177,7 +178,7 @@ RSpec/SubjectStub:
177
178
  - 'spec/custom_facts/util/fact_spec.rb'
178
179
  - 'spec/custom_facts/util/resolution_spec.rb'
179
180
 
180
- # Offense count: 131
181
+ # Offense count: 134
181
182
  # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
182
183
  RSpec/VerifiedDoubles:
183
184
  Exclude:
@@ -211,6 +212,7 @@ RSpec/VerifiedDoubles:
211
212
  - 'spec/facter/resolvers/aix/ffi_helper_spec.rb'
212
213
  - 'spec/facter/resolvers/aix/hardware_resolver_spec.rb'
213
214
  - 'spec/facter/resolvers/bsd/ffi_helper_spec.rb'
215
+ - 'spec/facter/resolvers/freebsd/ffi_helper_spec.rb'
214
216
  - 'spec/facter/resolvers/macosx/mountpoints_resolver_spec.rb'
215
217
  - 'spec/facter/resolvers/mountpoints_resolver_spec.rb'
216
218
  - 'spec/facter/resolvers/utils/windows/network_utils_spec.rb'
@@ -1,4 +1,26 @@
1
+ ## [4.0.28](https://github.com/puppetlabs/facter/tree/4.0.28) (2020-06-25)
1
2
 
3
+ [Full Changelog](https://github.com/puppetlabs/facter/compare/4.0.27...4.0.28)
4
+
5
+ ### Fixed
6
+ - \(maint\) Fix aio_agent_version on non AIO node [\#1938](https://github.com/puppetlabs/facter/pull/1938) ([smortex](https://github.com/smortex))
7
+
8
+ ## [4.0.27](https://github.com/puppetlabs/facter/tree/4.0.27) (2020-06-24)
9
+
10
+ [Full Changelog](https://github.com/puppetlabs/facter/compare/4.0.26...4.0.27)
11
+
12
+ ### Added
13
+ - \(FACT-2212\) Networking facts for OSX [\#1929](https://github.com/puppetlabs/facter/pull/1929) ([Filipovici-Andrei](https://github.com/Filipovici-Andrei))
14
+ - \(maint\) Add FreeBSD disks and partitions facts [\#553](https://github.com/puppetlabs/facter-ng/pull/553) ([smortex](https://github.com/smortex))
15
+ - \(FACT-2638\) Use puppet AIO VERSION file to specify AIO version [\#549](https://github.com/puppetlabs/facter-ng/pull/549) ([IrimieBogdan](https://github.com/IrimieBogdan))
16
+ - \(FACT-2654\) Add ec2 facts for Windows [\#546](https://github.com/puppetlabs/facter-ng/pull/546) ([oanatmaria](https://github.com/oanatmaria))
17
+ - \(FACT-2620\) Add EC2 facts for linux [\#544](https://github.com/puppetlabs/facter-ng/pull/544) ([oanatmaria](https://github.com/oanatmaria))
18
+ - \(FACT-2619\) External facts cache [\#541](https://github.com/puppetlabs/facter-ng/pull/541) ([florindragos](https://github.com/florindragos))
19
+ - Add support for processors facts on \*BSD [\#489](https://github.com/puppetlabs/facter-ng/pull/489) ([smortex](https://github.com/smortex))
20
+
21
+ ### Fixed
22
+ - \(FACT-2668\) Networking fact on linux should have logic for selecting IPs [\#1928](https://github.com/puppetlabs/facter/pull/1928) ([IrimieBogdan](https://github.com/IrimieBogdan))
23
+ - \(FACT-2678\) Facter sometimes pollutes the calling processes environment (race condition) [\#1932](https://github.com/puppetlabs/facter/pull/1932) ([IrimieBogdan](https://github.com/IrimieBogdan))
2
24
 
3
25
  ## [4.0.26](https://github.com/puppetlabs/facter-ng/tree/4.0.26) (2020-06-11)
4
26
 
data/Rakefile CHANGED
@@ -29,7 +29,8 @@ if Bundler.rubygems.find_name('github_changelog_generator').any?
29
29
  end
30
30
 
31
31
  config.user = 'puppetlabs'
32
- config.project = 'facter-ng'
32
+ config.project = 'facter'
33
+ config.release_branch = '4.x'
33
34
  config.since_tag = File.read('VERSION').strip
34
35
  config.future_release = retrieve_from_keyboard
35
36
  config.exclude_labels = ['maintenance']
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.0.26
1
+ 4.0.28
@@ -0,0 +1,15 @@
1
+ ---
2
+ ssh:
3
+ keys:
4
+ - id_rsa_acceptance
5
+ - ~/.ssh/id_rsa-acceptance
6
+ xml: true
7
+ timesync: false
8
+ repo_proxy: true
9
+ add_el_extras: false
10
+ forge_host: api-forge-aio02-petest.puppet.com
11
+ 'master-start-curl-retries': 30
12
+ log_level: debug
13
+ preserve_hosts: onfail
14
+ helper: ./lib/helper.rb
15
+ options_file: ./config/aio/options.rb
@@ -0,0 +1,12 @@
1
+ .vagrant
2
+ local_options.rb
3
+ repos.tar
4
+ repo-configs
5
+ log
6
+ id_rsa-acceptance
7
+ id_rsa-acceptance.pub
8
+ preserved_config.yaml
9
+ merged_options.rb
10
+ junit
11
+ tmp
12
+ .bundle
@@ -0,0 +1,24 @@
1
+ source ENV['GEM_SOURCE'] || "https://rubygems.org"
2
+
3
+ def location_for(place, fake_version = nil)
4
+ if place =~ /^(git:[^#]*)#(.*)/
5
+ [fake_version, { :git => $1, :branch => $2, :require => false }].compact
6
+ elsif place =~ /^file:\/\/(.*)/
7
+ ['>= 0', { :path => File.expand_path($1), :require => false }]
8
+ else
9
+ [place, { :require => false }]
10
+ end
11
+ end
12
+
13
+ gem "beaker", *location_for(ENV['BEAKER_VERSION'] || "~> 4")
14
+ gem 'beaker-puppet', *location_for(ENV['BEAKER_PUPPET_VERSION'] || '~> 1')
15
+ gem "beaker-hostgenerator", *location_for(ENV['BEAKER_HOSTGENERATOR_VERSION'] || "~> 1.1")
16
+ gem "beaker-abs", *location_for(ENV['BEAKER_ABS_VERSION'] || "~> 0.5")
17
+ gem "beaker-vagrant", *location_for(ENV['BEAKER_VAGRANT_VERSION'] || "~> 0")
18
+ gem "beaker-vmpooler", *location_for(ENV['BEAKER_VMPOOLER_VERSION'] || "~> 1")
19
+ gem "rake", ">= 12.3.3"
20
+ gem "multi_json", "~> 1.8"
21
+
22
+ if File.exists? "#{__FILE__}.local"
23
+ eval(File.read("#{__FILE__}.local"), binding)
24
+ end
@@ -0,0 +1,2 @@
1
+ require 'beaker-puppet'
2
+ Beaker::DSL::Helpers::RakeHelpers.load_tasks
@@ -0,0 +1,55 @@
1
+ #! /usr/bin/env bash
2
+
3
+ ###############################################################################
4
+ # Initial preparation for a ci acceptance job in Jenkins. Crucially, it
5
+ # handles the untarring of the build artifact and bundle install, getting us to
6
+ # a state where we can then bundle exec rake the particular ci:test we want to
7
+ # run.
8
+ #
9
+ # Having this checked in in a script makes it much easier to have multiple
10
+ # acceptance jobs. It must be kept agnostic between Linux/Solaris/Windows
11
+ # builds, however.
12
+
13
+ set -x
14
+
15
+ # If $GEM_SOURCE is not set, fall back to rubygems.org
16
+ if [ -z $GEM_SOURCE ]; then
17
+ export GEM_SOURCE='https://rubygems.org'
18
+ fi
19
+
20
+ echo "SHA: ${SHA}"
21
+ echo "FORK: ${FORK}"
22
+ echo "BUILD_SELECTOR: ${BUILD_SELECTOR}"
23
+ echo "PACKAGE_BUILD_STATUS: ${PACKAGE_BUILD_STATUS}"
24
+
25
+ rm -rf acceptance
26
+ tar -xzf acceptance-artifacts.tar.gz
27
+ cd acceptance
28
+
29
+ mkdir -p log/latest
30
+
31
+ echo "===== This artifact is from ====="
32
+ cat creator.txt
33
+
34
+ bundle install --without=development --path=.bundle/gems
35
+
36
+ if [[ "${platform}" =~ 'solaris' ]]; then
37
+ repo_proxy=" :repo_proxy => false,"
38
+ fi
39
+
40
+ # If the platform is Windows, append $ruby_arch
41
+ if [[ "${platform}" =~ 'win' ]]; then
42
+ platform="${platform}-${ruby_arch}"
43
+ fi
44
+
45
+ cat > local_options.rb <<-EOF
46
+ {
47
+ :hosts_file => 'config/nodes/${platform}.yaml',
48
+ :ssh => {
49
+ :keys => ["${HOME}/.ssh/id_rsa-acceptance"],
50
+ },
51
+ ${repo_proxy}
52
+ }
53
+ EOF
54
+
55
+ [[ (-z "${PACKAGE_BUILD_STATUS}") || ("${PACKAGE_BUILD_STATUS}" = "success") ]] || exit 1
@@ -0,0 +1,6 @@
1
+ {
2
+ :type => 'aio',
3
+ :pre_suite => [
4
+ 'setup/aio/pre-suite/001_run_with_facter_ng.rb',
5
+ ],
6
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ :type => :git,
3
+ }
@@ -0,0 +1,7 @@
1
+ ---
2
+ HOSTS:
3
+ pe-aix-53-acceptance:
4
+ roles:
5
+ - agent
6
+ platform: aix-5.3-power
7
+ hypervisor: none
@@ -0,0 +1,7 @@
1
+ ---
2
+ HOSTS:
3
+ pe-aix-61-acceptance:
4
+ roles:
5
+ - agent
6
+ platform: aix-6.1-power
7
+ hypervisor: none
@@ -0,0 +1,7 @@
1
+ ---
2
+ HOSTS:
3
+ pe-aix-71-acceptance:
4
+ roles:
5
+ - agent
6
+ platform: aix-7.1-power
7
+ hypervisor: none
@@ -0,0 +1,7 @@
1
+ ---
2
+ HOSTS:
3
+ huawei-ce6850-2-debian-vm-eth0.ops.puppetlabs.net:
4
+ roles:
5
+ - agent
6
+ platform: huaweios-6-powerpc
7
+ hypervisor: none
@@ -0,0 +1,9 @@
1
+ ---
2
+ HOSTS:
3
+ solaris-10-sparc:
4
+ roles:
5
+ - agent
6
+ platform: solaris-10-sparc
7
+ hypervisor: none
8
+ ip: 10.32.121.124
9
+ vmhostname: sol10-1.delivery.puppetlabs.net
@@ -0,0 +1,9 @@
1
+ ---
2
+ HOSTS:
3
+ solaris-11-sparc:
4
+ roles:
5
+ - agent
6
+ platform: solaris-11-sparc
7
+ hypervisor: none
8
+ ip: 10.32.114.245
9
+ vmhostname: sol11-1.delivery.puppetlabs.net
@@ -0,0 +1,565 @@
1
+ module Facter
2
+ module Acceptance
3
+ module BaseFactUtils
4
+
5
+ # return a hash of expected facts for os, processors, and kernel facts
6
+ #
7
+ def os_processors_and_kernel_expected_facts(agent)
8
+ if agent['platform'] =~ /aix-/
9
+ aix_expected_facts(agent)
10
+ elsif agent['platform'] =~ /cisco/
11
+ cisco_expected_facts(agent)
12
+ elsif agent['platform'] =~ /cumulus-/
13
+ cumulus_expected_facts(agent)
14
+ elsif agent['platform'] =~ /debian-/
15
+ debian_expected_facts(agent)
16
+ elsif agent['platform'] =~ /el-|centos-/
17
+ el_expected_facts(agent)
18
+ elsif agent['platform'] =~ /eos-/ # arista
19
+ eos_expected_facts(agent)
20
+ elsif agent['platform'] =~ /fedora-/
21
+ fedora_expected_facts(agent)
22
+ elsif agent['platform'] =~ /huaweios-/
23
+ huawei_expected_facts(agent)
24
+ elsif agent['platform'] =~ /osx-/
25
+ osx_expected_facts(agent)
26
+ elsif agent['platform'] =~ /sles-/
27
+ sles_expected_facts(agent)
28
+ elsif agent['platform'] =~ /solaris-/
29
+ solaris_expected_facts(agent)
30
+ elsif agent['platform'] =~ /ubuntu-/
31
+ ubuntu_expected_facts(agent)
32
+ elsif agent['platform'] =~ /windows-/
33
+ windows_expected_facts(agent)
34
+ else
35
+ fail_test("unknown agent type being tested #{agent['platform']}")
36
+ end
37
+ end
38
+
39
+ # return the value from the facter json parsed set of results using the fact path separated using '.'s
40
+ #
41
+ def json_result_fact_by_key_path(results, fact)
42
+ fact.split('.').each do |key|
43
+ results = results[key]
44
+ end
45
+ results
46
+ end
47
+
48
+ # AIX
49
+ def aix_expected_facts(agent)
50
+ version = agent['platform'].match(/aix-(\d)\.(\d)/)
51
+ if version.nil?
52
+ kernel_major_version = /\d\d00/
53
+ else
54
+ kernel_major_version = /#{version[1]}#{version[2]}00/
55
+ end
56
+ kernel_release = /^#{kernel_major_version}-\d+-\d+-\d+/
57
+ os_arch = /[Pp]ower[Pp][Cc]/
58
+ os_hardware = /IBM/
59
+
60
+ expected_facts = {
61
+ 'os.architecture' => os_arch,
62
+ 'os.family' => 'AIX',
63
+ 'os.hardware' => os_hardware,
64
+ 'os.name' => 'AIX',
65
+ 'os.release.full' => kernel_release,
66
+ 'os.release.major' => kernel_major_version,
67
+ 'processors.count' => /[1-9]+/,
68
+ 'processors.isa' => os_arch,
69
+ 'processors.models' => os_arch,
70
+ 'kernel' => 'AIX',
71
+ 'kernelrelease' => kernel_release,
72
+ 'kernelversion' => kernel_major_version,
73
+ 'kernelmajversion' => kernel_major_version
74
+ }
75
+ expected_facts
76
+ end
77
+
78
+ # Cisco
79
+ def cisco_expected_facts(agent)
80
+ os_arch = 'x86_64'
81
+ os_hardware = 'x86_64'
82
+ processor_model_pattern = 'Westmere'
83
+
84
+ expected_facts = {
85
+ 'os.architecture' => os_arch,
86
+ 'os.family' => 'cisco-wrlinux',
87
+ 'os.hardware' => os_hardware,
88
+ 'os.name' => /ios_xr|nexus/,
89
+ 'os.release.full' => /\d+\.\d+(\.\d+)?/,
90
+ 'os.release.major' => /\d+/,
91
+ 'os.release.minor' => /\d+/,
92
+ 'processors.count' => /[1-9]/,
93
+ 'processors.physicalcount' => /[1-9]/,
94
+ 'processors.isa' => /unknown|#{os_hardware}/,
95
+ 'processors.models' => /#{processor_model_pattern}/,
96
+ 'kernel' => 'Linux',
97
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
98
+ 'kernelversion' => /\d+\.\d+\.\d+/,
99
+ 'kernelmajversion' => /\d+\.\d+/
100
+ }
101
+ expected_facts
102
+ end
103
+
104
+ # Cumulus
105
+ def cumulus_expected_facts(agent)
106
+ os_version = /\d+\.\d+/
107
+ os_release_major = /\d+/
108
+ os_release_minor = /\d+/
109
+ os_arch = 'x86_64'
110
+ os_hardware = 'x86_64'
111
+
112
+ expected_facts = {
113
+ 'os.architecture' => os_arch,
114
+ 'os.distro.codename' => /\w+/,
115
+ 'os.distro.description' => /#{os_version}\.\d+-/,
116
+ 'os.distro.id' => 'Cumulus Linux',
117
+ 'os.distro.release.full' => /#{os_version}\.\d+/,
118
+ 'os.distro.release.major' => os_release_major,
119
+ 'os.distro.release.minor' => os_release_minor,
120
+ 'os.family' => 'Debian',
121
+ 'os.hardware' => os_hardware,
122
+ 'os.name' => 'CumulusLinux',
123
+ 'os.release.full' => /#{os_version}\.\d+/,
124
+ 'os.release.major' => os_release_major,
125
+ 'os.release.minor' => os_release_minor,
126
+ 'processors.count' => /[1-9]/,
127
+ 'processors.physicalcount' => /[1-9]/,
128
+ 'processors.isa' => /unknown|#{os_hardware}/,
129
+ 'processors.models' => /(Intel\(R\).*)|(AMD.*)/,
130
+ 'kernel' => 'Linux',
131
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
132
+ 'kernelversion' => /\d+\.\d+\.\d+/,
133
+ 'kernelmajversion' => /\d+\.\d+/
134
+ }
135
+ expected_facts
136
+ end
137
+
138
+ # Debian
139
+ def debian_expected_facts(agent)
140
+ version = agent['platform'].match(/debian-(\d{1,2})/)
141
+ if version.nil?
142
+ os_version = /\d+/
143
+ else
144
+ os_version = /#{version[1]}/
145
+ end
146
+ if agent['platform'] =~ /amd64/
147
+ os_arch = 'amd64'
148
+ os_hardware = 'x86_64'
149
+ else
150
+ os_arch = 'i386'
151
+ os_hardware = 'i686'
152
+ end
153
+
154
+ expected_facts = {
155
+ 'os.architecture' => os_arch,
156
+ 'os.distro.codename' => /\w+/,
157
+ 'os.distro.description' => /Debian GNU\/Linux #{os_version}(\.\d)?/,
158
+ 'os.distro.id' => 'Debian',
159
+ 'os.distro.release.full' => /#{os_version}\.\d+/,
160
+ 'os.distro.release.major' => os_version,
161
+ 'os.distro.release.minor' => /\d/,
162
+ 'os.family' => 'Debian',
163
+ 'os.hardware' => os_hardware,
164
+ 'os.name' => 'Debian',
165
+ 'os.release.full' => /#{os_version}\.\d+/,
166
+ 'os.release.major' => os_version,
167
+ 'os.release.minor' => /\d/,
168
+ 'processors.count' => /[1-9]/,
169
+ 'processors.physicalcount' => /[1-9]/,
170
+ 'processors.isa' => /unknown|#{os_hardware}/,
171
+ 'processors.models' => /(Intel\(R\).*)|(AMD.*)/,
172
+ 'kernel' => 'Linux',
173
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
174
+ 'kernelversion' => /\d+\.\d+/,
175
+ 'kernelmajversion' => /\d+\.\d+/
176
+ }
177
+ expected_facts
178
+ end
179
+
180
+ # el (RedHat, Centos)
181
+ def el_expected_facts(agent)
182
+ version = agent['platform'].match(/(el|centos)-(\d)/)
183
+ if version.nil?
184
+ os_version = /\d+/
185
+ else
186
+ os_version = /#{version[2]}/
187
+ end
188
+ release_string = on(agent, 'cat /etc/*-release').stdout.downcase
189
+ case release_string
190
+ when /amazon/
191
+ os_name = 'Amazon'
192
+ # This parses: VERSION_ID="2017.09"
193
+ os_version = on(agent, 'grep VERSION_ID /etc/os-release | cut --delimiter=\" --fields=2 | cut --delimiter=. --fields=1').stdout.chomp
194
+ when /centos/
195
+ os_name = 'CentOS'
196
+ when /oracle/
197
+ os_name = 'OracleLinux'
198
+ when /scientific/
199
+ os_name = 'Scientific'
200
+ else
201
+ os_name = 'RedHat'
202
+ end
203
+ if agent['platform'] =~ /x86_64/
204
+ os_arch = 'x86_64'
205
+ os_hardware = 'x86_64'
206
+ processor_model_pattern = /(Intel\(R\).*)|(AMD.*)/
207
+ elsif agent['platform'] =~ /ppc|power|64le/
208
+ os_arch = 'ppc64le'
209
+ os_hardware = 'ppc64le'
210
+ processor_model_pattern = // # facter doesn't figure out the processor type on these machines
211
+ elsif agent['platform'] =~ /s390x/
212
+ os_arch = 's390x'
213
+ os_hardware = 's390x'
214
+ processor_model_pattern = // # s390x does not populate a model value in /proc/cpuinfo
215
+ elsif agent['platform'] =~ /aarch64/
216
+ os_arch = 'aarch64'
217
+ os_hardware = 'aarch64'
218
+ processor_model_pattern = // # aarch64 does not populate a model value in /proc/cpuinfo
219
+ else
220
+ os_arch = 'i386'
221
+ os_hardware = 'i686'
222
+ processor_model_pattern = /(Intel\(R\).*)|(AMD.*)/
223
+ end
224
+
225
+ expected_facts = {
226
+ 'os.architecture' => os_arch,
227
+ 'os.family' => 'RedHat',
228
+ 'os.hardware' => os_hardware,
229
+ 'os.name' => os_name,
230
+ 'os.release.full' => /#{os_version}(\.\d+)?(\.\d+)?/,
231
+ 'os.release.major' => os_version,
232
+ 'os.release.minor' => /(\d+)?/,
233
+ 'processors.count' => /[1-9]/,
234
+ 'processors.physicalcount' => /[1-9]/,
235
+ 'processors.isa' => os_hardware,
236
+ 'processors.models' => processor_model_pattern,
237
+ 'kernel' => 'Linux',
238
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
239
+ 'kernelversion' => /\d+\.\d+/,
240
+ 'kernelmajversion' => /\d+\.\d+/
241
+ }
242
+ expected_facts
243
+ end
244
+
245
+ # eos Arista
246
+ def eos_expected_facts(agent)
247
+ version = agent['platform'].match(/eos-(\d+)-/)
248
+ if version.nil?
249
+ os_version = /\d+/
250
+ else
251
+ os_version = /#{version[1]}/
252
+ end
253
+ os_arch = 'x86_64'
254
+ os_hardware = 'x86_64'
255
+ processor_model_pattern = 'Intel\(R\)'
256
+
257
+ expected_facts = {
258
+ 'os.architecture' => os_arch,
259
+ 'os.family' => 'Linux',
260
+ 'os.hardware' => os_hardware,
261
+ 'os.name' => 'AristaEOS',
262
+ 'os.release.full' => /#{os_version}\.\d+(\.\dF)?/,
263
+ 'os.release.major' => os_version,
264
+ 'os.release.minor' => /\d+/,
265
+ 'processors.count' => /[1-9]/,
266
+ 'processors.physicalcount' => /[1-9]/,
267
+ 'processors.isa' => os_hardware,
268
+ 'processors.models' => /#{processor_model_pattern}/,
269
+ 'kernel' => 'Linux',
270
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
271
+ 'kernelversion' => /\d+\.\d+\.\d+/,
272
+ 'kernelmajversion' => /\d+\.\d+/
273
+ }
274
+ expected_facts
275
+ end
276
+
277
+ # fedora
278
+ def fedora_expected_facts(agent)
279
+ version = agent['platform'].match(/fedora-(\d\d)-/)
280
+ if version.nil?
281
+ os_version = /\d+/
282
+ else
283
+ os_version = /#{version[1]}/
284
+ end
285
+ if agent['platform'] =~ /x86_64/
286
+ os_arch = 'x86_64'
287
+ os_hardware = 'x86_64'
288
+ else
289
+ os_arch = 'i386'
290
+ os_hardware = 'i686'
291
+ end
292
+
293
+ expected_facts = {
294
+ 'os.architecture' => os_arch,
295
+ 'os.family' => 'RedHat',
296
+ 'os.hardware' => os_hardware,
297
+ 'os.name' => 'Fedora',
298
+ 'os.release.full' => os_version,
299
+ 'os.release.major' => os_version,
300
+ 'processors.count' => /[1-9]/,
301
+ 'processors.physicalcount' => /[1-9]/,
302
+ 'processors.isa' => os_hardware,
303
+ 'processors.models' => /(Intel\(R\).*)|(AMD.*)/,
304
+ 'kernel' => 'Linux',
305
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
306
+ 'kernelversion' => /\d+\.\d+\.\d+/,
307
+ 'kernelmajversion' => /\d+\.\d+/
308
+ }
309
+ expected_facts
310
+ end
311
+
312
+ # huawei
313
+ def huawei_expected_facts(agent)
314
+ os_version = /\d+\.\d+/
315
+ os_version_major = /\d+/
316
+ os_version_minor = /\d+/
317
+ os_arch = 'ppc'
318
+ os_hardware = 'ppc'
319
+
320
+ expected_facts = {
321
+ 'os.architecture' => os_arch,
322
+ 'os.family' => 'Debian',
323
+ 'os.hardware' => os_hardware,
324
+ 'os.name' => 'Debian',
325
+ 'os.release.full' => os_version,
326
+ 'os.release.major' => os_version_major,
327
+ 'os.release.minor' => os_version_minor,
328
+ 'processors.count' => /[1-9]/,
329
+ 'processors.physicalcount' => /[1-9]/,
330
+ 'processors.isa' => 'unknown',
331
+ 'kernel' => 'Linux',
332
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
333
+ 'kernelversion' => /\d+\.\d+\.\d+/,
334
+ 'kernelmajversion' => /\d+\.\d+/
335
+ }
336
+ expected_facts
337
+ end
338
+
339
+ # osx
340
+ def osx_expected_facts(agent)
341
+ version = agent['platform'].match(/osx-(10\.\d+)/)
342
+ if version.nil?
343
+ os_version = /\d+\.\d+/
344
+ else
345
+ os_version = /#{version[1]}/
346
+ end
347
+
348
+ expected_facts = {
349
+ 'os.architecture' => 'x86_64',
350
+ 'os.family' => 'Darwin',
351
+ 'os.hardware' => 'x86_64',
352
+ 'os.name' => 'Darwin',
353
+ 'os.macosx.build' => /\d+[A-Z]\d{2,4}\w?/,
354
+ 'os.macosx.product' => 'Mac OS X',
355
+ 'os.macosx.version.full' => /#{os_version}\.\d+/,
356
+ 'os.macosx.version.major' => os_version,
357
+ 'os.macosx.version.minor' => /\d+/,
358
+ 'os.release.full' => /\d+\.\d+\.\d+/,
359
+ 'os.release.major' => /\d+/,
360
+ 'os.release.minor' => /\d+/,
361
+ 'processors.count' => /[1-9]/,
362
+ 'processors.physicalcount' => /[1-9]/,
363
+ 'processors.isa' => 'i386',
364
+ 'processors.models' => /"Intel\(R\).*"/,
365
+ 'kernel' => 'Darwin',
366
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
367
+ 'kernelversion' => /\d+\.\d+\.\d+/,
368
+ 'kernelmajversion' => /\d+\.\d+/
369
+ }
370
+ expected_facts
371
+ end
372
+
373
+ # SLES
374
+ def sles_expected_facts(agent)
375
+ version = agent['platform'].match(/sles-(\d\d)/)
376
+ if version.nil?
377
+ os_version = /\d+/
378
+ else
379
+ os_version = /#{version[1]}/
380
+ end
381
+ if agent['platform'] =~ /x86_64/
382
+ os_arch = 'x86_64'
383
+ os_hardware = 'x86_64'
384
+ processor_model_pattern = /(Intel\(R\).*)|(AMD.*)/
385
+ elsif agent['platform'] =~ /ppc|power|64le/
386
+ os_arch = 'ppc64le'
387
+ os_hardware = 'ppc64le'
388
+ processor_model_pattern = // # facter doesn't figure out the processor type on these machines
389
+ elsif agent['platform'] =~ /s390x/
390
+ os_arch = 's390x'
391
+ os_hardware = 's390x'
392
+ processor_model_pattern = // # s390x does not populate a model value in /proc/cpuinfo
393
+ else
394
+ os_arch = 'i386'
395
+ os_hardware = 'i686'
396
+ processor_model_pattern = /(Intel\(R\).*)|(AMD.*)/
397
+ end
398
+
399
+ expected_facts = {
400
+ 'os.architecture' => os_arch,
401
+ 'os.family' => 'Suse',
402
+ 'os.hardware' => os_hardware,
403
+ 'os.name' => 'SLES',
404
+ 'os.release.full' => /#{os_version}\.\d+(\.\d+)?/,
405
+ 'os.release.major' => os_version,
406
+ 'os.release.minor' => /\d+/,
407
+ 'processors.count' => /[1-9]/,
408
+ 'processors.physicalcount' => /[1-9]/,
409
+ 'processors.isa' => os_hardware,
410
+ 'processors.models' => processor_model_pattern,
411
+ 'kernel' => 'Linux',
412
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
413
+ 'kernelversion' => /\d+\.\d+\.\d+/,
414
+ 'kernelmajversion' => /\d+\.\d+/
415
+ }
416
+ expected_facts
417
+ end
418
+
419
+ # Solaris
420
+ def solaris_expected_facts(agent)
421
+ version = agent['platform'].match(/solaris-(\d\d)/)
422
+ if version.nil?
423
+ os_version = /\d+/
424
+ else
425
+ os_version = /#{version[1]}/
426
+ end
427
+ case agent[:platform]
428
+ when /solaris-10/
429
+ os_release_full = /#{os_version}_u\d+/
430
+ os_kernel = /Generic_\d+-\d+/
431
+ os_kernel_major = os_kernel
432
+ when /solaris-11/
433
+ os_release_full = /#{os_version}\.\d+/
434
+ os_kernel = os_release_full
435
+ os_kernel_major = os_version
436
+ else
437
+ fail_test("Unknown Solaris version #{agent['platform']}")
438
+ end
439
+ case agent[:platform]
440
+ when /sparc/
441
+ os_architecture = 'sun4v'
442
+ proc_models = /.*SPARC.*/
443
+ proc_isa = /sparc/
444
+ else
445
+ os_architecture = 'i86pc'
446
+ proc_models = /(Intel.*)|(AMD.*)/
447
+ proc_isa = /i386/
448
+ end
449
+
450
+ expected_facts = {
451
+ 'os.architecture' => os_architecture,
452
+ 'os.family' => 'Solaris',
453
+ 'os.hardware' => os_architecture,
454
+ 'os.name' => 'Solaris',
455
+ 'os.release.full' => os_release_full,
456
+ 'os.release.major' => os_version,
457
+ 'os.release.minor' => /\d+/,
458
+ 'processors.count' => /[1-9]/,
459
+ 'processors.physicalcount' => /[1-9]/,
460
+ 'processors.isa' => proc_isa,
461
+ 'processors.models' => proc_models,
462
+ 'kernel' => 'SunOS',
463
+ 'kernelrelease' => /5\.#{os_version}/,
464
+ 'kernelversion' => os_kernel,
465
+ 'kernelmajversion' => os_kernel_major
466
+ }
467
+ expected_facts
468
+ end
469
+
470
+ # Ubuntu
471
+ def ubuntu_expected_facts(agent)
472
+ version = agent['platform'].match(/ubuntu-(\d\d\.\d\d)/)
473
+ if version.nil?
474
+ os_version = /\d+\.\d+/
475
+ else
476
+ os_version = /#{version[1]}/
477
+ end
478
+ if agent['platform'] =~ /x86_64|amd64/
479
+ os_arch = 'amd64'
480
+ os_hardware = 'x86_64'
481
+ processor_model_pattern = /(Intel\(R\).*)|(AMD.*)/
482
+ elsif agent['platform'] =~ /ppc|power|64le/
483
+ os_arch = 'ppc64le'
484
+ os_hardware = 'ppc64le'
485
+ processor_model_pattern = // # facter doesn't figure out the processor type on these machines
486
+ else
487
+ os_arch = 'i386'
488
+ os_hardware = 'i686'
489
+ processor_model_pattern = /(Intel\(R\).*)|(AMD.*)/
490
+ end
491
+
492
+ expected_facts = {
493
+ 'os.architecture' => os_arch,
494
+ 'os.distro.codename' => /\w+/,
495
+ 'os.distro.description' => /Ubuntu #{os_version}/,
496
+ 'os.distro.id' => 'Ubuntu',
497
+ 'os.distro.release.full' => os_version,
498
+ 'os.distro.release.major' => os_version,
499
+ 'os.family' => 'Debian',
500
+ 'os.hardware' => os_hardware,
501
+ 'os.name' => 'Ubuntu',
502
+ 'os.release.full' => os_version,
503
+ 'os.release.major' => os_version,
504
+ 'processors.count' => /[1-9]/,
505
+ 'processors.physicalcount' => /[1-9]/,
506
+ 'processors.isa' => os_hardware,
507
+ 'processors.models' => processor_model_pattern,
508
+ 'kernel' => 'Linux',
509
+ 'kernelrelease' => /\d+\.\d+\.\d+/,
510
+ 'kernelversion' => /\d+\.\d+\.\d+/,
511
+ 'kernelmajversion' => /\d+\.\d+/
512
+ }
513
+ expected_facts
514
+ end
515
+
516
+ # Windows
517
+ def windows_expected_facts(agent)
518
+ # Get expected values based on platform name
519
+ if agent['platform'] =~ /windows-7/
520
+ os_version = '7'
521
+ elsif agent['platform'] =~ /windows-8.1/
522
+ os_version = '8.1'
523
+ elsif agent['platform'] =~ /2008/
524
+ os_version = '2008 R2'
525
+ elsif agent['platform'] =~ /2012/
526
+ os_version = agent['platform'] =~ /R2/ ? '2012 R2' : '2012'
527
+ elsif agent['platform'] =~ /-10/
528
+ os_version = '10'
529
+ elsif agent['platform'] =~ /2016/
530
+ os_version = '2016'
531
+ elsif agent['platform'] =~ /2019/
532
+ os_version = '2019'
533
+ else
534
+ fail_test "Unknown Windows version #{agent['platform']}"
535
+ end
536
+ if agent['platform'] =~ /64/
537
+ os_arch = 'x64'
538
+ os_hardware = 'x86_64'
539
+ else
540
+ os_arch = 'x86'
541
+ os_hardware = 'i686'
542
+ end
543
+
544
+ expected_facts = {
545
+ 'os.architecture' => os_arch,
546
+ 'os.family' => 'windows',
547
+ 'os.hardware' => os_hardware,
548
+ 'os.name' => 'windows',
549
+ 'os.release.full' => os_version,
550
+ 'os.release.major' => os_version,
551
+ 'os.windows.system32' => /C:\\(WINDOWS|Windows)\\(system32|sysnative)/,
552
+ 'processors.count' => /[1-9]/,
553
+ 'processors.physicalcount' => /[1-9]/,
554
+ 'processors.isa' => /x86|x64/,
555
+ 'processors.models' => /(Intel\(R\).*)|(AMD.*)/,
556
+ 'kernel' => 'windows',
557
+ 'kernelrelease' => /\d+\.\d+/,
558
+ 'kernelversion' => /\d+\.\d+/,
559
+ 'kernelmajversion' => /\d+\.\d+/
560
+ }
561
+ expected_facts
562
+ end
563
+ end
564
+ end
565
+ end