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 +4 -4
- data/.travis.yml +19 -18
- data/CHANGELOG.md +50 -0
- data/Gemfile +0 -6
- data/README.md +100 -18
- data/Rakefile +33 -0
- data/ext/puppet_agent_components.json +1 -0
- data/lib/rspec-puppet-facts.rb +134 -43
- data/lib/rspec-puppet-facts/version.rb +1 -1
- data/rspec-puppet-facts.gemspec +15 -17
- data/spec/rspec_puppet_facts_spec.rb +332 -25
- data/spec/spec_helper.rb +4 -2
- metadata +5 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f494cc52eaa0fbbf2d5952102217bd27c69b34bc666f1659e69c6b39d7b3eae
|
4
|
+
data.tar.gz: 31e403eebc924e18e6006742df384c3440f1fa2a58577136fe60cae004ef6f51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17a91fcd73abddbda463b69ccb2d508e05a46a0b4b5387b462324562aed7d5051f57ec33265ac1609d180364f0568ea3f5d89ae104195092ced96bf91f065c68
|
7
|
+
data.tar.gz: a57b973bed790b73701e65366b5c6276ff9aa6d1b06aefcb81cda664223d9abace313bfbf2a3790cbfa861055695700c868030811bbb36f32f774a27cb4dbc5d
|
data/.travis.yml
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
-
---
|
2
1
|
language: ruby
|
3
2
|
sudo: false
|
4
3
|
cache: bundler
|
5
4
|
script:
|
6
|
-
|
5
|
+
- bundle exec rake spec
|
6
|
+
- bundle exec rake puppet_versions:test
|
7
|
+
- bundle exec rake build
|
7
8
|
rvm:
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
24
|
-
- rvm:
|
25
|
-
|
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
|
data/CHANGELOG.md
CHANGED
@@ -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
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',
|
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,
|
68
|
-
let (: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,
|
161
|
+
on_supported_os.each do |os, os_facts|
|
130
162
|
context "on #{os}" do
|
131
163
|
let(:facts) do
|
132
|
-
|
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
|
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,
|
279
|
+
on_supported_os.each do |os, os_facts|
|
198
280
|
context "on #{os}" do
|
199
281
|
let(:facts) do
|
200
|
-
|
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
|
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,
|
347
|
+
on_supported_os.each do |os, os_facts|
|
266
348
|
context "on #{os}" do
|
267
349
|
let(:facts) do
|
268
|
-
|
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,
|
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
|
-
|
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
|
-
###
|
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"}}
|
data/lib/rspec-puppet-facts.rb
CHANGED
@@ -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] ||=
|
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 =
|
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(
|
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
|
-
|
215
|
-
|
216
|
-
|
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
|
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
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
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
|