Book Image

Puppet 5 Beginner???s Guide - Third Edition

By : John Arundel
Book Image

Puppet 5 Beginner???s Guide - Third Edition

By: John Arundel

Overview of this book

Puppet 5 Beginner’s Guide, Third Edition gets you up and running with the very latest features of Puppet 5, including Docker containers, Hiera data, and Amazon AWS cloud orchestration. Go from beginner to confident Puppet user with a series of clear, practical examples to help you manage every aspect of your server setup. Whether you’re a developer, a system administrator, or you are simply curious about Puppet, you’ll learn Puppet skills that you can put into practice right away. With practical steps giving you the key concepts you need, this book teaches you how to install packages and config files, create users, set up scheduled jobs, provision cloud instances, build containers, and so much more. Every example in this book deals with something real and practical that you’re likely to need in your work, and you’ll see the complete Puppet code that makes it happen, along with step-by-step instructions for what to type and what output you’ll see. All the examples are available in a GitHub repo for you to download and adapt for your own server setup.
Table of Contents (14 chapters)
13
Index

Interpolation in Hiera data


Hiera data is not restricted to literal values; it can also include the value of Facter facts or Puppet variables, as in the following example:

 backup_path: "/backup/%{facts.hostname}"

Anything within the %{} delimiters inside a quoted string is evaluated and interpolated by Hiera. Here, we're using the dot notation to reference a value inside the $facts hash.

Using lookup()

Helpfully, you can also interpolate Hiera data in Hiera data, by using the lookup() function as part of the value. This can save you repeating the same value many times, and can make your data more readable, as in the following example (also from hiera_sample.yaml):

ips:
  home: '130.190.0.1'
  office1: '74.12.203.14'
  office2: '95.170.0.75'
firewall_allow_list:
  - "%{lookup('ips.home')}"
  - "%{lookup('ips.office1')}"
  - "%{lookup('ips.office2')}"

This is much more readable than simply listing a set of IP addresses with no indication of what they represent, and it prevents you accidentally...