How to Use Puppet Facts and Environment Variables in Your Infrastructure
When managing infrastructure with Puppet, understanding how to use Puppet facts and environment variables can significantly enhance your system configurations. Puppet facts provide vital system information, which you can use within your manifests to automate and optimize various tasks. By integrating environment variables with Puppet’s facter tool, you can achieve more efficient automation and resource management.

What Are Puppet Facts?
Puppet facts are system details collected by Puppet using the facter tool. These facts function similarly to environment variables in Bash or Linux. Essentially, they store key-value pairs that provide critical information about the system’s configuration. For example, Puppet facts can include data like processor count, operating system family, and Ruby version.
By default, Puppet provides a set of core facts. However, you can create custom facts tailored to your needs, enabling you to collect specific details about your infrastructure.
How to Access Puppet Facts
You can view all available Puppet facts on your system by running the following command:
facter -p
This will return a set of facts with key-value pairs like the following:
processors => {
count => 2,
isa => "x86_64",
models => [
"Intel(R) Core(TM) i5-4310M CPU @ 2.70GHz",
"Intel(R) Core(TM) i5-4310M CPU @ 2.70GHz"
],
physicalcount => 1
}
puppetversion => 6.22.1
ruby => {
platform => "x86_64-linux",
sitedir => "/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.5.0",
version => "2.5.9"
}
Creating Custom Facts in Puppet
Custom facts allow you to extend the capabilities of Puppet by adding tailored data to your system configuration. To illustrate how to create a custom fact, let’s set up a simple example:
- First, create a new Puppet module by running:
pdk new module my_facts - Next, update the
my_class.ppfile in themodules/my_facts/manifestsfolder. Below is a sample manifest that uses a fact to dynamically generate a file:# @summary Use facts class my_facts::my_class { file { '/tmp/my_facts': ensure => 'present', content => "Another ${facts['os']['family']}", path => '/tmp/my_facts', } }
This example dynamically writes the operating system family to a file using a Puppet fact. You can modify the file content as needed based on the facts relevant to your environment.
Managing Environment Variables with Facter
Puppet’s facter tool not only provides core facts but also allows you to manage environment variables directly. You can list environment variables and their associated values by running facter commands. Custom facts can be added to Puppet’s collection to extend its functionality and make your automation more powerful.
If you’re looking for advanced solutions to manage complex infrastructures, consider ZippyOPS, which specializes in providing comprehensive consulting, implementation, and managed services across multiple domains like DevOps, DevSecOps, DataOps, Cloud, AIOps, MLOps, and Microservices. ZippyOPS also helps improve security and streamline your infrastructure management.
For more information on these services, explore ZippyOPS’ solutions and products.
Conclusion: Streamlining Infrastructure with Puppet Facts
Puppet facts and environment variables offer a powerful way to manage system configurations in a scalable and automated manner. By utilizing the facter tool, you can collect system details and implement custom facts to suit your infrastructure’s needs. Whether you’re working with core facts or creating custom solutions, Puppet provides a flexible and efficient approach to infrastructure management.
For businesses looking to take their automation to the next level, ZippyOPS offers expert DevOps and cloud solutions that integrate seamlessly into your infrastructure.
For expert consultation or more information, feel free to contact us at sales@zippyops.com.



