Building Docker images with Puppet

I like Docker, but I’m not a huge fan of using shell scripts for complex system configuration…and Dockerfiles are basically giant shell scripts. I was curious whether or not it would be possible to use Puppet during the docker build process. As a test case, I used the ssh module included in the openstack-puppet-modules package. I started with a manifest like this (in puppet/node.pp): class { ‘ssh’: } And a Dockerfile like this:
read more →

Extending Puppet

I wanted to learn about writing custom Puppet types and providers. The official documentation is a little sparse, but I finally stumbled upon the following series of articles by Gary Larizza that provide a great deal of insight into the process and a bunch of example code: Fun With Puppet Providers Who Abstracted My Ruby? Seriously, What Is This Provider Doing?
read more →

A quote about XMLRPC

I’ve been reading up on Puppet 3 lately, and came across the following: XMLRPC was the new hotness when development on Puppet started. Now, XMLRPC is that horrible thing with the XML and the angle brackets and the pain and sad. (from http://somethingsinistral.net/blog/the-angry-guide-to-puppet-3/) …which also accurately sums up my feelings when I come across yet another piece of software where someone has decided that XML (or even JSON) is a good user-facing configuration syntax.
read more →

Puppet, scope, and inheritance

I note this here because it wasn’t apparent to me from the Puppet documentation. If you have a Puppet class like this: class foo { File { ensure => file, mode => 600, } } And you use it like this: class bar { include foo file { ‘/tmp/myfile’: } } Then /tmp/myfile will not be created. But if instead you do this: class bar inherits foo { file { ‘/tmp/myfile’: } } It will be created with mode 0600.
read more →