PuppetFactset
This gem provides the output of Facter on several representative test systems which makes a complete set of OS specific facts (AKA factsets) available to programs such as Onceover and PDQTest. The aim here is to provide a shared, reusable and small library providing easy access to facter output on as many platforms as possible.
Adding new platforms
To create support for additional platforms all we need to do is log onto a real machine that has puppet installed and run:
puppet facts > OSNAME-OSVERSION-ARCH.jsonWhere:
- OSNAME is the Operating System name, eg
Debian - OSVERSION is the Operating System version number, eg
7.8 - ARCH indicates the CPU architecture, eg
32,64,powerpc
puppet facts will give raw json output of every fact which puppet knows about.
Once we have our factset all we need to do is copy it into res/factset/ inside this git repository and commit it to version control. To share your new platform support with the world, please create a Pull Request.
Factsets are named based on their filename, not the name of the server they came from/
Installation
puppet_factset is intended to be used as a library and provides no executable. To use in your own application, add this line to your application's Gemfile:
gem 'puppet_factset'And then execute:
$ bundle
Or install it yourself as:
$ gem install puppet_factset
Usage
-
puppet_factsetprovides a minimal API to obtain fact information, see below - Dependencies are deliberately kept small/absent
Factset Directory
To obtain the real filesystem directory containing the factset files (res/factset):
require 'puppet_factset'
factset_dir = PuppetFactset::factset_dirHash of facts
To obtain a representitive hash of facts for a given system:
require 'puppet_factset'
fact_hash = PuppetFactset::factset_hash(system_name)-
system_nameneeds to correspond to a file in the factset dir, eg use 'Debian-7.8-64' to access the'Debian-7.8-64.json'file. - If required system is absent a
RuntimeErrorwill be raised
Available Factsets
To obtain the list of available factsets suitable for use with factset_hash:
require 'puppet_factset'
factsets = PuppetFactset::factsets- The
factsetsarray will be sorted A-Z
Merging additional facts/handling external facts
Sometimes you need to ensure that a fact is present without worrying to much about its real-world value, for example external facts or custom in-module facts that do things such as query for the system for package versions, etc.
puppet_factset will automatically merge the hiera data found in all .json files found inside the spec/merge_facts directory, relative to the current working directory into factset data for each OS when accessed via the above API (the factset files themselves are unchanged).
Worked example
spec/merge_facts/extra_fact.json
{
"extra_fact": "hello"
}require 'puppet_factset'
fact_hash = PuppetFactset::factset_hash(system_name)
puts fact_hash["extra_fact"] # from your json file
puts fact_hash["osfamily"] # from the facts shipped inside this gemNote that its possible to silently override shipped factsets using this method as well. I regard this as a feature.
Development
- RSpec tests are provided, please ensure these pass before and after adding any ruby code to the project
- If adding new functionality, please write an acommpanying testcase
- To run tests:
bundle install && bundle exec rake spec
Authors
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/declarativesystems/puppet_factset.