There is Vagrantfile
to automatically populate facts
for all supported operating systems by spawning a new VM and launches a provisioning scripts.
Vagrant is a tool for creating reproducible virtual machine builds. We use it to ensure facts are generated as similarly as possible every time.
Vagrant starts by downloading a box
- a pre-build skeleton of a virtual machine - and then running multiple steps on it.
Our workflow generally looks like this:
- One or more setup steps to make the VM ready to install puppet and generate facts (for example, setting up the network)
- Calling the
get_facts
script which installs multiple versions of Puppet and generates facts for multiple versions of facter. - Shutting down the VM (Vagrant doesn't do this automatically).
The vagrant timezone plugin is recommended to prevent unnecessary changes to timezone facts:
vagrant plugin install vagrant-timezone
The distributed facts are built using VirtualBox. Building the facts will work with other visualization hosts, but will produce different results (eg. IP ranges) that will break spec tests.
VirtualBox versions 6 and 7 have been tested.
The GPLv3 version of VirtualBox is sufficient - the proprietary Oracle VM VirtualBox Extension Pack
is not required.
To build facts, specify an operating system or list of systems.
$ vagrant up --provision debian-11-x86_64
$ vagrant up --provision debian-11-x86_64 debian-12-x86_64 redhat-8-x86_64 redhat-9-x86_64
Windows systems are also available.
$ vagrant up --provision windows-server-2019-x86_64 windows-server-2022-x86_64 windows-10-x86_64 windows-11-x86_64
You can build a list of supported facter versions and operating systems:
$ bundle exec rake database
These are also included in our YARD documentation build.
Not all facts can (or should) be built from VMs. It often isn't necessary to run a separate VM to create some facts that won't be significantly different for existing facts. Some operating systems are harder to run in VMs.
for file in facts/*/*-x86_64.facts; do cat $file | sed -e 's/x86_64/i386/' -e 's/amd64/i386/' > $(echo $file | sed 's/x86_64/i386/'); done
NOTE: When using Facter version 4, by default some "legacy facts" are hidden from the output.
To generate a fact set with the legacy facts use the command puppet facts show --show-legacy
The default Ubuntu 18.04 box
creates a console log file (ubuntu-bionic-18.04-cloudimg-console.log).
Newer Ubuntu boxes
don't do this.
This behavior can be modified by changing the box
configuration: config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--uartmode1", "disconnected"] end
There are publicly available Windows boxes
for Vagrant.
We currently use publicly-availble boxes
from Vagrant Community, but we also included packer templates so you can build your own (currently outdated).
run packer build <file>.json
followed by vagrant add <boxname> <boxfile>
Once the box is added, change the Vagrantfile
to use your new box
and run vagrant up <windows_os_name>