Something else first

I've implemented HTTPS to the site, using Let's Encrypt. :)

The problem that I'm facing

I love cloud-init and the idea of bootstrapping a node with a small config at it's first stage. But there are some issues. It's actually not really cloud-inits fault either. It's a combo of the cloud-init puppet module and the apt/yum repos that have super old package content.

The issue that I have is that there is an old version of Puppet on the public apt/yum repos, and the cloud-init module for configuring puppet is using the old package name: "puppet". So regardless if I tell cloud-init or not, to configure PuppetLabs repo it will still install the old version of the software. Only because it's named: "puppet-agent" in the PuppetLabs repo.

So how did I solved it?

I have written a simple bash script that cloud-init executes. Then the bash script does the following things:

  • Downloads the PuppetLabs repo configuration and implement it.
  • Run a repo update and install "puppet-agent"
  • Clone my "node-bootstrap" repo on git
  • Install a puppet module from puppet forge
  • Do a puppet apply based on my bootstrap.pp file which contain configuration parameters for the "puppet-agent"

I also published it on GitHub: