Puppet Manifests
Before we get our hands dirty with Puppet, I'd like to expand the topic a little bit.
As you may already know, Puppet is a configuration management tool that enables you to build application stacks from a set of files that the Puppet community refers to as the manifests.
Manifests are a set of instructions that describes how operating systems and application resources are managed by Puppet and how the system configuration should look like after the manifest has been applied to the system.
Manifests are written in a language called Puppet DSL, where DSL stands for Domain Specific Language. DSL is a commonly used term for programming languages that are not general-purpose languages.
When I write Puppet manifests, I consider it a development process. I call it a development process because the process consists of multiple rounds of iterations during which the manifest evolves.
Here is a simplified overview of the Puppet manifest development process:
For iteration 1, follow the given steps:
Begin by writing the initial manifest that installs a software package > Apply the manifest > Ensure that package is installed.
For iteration 2, follow the given steps:
Extend the manifest to apply the configuration for the package > Apply the manifest > Ensure that the configuration was correctly applied.
For iteration 3, follow the next steps:
Add the logic to start up the service > Apply the manifest > Ensure that the service started > Finish.
In this example, the development processes had three rounds of iterations, each of them containing a task called Apply the manifest.
Note
The manifest develops from the initial version, which does very little to the version of the manifest that manages the whole stack.
Imagine a situation where we write a manifest that creates a Linux user account with a root level access but no password. An account with a root level access is equivalent to a local administrator account on a Windows computer. When you apply the manifest on your computer, Puppet will create a user account on your computer without a password, which makes your computer vulnerable to attacks.
In contrast, if you apply the manifest in an isolated development environment, the configuration change is easy to undo as you can quickly tear down the environment and rebuild it from scratch.
Another reason for developing manifests in isolation is consistency. My choice of operating system is Ubuntu Linux and I run it on MacBook Pro hardware. You may run Mac OS X on the Mac mini, and a friend of mine just downgraded to Windows 7 as she was unhappy with the functionality offered by Windows 8.1.
Each of these operating system flavors will behave slightly differently, although all of them do share similar capabilities such as running a virtualization software.
To ensure that the examples and exercises covered in this book produce consistent results for you and me, we will start our journey by installing the VirtualBox virtualization software package, which enables us to run a set of virtual machines that forms our isolated development environment.