facterdb 1.21.0 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +17 -0
  3. data/.github/workflows/release.yml +3 -3
  4. data/.github/workflows/test.yml +28 -5
  5. data/.rubocop.yml +5 -0
  6. data/.rubocop_todo.yml +239 -0
  7. data/CHANGELOG.md +16 -0
  8. data/Gemfile +1 -5
  9. data/README.md +124 -122
  10. data/Rakefile +56 -51
  11. data/facterdb.gemspec +7 -7
  12. data/facts/4.1/centos-7-x86_64.facts +582 -0
  13. data/facts/4.1/debian-10-x86_64.facts +519 -0
  14. data/facts/4.2/debian-12-i386.facts +593 -0
  15. data/facts/4.2/debian-12-x86_64.facts +593 -0
  16. data/facts/4.2/fedora-38-x86_64.facts +656 -0
  17. data/facts/4.3/almalinux-8-x86_64.facts +551 -0
  18. data/facts/4.3/almalinux-9-x86_64.facts +525 -0
  19. data/facts/4.3/centos-7-x86_64.facts +592 -0
  20. data/facts/4.3/debian-10-x86_64.facts +526 -0
  21. data/facts/4.3/debian-11-x86_64.facts +521 -0
  22. data/facts/4.3/debian-12-i386.facts +593 -0
  23. data/facts/4.3/debian-12-x86_64.facts +593 -0
  24. data/facts/4.3/fedora-36-x86_64.facts +507 -0
  25. data/facts/4.3/fedora-37-x86_64.facts +512 -0
  26. data/facts/4.3/fedora-38-x86_64.facts +656 -0
  27. data/facts/4.3/opensuse-15-x86_64.facts +533 -0
  28. data/facts/4.3/redhat-8-x86_64.facts +526 -0
  29. data/facts/4.3/rocky-8-x86_64.facts +545 -0
  30. data/facts/4.3/rocky-9-x86_64.facts +626 -0
  31. data/facts/4.3/sles-12-x86_64.facts +908 -0
  32. data/facts/4.3/ubuntu-18.04-x86_64.facts +557 -0
  33. data/facts/4.3/ubuntu-20.04-x86_64.facts +647 -0
  34. data/facts/4.3/ubuntu-22.04-x86_64.facts +655 -0
  35. data/facts/4.3/windows-10-x86_64.facts +182 -0
  36. data/facts/4.3/windows-11-x86_64.facts +182 -0
  37. data/facts/4.3/windows-2012 r2-x86_64.facts +179 -0
  38. data/facts/4.3/windows-2012-x86_64.facts +179 -0
  39. data/facts/4.3/windows-2016-core-x86_64.facts +181 -0
  40. data/facts/4.3/windows-2016-x86_64.facts +181 -0
  41. data/facts/4.3/windows-2019-core-x86_64.facts +181 -0
  42. data/facts/4.3/windows-2019-x86_64.facts +181 -0
  43. data/facts/4.3/windows-2022-core-x86_64.facts +183 -0
  44. data/facts/4.3/windows-2022-x86_64.facts +183 -0
  45. data/facts/4.4/almalinux-8-x86_64.facts +551 -0
  46. data/facts/4.4/almalinux-9-x86_64.facts +525 -0
  47. data/facts/4.4/centos-7-x86_64.facts +592 -0
  48. data/facts/4.4/debian-10-x86_64.facts +526 -0
  49. data/facts/4.4/debian-11-x86_64.facts +521 -0
  50. data/facts/4.4/debian-12-i386.facts +593 -0
  51. data/facts/4.4/debian-12-x86_64.facts +593 -0
  52. data/facts/4.4/fedora-36-x86_64.facts +507 -0
  53. data/facts/4.4/fedora-37-x86_64.facts +512 -0
  54. data/facts/4.4/fedora-38-x86_64.facts +656 -0
  55. data/facts/4.4/opensuse-15-x86_64.facts +514 -0
  56. data/facts/4.4/redhat-8-x86_64.facts +526 -0
  57. data/facts/4.4/rocky-8-x86_64.facts +545 -0
  58. data/facts/4.4/rocky-9-x86_64.facts +626 -0
  59. data/facts/4.4/sles-12-x86_64.facts +908 -0
  60. data/facts/4.4/ubuntu-18.04-x86_64.facts +557 -0
  61. data/facts/4.4/ubuntu-20.04-x86_64.facts +647 -0
  62. data/facts/4.4/ubuntu-22.04-x86_64.facts +655 -0
  63. data/facts/4.4/windows-10-x86_64.facts +182 -0
  64. data/facts/4.4/windows-11-x86_64.facts +186 -0
  65. data/facts/4.4/windows-2012 r2-x86_64.facts +179 -0
  66. data/facts/4.4/windows-2012-x86_64.facts +179 -0
  67. data/facts/4.4/windows-2016-core-x86_64.facts +181 -0
  68. data/facts/4.4/windows-2016-x86_64.facts +181 -0
  69. data/facts/4.4/windows-2019-core-x86_64.facts +181 -0
  70. data/facts/4.4/windows-2019-x86_64.facts +181 -0
  71. data/facts/4.4/windows-2022-core-x86_64.facts +183 -0
  72. data/facts/4.4/windows-2022-x86_64.facts +183 -0
  73. data/facts/Gemfile +3 -7
  74. data/facts/Vagrantfile +313 -298
  75. data/facts/get_facts.sh +67 -9
  76. data/lib/facterdb/bin.rb +1 -1
  77. data/lib/facterdb/version.rb +1 -1
  78. data/lib/facterdb.rb +40 -32
  79. data/rakelib/rhel_alts.rake +8 -14
  80. data/spec/facterdb_spec.rb +37 -37
  81. data/spec/facts_spec.rb +13 -7
  82. metadata +84 -6
data/facts/get_facts.sh CHANGED
@@ -65,7 +65,7 @@ case "${osfamily}" in
65
65
  wget "http://yum.puppetlabs.com/puppet7-release-el-${operatingsystemmajrelease}.noarch.rpm" -O /tmp/puppet7-release.rpm
66
66
  if test -f /tmp/puppet7-release.rpm; then
67
67
  rpm -ivh /tmp/puppet7-release.rpm
68
- for puppet_agent_version in 7.5.0 7.6.1 7.17.0; do
68
+ for puppet_agent_version in 7.5.0 7.6.1 7.17.0 7.24.0; do
69
69
  if yum install -y puppet-agent-${puppet_agent_version}; then
70
70
  output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter operatingsystem | tr '[:upper:]' '[:lower:]')-$(facter operatingsystemmajrelease)-$(facter hardwaremodel).facts"
71
71
  mkdir -p $(dirname ${output_file})
@@ -74,15 +74,29 @@ case "${osfamily}" in
74
74
  done
75
75
  yum remove -y puppet7-release
76
76
  fi
77
+ wget "http://yum.puppetlabs.com/puppet8-release-el-${operatingsystemmajrelease}.noarch.rpm" -O /tmp/puppet8-release.rpm
78
+ if test -f /tmp/puppet8-release.rpm; then
79
+ rpm -ivh /tmp/puppet8-release.rpm
80
+ for puppet_agent_version in 8.0.0; do
81
+ if yum install -y puppet-agent-${puppet_agent_version}; then
82
+ output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter os.name | tr '[:upper:]' '[:lower:]')-$(facter os.release.major)-$(facter os.hardware).facts"
83
+ mkdir -p $(dirname ${output_file})
84
+ facter --show-legacy -p -j | tee ${output_file}
85
+ fi
86
+ done
87
+ yum remove -y puppet8-release
88
+ fi
77
89
  ;;
78
90
  'Debian')
79
- apt_install curl
91
+ apt_install curl file
80
92
  curl "https://apt.puppetlabs.com/puppet6-release-${lsbdistcodename}.deb" -o /tmp/puppet6-release.deb
81
93
  # apt.puppetlabs.com returns an html document if the requested deb doesn't exist and /tmp/puppet6-release.deb will be an html doc
82
94
  if test "$?" -eq 0 -a -f /tmp/puppet6-release.deb && [[ "$(file -b /tmp/puppet6-release.deb)" =~ "Debian binary package".* ]] ; then
83
95
  dpkg --install /tmp/puppet6-release.deb
84
96
  apt-get update
85
- for puppet_agent_version in 6.2 6.4 6.6; do
97
+ # as of 2023-04-27 older 6.x series aren't available (i.e. facter 3.12)
98
+ # the trailing dot is so that 6.4.* is the match so we get the last in the 6.4 series and not 6.40
99
+ for puppet_agent_version in 6.4. 6.28.; do
86
100
  if apt_install puppet-agent=${puppet_agent_version}*; then
87
101
  output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter operatingsystem | tr '[:upper:]' '[:lower:]')-$(facter operatingsystemmajrelease)-$(facter hardwaremodel).facts"
88
102
  mkdir -p $(dirname ${output_file})
@@ -93,10 +107,10 @@ case "${osfamily}" in
93
107
  fi
94
108
  curl "https://apt.puppetlabs.com/puppet7-release-${lsbdistcodename}.deb" -o /tmp/puppet7-release.deb
95
109
  # apt.puppetlabs.com returns an html document if the requested deb doesn't exist and /tmp/puppet6-release.deb will be an html doc
96
- if test "$?" -eq 0 -a -f /tmp/puppet7-release.deb && [[ "$(file -b /tmp/puppet6-release.deb)" =~ "Debian binary package".* ]] ; then
110
+ if test "$?" -eq 0 -a -f /tmp/puppet7-release.deb && [[ "$(file -b /tmp/puppet7-release.deb)" =~ "Debian binary package".* ]] ; then
97
111
  dpkg --install /tmp/puppet7-release.deb
98
112
  apt-get update
99
- for puppet_agent_version in 7.5.0 7.6.1 7.12.0; do
113
+ for puppet_agent_version in 7.5.0 7.6.1 7.12.0 7.24.0; do
100
114
  if apt_install puppet-agent=${puppet_agent_version}*; then
101
115
  output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter operatingsystem | tr '[:upper:]' '[:lower:]')-$(facter operatingsystemmajrelease)-$(facter hardwaremodel).facts"
102
116
  mkdir -p $(dirname ${output_file})
@@ -105,7 +119,29 @@ case "${osfamily}" in
105
119
  done
106
120
  apt-get -y remove --purge puppet7-release
107
121
  fi
108
- apt_install make gcc libgmp-dev
122
+ curl "https://apt.puppetlabs.com/puppet8-release-${lsbdistcodename}.deb" -o /tmp/puppet8-release.deb
123
+ # apt.puppetlabs.com returns an html document if the requested deb doesn't exist and /tmp/puppet6-release.deb will be an html doc
124
+ if test "$?" -eq 0 -a -f /tmp/puppet8-release.deb && [[ "$(file -b /tmp/puppet8-release.deb)" =~ "Debian binary package".* ]] ; then
125
+ dpkg --install /tmp/puppet8-release.deb
126
+ apt-get update
127
+ for puppet_agent_version in 8.0.0; do
128
+ if apt_install puppet-agent=${puppet_agent_version}*; then
129
+ output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter os.name | tr '[:upper:]' '[:lower:]')-$(facter os.release.major)-$(facter os.hardware).facts"
130
+ mkdir -p $(dirname ${output_file})
131
+ facter --show-legacy -p -j | tee ${output_file}
132
+ fi
133
+ done
134
+ apt-get -y remove --purge puppet8-release
135
+ fi
136
+ # libc6-dev needed to build the ffi gem
137
+ apt_install make gcc libgmp-dev libc6-dev
138
+
139
+ # puppetlabs repos/packages not yet available on bookworm https://puppet.atlassian.net/browse/PA-4995
140
+ # simply install puppet-agent that comes with the distro
141
+ if [[ "bookworm" =~ ${lsbdistcodename} ]]; then
142
+ apt_install ruby rubygems ruby-dev
143
+ facter --show-legacy -p -j | tee ${output_file}
144
+ fi
109
145
 
110
146
  # There are no puppet-agent packages for $releasename yet, so generate a Facter 3.x
111
147
  # fact set from the official Debian package.
@@ -151,7 +187,7 @@ case "${osfamily}" in
151
187
  http_method='https'
152
188
  fi
153
189
  if rpm -Uvh ${http_method}://yum.puppet.com/puppet6-release-sles-${operatingsystemmajrelease}.noarch.rpm; then
154
- for puppet_agent_version in 6.2.0 6.4.2 6.6.0; do
190
+ for puppet_agent_version in 6.25.0 6.27.1; do
155
191
  if zypper --gpg-auto-import-keys --non-interactive install puppet-agent-${puppet_agent_version}; then
156
192
  output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter operatingsystem | tr '[:upper:]' '[:lower:]')-$(facter operatingsystemmajrelease)-$(facter hardwaremodel).facts"
157
193
  mkdir -p $(dirname ${output_file})
@@ -160,6 +196,26 @@ case "${osfamily}" in
160
196
  done
161
197
  zypper --non-interactive remove puppet6-release
162
198
  fi
199
+ if rpm -Uvh ${http_method}://yum.puppet.com/puppet7-release-sles-${operatingsystemmajrelease}.noarch.rpm; then
200
+ for puppet_agent_version in 7.5.0 7.6.1 7.12.0 7.24.0; do
201
+ if zypper --gpg-auto-import-keys --non-interactive install puppet-agent-${puppet_agent_version}; then
202
+ output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter operatingsystem | tr '[:upper:]' '[:lower:]')-$(facter operatingsystemmajrelease)-$(facter hardwaremodel).facts"
203
+ mkdir -p $(dirname ${output_file})
204
+ facter --show-legacy -p -j | tee ${output_file}
205
+ fi
206
+ done
207
+ zypper --non-interactive remove puppet7-release
208
+ fi
209
+ if rpm -Uvh ${http_method}://yum.puppet.com/puppet8-release-sles-${operatingsystemmajrelease}.noarch.rpm; then
210
+ for puppet_agent_version in 8.0.0; do
211
+ if zypper --gpg-auto-import-keys --non-interactive install puppet-agent-${puppet_agent_version}; then
212
+ output_file="/vagrant/$(facter --version | cut -d. -f1,2)/$(facter operatingsystem | tr '[:upper:]' '[:lower:]')-$(facter operatingsystemmajrelease)-$(facter hardwaremodel).facts"
213
+ mkdir -p $(dirname ${output_file})
214
+ facter --show-legacy -p -j | tee ${output_file}
215
+ fi
216
+ done
217
+ zypper --non-interactive remove puppet8-release
218
+ fi
163
219
  ;;
164
220
  'Archlinux')
165
221
  pacman -Syu --noconfirm ruby puppet ruby-bundler base-devel dnsutils facter
@@ -174,6 +230,9 @@ case "${osfamily}" in
174
230
  facter --show-legacy -p -j | tee ${output_file}
175
231
  esac
176
232
 
233
+ # this lower section relies on the ruby version and facter version that came
234
+ # with the last installed puppet_agent per above
235
+ # puppet-agent 8.0.0 has ruby 3.2.2 and it cant install 4.0.0, 4.1.0 facter gem
177
236
  operatingsystem=$(facter operatingsystem | tr '[:upper:]' '[:lower:]')
178
237
  operatingsystemrelease=$(facter operatingsystemrelease)
179
238
  operatingsystemmajrelease=$(facter operatingsystemmajrelease)
@@ -190,7 +249,7 @@ else
190
249
  fi
191
250
  bundle install --path vendor/bundler
192
251
 
193
- for version in 4.0.0 4.1.0 4.2.0; do
252
+ for version in 4.0.0 4.1.0 4.2.0 4.3.0 4.4.0; do
194
253
  FACTER_GEM_VERSION="~> ${version}" bundle update
195
254
  # sometimes all versions of facter are not possible, if the bundle update fails, skip the rest of the loop
196
255
  if [ $? -ne 0 ]; then
@@ -223,4 +282,3 @@ for version in 4.0.0 4.1.0 4.2.0; do
223
282
  FACTER_GEM_VERSION="~> ${version}" bundle exec facter --show-legacy --json | bundle exec ruby -e 'require "json"; jj JSON.parse gets' | tee $output_file ||
224
283
  FACTER_GEM_VERSION="~> ${version}" bundle exec facter --show-legacy --json | tee $output_file
225
284
  done
226
-
data/lib/facterdb/bin.rb CHANGED
@@ -8,7 +8,7 @@ module FacterDB
8
8
  end
9
9
 
10
10
  def run
11
- puts JSON.pretty_generate(FacterDB::get_os_facts('*', @args[0]))
11
+ puts JSON.pretty_generate(FacterDB.get_os_facts('*', @args[0]))
12
12
  end
13
13
  end
14
14
  end
@@ -1,5 +1,5 @@
1
1
  module FacterDB
2
2
  module Version
3
- STRING = '1.21.0'
3
+ STRING = '1.22.0'
4
4
  end
5
5
  end
data/lib/facterdb.rb CHANGED
@@ -6,7 +6,7 @@ module FacterDB
6
6
  class InvalidFilter < RuntimeError; end
7
7
  end
8
8
 
9
- # @return [String] - returns a giant incomprehensible string of concatenated json data
9
+ # @return [String] returns a giant incomprehensible string of concatenated json data
10
10
  def self.database
11
11
  @database ||= "[#{facterdb_fact_files.map { |f| read_json_file(f) }.join(',')}]\n"
12
12
  end
@@ -18,14 +18,14 @@ module FacterDB
18
18
  Thread.current[:facterdb_last_facts_seen] = nil
19
19
  end
20
20
 
21
- # @return [Boolean] - returns true if we should use the default facterdb database, false otherwise
21
+ # @return [Boolean] returns true if we should use the default facterdb database, false otherwise
22
22
  # @note If the user passes anything to the FACTERDB_SKIP_DEFAULTDB environment variable we assume
23
23
  # they want to skip the default db
24
24
  def self.use_defaultdb?
25
25
  ENV['FACTERDB_SKIP_DEFAULTDB'].nil?
26
26
  end
27
27
 
28
- # @return [Boolean] - returns true if we should inject the source file name and file path into the json factsets.
28
+ # @return [Boolean] returns true if we should inject the source file name and file path into the json factsets.
29
29
  # The default is false.
30
30
  def self.inject_source?
31
31
  !ENV['FACTERDB_INJECT_SOURCE'].nil?
@@ -34,9 +34,11 @@ module FacterDB
34
34
  def self.read_json_file(f)
35
35
  content = File.read(f)
36
36
  return content unless inject_source?
37
+
37
38
  # Find the opening brace
38
39
  first_brace = content.index('{')
39
40
  return content if first_brace.nil?
41
+
40
42
  # Inject source file information
41
43
  json_injection = "\"_facterdb_filename\": #{File.basename(f).to_json}, "
42
44
  json_injection += "\"_facterdb_path\": #{File.expand_path(f).to_json}, "
@@ -44,19 +46,21 @@ module FacterDB
44
46
  end
45
47
  private_class_method :read_json_file
46
48
 
47
- # @return [Array[String]] - list of all files found in the default facterdb facts path
49
+ # @return [Array[String]] list of all files found in the default facterdb facts path
48
50
  def self.default_fact_files
49
51
  return [] unless use_defaultdb?
52
+
50
53
  proj_root = File.join(File.dirname(File.dirname(__FILE__)))
51
54
  facts_dir = File.expand_path(File.join(proj_root, 'facts'))
52
- Dir.glob(File.join(facts_dir, "**", '*.facts'))
55
+ Dir.glob(File.join(facts_dir, '**', '*.facts'))
53
56
  end
54
57
 
55
- # @return [Array[String]] - list of all files found in the user supplied facterdb facts path
56
- # @param fact_paths [String] - a comma separated list of paths to search for fact files
57
- def self.external_fact_files(fact_paths = ENV['FACTERDB_SEARCH_PATHS'])
58
+ # @return [Array[String]] list of all files found in the user supplied facterdb facts path
59
+ # @param fact_paths [String] a comma separated list of paths to search for fact files
60
+ def self.external_fact_files(fact_paths = ENV.fetch('FACTERDB_SEARCH_PATHS', nil))
58
61
  fact_paths ||= ''
59
62
  return [] if fact_paths.empty?
63
+
60
64
  paths = fact_paths.split(File::PATH_SEPARATOR).map do |fact_path|
61
65
  unless File.directory?(fact_path)
62
66
  warn("[FACTERDB] Ignoring external facts path #{fact_path} as it is not a directory")
@@ -68,33 +72,36 @@ module FacterDB
68
72
  Dir.glob(paths)
69
73
  end
70
74
 
71
- # @return [Array[String]] - list of all files found in the default facterdb facts path and user supplied path
75
+ # @return [Array[String]] list of all files found in the default facterdb facts path and user supplied path
72
76
  # @note external fact files supplied by the user will take precedence over default fact files found in this gem
73
77
  def self.facterdb_fact_files
74
78
  (external_fact_files + default_fact_files).uniq
75
79
  end
76
80
 
77
- def self.get_os_facts(facter_version='*', filter=[])
81
+ # @deprecated Use {.get_facts} instead.
82
+ def self.get_os_facts(facter_version = '*', filter = [])
78
83
  if facter_version == '*'
79
84
  if filter.is_a?(Array)
80
- filter_str = filter.map { |f| f.map { |k,v | "#{k}=#{v}" }.join(' and ') }.join(' or ')
85
+ filter_str = filter.map { |f| f.map { |k, v| "#{k}=#{v}" }.join(' and ') }.join(' or ')
81
86
  elsif filter.is_a?(Hash)
82
- filter_str = filter.map { |k,v | "#{k}=#{v}" }.join(' and ')
87
+ filter_str = filter.map { |k, v| "#{k}=#{v}" }.join(' and ')
83
88
  elsif filter.is_a?(String)
84
89
  filter_str = filter
85
90
  else
86
91
  raise 'filter must be either an Array a Hash or a String'
87
92
  end
93
+ elsif filter.is_a?(Array)
94
+ filter_str = "facterversion=/^#{facter_version}/ and (#{filter.map do |f|
95
+ f.map do |k, v|
96
+ "#{k}=#{v}"
97
+ end.join(' and ')
98
+ end.join(' or ')})"
99
+ elsif filter.is_a?(Hash)
100
+ filter_str = "facterversion=/^#{facter_version}/ and (#{filter.map { |k, v| "#{k}=#{v}" }.join(' and ')})"
101
+ elsif filter.is_a?(String)
102
+ filter_str = "facterversion=/^#{facter_version}/ and (#{filter})"
88
103
  else
89
- if filter.is_a?(Array)
90
- filter_str = "facterversion=/^#{facter_version}/ and (#{filter.map { |f| f.map { |k,v | "#{k}=#{v}" }.join(' and ') }.join(' or ')})"
91
- elsif filter.is_a?(Hash)
92
- filter_str = "facterversion=/^#{facter_version}/ and (#{filter.map { |k,v | "#{k}=#{v}" }.join(' and ')})"
93
- elsif filter.is_a?(String)
94
- filter_str = "facterversion=/^#{facter_version}/ and (#{filter})"
95
- else
96
- raise 'filter must be either an Array a Hash or a String'
97
- end
104
+ raise 'filter must be either an Array a Hash or a String'
98
105
  end
99
106
 
100
107
  warn "[DEPRECATION] `get_os_facts` is deprecated. Please use `get_facts(#{filter_str})` instead."
@@ -102,14 +109,14 @@ module FacterDB
102
109
  get_facts(filter_str)
103
110
  end
104
111
 
105
- # @return [String] - the string filter
106
- # @param filter [Object] - The filter to convert to jgrep string
107
- def self.generate_filter_str(filter=nil)
112
+ # @return [String] the string filter
113
+ # @param filter [Object] The filter to convert to jgrep string
114
+ def self.generate_filter_str(filter = nil)
108
115
  case filter
109
116
  when ::Array
110
- '(' + filter.map { |f| f.map { |k,v | "#{k}=#{v}" }.join(' and ') }.join(') or (') + ')'
117
+ '(' + filter.map { |f| f.map { |k, v| "#{k}=#{v}" }.join(' and ') }.join(') or (') + ')'
111
118
  when ::Hash
112
- filter.map { |k,v | "#{k}=#{v}" }.join(' and ')
119
+ filter.map { |k, v| "#{k}=#{v}" }.join(' and ')
113
120
  when ::String
114
121
  filter
115
122
  when ::NilClass
@@ -119,8 +126,8 @@ module FacterDB
119
126
  end
120
127
  end
121
128
 
122
- # @return [Boolean] - true if the filter is valid against the jgrep filter validator
123
- # @param filter [Object] - The filter to convert to jgrep string
129
+ # @return [Boolean] true if the filter is valid against the jgrep filter validator
130
+ # @param filters [Object] The filter to convert to jgrep string
124
131
  def self.valid_filters?(filters)
125
132
  filter_str = generate_filter_str(filters)
126
133
  JGrep.validate_filters(filter_str).nil?
@@ -128,14 +135,15 @@ module FacterDB
128
135
  false
129
136
  end
130
137
 
131
- # @return [Array] - array of hashes of facts
132
- # @param filter [Object] - The filter to convert to jgrep string
133
- def self.get_facts(filter=nil, cache=true)
138
+ # @return [Array[Hash[Symbol, Any]]] array of hashes of facts
139
+ # @param filter [Object] The filter to convert to jgrep string
140
+ def self.get_facts(filter = nil, cache = true)
134
141
  if cache && filter && filter == Thread.current[:facterdb_last_filter_seen]
135
142
  return Thread.current[:facterdb_last_facts_seen]
136
143
  end
144
+
137
145
  filter_str = generate_filter_str(filter)
138
- result = JGrep.jgrep(database, filter_str).map { |hash| Hash[hash.map{ |k, v| [k.to_sym, v] }] }
146
+ result = JGrep.jgrep(database, filter_str).map { |hash| hash.map { |k, v| [k.to_sym, v] }.to_h }
139
147
  if cache
140
148
  Thread.current[:facterdb_last_filter_seen] = filter
141
149
  Thread.current[:facterdb_last_facts_seen] = result
@@ -3,22 +3,16 @@ task :rhel_alts do
3
3
  Dir[File.join(__dir__, '..', 'facts', '*', 'centos-*-x86_64.facts')].each do |f|
4
4
  centos_factset = File.read(f)
5
5
 
6
- rhel_path = f.gsub(%r{centos-}, 'redhat-')
7
- File.open(rhel_path, 'w') do |fd|
8
- fd.puts centos_factset.gsub(%r{CentOS}, 'RedHat')
9
- end
6
+ rhel_path = f.gsub('centos-', 'redhat-')
7
+ File.write(rhel_path, centos_factset.gsub('CentOS', 'RedHat'))
10
8
 
11
- oracle_path = f.gsub(%r{centos-}, 'oraclelinux-')
12
- File.open(oracle_path, 'w') do |fd|
13
- fd.puts centos_factset.gsub(%r{CentOS}, 'OracleLinux')
14
- end
9
+ oracle_path = f.gsub('centos-', 'oraclelinux-')
10
+ File.write(oracle_path, centos_factset.gsub('CentOS', 'OracleLinux'))
15
11
 
16
12
  # Scientific isn't going to be updated to 8
17
- if File.basename(f)[%r{-(\d+)-}, 1].to_i <= 7
18
- scientific_path = f.gsub(%r{centos-}, 'scientific-')
19
- File.open(scientific_path, 'w') do |fd|
20
- fd.puts centos_factset.gsub(%r{CentOS}, 'Scientific')
21
- end
22
- end
13
+ next unless File.basename(f)[/-(\d+)-/, 1].to_i <= 7
14
+
15
+ scientific_path = f.gsub('centos-', 'scientific-')
16
+ File.write(scientific_path, centos_factset.gsub('CentOS', 'Scientific'))
23
17
  end
24
18
  end
@@ -16,14 +16,14 @@ describe FacterDB do
16
16
  end
17
17
 
18
18
  let(:facts_24_path) { File.join(project_dir, 'facts', '2.4') }
19
- let(:facts_24_count) { Dir.glob(File.join(facts_24_path,'*.facts')).count }
19
+ let(:facts_24_count) { Dir.glob(File.join(facts_24_path, '*.facts')).count }
20
20
  let(:facts_23_path) { File.join(project_dir, 'facts', '2.3') }
21
- let(:facts_23_count) { Dir.glob(File.join(facts_23_path,'*.facts')).count }
21
+ let(:facts_23_count) { Dir.glob(File.join(facts_23_path, '*.facts')).count }
22
22
 
23
23
  describe '.use_defaultdb?' do
24
24
  subject { described_class.use_defaultdb? }
25
25
 
26
- before(:each) do
26
+ before do
27
27
  ENV.delete('FACTERDB_SKIP_DEFAULTDB')
28
28
  end
29
29
 
@@ -32,7 +32,7 @@ describe FacterDB do
32
32
  end
33
33
 
34
34
  context 'when FACTERDB_SKIP_DEFAULTDB environment variable is set' do
35
- before(:each) do
35
+ before do
36
36
  ENV['FACTERDB_SKIP_DEFAULTDB'] = '1'
37
37
  end
38
38
 
@@ -45,7 +45,7 @@ describe FacterDB do
45
45
 
46
46
  let(:non_directory_path) { File.join('this', 'is', 'not', 'a', 'directory') }
47
47
 
48
- before(:each) do
48
+ before do
49
49
  ENV.delete('FACTERDB_SEARCH_PATHS')
50
50
  allow(File).to receive(:directory?).and_call_original
51
51
  allow(File).to receive(:directory?).with(non_directory_path).and_return(false)
@@ -73,7 +73,7 @@ describe FacterDB do
73
73
 
74
74
  object = defined?(Warning) ? Warning : Kernel
75
75
  allow(object).to receive(:warn).and_call_original
76
- allow(object).to receive(:warn).with(a_string_matching(%r{is not a directory}))
76
+ allow(object).to receive(:warn).with(a_string_matching(/is not a directory/))
77
77
 
78
78
  expect(file_count).to eq(facts_24_count)
79
79
  end
@@ -105,7 +105,7 @@ describe FacterDB do
105
105
  it 'ignores the path that is not a directory' do
106
106
  object = defined?(Warning) ? Warning : Kernel
107
107
  allow(object).to receive(:warn).and_call_original
108
- allow(object).to receive(:warn).with(a_string_matching(%r{is not a directory}))
108
+ allow(object).to receive(:warn).with(a_string_matching(/is not a directory/))
109
109
 
110
110
  expect(file_count).to eq(facts_24_count)
111
111
  end
@@ -116,7 +116,7 @@ describe FacterDB do
116
116
  describe '.default_fact_files' do
117
117
  subject(:default_fact_files) { described_class.default_fact_files }
118
118
 
119
- before(:each) do
119
+ before do
120
120
  ENV.delete('FACTERDB_SKIP_DEFAULTDB')
121
121
  end
122
122
 
@@ -128,7 +128,7 @@ describe FacterDB do
128
128
  end
129
129
 
130
130
  context 'when FACTERDB_SKIP_DEFAULTDB environment variable is set' do
131
- before(:each) do
131
+ before do
132
132
  ENV['FACTERDB_SKIP_DEFAULTDB'] = '1'
133
133
  end
134
134
 
@@ -139,11 +139,11 @@ describe FacterDB do
139
139
  describe '.facterdb_fact_files' do
140
140
  subject(:facterdb_fact_files) { described_class.facterdb_fact_files }
141
141
 
142
- before(:each) do
142
+ before do
143
143
  ENV.delete('FACTERDB_SKIP_DEFAULTDB')
144
144
  end
145
145
 
146
- after(:each) do
146
+ after do
147
147
  ENV.delete('FACTERDB_SEARCH_PATHS')
148
148
  end
149
149
 
@@ -154,7 +154,7 @@ describe FacterDB do
154
154
  end
155
155
 
156
156
  context 'with no loaded fact sets' do
157
- before(:each) do
157
+ before do
158
158
  ENV['FACTERDB_SKIP_DEFAULTDB'] = '1'
159
159
  ENV.delete('FACTERDB_SEARCH_PATHS')
160
160
  end
@@ -166,7 +166,7 @@ describe FacterDB do
166
166
  describe '.database' do
167
167
  subject(:database) { described_class.database }
168
168
 
169
- before(:each) do
169
+ before do
170
170
  ENV.delete('FACTERDB_SKIP_DEFAULTDB')
171
171
  ENV.delete('FACTERDB_SEARCH_PATHS')
172
172
  FacterDB.instance_variable_set(:@database, nil)
@@ -183,7 +183,7 @@ describe FacterDB do
183
183
  context 'when FACTERDB_INJECT_SOURCE environment variable is set' do
184
184
  subject(:json_database) { JSON.parse(database) }
185
185
 
186
- before(:each) do
186
+ before do
187
187
  ENV['FACTERDB_INJECT_SOURCE'] = '1'
188
188
  end
189
189
 
@@ -200,14 +200,14 @@ describe FacterDB do
200
200
  describe '.get_os_facts' do
201
201
  subject(:result) { FacterDB.get_os_facts(facter_version, filter) }
202
202
 
203
- before(:each) do
203
+ before do
204
204
  object = defined?(Warning) ? Warning : Kernel
205
205
  allow(object).to receive(:warn).and_call_original
206
- allow(object).to receive(:warn).with(a_string_matching(%r{`get_os_facts` is deprecated}))
206
+ allow(object).to receive(:warn).with(a_string_matching(/`get_os_facts` is deprecated/))
207
207
  end
208
208
 
209
209
  context 'without parameters' do
210
- subject(:result) { FacterDB.get_os_facts() }
210
+ subject(:result) { FacterDB.get_os_facts }
211
211
 
212
212
  include_examples 'returns a result'
213
213
  end
@@ -216,13 +216,13 @@ describe FacterDB do
216
216
  let(:facter_version) { '*' }
217
217
 
218
218
  context 'with an Array filter' do
219
- let(:filter) { [{ :osfamily => 'Debian' }] }
219
+ let(:filter) { [{ osfamily: 'Debian' }] }
220
220
 
221
221
  include_examples 'returns a result'
222
222
  end
223
223
 
224
224
  context 'with a Hash filter' do
225
- let(:filter) { { :osfamily => 'Debian' } }
225
+ let(:filter) { { osfamily: 'Debian' } }
226
226
 
227
227
  include_examples 'returns a result'
228
228
  end
@@ -237,7 +237,7 @@ describe FacterDB do
237
237
  let(:filter) { true }
238
238
 
239
239
  it 'raises an error' do
240
- expect { result }.to raise_error(%r{filter must be either})
240
+ expect { result }.to raise_error(/filter must be either/)
241
241
  end
242
242
  end
243
243
  end
@@ -247,19 +247,19 @@ describe FacterDB do
247
247
 
248
248
  shared_examples 'returns only the specified version' do
249
249
  it 'only includes fact sets for the specified version' do
250
- expect(result).to all(include(:facterversion => match(%r{\A2\.4})))
250
+ expect(result).to all(include(facterversion: match(/\A2\.4/)))
251
251
  end
252
252
  end
253
253
 
254
254
  context 'with an Array filter' do
255
- let(:filter) { [{ :osfamily => 'Debian' }] }
255
+ let(:filter) { [{ osfamily: 'Debian' }] }
256
256
 
257
257
  include_examples 'returns a result'
258
258
  include_examples 'returns only the specified version'
259
259
  end
260
260
 
261
261
  context 'with a Hash filter' do
262
- let(:filter) { { :osfamily => 'Debian' } }
262
+ let(:filter) { { osfamily: 'Debian' } }
263
263
 
264
264
  include_examples 'returns a result'
265
265
  include_examples 'returns only the specified version'
@@ -276,7 +276,7 @@ describe FacterDB do
276
276
  let(:filter) { true }
277
277
 
278
278
  it 'raises an error' do
279
- expect { result }.to raise_error(%r{filter must be either})
279
+ expect { result }.to raise_error(/filter must be either/)
280
280
  end
281
281
  end
282
282
  end
@@ -284,29 +284,29 @@ describe FacterDB do
284
284
 
285
285
  describe '.valid_filters?' do
286
286
  it 'invalid and false' do
287
- expect( FacterDB.valid_filters?('and')).to be_falsey
287
+ expect(FacterDB.valid_filters?('and')).to be_falsey
288
288
  end
289
289
 
290
290
  it 'valid and true' do
291
- expect( FacterDB.valid_filters?('foo')).to be_truthy
291
+ expect(FacterDB.valid_filters?('foo')).to be_truthy
292
292
  end
293
293
  end
294
294
 
295
295
  describe '.generate_filter_str' do
296
296
  it 'invalid type' do
297
- expect{FacterDB.generate_filter_str(3)}.to raise_error(FacterDB::Errors::InvalidFilter)
297
+ expect { FacterDB.generate_filter_str(3) }.to raise_error(FacterDB::Errors::InvalidFilter)
298
298
  end
299
299
 
300
300
  it 'with string' do
301
- expect(FacterDB.generate_filter_str('foo')).to eq("foo")
301
+ expect(FacterDB.generate_filter_str('foo')).to eq('foo')
302
302
  end
303
303
 
304
304
  it 'with hash' do
305
- expect(FacterDB.generate_filter_str({:osfamily => 'Debian'})).to eq("osfamily=Debian")
305
+ expect(FacterDB.generate_filter_str({ osfamily: 'Debian' })).to eq('osfamily=Debian')
306
306
  end
307
307
 
308
308
  it 'with Array' do
309
- expect(FacterDB.generate_filter_str([:osfamily => 'Debian'])).to eq("(osfamily=Debian)")
309
+ expect(FacterDB.generate_filter_str([osfamily: 'Debian'])).to eq('(osfamily=Debian)')
310
310
  end
311
311
 
312
312
  it 'empty' do
@@ -324,32 +324,32 @@ describe FacterDB do
324
324
  let(:filter) { nil }
325
325
 
326
326
  context 'without parameters' do
327
- include_examples "returns a result"
327
+ include_examples 'returns a result'
328
328
  end
329
329
 
330
330
  context 'with an Array filter' do
331
- let(:filter) { [:osfamily => 'Debian'] }
331
+ let(:filter) { [osfamily: 'Debian'] }
332
332
 
333
- include_examples "returns a result"
333
+ include_examples 'returns a result'
334
334
  end
335
335
 
336
336
  context 'with a Hash filter' do
337
- let(:filter) { { :osfamily => 'Debian' } }
337
+ let(:filter) { { osfamily: 'Debian' } }
338
338
 
339
- include_examples "returns a result"
339
+ include_examples 'returns a result'
340
340
  end
341
341
 
342
342
  context 'with a String filter' do
343
343
  let(:filter) { 'osfamily=Debian' }
344
344
 
345
- include_examples "returns a result"
345
+ include_examples 'returns a result'
346
346
  end
347
347
 
348
348
  context 'with a filter of an unsupported type' do
349
349
  let(:filter) { true }
350
350
 
351
351
  it 'raises an error' do
352
- expect { result }.to raise_error(%r{filter must be either})
352
+ expect { result }.to raise_error(/filter must be either/)
353
353
  end
354
354
  end
355
355
  end