Forge Home


A Puppet module to deploy and manage a Pre eXecution Environment


4,684 latest version

4.3 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

  • 1.0.0 (latest)
  • 0.2.0
  • 0.1.5
  • 0.1.4
  • 0.1.3
  • 0.1.2
  • 0.1.1
  • 0.1.0
  • 0.0.9
  • 0.0.8
  • 0.0.7
  • 0.0.5
  • 0.0.3
  • 0.0.2
released Feb 26th 2019
This version is compatible with:
  • Puppet Enterprise 2017.2.x, 2017.1.x, 2016.5.x, 2016.4.x
  • Puppet >= 3.8.0 < 5.0.0
This module has been deprecated by its author since Jan 12th 2021.

The author has suggested puppet-pxe as its replacement.

Start using this module

Tags: netboot, pxe


zleslie/pxe — version 1.0.0 Feb 26th 2019

Puppet Powered PXE Provisioning

Puppet Forge Build Status

Super awesome Puppet powered PXE menu and image management for network based installations. Seriously. Its awesome.


  • Automatic image fetching
  • Menu management for easy selection at boot time
  • Host specific menu management
  • Supported OSs
    • Debian
    • Ubuntu
    • CentOS
    • RetHat (with baseurl)
    • Fedora
    • Scientific
    • CoreOS


You will need a running TFTP configured. The module now depends on the puppetlabs/tftp module.

Sample Usage

Basic setup

class { 'tftp': }
class { 'pxe': }

This will setup a tftp server and directory and install pxelinux into it with a base configuration.


Here is a sample of how one might stage the network installation images and build menus for selection at boot time.

First, we start by dragging in the pre-reqs for the whole process.

include pxe

Next, lets loop over some data and create a few pxe::installer resources using the new Puppet language methods.

$debian_architectures = ['amd64', 'i386']
$debian_versions = ['squeeze', 'wheezy', 'jessie']

$debian_versions.each |$ver| {
  $os = 'debian'

  $debian_architectures.each |$arch| {

    pxe::installer { "${os}_${ver}_${arch}":
      arch   => $arch,
      ver    => $ver,
      os     => $os,
      file   => 'os_${os}',
      kernel => 'images/${os}/${ver}/${arch}/linux',
      append => 'initrd=images/${os}/${ver}/${arch}/initrd.gz text',

This structure could be extended considerably, but it paints a picture for how to build a bunch of resources using the puppet iteration. This module used to recommend use of the resource_permute() function, but that was long before the new Puppet4 language constructs replaced the need for this function. As such, its recommended that you use the pxe::installer resources directly.


By default this module will install the latest version of syslinux, downloaded from (You can see the latest version in the manifests/params.pp) file. To install the version that ships with your OS, or to specify a version, pass the syslinux variable to pxe.

For Example:

class { 'pxe': syslinux_version => 'system', }


include pxe

pxe::menu { 'Main Menu':
  file     => 'default',
  template => 'pxe/menu_default.erb';

pxe::menu::entry { 'Installations':
  file    => 'default',
  append  => 'pxelinux.cfg/menu_install',

pxe::menu { "Operating System (${arch})":
  file => 'menu_install',

pxe::menu { 'Debian':
  file => 'os_debian',

Host Configs

pxe::menu::entry { "":
  file    => "01-aa-bb-cc-dd-ee-ff",
  kernel  => "images/debian/i386/squeeze/squeeze",
  append  => "vga=791 initrd=images/debian/i386/squeeze/squeeze.gz",