rspec-puppet-facts 1.9.2 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cc1e0c2d29c71210af4d52cd12eb0cf9be062dedd4a6eb59f931379acb12b57
4
- data.tar.gz: b16313f97d45b158fec32cabf3e69519c28b64739964b9856249c24786f595a3
3
+ metadata.gz: 0f494cc52eaa0fbbf2d5952102217bd27c69b34bc666f1659e69c6b39d7b3eae
4
+ data.tar.gz: 31e403eebc924e18e6006742df384c3440f1fa2a58577136fe60cae004ef6f51
5
5
  SHA512:
6
- metadata.gz: 0b3e3465f50d1a9b2b2043aede40cfdc4345c9bf3c6be392b7c9dd7b898b9f4a6352bfde02c5e74761b737a55cb20af6a60cb781c359d2d0108c959bf18be755
7
- data.tar.gz: f5935b8d432442845fa5cd64490cc480ee46ebd341f6be3041f76e20dadc259395d41a28cbcf382531c1a4e27014d850751800afe4a6824f86d41ea773e03615
6
+ metadata.gz: 17a91fcd73abddbda463b69ccb2d508e05a46a0b4b5387b462324562aed7d5051f57ec33265ac1609d180364f0568ea3f5d89ae104195092ced96bf91f065c68
7
+ data.tar.gz: a57b973bed790b73701e65366b5c6276ff9aa6d1b06aefcb81cda664223d9abace313bfbf2a3790cbfa861055695700c868030811bbb36f32f774a27cb4dbc5d
@@ -1,27 +1,28 @@
1
- ---
2
1
  language: ruby
3
2
  sudo: false
4
3
  cache: bundler
5
4
  script:
6
- - bundle exec rake spec
5
+ - bundle exec rake spec
6
+ - bundle exec rake puppet_versions:test
7
+ - bundle exec rake build
7
8
  rvm:
8
- - 1.8.7
9
- - 1.9.3
10
- - 2.0.0
11
- - 2.1.5
12
- env:
13
- - FACTER_GEM_VERSION="~> 1.6.0"
14
- - FACTER_GEM_VERSION="~> 1.7.0"
15
- - FACTER_GEM_VERSION="~> 2.0.0"
16
- - FACTER_GEM_VERSION="~> 2.1.0"
17
- - FACTER_GEM_VERSION="~> 2.2.0"
18
- - FACTER_GEM_VERSION="~> 2.3.0"
19
- - FACTER_GEM_VERSION="~> 2.4.0"
20
- - FACTER_GEM_VERSION="~> 2.0"
9
+ - 2.4
10
+ - 2.5
11
+ - 2.7
21
12
  matrix:
22
13
  fast_finish: true
23
- allow_failures:
24
- - rvm: 1.8.7
25
- - rvm: 1.9.3
14
+ include:
15
+ - rvm: 2.6
16
+ env: COVERAGE=true
26
17
  notifications:
27
18
  email: false
19
+ deploy:
20
+ provider: rubygems
21
+ api_key:
22
+ secure: EGvtHfBYUSjhZjLPGZHHH7Exsu9xyYSNlbI/F9SNRDmY568tBZs1Pw05Pr9dhUXajs3xXPkHQwMEBgNs2Rg2SPc6+dCyvabbNM2U58yj5R5D7+ZdUWC1APgjiDvBhm0N5hihmAnoBKPlmPKMh91OQwKI/8/GOhWAQaIZRnNBzMQ+gwHQ8xIkqt3unxJ/LtRybFDzTF5aMtIHrfE8kV08BLaKUzJptzj7Wt5Ms1zE/2UV1S7DhSvZnxWaWtNZwaQPo9NFhjHr5k3nLIoWi6Ge3khVSukZcAki9cR37Tjeyms5B10hp6jW5c6EgCDQp5VNcD/1LgtTs8fWI6mvTsa3YCyaQdVy2SvhUD88/CohFvLXbGcdkFFzwhPa57aCKazq14fh5epScRzAfGpJojkPcxdc5/fiuZiaPg+jmT/OMFqNjQW1C6m2S+VltlXVCyjT83Ri9J9/AEu708akErhz7XjcspxJL8//KVvS/3o4hjtoef1OXxRN+oh3VGwbEZSiqOmjxr6/AigaYsrWOTdz+OZa4fGYbUb9hMHnq314cjgGUMyzZ9tQN8v4mMZb1ZKZPuqrP6um1Y7WbHQJvwl3sXEUuDN68eyWp103M1nyma6hON4+F+r58kTuoWRmy06ZsaEjz57bFxdnDjB8It8V7pI0bcmfs/q5tMIPw6Gh14w=
23
+ gem: rspec-puppet-facts
24
+ on:
25
+ tags: true
26
+ repo: mcanevet/rspec-puppet-facts
27
+ all_branches: true
28
+ rvm: 2.6
@@ -1,3 +1,53 @@
1
+ ## 2021-01-08 - Release 2.0.1
2
+
3
+ - Cache results from `on_supported_os` to reduce facterdb lookup times on
4
+ full test suite runs.
5
+
6
+ ## 2020-08-04 - Release 2.0.0
7
+
8
+ - Require Ruby >= 2.4
9
+ - Automatically find the latest facter version in the database. Previously a
10
+ very slow and undeterministic approach was taken when an exact match of the
11
+ Facter version wasn't found.. The new approach is to take the closest version
12
+ that is still older than the specified version.
13
+ - Fix Amazon Linux 2 fact lookup
14
+ - Log which facts could not be found
15
+ - Remove json as a dependency
16
+
17
+ ## 2019-12-11 - Release 1.10.0
18
+ - Automatically select the default Facter version based on the Puppet version.
19
+ The available Puppet version is matched against a mapping of Puppet and
20
+ Facter versions included in the `puppet-agent` all-in-one packages to find
21
+ the most suitable Facter version.
22
+
23
+ ## 2019-07-31 - Release 1.9.6
24
+ - Suppress the warning message generated when the Augeas gem is not available.
25
+ - Searching through older Facter releases for a fact set that does not exist no
26
+ longer causes it to hang indefinitely.
27
+ - The `operatingsystemrelease` values are now correctly escaped when building
28
+ the FacterDB filters, allowing the use of `operatingsystemrelease` values
29
+ that contain special regular expression characters like parentheses.
30
+
31
+ ## 2019-07-29 - Release 1.9.5
32
+ - The default version of Facter to search for is now configurable with
33
+ `RSpec.configuration.default_facter_version`.
34
+ - When passing a `:supported_os` hash to `on_supported_os()`, single
35
+ `operatingsystemrelease` values can now be specified as a String rather than
36
+ an Array with a single String.
37
+ - Dependency on the `mcollective-client` gem removed. The `mco_version` fact
38
+ will now optionally be set if the gem is installed.
39
+ - The fact names can now be provided to tests as Strings instead of Symbols by
40
+ setting `RSpec.configuration.facterdb_string_keys` to `true`.
41
+ - Dropped support for Ruby < 2.1.0
42
+
43
+ ## 2019-03-22 - Release 1.9.4
44
+ - Take two on getting rubygems autodeploy going. So much for docs,
45
+ looking at other projects for this one.
46
+ ## 2019-03-22 - Release 1.9.3
47
+ - Various CI updates - [Garrett Honeycutt](https://github.com/ghoneycutt/)
48
+ - Symbolize hash keys in `register_custom_fact`
49
+ [https://github.com/mcanevet/rspec-puppet-facts/pull/77](https://github.com/mcanevet/rspec-puppet-facts/pull/77)
50
+
1
51
  ## 2018-10-24 - Release 1.9.2
2
52
  - Catch the right `LoadError` on missing augeas gem. Thanks to [baurmatt](https://github.com/baurmatt) for the quick fix, and [rodjek](https://github.com/rodjek) for dealing with the testing
3
53
 
data/Gemfile CHANGED
@@ -7,9 +7,3 @@ if facterversion = ENV['FACTER_GEM_VERSION']
7
7
  else
8
8
  gem 'facter', :require => false
9
9
  end
10
-
11
- platforms :ruby_18, :ruby_19 do
12
- gem 'json', '~> 1.0'
13
- gem 'json_pure', '~> 1.0'
14
- gem 'tins', '~> 1.6.0'
15
- end
data/README.md CHANGED
@@ -7,7 +7,7 @@ rspec-puppet-facts
7
7
  [![Gem Downloads](https://img.shields.io/gem/dt/rspec-puppet-facts.svg)](https://rubygems.org/gems/rspec-puppet-facts)
8
8
  [![Coverage Status](https://img.shields.io/coveralls/mcanevet/rspec-puppet-facts.svg)](https://coveralls.io/r/mcanevet/rspec-puppet-facts?branch=master)
9
9
 
10
- Based on an original idea from [apenney](https://github.com/apenney/puppet_facts/), this gem provides a method of running your [rspec-puppet](https://github.com/rodjek/rspec-puppet) tests against the facts for all your supported operating systems (provided by [facterdb](https://github.com/camptocamp/facterdb). This simplifies unit testing because you don't need to specify the facts yourself.
10
+ Based on an original idea from [apenney](https://github.com/apenney/puppet_facts/), this gem provides a method of running your [rspec-puppet](https://github.com/rodjek/rspec-puppet) tests against the facts for all your supported operating systems (provided by [facterdb](https://github.com/camptocamp/facterdb)). This simplifies unit testing because you don't need to specify the facts yourself.
11
11
 
12
12
  ## Installation
13
13
 
@@ -16,7 +16,7 @@ If you're using Bundler to manage gems in your module repository, install `rspec
16
16
  1. Add the following line to your `Gemfile`:
17
17
 
18
18
  ```ruby
19
- gem 'rspec-puppet-facts', '~> 1.7', :require => false
19
+ gem 'rspec-puppet-facts', :require => false
20
20
  ```
21
21
 
22
22
  2. Run `bundle install`.
@@ -64,12 +64,44 @@ describe 'myclass::debian' do
64
64
  ],
65
65
  }
66
66
 
67
- on_supported_os(test_on).each do |os, facts|
68
- let (:facts) { facts }
67
+ on_supported_os(test_on).each do |os, os_facts|
68
+ let (:facts) { os_facts }
69
69
  it { is_expected.to compile.with_all_deps }
70
70
  end
71
71
  end
72
72
  ```
73
+ Ruby 1.9 and later:
74
+ ```ruby
75
+ require 'spec_helper'
76
+
77
+ describe 'myclass::raspbian' do
78
+ test_on = {
79
+ supported_os: [
80
+ {
81
+ 'operatingsystem' => 'Debian',
82
+ 'operatingsystemrelease' => ['10', '9', '8'],
83
+ },
84
+ ],
85
+ }
86
+ on_supported_os(test_on).each do |os, os_facts|
87
+ let(:facts) { os_facts }
88
+ it { is_expected.to compile.with_all_deps }
89
+ end
90
+ end
91
+ ```
92
+
93
+ ## Specifying a default Facter version
94
+
95
+ By default, `os_supported_os` will return the facts for the version of Facter
96
+ that it has loaded (usually this is Facter 2.5.1). This behaviour can be
97
+ overridden by setting the `default_facter_version` RSpec setting in your
98
+ `spec/spec_helper.rb` file.
99
+
100
+ ```ruby
101
+ RSpec.configure do |c|
102
+ c.default_facter_version = '3.14.0'
103
+ end
104
+ ```
73
105
 
74
106
  ## Usage
75
107
 
@@ -126,17 +158,17 @@ require 'spec_helper'
126
158
 
127
159
  describe 'myclass' do
128
160
 
129
- on_supported_os.each do |os, facts|
161
+ on_supported_os.each do |os, os_facts|
130
162
  context "on #{os}" do
131
163
  let(:facts) do
132
- facts
164
+ os_facts
133
165
  end
134
166
 
135
167
  it { is_expected.to compile.with_all_deps }
136
168
  ...
137
169
 
138
170
  # If you need any to specify any operating system specific tests
139
- case facts[:osfamily]
171
+ case os_facts[:osfamily]
140
172
  when 'Debian'
141
173
  ...
142
174
  else
@@ -147,6 +179,56 @@ describe 'myclass' do
147
179
  end
148
180
  ```
149
181
 
182
+ When using roles and profiles to manage a heterogeneous IT estate, you can test a profile that supports several OSes with many `let(:facts)` as long as each is in its own context:
183
+ ```ruby
184
+ require 'spec_helper'
185
+
186
+ describe 'profiles::packagerepos' do
187
+ context 'Raspbian tests' do # We manage hundreds of desk-mounted Pis
188
+ raspbian = {
189
+ hardwaremodels: ['armv7l'],
190
+ supported_os: [
191
+ {
192
+ 'operatingsystem' => 'Debian',
193
+ 'operatingsystemrelease' => ['10', '9', '8'],
194
+ },
195
+ ],
196
+ }
197
+ on_supported_os(raspbian).each do |os, os_facts|
198
+ let(:facts) do
199
+ os_facts
200
+ end
201
+
202
+ context "#{os} with defaults" do
203
+ it { is_expected.to compile }
204
+ # more tests ...
205
+ end
206
+ end
207
+ end
208
+ context 'Ubuntu tests' do # And also a fleet of Ubuntu desktops
209
+ ubuntu = {
210
+ supported_os: [
211
+ {
212
+ 'operatingsystem' => 'Ubuntu',
213
+ 'operatingsystemrelease' => ['18.04', '16.04'],
214
+ },
215
+ ],
216
+ }
217
+
218
+ on_supported_os(ubuntu).each do |os, os_facts|
219
+ let(:facts) do
220
+ os_facts
221
+ end
222
+
223
+ context "#{os} with defaults" do
224
+ it { is_expected.to compile }
225
+ # more tests ...
226
+ end
227
+ end
228
+ end
229
+ end
230
+ ```
231
+
150
232
  ### Testing a type or provider
151
233
 
152
234
  Use `on_supported_os` in the same way for your type and provider unit tests.
@@ -194,17 +276,17 @@ require 'spec_helper'
194
276
 
195
277
  describe 'mytype' do
196
278
 
197
- on_supported_os.each do |os, facts|
279
+ on_supported_os.each do |os, os_facts|
198
280
  context "on #{os}" do
199
281
  let(:facts) do
200
- facts
282
+ os_facts
201
283
  end
202
284
 
203
285
  it { should be_valid_type }
204
286
  ...
205
287
 
206
288
  # If you need to specify any operating system specific tests
207
- case facts[:osfamily]
289
+ case os_facts[:osfamily]
208
290
  when 'Debian'
209
291
  ...
210
292
  else
@@ -262,10 +344,10 @@ require 'spec_helper'
262
344
 
263
345
  describe 'myfunction' do
264
346
 
265
- on_supported_os.each do |os, facts|
347
+ on_supported_os.each do |os, os_facts|
266
348
  context "on #{os}" do
267
349
  let(:facts) do
268
- facts
350
+ os_facts
269
351
  end
270
352
 
271
353
  it { should run.with_params('something').and_return('a value') }
@@ -294,12 +376,12 @@ To override fact values and include additional facts in your tests, merge values
294
376
  require 'spec_helper'
295
377
 
296
378
  describe 'myclass' do
297
- on_supported_os.each do |os, facts|
379
+ on_supported_os.each do |os, os_facts|
298
380
  context "on #{os}" do
299
381
 
300
382
  # Add the 'foo' fact with the value 'bar' to the tests
301
383
  let(:facts) do
302
- facts.merge({
384
+ os_facts.merge({
303
385
  :foo => 'bar',
304
386
  })
305
387
  end
@@ -355,9 +437,9 @@ To do this, pass a lambda as the value for the custom fact. The lambda is passed
355
437
  add_custom_fact :root_home, lambda { |os,facts| "/tmp/#{facts['hostname']}" }
356
438
  ```
357
439
 
358
- ### Suppling Custom External Facts through FacterDB
440
+ ### Supplying Custom External Facts through FacterDB
359
441
  Rspec-puppet-facts uses a gem called facterdb that contains many fact sets of various combinations that are pre generated. Rspec-puppet-facts queries
360
- facterdb to pull out a specific fact set to use when testing.
442
+ facterdb to pull out a specific fact set to use when testing.
361
443
 
362
444
  The default facts are great for many things but there will be times when you need to have custom
363
445
  fact sets that only make sense in your environment or might contain sensitive information.
@@ -366,7 +448,7 @@ To supply external facts to facterdb just set the `FACTERDB_SEARCH_PATHS` enviro
366
448
  paths to your facts.
367
449
 
368
450
  When separating paths please use the default path separator character supported by your OS.
369
- * Unix/Linux/OSX = `:`
451
+ * Unix/Linux/OSX = `:`
370
452
  * Windows = `;`
371
453
 
372
454
  This means you will need to supply your own fact sets in addition to the ones contained in facterdb.
@@ -422,7 +504,7 @@ ENV['FACTERDB_SEARCH_PATHS'] = custom_facts
422
504
  ```
423
505
  ## Running your tests
424
506
 
425
- For most cases, there is no change to how you run your tests. Running `rake spec` will run all the tests against the facts for all the supported operating systems.
507
+ For most cases, there is no change to how you run your tests. Running `rake spec` will run all the tests against the facts for all the supported operating systems. If you are developing a module using the [Puppet Development Kit](https://puppet.com/docs/pdk/1.x/pdk_install.html), `pdk test unit` will run all your tests against the supported operating systems listed in `metadata.json`.
426
508
 
427
509
  If you want to run the tests against the facts for specific operating systems, you can provide a filter in the `SPEC_FACTS_OS` environment variable and only the supported operating systems whose name starts with the specified filter will be used.
428
510
 
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'bundler/gem_tasks'
2
2
 
3
+ PUPPET_VERSIONS_PATH = File.join(__dir__, 'ext', 'puppet_agent_components.json')
4
+
3
5
  begin
4
6
  require 'rspec/core/rake_task'
5
7
  require 'yard'
@@ -14,3 +16,34 @@ task :dump_commit do
14
16
  puts "############ Commits since #{last_tag} ######"
15
17
  puts `git log --pretty=format:"- %s" #{last_tag}..HEAD`
16
18
  end
19
+
20
+ namespace :puppet_versions do
21
+ task :update do
22
+ require 'net/http'
23
+ require 'net/https'
24
+ require 'uri'
25
+
26
+ uri = URI.parse('https://forgeapi.puppet.com/private/versions/puppet-agent')
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = uri.scheme == 'https'
29
+
30
+ request = Net::HTTP::Get.new(uri.request_uri)
31
+ response = http.request(request)
32
+ raise unless response.is_a?(Net::HTTPSuccess)
33
+
34
+ File.open(PUPPET_VERSIONS_PATH, 'wb:UTF-8') do |fd|
35
+ fd.write(response.body)
36
+ end
37
+ end
38
+
39
+ task :test do
40
+ Rake::Task['puppet_versions:update'].invoke
41
+
42
+ output = `git status --porcelain #{PUPPET_VERSIONS_PATH}`
43
+ unless output.strip.empty?
44
+ $stderr.puts "#{PUPPET_VERSIONS_PATH} is out of date."
45
+ $stderr.puts 'Run the puppet_versions:update task to update it and commit the changes.'
46
+ raise
47
+ end
48
+ end
49
+ end
@@ -0,0 +1 @@
1
+ {"1.10.6":{"puppet":"4.10.6","facter":"3.6.6","hiera":"3.3.2","leatherman":"0.12.1","cpp-hocon":"0.1.4","marionette-collective":"2.10.5","cpp-pcp-client":"1.5.3","pxp-agent":"1.5.4","augeas":"1.4.0","curl":"7.51.0","ruby-2.1.9":"2.1.9","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.20","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.7","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"2.0.94"},"1.10.7":{"puppet":"4.10.7","facter":"3.6.7","hiera":"3.3.2","leatherman":"0.12.2","cpp-hocon":"0.1.4","marionette-collective":"2.10.5","cpp-pcp-client":"1.5.4","pxp-agent":"1.5.5","augeas":"1.4.0","curl":"7.51.0","ruby-2.1.9":"2.1.9","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.20","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.7","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18"},"1.10.8":{"puppet":"4.10.8","facter":"3.6.7","hiera":"3.3.2","leatherman":"0.12.2","cpp-hocon":"0.1.4","marionette-collective":"2.10.5","cpp-pcp-client":"1.5.4","pxp-agent":"1.5.5","augeas":"1.4.0","curl":"7.51.0","ruby-2.1.9":"2.1.9","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.20","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.7","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18"},"1.10.9":{"puppet":"4.10.9","facter":"3.6.8","hiera":"3.3.2","leatherman":"0.12.2","cpp-hocon":"0.1.4","marionette-collective":"2.10.6","cpp-pcp-client":"1.5.4","pxp-agent":"1.5.5","augeas":"1.4.0","ruby-2.1.9":"2.1.9","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.20","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","libedit":"20150325-3.1"},"1.10.10":{"puppet":"4.10.10","facter":"3.6.9","hiera":"3.3.2","leatherman":"0.12.3","cpp-hocon":"0.1.4","marionette-collective":"2.10.6","cpp-pcp-client":"1.5.5","pxp-agent":"1.5.6","augeas":"1.4.0","curl":"7.57.0","ruby-2.1.9":"2.1.9","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.20","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"2.0.94"},"1.10.11":{"facter-source":"3.6.9-21-gecf783f","leatherman-source":"0.12.3-3-g784520b","cpp-hocon-source":"0.1.4","puppet-runtime":"201804040","augeas":"1.4.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.1.9":"2.1.9","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.0","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.1.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"1.10.12":{"facter-source":"3.6.10","leatherman-source":"0.12.4","cpp-hocon-source":"0.1.4","puppet-runtime":"201804040","augeas":"1.4.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.1.9":"2.1.9","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.0","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.1.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"1.10.13":{"facter-source":"3.6.10","leatherman-source":"0.12.4","cpp-hocon-source":"0.1.4","puppet-runtime":"201806040","augeas":"1.4.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.1.9":"2.1.9","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.0","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.1.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"1.10.14":{"facter-source":"3.6.10","leatherman-source":"0.12.4","cpp-hocon-source":"0.1.4","puppet-runtime":"201806040","augeas":"1.4.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.1.9":"2.1.9","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.0","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.1.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"1.10.15":{"puppet":"4.10.13","facter":"3.6.11","hiera":"3.3.4","leatherman":"0.12.4","cpp-hocon":"0.1.4","marionette-collective":"2.10.6","cpp-pcp-client":"1.5.8","pxp-agent":"1.5.8","puppet-runtime":"201812140","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.4.0","curl":"7.62.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.1.9":"2.1.9","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.0","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.1.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.1.0":{"puppet":"5.1.0","facter":"3.8.0","hiera":"3.4.0","leatherman":"1.0.0","cpp-hocon":"0.1.5","marionette-collective":"2.11.2","cpp-pcp-client":"1.5.3","pxp-agent":"1.6.1","augeas":"1.8.0","curl":"7.51.0","ruby-2.4.1":"2.4.1","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.24","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.7","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"2.0.94"},"5.2.0":{"puppet":"5.2.0","facter":"3.9.0","hiera":"3.4.1","leatherman":"1.2.1","cpp-hocon":"0.1.5","marionette-collective":"2.11.2","cpp-pcp-client":"1.5.4","pxp-agent":"1.7.0","libwhereami":"0.1.1","augeas":"1.8.1","curl":"7.55.1","ruby-2.4.1":"2.4.1","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.7","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18"},"5.3.0":{"puppet":"5.3.0","facter":"3.9.1","hiera":"3.4.2","leatherman":"1.2.1","cpp-hocon":"0.1.5","marionette-collective":"2.11.3","cpp-pcp-client":"1.5.4","pxp-agent":"1.8.0","libwhereami":"0.1.2","augeas":"1.8.1","curl":"7.55.1","ruby-2.4.1":"2.4.1","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18"},"5.3.1":{"puppet":"5.3.1","facter":"3.9.2","hiera":"3.4.2","leatherman":"1.2.1","cpp-hocon":"0.1.5","marionette-collective":"2.11.3","cpp-pcp-client":"1.5.4","pxp-agent":"1.8.0","libwhereami":"0.1.2","augeas":"1.8.1","curl":"7.55.1","ruby-2.4.1":"2.4.1","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18"},"5.3.2":{"puppet":"5.3.2","facter":"3.9.2","hiera":"3.4.2","leatherman":"1.2.1","cpp-hocon":"0.1.5","marionette-collective":"2.11.3","cpp-pcp-client":"1.5.4","pxp-agent":"1.8.0","libwhereami":"0.1.2","augeas":"1.8.1","curl":"7.55.1","ruby-2.4.1":"2.4.1","ruby-stomp":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18"},"5.3.3":{"puppet":"5.3.3","facter":"3.9.3","hiera":"3.4.2","leatherman":"1.2.1","cpp-hocon":"0.1.5","marionette-collective":"2.11.4","cpp-pcp-client":"1.5.4","pxp-agent":"1.8.0","libwhereami":"0.1.2","augeas":"1.8.1","curl":"7.56.1","ruby-2.4.2":"2.4.2","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.0","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2k","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"2.0.94"},"5.3.4":{"puppet":"5.3.4","facter":"3.9.4","hiera":"3.4.2","leatherman":"1.2.2","cpp-hocon":"0.1.5","marionette-collective":"2.11.4","cpp-pcp-client":"1.5.5","pxp-agent":"1.8.1","libwhereami":"0.1.3","augeas":"1.8.1","curl":"7.57.0","ruby-2.4.3":"2.4.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"1.33.4"},"5.3.5":{"puppet":"5.3.5","facter":"3.9.5","hiera":"3.4.2","leatherman":"1.2.2","cpp-hocon":"0.1.5","marionette-collective":"2.11.4","cpp-pcp-client":"1.5.5","pxp-agent":"1.8.2","libwhereami":"0.1.3","augeas":"1.8.1","curl":"7.58.0","ruby-2.4.3":"2.4.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"2.0.94"},"5.3.6":{"facter-source":"3.9.6","leatherman-source":"1.2.3","cpp-hocon-source":"0.1.5","puppet-runtime":"201804093"},"5.3.7":{"facter-source":"3.9.6","leatherman-source":"1.2.3","cpp-hocon-source":"0.1.5","puppet-runtime":"201806040","augeas":"1.8.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.3.8":{"facter-source":"3.9.6","leatherman-source":"1.2.3","cpp-hocon-source":"0.1.5","puppet-runtime":"201806040","augeas":"1.8.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.4.0":{"puppet":"5.4.0","facter":"3.10.0","hiera":"3.4.2","leatherman":"1.4.0","cpp-hocon":"0.1.5","marionette-collective":"2.11.4","cpp-pcp-client":"1.5.5","pxp-agent":"1.8.2","libwhereami":"0.2.0","augeas":"1.10.1","curl":"7.58.0","ruby-2.4.3":"2.4.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-net-ssh":"4.1.0","rubygem-hocon":"1.2.5","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.2","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-gettext-setup":"0.28","ruby-shadow":"2.3.3","ruby-augeas":"0.5.0","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","libxml2":"2.9.4","libxslt":"1.1.29","virt-what":"1.14","dmidecode":"2.12","shellpath":"2015-09-18","ruby-selinux":"2.0.94"},"5.5.0":{"facter-source":"3.11.0","leatherman-source":"1.4.0","cpp-hocon-source":"0.1.5","puppet-runtime":"201803070","augeas":"1.4.0","curl":"7.58.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.1.9":"2.1.9","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp-1.3.3":"1.3.3","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.0","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-net-ssh":"4.1.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.5.1":{"facter-source":"3.11.1","leatherman-source":"1.4.1","cpp-hocon-source":"0.1.5","puppet-runtime":"201804100","augeas":"1.10.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.2":{"facter-source":"3.11.2","leatherman-source":"1.4.1","cpp-hocon-source":"0.1.5","puppet-runtime":"201806040","augeas":"1.10.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.3":{"facter-source":"3.11.2","leatherman-source":"1.4.1","cpp-hocon-source":"0.1.5","puppet-runtime":"201806040","augeas":"1.10.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.4":{"facter-source":"3.11.3","leatherman-source":"1.4.2","cpp-hocon-source":"0.1.7","puppet-runtime":"201806220","augeas":"1.10.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.6":{"facter-source":"3.11.4","leatherman-source":"1.4.2","cpp-hocon-source":"0.1.7","puppet-runtime":"201808140","augeas":"1.10.1","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.3.3","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.7":{"facter-source":"3.11.5","leatherman-source":"1.4.4","cpp-hocon-source":"0.1.7","puppet-runtime":"201810110","augeas":"1.10.1","curl":"7.61.1","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.8":{"facter-source":"3.11.6","leatherman-source":"1.4.4","cpp-hocon-source":"0.1.7","puppet-runtime":"201810110","augeas":"1.10.1","curl":"7.61.1","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.4":"2.4.4","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.9":{"puppet":"5.5.9","facter":"3.11.7","hiera":"3.4.6","leatherman":"1.4.4","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.6","libwhereami":"0.2.2","puppet-runtime":"201812201","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18"},"5.5.10":{"puppet":"5.5.10","facter":"3.11.7","hiera":"3.4.6","leatherman":"1.4.4","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.6","libwhereami":"0.2.2","puppet-runtime":"201812201","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18"},"5.5.11":{"puppet":"5.5.11","facter":"3.11.8","hiera":"3.4.6","leatherman":"1.4.4","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.7","libwhereami":"0.2.2","puppet-runtime":"201903080","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.11.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.5":"2.4.5","ruby-augeas":"0.5.0","ruby-selinux":"1.33.4","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.12":{"puppet":"5.5.12","facter":"3.11.8","hiera":"3.4.6","leatherman":"1.4.6","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.7","libwhereami":"0.2.2","puppet-runtime":"201903080","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.11.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.5":"2.4.5","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.13":{"puppet":"5.5.13","facter":"3.11.8","hiera":"3.4.6","leatherman":"1.4.6","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.7","libwhereami":"0.2.2","puppet-runtime":"201904021","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.11.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.0.2":"1.0.2n","puppet-ca-bundle":"1.0.8","ruby-2.4.5":"2.4.5","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2"},"5.5.14":{"puppet":"5.5.14","facter":"3.11.8","hiera":"3.4.6","leatherman":"1.4.6","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.7-3-g2b5d5d1","libwhereami":"0.2.2","puppet-runtime":"201904250","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.11.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.0.2":"1.0.2r","puppet-ca-bundle":"1.0.8","ruby-2.4.5":"2.4.5","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.5.15":{"puppet":"5.5.15","facter":"3.11.9","hiera":"3.4.6","leatherman":"1.4.7","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.9","libwhereami":"0.2.2","puppet-runtime":"201906190","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.12.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.0.2":"1.0.2r","puppet-ca-bundle":"1.0.8","ruby-2.4.5":"2.4.5","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.5.16":{"puppet":"5.5.16","facter":"3.11.9","hiera":"3.4.6","leatherman":"1.4.7","cpp-hocon":"0.1.7","marionette-collective":"2.12.4","cpp-pcp-client":"1.5.8","pxp-agent":"1.9.10","libwhereami":"0.2.2","puppet-runtime":"201907080","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.12.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.0.2":"1.0.2r","puppet-ca-bundle":"1.0.8","ruby-2.4.5":"2.4.5","ruby-augeas":"0.5.0","ruby-selinux":"1.33.4","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.30","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.5.17":{"puppet":"5.5.17","facter":"3.11.10","hiera":"3.4.6","leatherman":"1.4.8","cpp-hocon":"0.1.7","marionette-collective":"2.12.5","cpp-pcp-client":"1.5.9","pxp-agent":"1.9.11","libwhereami":"0.2.3","puppet-runtime":"201910020","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.12.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.0.2":"1.0.2t","puppet-ca-bundle":"1.0.8","ruby-2.4.9":"2.4.9","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.31","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1"},"5.5.18":{"puppet":"5.5.18","facter":"3.11.11","hiera":"3.4.6","leatherman":"1.4.10","cpp-hocon":"0.2.0","marionette-collective":"2.12.5","cpp-pcp-client":"1.6.1","pxp-agent":"1.9.12","libwhereami":"0.2.3","puppet-runtime":"202001090","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","openssl-lib":"1.0.2t","puppet-ca-bundle":"1.0.8","ruby-2.4.9":"2.4.9","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.31","rubygem-hiera-eyaml":"3.1.1","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"5.5.19":{"puppet":"5.5.19","facter":"3.11.12","hiera":"3.4.6","leatherman":"1.4.10","cpp-hocon":"0.2.0","marionette-collective":"2.12.5","cpp-pcp-client":"1.6.1","pxp-agent":"1.9.12","libwhereami":"0.2.3","puppet-runtime":"202003021","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.12.0","boost":"1.69.0","curl":"7.68.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","openssl-lib":"1.0.2u","puppet-ca-bundle":"1.0.8","ruby-2.4.9":"2.4.9","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.31","rubygem-hiera-eyaml":"3.2.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"5.5.20":{"puppet":"5.5.20","facter":"3.11.13","hiera":"3.4.6","leatherman":"1.4.12","cpp-hocon":"0.2.0","marionette-collective":"2.12.5","cpp-pcp-client":"1.6.4","pxp-agent":"1.9.12","libwhereami":"0.2.3","puppet-runtime":"202004210","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","augeas":"1.12.0","boost":"1.69.0","curl":"7.68.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1g","openssl-lib":"1.0.2u","puppet-ca-bundle":"1.0.8","ruby-2.4.10":"2.4.10","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","ruby-stomp":"1.4.4","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-gettext-setup":"0.34","rubygem-hiera-eyaml":"3.2.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-locale":"2.1.3","rubygem-multi_json":"1.14.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"5.5.21":{"openssl-1.1.1":"1.1.1g","curl":"7.71.0","puppet-ca-bundle":"1.0.9","ruby-2.4.10":"2.4.10","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.9","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-gettext-setup":"0.34","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.0","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","ruby-stomp":"1.4.4","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","openssl-lib":"1.0.2u","puppet":"5.5.21","facter":"3.11.14","hiera":"3.4.6","leatherman":"1.4.13","cpp-hocon":"0.3.0","marionette-collective":"2.12.5","cpp-pcp-client":"1.6.5","pxp-agent":"1.9.13","libwhereami":"0.2.4","puppet-runtime":"202006300","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18"},"5.5.22":{"openssl-1.1.1":"1.1.1g","curl":"7.72.0","puppet-ca-bundle":"1.0.9","ruby-2.4.10":"2.4.10","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.9","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"0.1.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-gettext-setup":"0.34","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","ruby-stomp":"1.4.4","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","openssl-lib":"1.0.2u","puppet":"5.5.22","facter":"3.11.14","hiera":"3.4.6","leatherman":"1.4.13","cpp-hocon":"0.3.0","marionette-collective":"2.12.5","cpp-pcp-client":"1.6.5","pxp-agent":"1.9.14","libwhereami":"0.2.4","puppet-runtime":"202010060","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18"},"6.0.0":{"facter-source":"3.12.0","leatherman-source":"1.5.0","cpp-hocon-source":"0.2.0","puppet-runtime":"201809130","augeas":"1.10.1","boost":"1.67.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.1.0":"1.1.0h","puppet-ca-bundle":"1.0.8","ruby-2.5.1":"2.5.1","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.1":{"facter-source":"3.12.0","leatherman-source":"1.5.0","cpp-hocon-source":"0.2.0","puppet-runtime":"201809260","augeas":"1.10.1","boost":"1.67.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.1.0":"1.1.0h","puppet-ca-bundle":"1.0.8","ruby-2.5.1":"2.5.1","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.2":{"facter-source":"3.12.0","leatherman-source":"1.5.1","cpp-hocon-source":"0.2.0","puppet-runtime":"201810011","augeas":"1.10.1","boost":"1.67.0","curl":"7.59.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.1.0":"1.1.0h","puppet-ca-bundle":"1.0.8","ruby-2.5.1":"2.5.1","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.3":{"facter-source":"3.12.1","leatherman-source":"1.5.2","cpp-hocon-source":"0.2.0","puppet-runtime":"201810110","augeas":"1.10.1","boost":"1.67.0","curl":"7.61.1","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.1.0":"1.1.0h","puppet-ca-bundle":"1.0.8","ruby-2.5.1":"2.5.1","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.4":{"facter-source":"3.12.1","leatherman-source":"1.5.3","cpp-hocon-source":"0.2.0","puppet-runtime":"201810110","augeas":"1.10.1","boost":"1.67.0","curl":"7.61.1","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.1.0":"1.1.0h","puppet-ca-bundle":"1.0.8","ruby-2.5.1":"2.5.1","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.5":{"puppet":"6.0.5","facter":"3.12.3","hiera":"3.4.6","leatherman":"1.5.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.10.4","libwhereami":"0.2.2","puppet-runtime":"201812201","puppet-resource_api":"v1.6.3","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.3","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.1","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.1","module-puppetlabs-yumrepo_core":"1.0.1","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1"},"6.0.7":{"puppet":"6.0.7","facter":"3.12.4","hiera":"3.4.6","leatherman":"1.5.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.10.5","libwhereami":"0.2.2","puppet-runtime":"201903080","puppet-resource_api":"v1.6.4","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","boost":"1.67.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.8":{"puppet":"6.0.8","facter":"3.12.4","hiera":"3.4.6","leatherman":"1.5.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.10.5","libwhereami":"0.2.2","puppet-runtime":"201904021","puppet-resource_api":"v1.6.4","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","boost":"1.67.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.0.9":{"puppet":"6.0.9","facter":"3.12.4","hiera":"3.4.6","leatherman":"1.5.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.10.6","libwhereami":"0.2.2","puppet-runtime":"201904240","puppet-resource_api":"v1.6.4","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1"},"6.0.10":{"puppet":"6.0.10","facter":"3.12.5","hiera":"3.4.6","leatherman":"1.5.5","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.10.7","libwhereami":"0.2.2","puppet-runtime":"201907080","puppet-resource_api":"1.6.5","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.1.0":{"facter-source":"3.12.2","leatherman-source":"1.5.4","cpp-hocon-source":"0.2.0","puppet-runtime":"201812140","augeas":"1.10.1","boost":"1.67.0","curl":"7.62.0","libxml2":"2.9.4","libxslt":"1.1.29","openssl-1.1.0":"1.1.0h","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.2.0":{"puppet":"6.2.0","facter":"3.12.3","hiera":"3.5.0","leatherman":"1.5.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.10.4","libwhereami":"0.2.2","puppet-runtime":"201901130","puppet-resource_api":"v1.6.3-7-g2419162","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.1","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.10.1","boost":"1.67.0","curl":"7.62.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.3.0":{"puppet":"6.3.0","facter":"3.13.0","hiera":"3.5.0","leatherman":"1.5.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.11.0","libwhereami":"0.2.2","puppet-runtime":"201902070","puppet-resource_api":"v1.7.0","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.1","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","boost":"1.67.0","curl":"7.62.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"2.1.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.4.0":{"puppet":"6.4.0","facter":"3.13.1","hiera":"3.5.0","leatherman":"1.6.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.11.0","libwhereami":"0.2.2","puppet-runtime":"201903192","puppet-resource_api":"v1.8.1","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","boost":"1.67.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-trollop":"2.1.2","yaml-cpp":"yaml-cpp-0.6.2"},"6.4.1":{"puppet":"6.4.1","facter":"3.13.2","hiera":"3.5.0","leatherman":"1.6.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.11.0","libwhereami":"0.2.2","puppet-runtime":"201904091","puppet-resource_api":"v1.8.1-9-gd7091b4","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.29","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1"},"6.4.2":{"puppet":"6.4.2","facter":"3.13.2","hiera":"3.5.0","leatherman":"1.6.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.11.1","libwhereami":"0.2.2","puppet-runtime":"201904240","puppet-resource_api":"1.8.2-6-gc8c913b","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","boost":"1.67.0","curl":"7.64.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep-merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.4.3":{"puppet":"6.4.3","facter":"3.13.3","hiera":"3.5.0","leatherman":"1.6.1","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.11.3","libwhereami":"0.2.2","puppet-runtime":"201907082","puppet-resource_api":"1.8.6","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.4.4":{"puppet":"6.4.4","facter":"3.13.4","hiera":"3.5.0","leatherman":"1.6.2","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.11.4","libwhereami":"0.2.3","puppet-runtime":"201910040","puppet-resource_api":"1.8.9","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.4.5":{"puppet":"6.4.5","facter":"3.13.5","hiera":"3.5.0","leatherman":"1.6.4","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.11.5","libwhereami":"0.2.3","puppet-runtime":"202001090","puppet-resource_api":"1.8.11","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.6","module-puppetlabs-zfs_core":"1.0.4","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.1.1","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.5.0":{"puppet":"6.5.0","facter":"3.14.0","hiera":"3.5.0","leatherman":"1.7.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.11.2","libwhereami":"0.2.2","puppet-runtime":"201906061","puppet-resource_api":"1.8.4","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.11.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.6.0":{"puppet":"6.6.0","facter":"3.14.1","hiera":"3.5.0","leatherman":"1.7.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.1","libwhereami":"0.2.2","puppet-runtime":"201906190","puppet-resource_api":"1.8.5","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.7.0":{"puppet":"6.7.0","facter":"3.14.2","hiera":"3.5.0","leatherman":"1.6.1-7-gdf19902","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.2","libwhereami":"0.2.2","puppet-runtime":"201907151","puppet-resource_api":"1.8.6","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.7.1":{"puppet":"6.7.1","facter":"3.14.2","hiera":"3.5.0","leatherman":"1.6.1-7-gdf19902","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.2","libwhereami":"0.2.2","puppet-runtime":"201907151","puppet-resource_api":"1.8.6","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.7.2":{"puppet":"6.7.2","facter":"3.14.2","hiera":"3.5.0","leatherman":"1.6.1-7-gdf19902","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.2","libwhereami":"0.2.2","puppet-runtime":"201907151","puppet-resource_api":"1.8.6","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.0","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.8.0":{"puppet":"6.8.0","facter":"3.14.3","hiera":"3.5.0","leatherman":"1.7.1","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.3","libwhereami":"0.2.2","puppet-runtime":"201908090","puppet-resource_api":"1.8.6","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.2","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.8.1":{"puppet":"6.8.1","facter":"3.14.3","hiera":"3.5.0","leatherman":"1.7.1","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.3","libwhereami":"0.2.2","puppet-runtime":"201908090","puppet-resource_api":"1.8.6","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.2","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.9.0":{"puppet":"6.9.0","facter":"3.14.4","hiera":"3.5.0-3-gcb2430e","leatherman":"1.7.2","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.12.4","libwhereami":"0.3.0","puppet-runtime":"201909040","puppet-resource_api":"1.8.7","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.2","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.3":"2.5.3","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.10.0":{"puppet":"6.10.0","facter":"3.14.5","hiera":"3.6.0","leatherman":"1.7.3","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.0","pxp-agent":"1.13.0","libwhereami":"0.3.1","puppet-runtime":"201909240","puppet-resource_api":"1.8.8","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.2","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.65.1","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1a","puppet-ca-bundle":"1.0.8","ruby-2.5.6":"2.5.6","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.10.1":{"puppet":"6.10.1","facter":"3.14.5","hiera":"3.6.0","leatherman":"1.8.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.15.0","libwhereami":"0.3.1","puppet-runtime":"201910040","puppet-resource_api":"1.8.9","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.4","module-puppetlabs-cron_core":"1.0.2","module-puppetlabs-host_core":"1.0.2","module-puppetlabs-mount_core":"1.0.2","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.1","module-puppetlabs-sshkeys_core":"1.0.2","module-puppetlabs-yumrepo_core":"1.0.3","module-puppetlabs-zfs_core":"1.0.1","module-puppetlabs-zone_core":"1.0.1","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.2.5","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.11.0":{"puppet":"6.11.0","facter":"3.14.6","facter-ng":"0.0.10","hiera":"3.6.0","leatherman":"1.9.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.15.1","libwhereami":"0.3.1","puppet-runtime":"201911050","puppet-resource_api":"1.8.10","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.4","module-puppetlabs-zfs_core":"1.0.4","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-selinux":"2.0.94","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-thor":"0.20.3","yaml-cpp":"yaml-cpp-0.6.2"},"6.11.1":{"puppet":"6.11.1","facter":"3.14.6","facter-ng":"0.0.10","hiera":"3.6.0","leatherman":"1.9.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.15.1","libwhereami":"0.3.1","puppet-runtime":"201911050","puppet-resource_api":"1.8.10","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.4","module-puppetlabs-zfs_core":"1.0.4","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.0.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-thor":"0.20.3","yaml-cpp":"yaml-cpp-0.6.2"},"6.12.0":{"puppet":"6.12.0","facter":"3.14.7","facter-ng":"0.0.10","hiera":"3.6.0","leatherman":"1.10.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.15.1","libwhereami":"0.4.0","puppet-runtime":"202001090","puppet-resource_api":"1.8.11","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.6","module-puppetlabs-zfs_core":"1.0.4","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.67.0","curl":"7.66.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.1.1","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-thor":"0.20.3","yaml-cpp":"yaml-cpp-0.6.2"},"6.13.0":{"puppet":"6.13.0","facter":"3.14.8","facter-ng":"v4.0.5-23-g8693b81","hiera":"3.6.0","leatherman":"1.10.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.15.2","libwhereami":"0.4.0","puppet-runtime":"202002100","puppet-resource_api":"1.8.12","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.6","module-puppetlabs-zfs_core":"1.0.4","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.69.0","curl":"7.68.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-ffi":"1.9.25","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.2.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-sys-filesystem":"1.3.2","rubygem-text":"1.3.1","rubygem-thor":"1.0.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.14.0":{"puppet":"6.14.0","facter":"3.14.9","facter-ng":"v4.0.8.pre-26-gafe0d80","hiera":"3.6.0","leatherman":"1.10.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.6.1","pxp-agent":"1.15.2","libwhereami":"0.4.0","puppet-runtime":"202003021","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.6","module-puppetlabs-zfs_core":"1.0.4","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.69.0","curl":"7.68.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1d","puppet-ca-bundle":"1.0.8","ruby-2.5.7":"2.5.7","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-ffi":"1.9.25","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.2.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.2","rubygem-multi_json":"1.13.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-sys-filesystem":"1.3.2","rubygem-text":"1.3.1","rubygem-thor":"1.0.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.15.0":{"puppet":"6.15.0","facter":"3.14.10","facter-ng":"4.0.17-3-gdf99078","hiera":"3.6.0","leatherman":"1.12.0","cpp-hocon":"0.2.0","cpp-pcp-client":"1.7.2","pxp-agent":"1.15.3","libwhereami":"0.4.0","puppet-runtime":"202004210","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.3","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.0.5","module-puppetlabs-zone_core":"1.0.3","augeas":"1.12.0","boost":"1.69.0","curl":"7.68.0","libxml2":"2.9.8","libxslt":"1.1.33","openssl-1.1.1":"1.1.1g","puppet-ca-bundle":"1.0.8","ruby-2.5.8":"2.5.8","ruby-augeas":"0.5.0","ruby-selinux":"2.9","ruby-shadow":"2.5.0","rubygem-concurrent-ruby":"1.1.5","rubygem-deep_merge":"1.0.1","rubygem-fast_gettext":"1.1.2","rubygem-ffi":"1.12.2","rubygem-gettext":"3.2.2","rubygem-hiera-eyaml":"3.2.0","rubygem-highline":"1.6.21","rubygem-hocon":"1.3.0","rubygem-httpclient":"2.8.3","rubygem-locale":"2.1.3","rubygem-multi_json":"1.14.1","rubygem-net-ssh":"4.2.0","rubygem-optimist":"3.0.0","rubygem-semantic_puppet":"1.0.2","rubygem-sys-filesystem":"1.3.2","rubygem-text":"1.3.1","rubygem-thor":"1.0.1","yaml-cpp":"yaml-cpp-0.6.2"},"6.16.0":{"openssl-1.1.1":"1.1.1g","curl":"7.68.0","puppet-ca-bundle":"1.0.9","ruby-2.5.8":"2.5.8","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.0.94","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-concurrent-ruby":"1.1.5","rubygem-ffi":"1.12.2","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.0","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","rubygem-httpclient":"2.8.3","rubygem-thor":"1.0.1","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.16.0","facter":"3.14.11","facter-ng":"4.0.24","hiera":"3.6.0","leatherman":"1.12.0","cpp-hocon":"0.2.2","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.4","libwhereami":"0.5.0","puppet-runtime":"202005260","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.4","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.0.5","module-puppetlabs-zone_core":"1.0.3"},"6.17.0":{"openssl-1.1.1":"1.1.1g","curl":"7.71.0","puppet-ca-bundle":"1.0.9","ruby-2.5.8":"2.5.8","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.9","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-concurrent-ruby":"1.1.5","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","rubygem-httpclient":"2.8.3","rubygem-thor":"1.0.1","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.17.0","facter":"3.14.12","facter-ng":"4.0.26-13-g68068b2","hiera":"3.6.0","leatherman":"1.12.1","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.5","libwhereami":"0.5.0","puppet-runtime":"202007030","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.4","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.0.5","module-puppetlabs-zone_core":"1.0.3"},"6.18.0":{"openssl-1.1.1":"1.1.1g","curl":"7.71.1","puppet-ca-bundle":"1.0.9","ruby-2.5.8":"2.5.8","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.9","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-concurrent-ruby":"1.1.5","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","rubygem-httpclient":"2.8.3","rubygem-thor":"1.0.1","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.18.0","facter":"3.14.13","facter-ng":"4.0.33","hiera":"3.6.0","leatherman":"1.12.1","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.6","libwhereami":"0.5.0","puppet-runtime":"202008140","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.4","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.0.5","module-puppetlabs-zone_core":"1.0.3"},"6.19.0":{"openssl-1.1.1":"1.1.1g","curl":"7.72.0","puppet-ca-bundle":"1.0.9","ruby-2.5.8":"2.5.8","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.0.94","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-concurrent-ruby":"1.1.5","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","rubygem-httpclient":"2.8.3","rubygem-thor":"1.0.1","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.19.0","facter":"3.14.14","facter-ng":"4.0.43","hiera":"3.6.0","leatherman":"1.12.2","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.7","libwhereami":"0.5.0","puppet-runtime":"202010130","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.4","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.0.5","module-puppetlabs-zone_core":"1.0.3"},"6.19.1":{"openssl-1.1.1":"1.1.1g","curl":"7.72.0","puppet-ca-bundle":"1.0.9","ruby-2.5.8":"2.5.8","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","ruby-shadow":"2.5.0","ruby-selinux":"2.9","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.2","rubygem-text":"1.3.1","rubygem-locale":"2.1.3","rubygem-gettext":"3.2.2","rubygem-fast_gettext":"1.1.2","rubygem-concurrent-ruby":"1.1.5","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"1.6.21","rubygem-hiera-eyaml":"3.2.0","rubygem-httpclient":"2.8.3","rubygem-thor":"1.0.1","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.19.1","facter":"3.14.14","facter-ng":"4.0.43","hiera":"3.6.0","leatherman":"1.12.2","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.7","libwhereami":"0.5.0","puppet-runtime":"202010130","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.0.5","module-puppetlabs-cron_core":"1.0.4","module-puppetlabs-host_core":"1.0.3","module-puppetlabs-mount_core":"1.0.4","module-puppetlabs-scheduled_task":"1.0.0","module-puppetlabs-selinux_core":"1.0.4","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.0.5","module-puppetlabs-zone_core":"1.0.3"}}
@@ -2,12 +2,13 @@ require 'puppet'
2
2
  require 'facter'
3
3
  require 'facterdb'
4
4
  require 'json'
5
- require 'mcollective'
6
5
 
7
6
  # The purpose of this module is to simplify the Puppet
8
7
  # module's RSpec tests by looping through all supported
9
8
  # OS'es and their facts data which is received from the FacterDB.
10
9
  module RspecPuppetFacts
10
+ FACTS_CACHE = {}
11
+
11
12
  # Use the provided options or the data from the metadata.json file
12
13
  # to find a set of matching facts in the FacterDB.
13
14
  # OS names and facts can be used in the Puppet RSpec tests
@@ -31,31 +32,42 @@ module RspecPuppetFacts
31
32
  opts[:hardwaremodels] ||= ['x86_64']
32
33
  opts[:hardwaremodels] = [opts[:hardwaremodels]] unless opts[:hardwaremodels].is_a? Array
33
34
  opts[:supported_os] ||= RspecPuppetFacts.meta_supported_os
34
- opts[:facterversion] ||= Facter.version
35
+ opts[:facterversion] ||= RSpec.configuration.default_facter_version
36
+
37
+ # This should list all variables that on_supported_os_implementation uses
38
+ cache_key = [
39
+ opts.to_s,
40
+ RspecPuppetFacts.custom_facts.to_s,
41
+ RspecPuppetFacts.spec_facts_os_filter,
42
+ RspecPuppetFacts.spec_facts_strict?,
43
+ ]
35
44
 
45
+ result = FACTS_CACHE[cache_key] ||= on_supported_os_implementation(opts)
46
+
47
+ # Marshalling is used to get unique instances which is needed for test
48
+ # isolation when facts are overridden.
49
+ Marshal.load(Marshal.dump(result))
50
+ end
51
+
52
+ # The real implementation of on_supported_os.
53
+ #
54
+ # Generating facts is slow - this allows memoization of the facts between
55
+ # multiple calls.
56
+ #
57
+ # @api private
58
+ def on_supported_os_implementation(opts = {})
36
59
  unless (facterversion = opts[:facterversion]) =~ /\A\d+\.\d+(?:\.\d+)*\z/
37
60
  raise ArgumentError, ":facterversion must be in the format 'n.n' or " \
38
61
  "'n.n.n' (n is numeric), not '#{facterversion}'"
39
62
  end
40
63
 
41
- facter_version_filter = RspecPuppetFacts.facter_version_to_filter(facterversion)
42
- db = FacterDB.get_facts({ :facterversion => facter_version_filter })
43
-
44
- version = facterversion
45
- while db.empty? && version !~ /\d+\.0\.\d+/
46
- version = RspecPuppetFacts.down_facter_version(version)
47
- facter_version_filter = RspecPuppetFacts.facter_version_to_filter(version)
48
- db = FacterDB.get_facts({ :facterversion => facter_version_filter})
49
- end
50
-
51
-
52
64
  filter = []
53
65
  opts[:supported_os].map do |os_sup|
54
66
  if os_sup['operatingsystemrelease']
55
- os_sup['operatingsystemrelease'].map do |operatingsystemmajrelease|
67
+ Array(os_sup['operatingsystemrelease']).map do |operatingsystemmajrelease|
56
68
  opts[:hardwaremodels].each do |hardwaremodel|
57
69
 
58
- os_release_filter = "/^#{operatingsystemmajrelease.split(' ')[0]}/"
70
+ os_release_filter = "/^#{Regexp.escape(operatingsystemmajrelease.split(' ')[0])}/"
59
71
  if os_sup['operatingsystem'] =~ /BSD/i
60
72
  hardwaremodel = 'amd64'
61
73
  elsif os_sup['operatingsystem'] =~ /Solaris/i
@@ -68,20 +80,22 @@ module RspecPuppetFacts
68
80
  "/^#{operatingsystemmajrelease}-/"
69
81
  end
70
82
  elsif os_sup['operatingsystem'] =~ /Windows/i
71
- hardwaremodel = version =~ /^[12]\./ ? 'x64' : 'x86_64'
83
+ hardwaremodel = facterversion =~ /^[12]\./ ? 'x64' : 'x86_64'
72
84
  os_sup['operatingsystem'] = os_sup['operatingsystem'].downcase
73
85
  operatingsystemmajrelease = operatingsystemmajrelease[/\A(?:Server )?(.+)/i, 1]
74
86
 
75
87
  # force quoting because windows releases can contain spaces
76
88
  os_release_filter = "\"#{operatingsystemmajrelease}\""
77
89
 
78
- if operatingsystemmajrelease == '2016' && Puppet::Util::Package.versioncmp(version, '3.4') < 0
90
+ if operatingsystemmajrelease == '2016' && Puppet::Util::Package.versioncmp(facterversion, '3.4') < 0
79
91
  os_release_filter = '/^10\\.0\\./'
80
92
  end
93
+ elsif os_sup['operatingsystem'] =~ /Amazon/i
94
+ # Tighten the regex for Amazon Linux 2 so that we don't pick up Amazon Linux 2016 or 2017 facts
95
+ os_release_filter = "/^2$/" if operatingsystemmajrelease == '2'
81
96
  end
82
97
 
83
98
  filter << {
84
- :facterversion => facter_version_filter,
85
99
  :operatingsystem => os_sup['operatingsystem'],
86
100
  :operatingsystemrelease => os_release_filter,
87
101
  :hardwaremodel => hardwaremodel,
@@ -91,7 +105,6 @@ module RspecPuppetFacts
91
105
  else
92
106
  opts[:hardwaremodels].each do |hardwaremodel|
93
107
  filter << {
94
- :facterversion => facter_version_filter,
95
108
  :operatingsystem => os_sup['operatingsystem'],
96
109
  :hardwaremodel => hardwaremodel,
97
110
  }
@@ -99,20 +112,40 @@ module RspecPuppetFacts
99
112
  end
100
113
  end
101
114
 
115
+ # FacterDB may have newer versions of facter data for which it contains a subset of all possible
116
+ # facter data (see FacterDB 0.5.2 for Facter releases 3.8 and 3.9). In this situation we need to
117
+ # cycle through and downgrade Facter versions per platform type until we find matching Facter data.
118
+ filter.each do |filter_spec|
119
+ facter_version_filter = RspecPuppetFacts.facter_version_to_filter(facterversion)
120
+ db = FacterDB.get_facts(filter_spec.merge({ :facterversion => facter_version_filter }))
121
+
122
+ if db.empty?
123
+ if RspecPuppetFacts.spec_facts_strict?
124
+ raise ArgumentError, "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, aborting"
125
+ end
126
+
127
+ facterversion_obj = Gem::Version.new(facterversion)
128
+
129
+ version = FacterDB.get_facts(filter_spec).map { |facts| Gem::Version.new(facts[:facterversion]) }.sort.reverse.detect { |v| v <= facterversion_obj }
130
+
131
+ next unless version
132
+ version = version.to_s
133
+ facter_version_filter = "/\\A#{Regexp.escape(version)}/"
134
+
135
+ unless version == facterversion
136
+ RspecPuppetFacts.warning "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, using v#{version} instead"
137
+ end
138
+ end
139
+
140
+ filter_spec[:facterversion] = facter_version_filter
141
+ end
142
+
102
143
  received_facts = FacterDB::get_facts(filter)
103
144
  unless received_facts.any?
104
145
  RspecPuppetFacts.warning "No facts were found in the FacterDB for: #{filter.inspect}"
105
146
  return {}
106
147
  end
107
148
 
108
- unless version == facterversion
109
- if RspecPuppetFacts.spec_facts_strict?
110
- raise ArgumentError, "No facts were found in the FacterDB for Facter v#{facterversion}, aborting"
111
- else
112
- RspecPuppetFacts.warning "No facts were found in the FacterDB for Facter v#{facterversion}, using v#{version} instead"
113
- end
114
- end
115
-
116
149
  os_facts_hash = {}
117
150
  received_facts.map do |facts|
118
151
  # Fix facter bug
@@ -134,9 +167,16 @@ module RspecPuppetFacts
134
167
  facts.merge! RspecPuppetFacts.common_facts
135
168
  os_facts_hash[os] = RspecPuppetFacts.with_custom_facts(os, facts)
136
169
  end
170
+
171
+ return stringify_keys(os_facts_hash) if RSpec.configuration.facterdb_string_keys
172
+
137
173
  os_facts_hash
138
174
  end
139
175
 
176
+ def stringify_keys(hash)
177
+ Hash[hash.collect { |k,v| [k.to_s, v.is_a?(Hash) ? stringify_keys(v) : v] }]
178
+ end
179
+
140
180
  # Register a custom fact that will be included in the facts hash.
141
181
  # If it should be limited to a particular OS, pass a :confine option
142
182
  # that contains the operating system(s) to confine to. If it should
@@ -187,6 +227,13 @@ module RspecPuppetFacts
187
227
  facts
188
228
  end
189
229
 
230
+ # Get custom facts
231
+ # @return [nil,Hash]
232
+ # @api private
233
+ def self.custom_facts
234
+ @custom_facts
235
+ end
236
+
190
237
  # If provided this filter can be used to limit the set
191
238
  # of retrieved facts only to the matched OS names.
192
239
  # The value is being taken from the SPEC_FACTS_OS environment
@@ -211,12 +258,13 @@ module RspecPuppetFacts
211
258
  def self.common_facts
212
259
  return @common_facts if @common_facts
213
260
  @common_facts = {
214
- :mco_version => MCollective::VERSION,
215
- :puppetversion => Puppet.version,
216
- :rubysitedir => RbConfig::CONFIG['sitelibdir'],
217
- :rubyversion => RUBY_VERSION,
261
+ :puppetversion => Puppet.version,
262
+ :rubysitedir => RbConfig::CONFIG['sitelibdir'],
263
+ :rubyversion => RUBY_VERSION,
218
264
  }
219
265
 
266
+ @common_facts[:mco_version] = MCollective::VERSION if mcollective?
267
+
220
268
  if augeas?
221
269
  @common_facts[:augeasversion] = Augeas.open(nil, nil, Augeas::NO_MODL_AUTOLOAD).get('/augeas/version')
222
270
  end
@@ -227,13 +275,26 @@ module RspecPuppetFacts
227
275
  # Determine if the Augeas gem is available.
228
276
  # @api private
229
277
  # @return [Boolean] true if the augeas gem could be loaded.
278
+ # :nocov:
230
279
  def self.augeas?
231
280
  require 'augeas'
232
281
  true
233
- rescue LoadError => e
234
- RspecPuppetFacts.warning "Failed to retrieve Augeas version: #{e}"
282
+ rescue LoadError
235
283
  false
236
284
  end
285
+ # :nocov:
286
+
287
+ # Determine if the mcollective gem is available
288
+ # @api private
289
+ # @return [Boolean] true if the mcollective gem could be loaded.
290
+ # :nocov:
291
+ def self.mcollective?
292
+ require 'mcollective'
293
+ true
294
+ rescue LoadError
295
+ false
296
+ end
297
+ # :nocov:
237
298
 
238
299
  # Get the "operatingsystem_support" structure from
239
300
  # the parsed metadata.json file
@@ -294,15 +355,45 @@ module RspecPuppetFacts
294
355
  major, minor = version.split('.')
295
356
  "/\\A#{major}\\.#{minor}\\./"
296
357
  end
297
- # Subtracts from the minor version passed and returns a string representing
298
- # the next minor version down
299
- # @return [String] next version below
300
- # @param version [String] the Facter version
301
- # @param minor_subtractor [int] the value which to subtract by
302
- # @api private
303
- def self.down_facter_version(version, minor_subtractor = 1)
304
- major, minor, z = version.split('.')
305
- minor = (minor.to_i - minor_subtractor).to_s
306
- "#{major}.#{minor}.#{z}"
358
+
359
+ def self.facter_version_for_puppet_version(puppet_version)
360
+ return Facter.version if puppet_version.nil?
361
+
362
+ json_path = File.expand_path(File.join(__dir__, '..', 'ext', 'puppet_agent_components.json'))
363
+ unless File.file?(json_path) && File.readable?(json_path)
364
+ warning "#{json_path} does not exist or is not readable, defaulting to Facter #{Facter.version}"
365
+ return Facter.version
366
+ end
367
+
368
+ fd = File.open(json_path, 'rb:UTF-8')
369
+ data = JSON.parse(fd.read)
370
+
371
+ version_map = data.map { |_, versions|
372
+ if versions['puppet'].nil? || versions['facter'].nil?
373
+ nil
374
+ else
375
+ [Gem::Version.new(versions['puppet']), versions['facter']]
376
+ end
377
+ }.compact
378
+
379
+ puppet_gem_version = Gem::Version.new(puppet_version)
380
+ applicable_versions = version_map.select { |p, _| puppet_gem_version >= p }
381
+ if applicable_versions.empty?
382
+ warning "Unable to find Puppet #{puppet_version} in #{json_path}, defaulting to Facter #{Facter.version}"
383
+ return Facter.version
384
+ end
385
+
386
+ applicable_versions.sort { |a, b| b.first <=> a.first }.first.last
387
+ rescue JSON::ParserError
388
+ warning "#{json_path} contains invalid JSON, defaulting to Facter #{Facter.version}"
389
+ Facter.version
390
+ ensure
391
+ fd.close if fd
307
392
  end
308
393
  end
394
+
395
+ RSpec.configure do |c|
396
+ c.add_setting :default_facter_version,
397
+ :default => RspecPuppetFacts.facter_version_for_puppet_version(Puppet.version)
398
+ c.add_setting :facterdb_string_keys, :default => false
399
+ end