Facter: Ansible facts in Puppet
Have you ever needed to access Ansible facts from inside Puppet? well, if you ever need to, you can use the basic ansible_facts custom fact.
# make sure you have ansible installed
$ sudo puppet resource package ansible ensure=present
# clone my experimental puppet fact repo
$ git clone https://github.com/deanwilson/unixdaemon-puppet_facts.git
# Try running the fact
$ ruby -I unixdaemon-puppet_facts/lib/ `which facter` ansible_facts -j
{
"ansible_facts": {
"ansible_architecture": "x86_64",
"ansible_bios_date": "04/25/2013",
"ansible_bios_version": "RKPPT%$DSFH.86A.0457.20DF3.0425.1251",
"ansible_cmdline": {
... snip ...
While it’s nice to see the output in facter you need to make a small change
to your config file to use them in puppet. Set stringify_facts = false
in the [main] section of your puppet.conf file and you can
use these new facts inside your manifests.
$ puppet apply -e 'notify { "Form factor: ${::ansible_facts['ansible_form_factor']}": }'
Notice: Form factor: Desktop
Would I use this in general production? No, never again, but it’s a nice reminder of how easy facter is to extend. A couple of notes if you decide to play with this fact - I deliberately filter out non-ansible facts. There was something odd about seeing facter facts nested inside Ansible ones inside facter. If you foolishly decide to use this heavily, and you’re running puppet frequently, adding a simple cache for the ansible results might be worth looking at to help your performance.