Forge Home


Creates a Puppet Enterprise Razor server complete with dhcp, tftp, ipxe


6,433 latest version

4.4 quality score

We run a couple of automated
scans to help you access a
module's quality. Each module is
given a score based on how well
the author has formatted their
code and documentation and
modules are also checked for
malware using VirusTotal.

Please note, the information below
is for guidance only and neither of
these methods should be considered
an endorsement by Puppet.

Version information

  • 0.2.2 (latest)
  • 0.2.1
  • 0.2.0
  • 0.1.0
released Aug 24th 2018
This version is compatible with:
  • ,

Start using this module

  • r10k or Code Manager
  • Bolt
  • Manual installation
  • Direct download

Add this module to your Puppetfile:

mod 'gabe-pe_razor_complete', '0.2.2'
Learn more about managing modules with a Puppetfile

Add this module to your Bolt project:

bolt module add gabe-pe_razor_complete
Learn more about using this module with an existing project

Manually install this module globally with Puppet module tool:

puppet module install gabe-pe_razor_complete --version 0.2.2

Direct download is not typically how you would use a Puppet module to manage your infrastructure, but you may want to download the module in order to inspect the code.

Tags: razor, pe-razor


gabe/pe_razor_complete — version 0.2.2 Aug 24th 2018

PE Razor Complete

The purpose of this module is to provide a quick "profile" module that sets up a dual-homed Puppet Enterprise-managed Razor server, including a DHCP service on a secondary (eth1 by default) interface -- and also adds a corresponding tftp service to serve an iPXE kernel. Network-booting machines will use those services, and be controlled by Razor.

This module is intended to assist in learning Razor, by making it super-simple to try out a dual-homed Razor server, presumably in a lab with a dedicated VLAN for the DHCP and other provisioning communication.

This module relies on four others. One is the pe_razor module, which a Puppet Enterprise master already has installed. The other three are:

  • nanliu-staging
  • puppetlabs-firewall
  • puppetlabs-stdlib

This module only works if your Master is running Puppet Enterprise. If you're just messing around, it's very easy to install an Enterprise Master, and it comes with a free license for up to 10 machines.

If you're using Open Source Puppet, I heartily recommend looking at the lavaburn/razor module on the Puppet Forge. It's excellent, and has additional types and providers that go way beyond this module's "set it up and run away" attitude.

If you need to debug the network booting portion of a Razor environment, likely you need to use some other DHCP server software or host, this module includes a file with all the gory details of what happens when a new node boots from the network. Read:


Basic CentOS 6 Example

With CentOS 6 and a Puppet Enterprise master, you should be able to just do this:

  1. Attach eth0 to a network so that you can SSH in to the machine.
  2. Attach eth1 to a "provisioning" network where it's okay for it to run DHCP.
  3. Statically assign eth1 to an IP in the default DHCP server's range where it will give out leases.
  4. Apply this class to the node.
include pe_razor_complete

You should now be able to network-boot bare machines on the "provisioning" network and have them boot the microkernel and report in to the Razor server.

Specify a different IP range for the provisioning network.

If for some reason you'd like nodes to receive a different range of DHCP leases, different netmask, and even lease time, you can declare the class with some extra parameters.

class { 'pe_razor_complete':
  dnsmasq_dhcp_start => '',
  dnsmasq_dhcp_end   => '',
  dnsmasq_dhcp_netmask  => '',   # the default, actually
  dnsmasq_dhcp_lease => '2d',

Non-eth1 Provisioning Network Example

If you're brave enough to let the server handle DHCP requests on its primary interface, or if you're on a CentOS 7 system where the nic names are wacky, declare it with a parameter to have DHCP and other provisioning communication done over something other than eth1:

class { 'pe_razor_complete':
  dnsmasq_interface => 'eth0',