facter 4.0.26 → 4.0.28

Sign up to get free protection for your applications and to get access to all the features.
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