pax_global_header00006660000000000000000000000064141226364230014515gustar00rootroot0000000000000052 comment=0df5a5d82b48f7bc87016e46b247b69a6f5c3302 rspec-puppet-facts-2.0.3/000077500000000000000000000000001412263642300152445ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/.github/000077500000000000000000000000001412263642300166045ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/.github/dependabot.yml000066400000000000000000000002231412263642300214310ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: bundler directory: "/" schedule: interval: daily time: "04:00" open-pull-requests-limit: 10 rspec-puppet-facts-2.0.3/.github/workflows/000077500000000000000000000000001412263642300206415ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/.github/workflows/release.yml000066400000000000000000000015701412263642300230070ustar00rootroot00000000000000name: Release on: push: tags: - '*' jobs: release: runs-on: ubuntu-latest if: github.repository_owner == 'voxpupuli' steps: - uses: actions/checkout@v2 - name: Install Ruby 3.0 uses: ruby/setup-ruby@v1 with: ruby-version: '3.0' env: BUNDLE_WITHOUT: release - name: Build gem run: gem build *.gemspec - name: Publish gem to rubygems.org run: gem push *.gem env: GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_AUTH_TOKEN }}' - name: Setup GitHub packages access run: | mkdir -p ~/.gem echo ":github: Bearer ${{ secrets.GITHUB_TOKEN }}" >> ~/.gem/credentials chmod 0600 ~/.gem/credentials - name: Publish gem to GitHub packages run: gem push --key github --host https://rubygems.pkg.github.com/voxpupuli *.gem rspec-puppet-facts-2.0.3/.github/workflows/test.yml000066400000000000000000000014701412263642300223450ustar00rootroot00000000000000name: Test on: - pull_request - push env: BUNDLE_WITHOUT: release jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - ruby: '2.4' - ruby: '2.5' - ruby: '2.6' - ruby: '2.7' - ruby: '3.0' coverage: 'yes' env: COVERAGE: ${{ matrix.coverage }} steps: - uses: actions/checkout@v2 - name: Install Ruby ${{ matrix.ruby }} uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - name: Run unit tests run: bundle exec rake spec - name: Test against Puppet component versions run: bundle exec rake puppet_versions:test - name: Test gem build run: bundle exec rake build rspec-puppet-facts-2.0.3/.gitignore000066400000000000000000000001311412263642300172270ustar00rootroot00000000000000*.gem *.swp Gemfile.lock .vagrant/ .bundle/ coverage/ .idea doc .yardoc vendor/ .vendor/ rspec-puppet-facts-2.0.3/.rspec000066400000000000000000000000401412263642300163530ustar00rootroot00000000000000--format d --colour --backtrace rspec-puppet-facts-2.0.3/CHANGELOG.md000066400000000000000000000203441412263642300170600ustar00rootroot00000000000000# Changelog ## [2.0.3](https://github.com/voxpupuli/rspec-puppet-facts/tree/2.0.3) (2021-09-22) [Full Changelog](https://github.com/voxpupuli/rspec-puppet-facts/compare/2.0.2...2.0.3) **Merged pull requests:** - regenerate puppet\_agent\_components.json [\#133](https://github.com/voxpupuli/rspec-puppet-facts/pull/133) ([bastelfreak](https://github.com/bastelfreak)) ## [2.0.2](https://github.com/voxpupuli/rspec-puppet-facts/tree/2.0.2) (2021-07-21) [Full Changelog](https://github.com/voxpupuli/rspec-puppet-facts/compare/2.0.1...2.0.2) **Implemented enhancements:** - Implement github action testing and codecov coverage reporting [\#129](https://github.com/voxpupuli/rspec-puppet-facts/pull/129) ([bastelfreak](https://github.com/bastelfreak)) **Merged pull requests:** - Move facterversion\_obj declaration out of the loop [\#131](https://github.com/voxpupuli/rspec-puppet-facts/pull/131) ([ekohl](https://github.com/ekohl)) - Upgrade to GitHub-native Dependabot [\#126](https://github.com/voxpupuli/rspec-puppet-facts/pull/126) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) ## [2.0.1](https://github.com/voxpupuli/rspec-puppet-facts/tree/2.0.1) (2021-01-09) [Full Changelog](https://github.com/voxpupuli/rspec-puppet-facts/compare/2.0.0...2.0.1) **Closed issues:** - Memoizing facts [\#114](https://github.com/voxpupuli/rspec-puppet-facts/issues/114) - Commit 21442e7 looks to introduce hard to debug behavior [\#97](https://github.com/voxpupuli/rspec-puppet-facts/issues/97) **Merged pull requests:** - Implement fact memoization [\#122](https://github.com/voxpupuli/rspec-puppet-facts/pull/122) ([ekohl](https://github.com/ekohl)) ## [2.0.0](https://github.com/voxpupuli/rspec-puppet-facts/tree/2.0.0) (2020-08-05) - Require Ruby >= 2.4 - Automatically find the latest facter version in the database. Previously a very slow and undeterministic approach was taken when an exact match of the Facter version wasn't found.. The new approach is to take the closest version that is still older than the specified version. - Fix Amazon Linux 2 fact lookup - Log which facts could not be found - Remove json as a dependency ## 2019-12-11 - Release 1.10.0 - Automatically select the default Facter version based on the Puppet version. The available Puppet version is matched against a mapping of Puppet and Facter versions included in the `puppet-agent` all-in-one packages to find the most suitable Facter version. ## 2019-07-31 - Release 1.9.6 - Suppress the warning message generated when the Augeas gem is not available. - Searching through older Facter releases for a fact set that does not exist no longer causes it to hang indefinitely. - The `operatingsystemrelease` values are now correctly escaped when building the FacterDB filters, allowing the use of `operatingsystemrelease` values that contain special regular expression characters like parentheses. ## 2019-07-29 - Release 1.9.5 - The default version of Facter to search for is now configurable with `RSpec.configuration.default_facter_version`. - When passing a `:supported_os` hash to `on_supported_os()`, single `operatingsystemrelease` values can now be specified as a String rather than an Array with a single String. - Dependency on the `mcollective-client` gem removed. The `mco_version` fact will now optionally be set if the gem is installed. - The fact names can now be provided to tests as Strings instead of Symbols by setting `RSpec.configuration.facterdb_string_keys` to `true`. - Dropped support for Ruby < 2.1.0 ## 2019-03-22 - Release 1.9.4 - Take two on getting rubygems autodeploy going. So much for docs, looking at other projects for this one. ## 2019-03-22 - Release 1.9.3 - Various CI updates - [Garrett Honeycutt](https://github.com/ghoneycutt/) - Symbolize hash keys in `register_custom_fact` [https://github.com/mcanevet/rspec-puppet-facts/pull/77](https://github.com/mcanevet/rspec-puppet-facts/pull/77) ## 2018-10-24 - Release 1.9.2 - 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 ## 2018-10-24 - Release 1.9.1 - Do not rely on features of Augeas because Puppet 6 ## 2018-01-31 - Release 1.9.0 - Bumps facterdb requirement to 0.5.0 - Adds docs for using custom external facts - hardwaremodel output changed on Windows with Facter 3.x - Add additional rqspec tests - Correctly select windows releases that contain spaces - Facter < 3.4 does not return a proper release name for Windows 2016 - Strip 'Server' prefix from windows release name if present - Downcase windows to match facter output - Fix specs for current facterdb release - Make version fallback testing independent of installed facter gem - Add SPEC_FACTS_STRICT setting - Cleanup README - Add specific test to test minor version ahead of current facter version - Update test to check for range in case facter version is not currently in FacterDB - Step down through versions if the current version is not available - Fix wrong example in README ## 2017-06-23 - Release 1.8.0 - Support specifying facter version ## 2017-01-04 - Release 1.7.1 - Ignore case when choosing H/W models ## 2016-09-16 - Release 1.7.0 - Support custom facts defined by spec_helper ## 2016-05-19 - Release 1.6.1 - Fix a bug where not all specified Ubuntu or OpenBSD were captured ## 2016-05-17 - Release 1.6.0 - Cleanup and refactor methods - Add YARD documentation - Refactor and fix rspec - Add the OS filter support ## 2016-03-29 - Release 1.5.0 - Add some Microsft Windows support ## 2016-02-04 - Release 1.4.1 - Add missing mcollective-client dependency ## 2016-02-04 - Release 1.4.0 - Dynamically set mco_version ## 2015-11-12 - Release 1.3.0 - Dynamically set rubysitedir ## 2015-11-05 - Release 1.2.0 - Requires facterdb 0.3.0 ## 2015-09-15 - Release 1.1.1 - Fix OpenBSD support ## 2015-09-09 - Release 1.1.0 - Populate augeasversion, puppetversion and rubyversion ## 2015-09-03 - Release 1.0.3 - Fix FreeBSD support ## 2015-08-31 - Release 1.0.2 - Keys where not symbolized anymore since v1.0.0 ## 2015-08-29 - Release 1.0.1 - Fix for old versions of Facter that does not provide operatingsystemmajrelease for some OSes ## 2015-08-27 - Release 1.0.0 - Use facterdb ## 2015-08-10 - Release 0.12.0 - Add Facter3 support ## 2015-06-16 - Release 0.11.0 - Add facts for OpenBSD 5.7 ## 2015-05-27 - Release 0.10.0 - Add facts for Solaris 11 ## 2015-05-26 - Release 0.9.0 - Add facts for Ubuntu 14.10 - Add facts for Ubuntu 15.04 ## 2015-04-27 - Release 0.8.0 - Remove support for Operating System minor release (causes problems with Ubuntu naming) - Add Gentoo support ## 2015-04-26 - Release 0.7.0 - Add support for Operating System minor release - Update README.md ## 2015-03-06 - Release 0.6.0 - Add facts for FreeBSD 9 ## 2015-03-06 - Release 0.5.0 - Add facts for FreeBSD 10 ## 2015-02-22 - Release 0.4.1 - Really useless release :-) ## 2015-01-23 - Release 0.4.0 - Add facts for facter 2.4 - Format json with python's json.tool - Improve code coverage in unit tests - Test on more version of facter in travis matrix ## 2015-01-05 - Release 0.3.3 - Add facts for OpenSuse 12 - Add facts for OpenSuse 13 ## 2015-01-04 - Release 0.3.2 * Symbolize hash keys ## 2015-01-03 - Release 0.3.1 - Set fqdn to foo.example.com - Add json as runtime dependency ## 2015-01-02 - Release 0.3.0 - Use json output for facter ## 2014-12-20 - Release 0.2.5 - Don't fail if facts not found ## 2014-12-20 - Release 0.2.4 - Add facts for SLES 11 - Add facts for Ubuntu 10.04 - Fix for SLES 11 SP1 ## 2014-12-20 - Release 0.2.3 - Add facts for ArchLinux ## 2014-12-19 - Release 0.2.2 - Fix some bugs - Add unit tests ## 2014-12-19 - Release 0.2.1 - Add facts for Debian 8 ## 2014-12-15 - Release 0.2.0 - Add opts hash parameter - Tests only with x86_64 by default ## 2014-12-12 - Release 0.1.4 - Fix for Ubuntu ## 2014-12-12 - Release 0.1.4 - Fix for Fedora ## 2014-12-12 - Release 0.1.3 - Add facts for Fedora 19 ## 2014-12-12 - Release 0.1.2 - Add facts for Scientific Linux ## 2014-12-12 - Release 0.1.1 - Add more facts ## 2014-12-12 - First Release 0.1.0 - Initial release \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* rspec-puppet-facts-2.0.3/Gemfile000066400000000000000000000006321412263642300165400ustar00rootroot00000000000000source ENV['GEM_SOURCE'] || 'https://rubygems.org' gemspec if facterversion = ENV['FACTER_GEM_VERSION'] gem 'facter', facterversion, :require => false else gem 'facter', :require => false end group :release do gem 'github_changelog_generator', require: false end group :coverage, optional: ENV['COVERAGE']!='yes' do gem 'simplecov-console', :require => false gem 'codecov', :require => false end rspec-puppet-facts-2.0.3/HISTORY.md000066400000000000000000000146651412263642300167430ustar00rootroot00000000000000## [2.0.0](https://github.com/voxpupuli/rspec-puppet-facts/tree/2.0.0) (2020-08-05) - Require Ruby >= 2.4 - Automatically find the latest facter version in the database. Previously a very slow and undeterministic approach was taken when an exact match of the Facter version wasn't found.. The new approach is to take the closest version that is still older than the specified version. - Fix Amazon Linux 2 fact lookup - Log which facts could not be found - Remove json as a dependency ## 2019-12-11 - Release 1.10.0 - Automatically select the default Facter version based on the Puppet version. The available Puppet version is matched against a mapping of Puppet and Facter versions included in the `puppet-agent` all-in-one packages to find the most suitable Facter version. ## 2019-07-31 - Release 1.9.6 - Suppress the warning message generated when the Augeas gem is not available. - Searching through older Facter releases for a fact set that does not exist no longer causes it to hang indefinitely. - The `operatingsystemrelease` values are now correctly escaped when building the FacterDB filters, allowing the use of `operatingsystemrelease` values that contain special regular expression characters like parentheses. ## 2019-07-29 - Release 1.9.5 - The default version of Facter to search for is now configurable with `RSpec.configuration.default_facter_version`. - When passing a `:supported_os` hash to `on_supported_os()`, single `operatingsystemrelease` values can now be specified as a String rather than an Array with a single String. - Dependency on the `mcollective-client` gem removed. The `mco_version` fact will now optionally be set if the gem is installed. - The fact names can now be provided to tests as Strings instead of Symbols by setting `RSpec.configuration.facterdb_string_keys` to `true`. - Dropped support for Ruby < 2.1.0 ## 2019-03-22 - Release 1.9.4 - Take two on getting rubygems autodeploy going. So much for docs, looking at other projects for this one. ## 2019-03-22 - Release 1.9.3 - Various CI updates - [Garrett Honeycutt](https://github.com/ghoneycutt/) - Symbolize hash keys in `register_custom_fact` [https://github.com/mcanevet/rspec-puppet-facts/pull/77](https://github.com/mcanevet/rspec-puppet-facts/pull/77) ## 2018-10-24 - Release 1.9.2 - 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 ## 2018-10-24 - Release 1.9.1 - Do not rely on features of Augeas because Puppet 6 ## 2018-01-31 - Release 1.9.0 - Bumps facterdb requirement to 0.5.0 - Adds docs for using custom external facts - hardwaremodel output changed on Windows with Facter 3.x - Add additional rqspec tests - Correctly select windows releases that contain spaces - Facter < 3.4 does not return a proper release name for Windows 2016 - Strip 'Server' prefix from windows release name if present - Downcase windows to match facter output - Fix specs for current facterdb release - Make version fallback testing independent of installed facter gem - Add SPEC_FACTS_STRICT setting - Cleanup README - Add specific test to test minor version ahead of current facter version - Update test to check for range in case facter version is not currently in FacterDB - Step down through versions if the current version is not available - Fix wrong example in README ## 2017-06-23 - Release 1.8.0 - Support specifying facter version ## 2017-01-04 - Release 1.7.1 - Ignore case when choosing H/W models ## 2016-09-16 - Release 1.7.0 - Support custom facts defined by spec_helper ## 2016-05-19 - Release 1.6.1 - Fix a bug where not all specified Ubuntu or OpenBSD were captured ## 2016-05-17 - Release 1.6.0 - Cleanup and refactor methods - Add YARD documentation - Refactor and fix rspec - Add the OS filter support ## 2016-03-29 - Release 1.5.0 - Add some Microsft Windows support ## 2016-02-04 - Release 1.4.1 - Add missing mcollective-client dependency ## 2016-02-04 - Release 1.4.0 - Dynamically set mco_version ## 2015-11-12 - Release 1.3.0 - Dynamically set rubysitedir ## 2015-11-05 - Release 1.2.0 - Requires facterdb 0.3.0 ## 2015-09-15 - Release 1.1.1 - Fix OpenBSD support ## 2015-09-09 - Release 1.1.0 - Populate augeasversion, puppetversion and rubyversion ## 2015-09-03 - Release 1.0.3 - Fix FreeBSD support ## 2015-08-31 - Release 1.0.2 - Keys where not symbolized anymore since v1.0.0 ## 2015-08-29 - Release 1.0.1 - Fix for old versions of Facter that does not provide operatingsystemmajrelease for some OSes ## 2015-08-27 - Release 1.0.0 - Use facterdb ## 2015-08-10 - Release 0.12.0 - Add Facter3 support ## 2015-06-16 - Release 0.11.0 - Add facts for OpenBSD 5.7 ## 2015-05-27 - Release 0.10.0 - Add facts for Solaris 11 ## 2015-05-26 - Release 0.9.0 - Add facts for Ubuntu 14.10 - Add facts for Ubuntu 15.04 ## 2015-04-27 - Release 0.8.0 - Remove support for Operating System minor release (causes problems with Ubuntu naming) - Add Gentoo support ## 2015-04-26 - Release 0.7.0 - Add support for Operating System minor release - Update README.md ## 2015-03-06 - Release 0.6.0 - Add facts for FreeBSD 9 ## 2015-03-06 - Release 0.5.0 - Add facts for FreeBSD 10 ## 2015-02-22 - Release 0.4.1 - Really useless release :-) ## 2015-01-23 - Release 0.4.0 - Add facts for facter 2.4 - Format json with python's json.tool - Improve code coverage in unit tests - Test on more version of facter in travis matrix ## 2015-01-05 - Release 0.3.3 - Add facts for OpenSuse 12 - Add facts for OpenSuse 13 ## 2015-01-04 - Release 0.3.2 * Symbolize hash keys ## 2015-01-03 - Release 0.3.1 - Set fqdn to foo.example.com - Add json as runtime dependency ## 2015-01-02 - Release 0.3.0 - Use json output for facter ## 2014-12-20 - Release 0.2.5 - Don't fail if facts not found ## 2014-12-20 - Release 0.2.4 - Add facts for SLES 11 - Add facts for Ubuntu 10.04 - Fix for SLES 11 SP1 ## 2014-12-20 - Release 0.2.3 - Add facts for ArchLinux ## 2014-12-19 - Release 0.2.2 - Fix some bugs - Add unit tests ## 2014-12-19 - Release 0.2.1 - Add facts for Debian 8 ## 2014-12-15 - Release 0.2.0 - Add opts hash parameter - Tests only with x86_64 by default ## 2014-12-12 - Release 0.1.4 - Fix for Ubuntu ## 2014-12-12 - Release 0.1.4 - Fix for Fedora ## 2014-12-12 - Release 0.1.3 - Add facts for Fedora 19 ## 2014-12-12 - Release 0.1.2 - Add facts for Scientific Linux ## 2014-12-12 - Release 0.1.1 - Add more facts ## 2014-12-12 - First Release 0.1.0 - Initial release rspec-puppet-facts-2.0.3/LICENSE000066400000000000000000000261341412263642300162570ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. rspec-puppet-facts-2.0.3/README.md000066400000000000000000000417241412263642300165330ustar00rootroot00000000000000rspec-puppet-facts ================== [![License](https://img.shields.io/github/license/voxpupuli/rspec-puppet-facts.svg)](https://github.com/voxpupuli/rspec-puppet-facts/blob/master/LICENSE) [![Test](https://github.com/voxpupuli/rspec-puppet-facts/actions/workflows/test.yml/badge.svg)](https://github.com/voxpupuli/rspec-puppet-facts/actions/workflows/test.yml) [![codecov](https://codecov.io/gh/voxpupuli/rspec-puppet-facts/branch/master/graph/badge.svg)](https://codecov.io/gh/voxpupuli/rspec-puppet-facts) [![Release](https://github.com/voxpupuli/rspec-puppet-facts/actions/workflows/release.yml/badge.svg)](https://github.com/voxpupuli/rspec-puppet-facts/actions/workflows/release.yml) [![RubyGem Version](https://img.shields.io/gem/v/rspec-puppet-facts.svg)](https://rubygems.org/gems/rspec-puppet-facts) [![RubyGem Downloads](https://img.shields.io/gem/dt/rspec-puppet-facts.svg)](https://rubygems.org/gems/rspec-puppet-facts) [![Donated by Camptocamp](https://img.shields.io/badge/donated%20by-camptocamp-fb7047.svg)](#transfer-notice) 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/voxpupuli/facterdb)). This simplifies unit testing because you don't need to specify the facts yourself. ## Installation If you're using Bundler to manage gems in your module repository, install `rspec-puppet-facts` by adding it to the Gemfile. 1. Add the following line to your `Gemfile`: ```ruby gem 'rspec-puppet-facts', :require => false ``` 2. Run `bundle install`. If you're not using Bundler, install the `rspec-puppet-facts` manually. 1. On the command line, run: ```bash $ gem install rspec-puppet-facts ``` After the gem is installed (using either method), make the gem available to rspec by adding the following lines in your `spec/spec_helper.rb` file. Place the lines after `require 'rspec-puppet'` and before the `RSpec.configure` block, if one exists. ```ruby require 'rspec-puppet-facts' include RspecPuppetFacts ``` ## Specifying the supported operating systems To determine which facts to run your tests against, `rspec-puppet-facts` checks your module's `metadata.json` to find out what operating systems your module supports. The `metadata.json` file is located in the root of your module. To learn more about this file, see Puppet's [metadata](https://docs.puppet.com/puppet/latest/modules_metadata.html) documentation. By default, `rspec-puppet-facts` provides the facts only for `x86_64` architecture. However, you can override this default and the supported operating system list by passing a hash to `on_supported_os` in your tests. This hash must contain either or both of the following keys: * `:hardwaremodels` - An array of hardware architecture names, as strings. * `:supported_os` - An array of hashes representing the operating systems. **Note: the keys of these hashes must be strings** * `'operatingsystem'` - The name of the operating system, as a string. * `'operatingsystemrelease'` - An array of version numbers, as strings. This is particularly useful if your module is split into operating system subclasses. For example, if you had a class called `myclass::debian` that you wanted to test against Debian 6 and Debian 7 on both `x86_64` _and_ `i386` architectures, you could write the following test: ```ruby require 'spec_helper' describe 'myclass::debian' do test_on = { :hardwaremodels => ['x86_64', 'i386'], :supported_os => [ { 'operatingsystem' => 'Debian', 'operatingsystemrelease' => ['6', '7'], }, ], } on_supported_os(test_on).each do |os, os_facts| let (:facts) { os_facts } it { is_expected.to compile.with_all_deps } end end ``` Ruby 1.9 and later: ```ruby require 'spec_helper' describe 'myclass::raspbian' do test_on = { supported_os: [ { 'operatingsystem' => 'Debian', 'operatingsystemrelease' => ['10', '9', '8'], }, ], } on_supported_os(test_on).each do |os, os_facts| let(:facts) { os_facts } it { is_expected.to compile.with_all_deps } end end ``` ## Specifying a default Facter version By default, `os_supported_os` will return the facts for the version of Facter that it has loaded (usually this is Facter 2.5.1). This behaviour can be overridden by setting the `default_facter_version` RSpec setting in your `spec/spec_helper.rb` file. ```ruby RSpec.configure do |c| c.default_facter_version = '3.14.0' end ``` ## Usage Use the `on_supported_os` iterator to loop through all of your module's supported operating systems. This allows you to simplify your tests and remove a lot of duplicate code. Each iteration of `on_supported_os` provides two variables to your tests. (In the code examples below, these variables are specified by the values between the pipe (`|`) characters.) * The first value is the name of the fact set. This is made from the values of the operatingsystem, operatingsystemmajrelease, and architecture facts separated by dashes (for example, 'debian-7-x86_64'). * The second value is the facts for that combination of operating system, release, and architecture. For example, previously, you might have written a test that specified Debian 7 and Red Hat 6 as the supported modules: ```ruby require 'spec_helper' describe 'myclass' do context "on debian-7-x86_64" do let(:facts) do { :osfamily => 'Debian', :operatingsystem => 'Debian', :operatingsystemmajrelease => '7', ... } end it { is_expected.to compile.with_all_deps } ... end context "on redhat-6-x86_64" do let(:facts) do { :osfamily => 'RedHat', :operatingsystem => 'RedHat', :operatingsystemmajrelease => '6', ... } end it { is_expected.to compile.with_all_deps } ... end ... end ``` With `on_supported_os` iteration, you can rewrite this test to loop over each of the supported operating systems without explicitly specifying them: ```ruby require 'spec_helper' describe 'myclass' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) do os_facts end it { is_expected.to compile.with_all_deps } ... # If you need any to specify any operating system specific tests case os_facts[:osfamily] when 'Debian' ... else ... end end end end ``` 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: ```ruby require 'spec_helper' describe 'profiles::packagerepos' do context 'Raspbian tests' do # We manage hundreds of desk-mounted Pis raspbian = { hardwaremodels: ['armv7l'], supported_os: [ { 'operatingsystem' => 'Debian', 'operatingsystemrelease' => ['10', '9', '8'], }, ], } on_supported_os(raspbian).each do |os, os_facts| let(:facts) do os_facts end context "#{os} with defaults" do it { is_expected.to compile } # more tests ... end end end context 'Ubuntu tests' do # And also a fleet of Ubuntu desktops ubuntu = { supported_os: [ { 'operatingsystem' => 'Ubuntu', 'operatingsystemrelease' => ['18.04', '16.04'], }, ], } on_supported_os(ubuntu).each do |os, os_facts| let(:facts) do os_facts end context "#{os} with defaults" do it { is_expected.to compile } # more tests ... end end end end ``` ### Testing a type or provider Use `on_supported_os` in the same way for your type and provider unit tests. **Specifying each operating system**: ```ruby require 'spec_helper' describe 'mytype' do context "on debian-7-x86_64" do let(:facts) do { :osfamily => 'Debian', :operatingsystem => 'Debian', :operatingsystemmajrelease => '7', } end it { should be_valid_type } ... end context "on redhat-7-x86_64" do let(:facts) do { :osfamily => 'RedHat', :operatingsystem => 'RedHat', :operatingsystemmajrelease => '7', } end it { should be_valid_type } ... end end ``` **Looping with `on_supported_os` iterator**: ```ruby require 'spec_helper' describe 'mytype' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) do os_facts end it { should be_valid_type } ... # If you need to specify any operating system specific tests case os_facts[:osfamily] when 'Debian' ... else ... end ... end end end ``` ### Testing a function As with testing manifests, types, or providers, `on_supported_os` iteration simplifies your function unit tests. **Specifying each operating system**: ```ruby require 'spec_helper' describe 'myfunction' do context "on debian-7-x86_64" do let(:facts) do { :osfamily => 'Debian', :operatingsystem => 'Debian', ... } end it { should run.with_params('something').and_return('a value') } ... end context "on redhat-7-x86_64" do let(:facts) do { :osfamily => 'RedHat', :operatingsystem => 'RedHat', ... } end it { should run.with_params('something').and_return('a value') } ... end end ``` **Looping with `on_supported_os` iterator**: ```ruby require 'spec_helper' describe 'myfunction' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) do os_facts end it { should run.with_params('something').and_return('a value') } ... end end end ``` ### Adding custom fact values By adding custom fact values, you can: * Override fact values * Include additional facts in your tests. * Add global custom facts for all of your unit tests * Add custom facts to only certain operating systems * Add custom facts to all operating systems _except_ specific operating systems * Create dynamic values for custom facts by setting a lambda as the value. #### Override and add facts To override fact values and include additional facts in your tests, merge values with the facts hash provided by each iteration of `on_supported_os`. ```ruby require 'spec_helper' describe 'myclass' do on_supported_os.each do |os, os_facts| context "on #{os}" do # Add the 'foo' fact with the value 'bar' to the tests let(:facts) do os_facts.merge({ :foo => 'bar', }) end it { is_expected.to compile.with_all_deps } ... end end end ``` #### Set global custom facts Set global custom fact values in your `spec/spec_helper.rb` file so that they are automatically available to all of your unit tests using `on_supported_os`. Pass the fact name and value to the `add_custom_fact` function: ```ruby require 'rspec-puppet' require 'rspec-puppet-facts' include RspecPuppetFacts # Add the 'concat_basedir' fact to all tests add_custom_fact :concat_basedir, '/doesnotexist' RSpec.configure do |config| # normal rspec-puppet configuration ... end ``` #### Confine custom facts To add custom facts for only certain operating systems, set `confine` with the operating system as a string value: ```ruby add_custom_fact :root_home, '/root', :confine => 'redhat-7-x86_64' ``` To add custom facts for all operating systems _except_ specific ones, set `exclude` with the operating system as a string value: ```ruby add_custom_fact :root_home, '/root', :exclude => 'redhat-7-x86_64' ``` #### Create dynamic facts In addition to the static fact values shown in the previous examples, you can create dynamic values. To do this, pass a lambda as the value for the custom fact. The lambda is passed the same values for operating system name and fact values that your tests are provided by `on_supported_os`. ```ruby add_custom_fact :root_home, lambda { |os,facts| "/tmp/#{facts['hostname']}" } ``` ### Supplying Custom External Facts through FacterDB Rspec-puppet-facts uses a gem called facterdb that contains many fact sets of various combinations that are pre generated. Rspec-puppet-facts queries facterdb to pull out a specific fact set to use when testing. The default facts are great for many things but there will be times when you need to have custom fact sets that only make sense in your environment or might contain sensitive information. To supply external facts to facterdb just set the `FACTERDB_SEARCH_PATHS` environment variable with one or more paths to your facts. When separating paths please use the default path separator character supported by your OS. * Unix/Linux/OSX = `:` * Windows = `;` This means you will need to supply your own fact sets in addition to the ones contained in facterdb. So each fact set you create must meet the following requirements: 1. A JSON serialized file containing a single Hash of all the facts. 2. The facts file must end in `.facts` 3. Must be placed inside some directory. You can organize this directory however you like. [Example file](https://github.com/camptocamp/facterdb/blob/master/facts/3.5/oraclelinux-5-i386.facts) Facterdb is smart enough the search your supplied directories for files ending with '.facts'. You can even supply multiple directories. Example: `FACTERDB_SEARCH_PATHS="/var/opt/lib/custom_facts"` or `FACTERDB_SEARCH_PATHS="/var/opt/lib/custom_facts:/tmp/custom_facts:/home/user1/custom_facts"` You can create these files via many methods. * `puppet facts | jq '.values' > /tmp/custom_facts/datacenter_a/2.4/os_x.facts` # must have jq command * Via puppetdb queries * hand crafted Additionally you can skip the default FacterDB facts completely by setting the environment variable `FACTERDB_SKIP_DEFAULTDB`. This will instruct facterdb to not look at its built-in facts which can be useful should you need to completely replace which facts are used. Setting the variable `FACTERDB_SKIP_DEFAULTDB` to anything will disable the internal facts used by facterdb. You would most likely use this in combination with the `FACTERDB_SEARCH_PATHS` environment variable. Example: ``` FACTERDB_SEARCH_PATHS="/var/opt/lib/custom_facts:/tmp/custom_facts:/home/user1/custom_facts" FACTERDB_SKIP_DEFAULTDB='yes' ``` We recommend placing custom external facts under spec/fixtures/facts directory. Additionally, if you plan on using these custom facts everytime you should set the following in your spec helper. ```ruby module_spec_dir = File.dirname(__FILE__) custom_facts = File.join(module_spec_dir, 'fixtures', 'facts') ENV['FACTERDB_SEARCH_PATHS'] = custom_facts ``` ## Running your tests 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`. 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. ```bash SPEC_FACTS_OS='ubuntu-14' rake spec ``` When no facts are available for the specific facter/operating system combination, the library will fall back to facts from earlier versions of the requested operating system, to allow testing to continue when new versions of facter are released. Set `SPEC_FACTS_STRICT=yes` to instead trigger a failure. ## Maintenance This gem uses information about puppet AIO component versions to build/test. They are vendored at `ext/puppet_agent_components.json`. If they are outdated, the `puppet_versions:test` rake task will fail and they need to be updated. This is as easy as running: `bundle exec rake puppet_versions:update` ## License This project is licensed under the [Apache-2 license](./LICENSE). ## Transfer Notice This plugin was originally authored by [Camptocamp](http://www.camptocamp.com). The maintainer preferred that Puppet Community take ownership of the module for future improvement and maintenance. Existing pull requests and issues were transferred over, please fork and continue to contribute here instead of Camptocamp. Previously: https://github.com/mcanevet/rspec-puppet-facts ## Release information To make a new release, please do: * Update the version in the `lib/rspec-puppet-facts/version.rb` file * Install gems with `bundle install --with release --path .vendor` * generate the changelog with `bundle exec rake changelog` * Create a PR with it * After it got merged, push a tag. A github workflow will do the actual release rspec-puppet-facts-2.0.3/Rakefile000066400000000000000000000034511412263642300167140ustar00rootroot00000000000000require 'bundler/gem_tasks' PUPPET_VERSIONS_PATH = File.join(__dir__, 'ext', 'puppet_agent_components.json') begin require 'rspec/core/rake_task' require 'yard' RSpec::Core::RakeTask.new(:spec) YARD::Rake::YardocTask.new rescue LoadError end desc 'Produce Commit history since last tag' task :dump_commit do last_tag = `git describe --tags $(git rev-list --tags --max-count=1)`.chomp puts "############ Commits since #{last_tag} ######" puts `git log --pretty=format:"- %s" #{last_tag}..HEAD` end namespace :puppet_versions do task :update do require 'net/http' require 'net/https' require 'uri' uri = URI.parse('https://forgeapi.puppet.com/private/versions/puppet-agent') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) raise unless response.is_a?(Net::HTTPSuccess) File.open(PUPPET_VERSIONS_PATH, 'wb:UTF-8') do |fd| fd.write(response.body) end end task :test do Rake::Task['puppet_versions:update'].invoke output = `git status --porcelain #{PUPPET_VERSIONS_PATH}` unless output.strip.empty? $stderr.puts "#{PUPPET_VERSIONS_PATH} is out of date." $stderr.puts 'Run the puppet_versions:update task to update it and commit the changes.' raise end end end begin require 'rubygems' require 'github_changelog_generator/task' GitHubChangelogGenerator::RakeTask.new :changelog do |config| config.exclude_labels = %w{duplicate question invalid wontfix wont-fix skip-changelog} config.user = 'voxpupuli' config.project = 'rspec-puppet-facts' gem_version = Gem::Specification.load("#{config.project}.gemspec").version config.future_release = gem_version end rescue LoadError end rspec-puppet-facts-2.0.3/ext/000077500000000000000000000000001412263642300160445ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/ext/puppet_agent_components.json000066400000000000000000003224571412263642300237140ustar00rootroot00000000000000{"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"},"6.20.0":{"openssl-1.1.1":"1.1.1i","curl":"7.74.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","libedit":"20150325-3.1","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.0.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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.20.0","facter":"3.14.15","facter-ng":"4.0.49","hiera":"3.6.0","leatherman":"1.12.4","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.10","libwhereami":"0.5.0","puppet-runtime":"202101130","puppet-resource_api":"1.8.13","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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.2.0","module-puppetlabs-zone_core":"1.0.3"},"6.21.0":{"openssl-1.1.1":"1.1.1i","curl":"7.74.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.3","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.21.0","facter":"3.14.16","facter-ng":"4.0.50","hiera":"3.6.0","leatherman":"1.12.4","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.10","libwhereami":"0.5.0","puppet-runtime":"202102031","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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.2.0","module-puppetlabs-zone_core":"1.0.3"},"6.21.1":{"openssl-1.1.1":"1.1.1i","curl":"7.74.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.3","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.21.1","facter":"3.14.16","facter-ng":"4.0.50","hiera":"3.6.0","leatherman":"1.12.4","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.10","libwhereami":"0.5.0","puppet-runtime":"202102031","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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.2.0","module-puppetlabs-zone_core":"1.0.3"},"6.22.0":{"openssl-1.1.1":"1.1.1k","curl":"7.76.0","puppet-ca-bundle":"1.0.9","ruby-2.5.9":"2.5.9","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.3","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.22.0","facter":"3.14.17","facter-ng":"4.1.0","hiera":"3.7.0","leatherman":"1.12.4","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.11","libwhereami":"0.5.0","puppet-runtime":"202104131","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"6.22.1":{"openssl-1.1.1":"1.1.1k","curl":"7.76.0","puppet-ca-bundle":"1.0.9","ruby-2.5.9":"2.5.9","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.3","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.22.1","facter":"3.14.17","facter-ng":"4.1.1","hiera":"3.7.0","leatherman":"1.12.4","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.11","libwhereami":"0.5.0","puppet-runtime":"202104131","puppet-resource_api":"1.8.13","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"6.23.0":{"openssl-1.1.1":"1.1.1k","curl":"7.77.0","puppet-ca-bundle":"1.0.9","ruby-2.5.9":"2.5.9","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.4","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.8","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.1","rubygem-httpclient":"2.8.3","rubygem-thor":"1.1.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.23.0","facter":"3.14.18","facter-ng":"4.2.1","hiera":"3.7.0","leatherman":"1.12.5","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.13","libwhereami":"0.5.0","puppet-runtime":"202106080","puppet-resource_api":"v1.8.14","virt-what":"1.18","dmidecode":"2.12","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"6.24.0":{"openssl-1.1.1":"1.1.1k","curl":"7.77.0","puppet-ca-bundle":"1.0.9","ruby-2.5.9":"2.5.9","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.4","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.8","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.1","rubygem-httpclient":"2.8.3","rubygem-thor":"1.1.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet":"6.24.0","facter":"3.14.19","facter-ng":"4.2.2","hiera":"3.7.0","leatherman":"1.12.6","cpp-hocon":"0.3.0","cpp-pcp-client":"1.7.3","pxp-agent":"1.15.14","libwhereami":"0.5.0","puppet-runtime":"202107010","puppet-resource_api":"v1.8.14","virt-what":"1.18","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"1.0.3","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.0.0":{"openssl-1.1.1":"1.1.1g","curl":"7.72.0","puppet-ca-bundle":"1.0.9","ruby-2.7.1":"2.7.1","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.2.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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202010280","pxp-agent":"202011060","puppet":"7.0.0","facter":"4.0.46","hiera":"3.6.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.1.0":{"openssl-1.1.1":"1.1.1i","curl":"7.74.0","puppet-ca-bundle":"1.0.9","ruby-2.7.1":"2.7.1","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.2.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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202012102","pxp-agent":"202012110","puppet":"7.1.0","facter":"4.0.47","hiera":"3.6.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.3.0":{"openssl-1.1.1":"1.1.1i","curl":"7.74.0","puppet-ca-bundle":"1.0.9","ruby-2.7.2":"2.7.2","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202101150","pxp-agent":"202101150","puppet":"7.3.0","facter":"4.0.49","hiera":"3.6.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.4.0":{"openssl-1.1.1":"1.1.1i","curl":"7.74.0","puppet-ca-bundle":"1.0.9","ruby-2.7.2":"2.7.2","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202102031","pxp-agent":"202102033","puppet":"7.4.0","facter":"4.0.51","hiera":"3.6.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.4.1":{"openssl-1.1.1":"1.1.1i","curl":"7.74.0","puppet-ca-bundle":"1.0.9","ruby-2.7.2":"2.7.2","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202102031","pxp-agent":"202102033","puppet":"7.4.1","facter":"4.0.51","hiera":"3.6.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.1","module-puppetlabs-cron_core":"1.0.5","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":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.5.0":{"openssl-1.1.1":"1.1.1i","curl":"7.74.0","puppet-ca-bundle":"1.0.9","ruby-2.7.2":"2.7.2","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202103081","pxp-agent":"202103080","puppet":"7.5.0","facter":"4.0.52","hiera":"3.7.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.6.0":{"openssl-1.1.1":"1.1.1k","curl":"7.76.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","augeas":"1.12.0","libxml2":"2.9.8","libxslt":"1.1.33","ruby-augeas":"0.5.0","libedit":"20150325-3.1","rubygem-hocon":"1.3.1","rubygem-deep_merge":"1.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202104131","pxp-agent":"202104131","puppet":"7.6.0","facter":"4.1.0","hiera":"3.7.0","puppet-resource_api":"1.8.13","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.6.1":{"openssl-1.1.1":"1.1.1k","curl":"7.76.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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-thor":"1.0.1","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202104131","pxp-agent":"202104131","puppet":"7.6.1","facter":"4.1.1","hiera":"3.7.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.7.0":{"openssl-1.1.1":"1.1.1k","curl":"7.76.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.3","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.8","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.1","rubygem-thor":"1.1.0","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202105191","pxp-agent":"202105191","puppet":"7.7.0","facter":"4.2.0","hiera":"3.7.0","puppet-resource_api":"1.8.13","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.8.0":{"openssl-1.1.1":"1.1.1k","curl":"7.77.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.4","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.8","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.1","rubygem-thor":"1.1.0","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202106080","pxp-agent":"202106083","puppet":"7.8.0","facter":"4.2.1","hiera":"3.7.0","puppet-resource_api":"v1.8.14","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.9.0":{"openssl-1.1.1":"1.1.1k","curl":"7.77.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.4","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.8","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.1","rubygem-thor":"1.1.0","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.3.2","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202107010","pxp-agent":"202107050","puppet":"7.9.0","facter":"4.2.2","hiera":"3.7.0","puppet-resource_api":"v1.8.14","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.10.0":{"openssl-1.1.1":"1.1.1k","curl":"7.77.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.4","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.8","rubygem-ffi":"1.13.1","rubygem-multi_json":"1.14.1","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.1","rubygem-thor":"1.1.0","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.4.1","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202107300","pxp-agent":"202107300","puppet":"7.10.0","facter":"4.2.3","hiera":"3.7.0","puppet-resource_api":"v1.8.14","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"},"7.11.0":{"openssl-1.1.1":"1.1.1l","curl":"7.77.0","puppet-ca-bundle":"1.0.9","ruby-2.7.3":"2.7.3","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.2.1","rubygem-net-ssh":"4.2.0","rubygem-semantic_puppet":"1.0.4","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.9","rubygem-ffi":"1.15.3","rubygem-multi_json":"1.15.0","rubygem-optimist":"3.0.1","rubygem-highline":"2.0.3","rubygem-hiera-eyaml":"3.2.2","rubygem-thor":"1.1.0","rubygem-scanf":"1.0.0","rubygem-sys-filesystem":"1.4.1","boost":"1.73.0","yaml-cpp":"yaml-cpp-0.6.2","puppet-runtime":"202109060","pxp-agent":"202109061","puppet":"7.11.0","facter":"4.2.4","hiera":"3.7.0","puppet-resource_api":"v1.8.14","shellpath":"2015-09-18","module-puppetlabs-augeas_core":"1.1.2","module-puppetlabs-cron_core":"1.0.5","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.1.0","module-puppetlabs-sshkeys_core":"2.2.0","module-puppetlabs-yumrepo_core":"1.0.7","module-puppetlabs-zfs_core":"1.2.0","module-puppetlabs-zone_core":"1.0.3"}}rspec-puppet-facts-2.0.3/lib/000077500000000000000000000000001412263642300160125ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/lib/rspec-puppet-facts.rb000066400000000000000000000345511412263642300220740ustar00rootroot00000000000000require 'puppet' require 'facter' require 'facterdb' require 'json' # The purpose of this module is to simplify the Puppet # module's RSpec tests by looping through all supported # OS'es and their facts data which is received from the FacterDB. module RspecPuppetFacts FACTS_CACHE = {} # Use the provided options or the data from the metadata.json file # to find a set of matching facts in the FacterDB. # OS names and facts can be used in the Puppet RSpec tests # to run the examples against all supported facts combinations. # # The list of received OS facts can also be filtered by the SPEC_FACTS_OS # environment variable. For example, if the variable is set to "debian" # only the OS names which start with "debian" will be returned. It allows a # user to quickly run the tests only on a single facts set without any # file modifications. # # @return [Hash Hash>] # @param [Hash] opts # @option opts [String,Array] :hardwaremodels The OS architecture names, i.e. x86_64 # @option opts [Array] :supported_os If this options is provided the data # @option opts [String] :facterversion the facter version of which to # select facts from, e.g.: '3.6' # will be used instead of the "operatingsystem_support" section if the metadata file # even if the file is missing. def on_supported_os(opts = {}) opts[:hardwaremodels] ||= ['x86_64'] opts[:hardwaremodels] = [opts[:hardwaremodels]] unless opts[:hardwaremodels].is_a? Array opts[:supported_os] ||= RspecPuppetFacts.meta_supported_os opts[:facterversion] ||= RSpec.configuration.default_facter_version # This should list all variables that on_supported_os_implementation uses cache_key = [ opts.to_s, RspecPuppetFacts.custom_facts.to_s, RspecPuppetFacts.spec_facts_os_filter, RspecPuppetFacts.spec_facts_strict?, ] result = FACTS_CACHE[cache_key] ||= on_supported_os_implementation(opts) # Marshalling is used to get unique instances which is needed for test # isolation when facts are overridden. Marshal.load(Marshal.dump(result)) end # The real implementation of on_supported_os. # # Generating facts is slow - this allows memoization of the facts between # multiple calls. # # @api private def on_supported_os_implementation(opts = {}) unless (facterversion = opts[:facterversion]) =~ /\A\d+\.\d+(?:\.\d+)*\z/ raise ArgumentError, ":facterversion must be in the format 'n.n' or " \ "'n.n.n' (n is numeric), not '#{facterversion}'" end filter = [] opts[:supported_os].map do |os_sup| if os_sup['operatingsystemrelease'] Array(os_sup['operatingsystemrelease']).map do |operatingsystemmajrelease| opts[:hardwaremodels].each do |hardwaremodel| os_release_filter = "/^#{Regexp.escape(operatingsystemmajrelease.split(' ')[0])}/" if os_sup['operatingsystem'] =~ /BSD/i hardwaremodel = 'amd64' elsif os_sup['operatingsystem'] =~ /Solaris/i hardwaremodel = 'i86pc' elsif os_sup['operatingsystem'] =~ /AIX/i hardwaremodel = '/^IBM,.*/' os_release_filter = if operatingsystemmajrelease =~ /\A(\d+)\.(\d+)\Z/ "/^#{$~[1]}#{$~[2]}00-/" else "/^#{operatingsystemmajrelease}-/" end elsif os_sup['operatingsystem'] =~ /Windows/i hardwaremodel = facterversion =~ /^[12]\./ ? 'x64' : 'x86_64' os_sup['operatingsystem'] = os_sup['operatingsystem'].downcase operatingsystemmajrelease = operatingsystemmajrelease[/\A(?:Server )?(.+)/i, 1] # force quoting because windows releases can contain spaces os_release_filter = "\"#{operatingsystemmajrelease}\"" if operatingsystemmajrelease == '2016' && Puppet::Util::Package.versioncmp(facterversion, '3.4') < 0 os_release_filter = '/^10\\.0\\./' end elsif os_sup['operatingsystem'] =~ /Amazon/i # Tighten the regex for Amazon Linux 2 so that we don't pick up Amazon Linux 2016 or 2017 facts os_release_filter = "/^2$/" if operatingsystemmajrelease == '2' end filter << { :operatingsystem => os_sup['operatingsystem'], :operatingsystemrelease => os_release_filter, :hardwaremodel => hardwaremodel, } end end else opts[:hardwaremodels].each do |hardwaremodel| filter << { :operatingsystem => os_sup['operatingsystem'], :hardwaremodel => hardwaremodel, } end end end facterversion_obj = Gem::Version.new(facterversion) # FacterDB may have newer versions of facter data for which it contains a subset of all possible # facter data (see FacterDB 0.5.2 for Facter releases 3.8 and 3.9). In this situation we need to # cycle through and downgrade Facter versions per platform type until we find matching Facter data. filter.each do |filter_spec| facter_version_filter = RspecPuppetFacts.facter_version_to_filter(facterversion) db = FacterDB.get_facts(filter_spec.merge({ :facterversion => facter_version_filter })) if db.empty? if RspecPuppetFacts.spec_facts_strict? raise ArgumentError, "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, aborting" end version = FacterDB.get_facts(filter_spec).map { |facts| Gem::Version.new(facts[:facterversion]) }.sort.reverse.detect { |v| v <= facterversion_obj } next unless version version = version.to_s facter_version_filter = "/\\A#{Regexp.escape(version)}/" unless version == facterversion RspecPuppetFacts.warning "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, using v#{version} instead" end end filter_spec[:facterversion] = facter_version_filter end received_facts = FacterDB::get_facts(filter) unless received_facts.any? RspecPuppetFacts.warning "No facts were found in the FacterDB for: #{filter.inspect}" return {} end os_facts_hash = {} received_facts.map do |facts| # Fix facter bug if facts[:operatingsystem] == 'Ubuntu' operatingsystemmajrelease = facts[:operatingsystemrelease].split('.')[0..1].join('.') elsif facts[:operatingsystem] == 'OpenBSD' operatingsystemmajrelease = facts[:operatingsystemrelease] elsif facts[:operatingsystem] == 'windows' && facts[:operatingsystemrelease].start_with?('10.0.') operatingsystemmajrelease = '2016' else if facts[:operatingsystemmajrelease].nil? operatingsystemmajrelease = facts[:operatingsystemrelease].split('.')[0] else operatingsystemmajrelease = facts[:operatingsystemmajrelease] end end os = "#{facts[:operatingsystem].downcase}-#{operatingsystemmajrelease}-#{facts[:hardwaremodel]}" next unless os.start_with? RspecPuppetFacts.spec_facts_os_filter if RspecPuppetFacts.spec_facts_os_filter facts.merge! RspecPuppetFacts.common_facts os_facts_hash[os] = RspecPuppetFacts.with_custom_facts(os, facts) end return stringify_keys(os_facts_hash) if RSpec.configuration.facterdb_string_keys os_facts_hash end def stringify_keys(hash) Hash[hash.collect { |k,v| [k.to_s, v.is_a?(Hash) ? stringify_keys(v) : v] }] end # Register a custom fact that will be included in the facts hash. # If it should be limited to a particular OS, pass a :confine option # that contains the operating system(s) to confine to. If it should # be excluded on a particular OS, use :exclude. # # @param [String] name Fact name # @param [String,Proc] value Fact value. If proc, takes 2 params: os and facts hash # @param [Hash] opts # @option opts [String,Array] :confine The applicable OS's # @option opts [String,Array] :exclude OS's to exclude # def add_custom_fact(name, value, options = {}) options[:confine] = [options[:confine]] if options[:confine].is_a?(String) options[:exclude] = [options[:exclude]] if options[:exclude].is_a?(String) RspecPuppetFacts.register_custom_fact(name, value, options) end # Adds a custom fact to the @custom_facts variable. # # @param [String] name Fact name # @param [String,Proc] value Fact value. If proc, takes 2 params: os and facts hash # @param [Hash] opts # @option opts [String,Array] :confine The applicable OS's # @option opts [String,Array] :exclude OS's to exclude # @api private def self.register_custom_fact(name, value, options) @custom_facts ||= {} @custom_facts[name.to_s] = {:options => options, :value => value} end # Adds any custom facts according to the rules defined for the operating # system with the given facts. # @param [String] os Name of the operating system # @param [Hash] facts Facts hash # @return [Hash] facts Facts hash with custom facts added # @api private def self.with_custom_facts(os, facts) return facts unless @custom_facts @custom_facts.each do |name, fact| next if fact[:options][:confine] && !fact[:options][:confine].include?(os) next if fact[:options][:exclude] && fact[:options][:exclude].include?(os) facts[name] = fact[:value].respond_to?(:call) ? fact[:value].call(os, facts) : fact[:value] end facts end # Get custom facts # @return [nil,Hash] # @api private def self.custom_facts @custom_facts end # If provided this filter can be used to limit the set # of retrieved facts only to the matched OS names. # The value is being taken from the SPEC_FACTS_OS environment # variable and # @return [nil,String] # @api private def self.spec_facts_os_filter ENV['SPEC_FACTS_OS'] end # If SPEC_FACTS_STRICT is set to `yes`, RspecPuppetFacts will error on missing FacterDB entries, instead of warning & skipping the tests, or using an older facter version. # @return [Boolean] # @api private def self.spec_facts_strict? ENV['SPEC_FACTS_STRICT'] == 'yes' end # These facts are common for all OS'es and will be # added to the facts retrieved from the FacterDB # @api private # @return [Hash String>] def self.common_facts return @common_facts if @common_facts @common_facts = { :puppetversion => Puppet.version, :rubysitedir => RbConfig::CONFIG['sitelibdir'], :rubyversion => RUBY_VERSION, } @common_facts[:mco_version] = MCollective::VERSION if mcollective? if augeas? @common_facts[:augeasversion] = Augeas.open(nil, nil, Augeas::NO_MODL_AUTOLOAD).get('/augeas/version') end @common_facts end # Determine if the Augeas gem is available. # @api private # @return [Boolean] true if the augeas gem could be loaded. # :nocov: def self.augeas? require 'augeas' true rescue LoadError false end # :nocov: # Determine if the mcollective gem is available # @api private # @return [Boolean] true if the mcollective gem could be loaded. # :nocov: def self.mcollective? require 'mcollective' true rescue LoadError false end # :nocov: # Get the "operatingsystem_support" structure from # the parsed metadata.json file # @raise [StandardError] if there is no "operatingsystem_support" # in the metadata # @return [Array] # @api private def self.meta_supported_os unless metadata['operatingsystem_support'].is_a? Array fail StandardError, 'Unknown operatingsystem support in the metadata file!' end metadata['operatingsystem_support'] end # Read the metadata file and parse # its JSON content. # @raise [StandardError] if the metadata file is missing # @return [Hash] # @api private def self.metadata return @metadata if @metadata unless File.file? metadata_file fail StandardError, "Can't find metadata.json... dunno why" end content = File.read metadata_file @metadata = JSON.parse content end # This file contains the Puppet module's metadata # @return [String] # @api private def self.metadata_file 'metadata.json' end # Print a warning message to the console # @param message [String] # @api private def self.warning(message) STDERR.puts message end # Reset the memoization # to make the saved structures # be generated again # @api private def self.reset @custom_facts = nil @common_facts = nil @metadata = nil end # Generates a JGrep statement expression for a specific facter version # @return [String] JGrep statement expression # @param version [String] the Facter version # @api private def self.facter_version_to_filter(version) major, minor = version.split('.') "/\\A#{major}\\.#{minor}\\./" end def self.facter_version_for_puppet_version(puppet_version) return Facter.version if puppet_version.nil? json_path = File.expand_path(File.join(__dir__, '..', 'ext', 'puppet_agent_components.json')) unless File.file?(json_path) && File.readable?(json_path) warning "#{json_path} does not exist or is not readable, defaulting to Facter #{Facter.version}" return Facter.version end fd = File.open(json_path, 'rb:UTF-8') data = JSON.parse(fd.read) version_map = data.map { |_, versions| if versions['puppet'].nil? || versions['facter'].nil? nil else [Gem::Version.new(versions['puppet']), versions['facter']] end }.compact puppet_gem_version = Gem::Version.new(puppet_version) applicable_versions = version_map.select { |p, _| puppet_gem_version >= p } if applicable_versions.empty? warning "Unable to find Puppet #{puppet_version} in #{json_path}, defaulting to Facter #{Facter.version}" return Facter.version end applicable_versions.sort { |a, b| b.first <=> a.first }.first.last rescue JSON::ParserError warning "#{json_path} contains invalid JSON, defaulting to Facter #{Facter.version}" Facter.version ensure fd.close if fd end end RSpec.configure do |c| c.add_setting :default_facter_version, :default => RspecPuppetFacts.facter_version_for_puppet_version(Puppet.version) c.add_setting :facterdb_string_keys, :default => false end rspec-puppet-facts-2.0.3/lib/rspec-puppet-facts/000077500000000000000000000000001412263642300215375ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/lib/rspec-puppet-facts/version.rb000066400000000000000000000002441412263642300235510ustar00rootroot00000000000000module RspecPuppetFacts # This module contains the current version constant module Version # The current version of this gem STRING = '2.0.3' end end rspec-puppet-facts-2.0.3/rspec-puppet-facts.gemspec000066400000000000000000000021561412263642300223420ustar00rootroot00000000000000# frozen_string_literal: true $LOAD_PATH.unshift File.expand_path('lib', __dir__) require 'rspec-puppet-facts/version' Gem::Specification.new do |s| s.name = 'rspec-puppet-facts' s.version = RspecPuppetFacts::Version::STRING s.authors = ['Vox Pupuli'] s.email = ['voxpupuli@groups.io'] s.homepage = 'http://github.com/voxpupuli/rspec-puppet-facts' s.summary = 'Standard facts fixtures for Puppet' s.description = 'Contains facts from many Facter version on many Operating Systems' s.licenses = 'Apache-2.0' # see .travis.yml for the supported ruby versions s.required_ruby_version = '>= 2.4.0' s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) } s.add_development_dependency 'mime-types' s.add_development_dependency 'rake' s.add_development_dependency 'rspec' s.add_development_dependency 'yard' s.add_runtime_dependency 'puppet' s.add_runtime_dependency 'facter' s.add_runtime_dependency 'facterdb', '>= 0.5.0' end rspec-puppet-facts-2.0.3/spec/000077500000000000000000000000001412263642300161765ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/spec/fixtures/000077500000000000000000000000001412263642300200475ustar00rootroot00000000000000rspec-puppet-facts-2.0.3/spec/fixtures/metadata.json000066400000000000000000000014351412263642300225250ustar00rootroot00000000000000{ "name": "mcanevet-mymodule", "version": "1.0.0", "author": "Mickaël Canévet", "summary": "My puppet modules", "license": "Apache-2.0", "source": "https://github.com/mcanevet/puppet-mymodule", "project_page": "https://github.com/mcanevet/puppet-mymodule", "issues_url": "https://github.com/mcanevet/puppet-mymodule/issues", "dependencies": [ ], "requirements": [ ], "operatingsystem_support": [ { "operatingsystem": "Debian", "operatingsystemrelease": [ "7", "8" ] }, { "operatingsystem": "RedHat", "operatingsystemrelease": [ "5", "6", "7" ] } ], "puppet_version": [ "2.7", "3.0", "3.1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.7" ] } rspec-puppet-facts-2.0.3/spec/fixtures/metadata.json_with_missing_operatingsystem_support000066400000000000000000000010071412263642300324150ustar00rootroot00000000000000{ "name": "mcanevet-mymodule", "version": "1.0.0", "author": "Mickaël Canévet", "summary": "My puppet modules", "license": "Apache-2.0", "source": "https://github.com/mcanevet/puppet-mymodule", "project_page": "https://github.com/mcanevet/puppet-mymodule", "issues_url": "https://github.com/mcanevet/puppet-mymodule/issues", "dependencies": [ ], "requirements": [ ], "puppet_version": [ "2.7", "3.0", "3.1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.7" ] } rspec-puppet-facts-2.0.3/spec/rspec_puppet_facts_spec.rb000066400000000000000000000710771412263642300234420ustar00rootroot00000000000000require 'spec_helper' require 'json' require 'stringio' describe RspecPuppetFacts do let(:metadata_file) do 'spec/fixtures/metadata.json' end describe '.facter_version_for_puppet_version' do subject(:facter_version) do described_class.facter_version_for_puppet_version(puppet_version) end let(:component_json_path) do File.expand_path(File.join(__dir__, '..', 'ext', 'puppet_agent_components.json')) end let(:puppet_version) { Puppet.version } context 'when the component JSON file does not exist' do before(:each) do allow(File).to receive(:file?).with(component_json_path).and_return(false) allow(described_class).to receive(:warning) end it 'defaults to the currently installed Facter version' do expect(facter_version).to eq(Facter.version) end it 'warns the user' do msg = /does not exist or is not readable, defaulting to/i expect(described_class).to receive(:warning).with(a_string_matching(msg)) facter_version end end context 'when the component JSON file is unreadable' do before(:each) do allow(File).to receive(:readable?).with(component_json_path).and_return(false) allow(described_class).to receive(:warning) end it 'defaults to the currently installed Facter version' do expect(facter_version).to eq(Facter.version) end it 'warns the user' do msg = /does not exist or is not readable, defaulting to/i expect(described_class).to receive(:warning).with(a_string_matching(msg)) facter_version end end context 'when the component JSON file is unparseable' do before(:each) do io = StringIO.new('this is not JSON!') allow(File).to receive(:open).with(component_json_path, anything).and_return(io) allow(described_class).to receive(:warning) end it 'defaults to the currently installed Facter version' do expect(facter_version).to eq(Facter.version) end it 'warns the user' do msg = /contains invalid json, defaulting to/i expect(described_class).to receive(:warning).with(a_string_matching(msg)) facter_version end end context 'when the passed puppet_version is nil' do let(:puppet_version) { nil } it 'defaults to the currently installed Facter version' do expect(facter_version).to eq(Facter.version) end end context 'when passed a Puppet version greater than any known version' do let(:puppet_version) { '999.0.0' } it 'returns the Facter version for the highest known Puppet version' do known_facter_versions = JSON.parse(File.read(component_json_path)).map do |_, r| r['facter'] end sorted_facter_versions = known_facter_versions.compact.sort do |a, b| Gem::Version.new(b) <=> Gem::Version.new(a) end expect(facter_version).to eq(sorted_facter_versions.first) end end context 'when passed a known Puppet version' do let(:puppet_version) { '5.2.0' } it 'returns the Facter version for that Puppet version' do expect(facter_version).to eq('3.9.0') end end context 'when passed a Puppet version between two known versions' do let(:puppet_version) { '5.2.5' } it 'returns the Facter version for the lower Puppet version' do expect(facter_version).to eq('3.9.0') end end context 'when passed a Puppet version lower than any known version' do let(:puppet_version) { '1.0.0' } before(:each) do allow(described_class).to receive(:warning) end it 'returns the currently installed Facter version' do expect(facter_version).to eq(Facter.version) end it 'warns the user' do msg = /unable to find puppet #{Regexp.escape(puppet_version)}.+?, defaulting to/i expect(described_class).to receive(:warning).with(a_string_matching(msg)) facter_version end end end describe '#on_supported_os' do context 'With RSpec.configuration.facterdb_string_keys' do subject(:result) do on_supported_os( { :supported_os => [ { "operatingsystem" => "Debian", "operatingsystemrelease" => ['7'], }, ], } ) end let(:get_keys) do proc { |r| r.keys + r.select { |_,v| v.is_a?(Hash) }.map { |_,v| get_keys.call(v) }.flatten } end context 'set to true' do before(:each) do RSpec.configuration.facterdb_string_keys = true end after(:each) do RSpec.configuration.facterdb_string_keys = false end it 'returns a fact set with all the keys as Strings' do expect(get_keys.call(result['debian-7-x86_64'])).to all(be_a(String)) end end context 'set to false' do before(:each) do RSpec.configuration.facterdb_string_keys = false end it 'returns a fact set with all the keys as Symbols or Strings' do expect(get_keys.call(result['debian-7-x86_64'])).to all(be_a(Symbol).or(be_a(String))) end end end context 'Without specifying supported_os' do subject { on_supported_os } context 'Without metadata.json' do before(:each) do expect(File).to receive(:file?).with('metadata.json').and_return false end it { expect { subject }.to raise_error(StandardError, /Can't find metadata.json/) } end context 'With a metadata.json' do it 'can load the metadata file' do allow(RspecPuppetFacts).to receive(:metadata_file).and_return(metadata_file) RspecPuppetFacts.reset expect(RspecPuppetFacts.metadata).to be_a Hash expect(RspecPuppetFacts.metadata['name']).to eq 'mcanevet-mymodule' end context 'With a valid metadata.json' do let(:metadata) do fixture = File.read(metadata_file) JSON.parse fixture end before :each do allow(RspecPuppetFacts).to receive(:metadata).and_return(metadata) end it 'should return a hash' do is_expected.to be_a Hash end it 'should have 5 elements' do expect(subject.size).to eq 5 end it 'should return supported OS' do expect(subject.keys.sort).to eq %w( debian-7-x86_64 debian-8-x86_64 redhat-5-x86_64 redhat-6-x86_64 redhat-7-x86_64 ) end it 'should be able to filter the received OS facts' do allow(RspecPuppetFacts).to receive(:spec_facts_os_filter).and_return('redhat') expect(subject.keys.sort).to eq %w( redhat-5-x86_64 redhat-6-x86_64 redhat-7-x86_64 ) end end context 'With a broken metadata.json' do before :each do allow(RspecPuppetFacts).to receive(:metadata).and_return(metadata) end context 'With a missing operatingsystem_support section' do let(:metadata) do {} end it { expect { subject }.to raise_error(StandardError, /Unknown operatingsystem support/) } end context 'With a wrong operatingsystem_support section' do let(:metadata) do { 'operatingsystem_support' => 'Ubuntu', } end it { expect { subject }.to raise_error(StandardError, /Unknown operatingsystem support/) } end end end end context 'When specifying supported_os' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "Debian", "operatingsystemrelease" => [ "7", "8", ] }, { "operatingsystem" => "RedHat", "operatingsystemrelease" => [ "5", "6" ] } ] } ) } it 'should return a hash' do is_expected.to be_a Hash end it 'should have 4 elements' do expect(subject.size).to eq 4 end it 'should return supported OS' do expect(subject.keys.sort).to eq %w( debian-7-x86_64 debian-8-x86_64 redhat-5-x86_64 redhat-6-x86_64 ) end it 'should be able to filter the received OS facts' do allow(RspecPuppetFacts).to receive(:spec_facts_os_filter).and_return('redhat') expect(subject.keys.sort).to eq %w( redhat-5-x86_64 redhat-6-x86_64 ) end end context 'When specifying a supported_os with a single release as a String' do subject(:factsets) do on_supported_os( { :supported_os => [ { 'operatingsystem' => 'RedHat', 'operatingsystemrelease' => '7' }, ] } ) end it 'returns a Hash' do expect(factsets).to be_a(Hash) end it 'returns a single fact set' do expect(factsets.size).to eq(1) end it 'returns a fact set for the specified release' do expect(factsets).to include('redhat-7-x86_64' => include(:operatingsystemmajrelease => '7')) end end context 'When testing Ubuntu' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "Ubuntu", "operatingsystemrelease" => [ "12.04", "14.04", "16.04", ], }, ], } ) } let(:expected_fact_sets) do ['ubuntu-12.04-x86_64', 'ubuntu-14.04-x86_64', 'ubuntu-16.04-x86_64'] end it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 3 elements' do expect(subject.size).to eq(expected_fact_sets.size) end it 'should return supported OS' do expect(subject.keys.sort).to eq(expected_fact_sets) end end context 'When testing FreeBSD 10' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "FreeBSD", "operatingsystemrelease" => [ "10", ], }, ], :facterversion => '2.4', } ) } it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 1 elements' do expect(subject.size).to eq 1 end it 'should return supported OS' do expect(subject.keys.sort).to eq [ 'freebsd-10-amd64', ] end end context 'When testing OpenBSD' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "OpenBSD", "operatingsystemrelease" => [ "5.7", ], }, ], :facterversion => '2.4', } ) } it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 1 elements' do expect(subject.size).to eq 1 end it 'should return supported OS' do expect(subject.keys.sort).to eq [ 'openbsd-5.7-amd64', ] end end context 'When testing Solaris 11', :if => Facter.version.to_f >= 2.0 do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "Solaris", "operatingsystemrelease" => [ "11", ], }, ], } ) } it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 1 elements' do expect(subject.size).to eq 1 end it 'should return supported OS' do expect(subject.keys.sort).to eq %w( solaris-11-i86pc ) end end context 'When testing AIX 7.1' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "AIX", "operatingsystemrelease" => [ "7.1", "7100" ], }, ], :facterversion => '3.9' } ) } it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 1 elements' do expect(subject.size).to eq 1 end it 'should return supported OS' do # NOTE: See FACT-1827 for details on the IBM,8284-22A part # That has to match whatever hardware generated the facts file. expect(subject.keys.sort).to eq %w( aix-7100-IBM,8284-22A ) end end context 'When testing Windows', :if => Facter.version.to_f >= 2.4 do subject do on_supported_os( { :supported_os => [ { 'operatingsystem' => 'Windows', 'operatingsystemrelease' => release, } ], :facterversion => facterversion, } ) end let(:facterversion) { '3.8.0' } context 'with a standard release' do let(:release) { ['7'] } it { is_expected.to be_a(Hash) } it { is_expected.to have_attributes(:size => 1) } it { is_expected.to include('windows-7-x86_64' => an_instance_of(Hash)) } end context 'with a revision release' do let(:release) { ['2012 R2'] } it { is_expected.to be_a(Hash) } it { is_expected.to have_attributes(:size => 1) } it { is_expected.to include('windows-2012 R2-x86_64' => an_instance_of(Hash)) } end context 'with a Server prefixed release' do let(:release) { ['Server 2012'] } it { is_expected.to be_a(Hash) } it { is_expected.to have_attributes(:size => 1) } it { is_expected.to include('windows-2012-x86_64' => an_instance_of(Hash)) } end context 'with a 2016 release' do let(:release) { ['2016'] } it { is_expected.to be_a(Hash) } it { is_expected.to have_attributes(:size => 1) } it { is_expected.to include('windows-2016-x86_64' => an_instance_of(Hash)) } end context 'with a 2016 release and Facter < 3.4' do let(:release) { ['2016'] } let(:facterversion) { '3.3.0' } it { is_expected.to be_a(Hash) } it { is_expected.to have_attributes(:size => 1) } it 'munges the operatingsystemmajrelease to 2016' do is_expected.to include('windows-2016-x86_64' => an_instance_of(Hash)) end end end context 'When operatingsystemrelease has space' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "SLES", "operatingsystemrelease" => [ "11 SP1" ] } ] } ) } it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 1 elements' do expect(subject.size).to eq 1 end it 'should return supported OS' do expect(subject.keys.sort).to eq [ 'sles-11-x86_64', ] end end context 'When specifying wrong supported_os' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "Debian", "operatingsystemrelease" => [ "4", ], }, ] } ) } it 'should output warning message' do expect(RspecPuppetFacts).to receive(:warning).with(/No facts were found in the FacterDB/) subject end end context 'When specifying rolling release operating system' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "Debian", "operatingsystemrelease" => [ "8", ], }, { "operatingsystem" => "Archlinux", }, ], :facterversion => '2.4', } ) } it 'should return a hash' do expect(subject.class).to eq Hash end it 'should have 2 elements' do expect(subject.size).to eq 2 end it 'should return supported OS' do expect(subject.keys.sort).to include(a_string_matching(/\Aarchlinux-\d+-x86_64/), 'debian-8-x86_64') end end context 'When the operatingsystemrelease contains parens' do subject do on_supported_os( { :supported_os => [ { 'operatingsystem' => 'IOS', 'operatingsystemrelease' => ['12.2(25)EWA9'], } ], } ) end before(:each) do allow(RspecPuppetFacts).to receive(:warning).with(a_string_matching(/no facts were found/i)) allow(FacterDB).to receive(:get_facts).and_call_original end it 'escapes the parens in the filter' do filter = [ include( :operatingsystem => "IOS", :operatingsystemrelease => "/^12\\.2\\(25\\)EWA9/", :hardwaremodel => "x86_64", ), ] expect(FacterDB).to receive(:get_facts).with(filter) subject end it 'does not raise an error' do expect { subject }.not_to raise_error end end context 'With a default Facter version specified in the RSpec configuration' do before(:each) do RSpec.configuration.default_facter_version = '3.1.0' end after(:each) do RSpec.configuration.default_facter_version = Facter.version end subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ] ) end it 'returns facts from the specified default Facter version' do is_expected.to match( 'centos-7-x86_64' => include( :facterversion => /\A3\.1\./ ) ) end end context 'With a version that is above the current gem' do before(:each) do allow(Facter).to receive(:version).and_return('2.4.5') end subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ], facterversion: "2.6" ) end it 'returns facts from a facter version matching future and below' do major, minor = Facter.version.split('.') is_expected.to match( 'centos-7-x86_64' => include( :facterversion => /\A#{major}\.[#{minor}#{minor.to_i + 1}]\./ ) ) end context 'With SPEC_FACTS_STRICT set to `yes`' do before(:each) do allow(RspecPuppetFacts).to receive(:spec_facts_strict?).and_return(true) end it 'errors' do expect { subject }.to raise_error ArgumentError, /No facts were found in the FacterDB.*aborting/ end end end context 'With a custom facterversion (3.1) in the options hash' do subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ], facterversion: '3.1' ) end it 'returns facts from a facter version matching 3.1' do is_expected.to match( 'centos-7-x86_64' => include(:facterversion => '3.1.6') ) end end context 'With a custom facterversion (3.1.2) in the options hash' do subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ], facterversion: '3.1.2' ) end it 'returns facts from a facter version matching 3.1' do is_expected.to match( 'centos-7-x86_64' => include(:facterversion => '3.1.6') ) end end context 'With a custom facterversion (3.3) in the options hash' do subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ], facterversion: '3.3' ) end it 'returns facts from a facter version matching 3.3' do is_expected.to match( 'centos-7-x86_64' => include(:facterversion => '3.3.0') ) end end context 'With a custom facterversion (3.3.2) in the options hash' do subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ], facterversion: '3.3.2' ) end it 'returns facts from a facter version matching 3.3' do is_expected.to match( 'centos-7-x86_64' => include(:facterversion => '3.3.0') ) end end context 'When querying a fact set that does not have an operatingsystemmajrelease fact' do subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'SLES', 'operatingsystemrelease' => ['11'] } ], facterversion: '2.1.0' ) end it 'splits the operatingsystemrelease fact value to get the major release' do is_expected.to match( 'sles-11-x86_64' => include(:operatingsystemrelease => '11.3') ) end end context 'With an invalid facterversion in the options hash' do let(:method_call) do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] } ], facterversion: '3' ) end it 'raises an error' do expect { method_call }.to raise_error(ArgumentError, /:facterversion must be in the /) end end context 'Downgrades to a facter version with facts per OS' do subject do on_supported_os( supported_os: [ { 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }, { 'operatingsystem' => 'OpenSuSE', 'operatingsystemrelease' => %w[42] } ], facterversion: '3.9.5' ) end before(:each) do allow(FacterDB).to receive(:get_facts).and_call_original allow(FacterDB).to receive(:get_facts).with( a_hash_including(facterversion: "/\\A3\\.9\\./", operatingsystem: 'CentOS') ).and_return([]) end it 'returns CentOS facts from a facter version matching 3.8' do is_expected.to include( 'centos-7-x86_64' => include(:facterversion => '3.8.0') ) end it 'returns OpenSuSE facts from a facter version matching 3.9' do is_expected.to include( 'opensuse-42-x86_64' => include(:facterversion => '3.9.2') ) end end end context '#add_custom_fact' do subject { on_supported_os( { :supported_os => [ { "operatingsystem" => "RedHat", "operatingsystemrelease" => [ "6", "7" ] } ] } ) } before(:each) do RspecPuppetFacts.reset end it 'adds a simple fact and value' do add_custom_fact 'root_home', '/root' expect(subject['redhat-7-x86_64']['root_home']).to eq '/root' end it 'confines a fact to a particular operating system' do add_custom_fact 'root_home', '/root', :confine => 'redhat-7-x86_64' expect(subject['redhat-7-x86_64']['root_home']).to eq '/root' expect(subject['redhat-6-x86_64']['root_home']).to be_nil end it 'excludes a fact from a particular operating system' do add_custom_fact 'root_home', '/root', :exclude => 'redhat-7-x86_64' expect(subject['redhat-7-x86_64']['root_home']).to be_nil expect(subject['redhat-6-x86_64']['root_home']).to eq '/root' end it 'takes a proc as a value' do add_custom_fact 'root_home', ->(_os, _facts) { '/root' } expect(subject['redhat-7-x86_64']['root_home']).to eq '/root' end end context '#misc' do it 'should have a common facts structure' do RspecPuppetFacts.reset expect(subject.common_facts).to be_a Hash expect(subject.common_facts).not_to be_empty end it 'should not add "augeasversion" if Augeas is supported' do allow(described_class).to receive(:augeas?).and_return(false) RspecPuppetFacts.reset expect(subject.common_facts).not_to include(:augeasversion) end it 'should determine the Augeas version if Augeas is supported' do module Augeas_stub NO_MODL_AUTOLOAD = true def self.open(*_args) self end def self.get(*_args) 'my_version' end end allow(described_class).to receive(:augeas?).and_return(true) stub_const('Augeas', Augeas_stub) RspecPuppetFacts.reset expect(subject.common_facts[:augeasversion]).to eq 'my_version' end context 'when mcollective is available' do module MCollective_stub VERSION = 'my_version' end before(:each) do allow(described_class).to receive(:mcollective?).and_return(true) stub_const('MCollective', MCollective_stub) described_class.reset end it 'includes an "mco_version" fact' do expect(subject.common_facts).to include(:mco_version => 'my_version') end end context 'when mcollective is not available' do before(:each) do allow(described_class).to receive(:mcollective?).and_return(false) described_class.reset end it 'does not include an "mco_version" fact' do expect(subject.common_facts).not_to include(:mco_version) end end end describe '.facter_version_to_filter' do context 'when passed a version that is major.minor (1)' do subject { RspecPuppetFacts.facter_version_to_filter('1.2') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A1\.2\./') end end context 'when passed a version that is major.minor (2)' do subject { RspecPuppetFacts.facter_version_to_filter('10.2') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A10\.2\./') end end context 'when passed a version that is major.minor (3)' do subject { RspecPuppetFacts.facter_version_to_filter('1.20') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A1\.20\./') end end context 'when passed a version that is major.minor (4)' do subject { RspecPuppetFacts.facter_version_to_filter('10.20') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A10\.20\./') end end context 'when passed a version that is major.minor.patch (1)' do subject { RspecPuppetFacts.facter_version_to_filter('1.2.3') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A1\.2\./') end end context 'when passed a version that is major.minor.patch (2)' do subject { RspecPuppetFacts.facter_version_to_filter('10.2.3') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A10\.2\./') end end context 'when passed a version that is major.minor.patch (3)' do subject { RspecPuppetFacts.facter_version_to_filter('1.20.3') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A1\.20\./') end end context 'when passed a version that is major.minor.patch (4)' do subject { RspecPuppetFacts.facter_version_to_filter('10.20.3') } it 'returns the correct JGrep statement expression' do is_expected.to eq('/\A10\.20\./') end end end end rspec-puppet-facts-2.0.3/spec/spec_helper.rb000066400000000000000000000007311412263642300210150ustar00rootroot00000000000000begin require 'simplecov' require 'simplecov-console' require 'codecov' rescue LoadError else SimpleCov.start do track_files 'lib/**/*.rb' add_filter '/spec' enable_coverage :branch # do not track vendored files add_filter '/vendor' add_filter '/.vendor' end SimpleCov.formatters = [ SimpleCov::Formatter::Console, SimpleCov::Formatter::Codecov, ] end require 'rspec' require 'rspec-puppet-facts' include RspecPuppetFacts