Puppet module for deploying a PXE boot server
HTML Puppet Ruby
Latest commit 9bf42e1 Apr 22, 2016 @xaque208 (rel) 0.1.5


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 build a hash for each of the image sets we intend to be booting.

permute { 'Debian Installers':
  resource => 'pxe::installer',
  unique   => {
    arch => ['amd64','i386'],
    ver  => ['squeeze','wheezy'],
    os   => 'debian'
  common   => {
    file   => 'os_<%= @os %>',
    kernel => 'images/<%= @os %>/<%= @ver %>/<%= @arch %>/linux',
    append => 'initrd=images/<%= @os %>/<%= @ver %>/<%= @arch %>/initrd.gz text',

We can also append common options that will be supported across each of the menu entries created by the resource_permute function.

$redhat_common = {
  "baseurl" => "http://mirror.dyrden.net/rhel<%= ver %>server-<%= arch %>/disc1/images/pxeboot"

Now we permute and combine the hashes to generate the individual resources that fetch the images and place them in the correct directory structure.

resource_permute('pxe::images', $ubuntu)
resource_permute('pxe::images', $redhat, $redhat_common)


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 { "server1.dyrden.net":
  file    => "01-aa-bb-cc-dd-ee-ff",
  kernel  => "images/debian/i386/squeeze/squeeze",
  append  => "vga=791 initrd=images/debian/i386/squeeze/squeeze.gz",