Morning,
I needed to install a toml-rb gem in order to my puppet traefik module to work and i just want to short post my workaround on doing that automatically. There was some code in our repo for that but it used only hiera array, don’t really know, so i had to write a very short class that can take a hash for the installed process. It looks like this:
class profiles::puppetinstall {
$packages = hiera_hash('profiles::puppetinstall::packages',undef)
if packages {
ensure_packages($packages)
}
}
And in my role file called puppetmaster.yaml in this case i had to put:
classes:
- 'profiles::puppetinstall'
profiles::puppetinstall::packages:
toml-rb:
provider: 'puppet_gem'
Now i know that maybe it’s not that elegant, but it fixed my problem. Hopefully i will put all the details related to traefik implementation. And yes, if you are wondering from were can you get the ensure_packages resource, i can tell you it is included in stdlib package https://forge.puppet.com/puppetlabs/stdlib#ensure_packages
P.S: That was for the puppet agent and standard gems, for the gems that need to be installed on puppet server i needed to write the following piece of code:
$packages_puppetserver = hiera_array('profiles::puppetinstall::puppetserver_packages',undef)
if $packages_puppetserver {
$packages_puppetserver.each |String $package_name| {
exec {"install ${package_name}":
command => "/opt/puppetlabs/bin/puppetserver gem install ${package_name}",
path => [ '/usr/bin','/usr/sbin','/bin','/sbin' ],
unless => "/opt/puppetlabs/bin/puppetserver gem list | grep ${package_name}",
}
}
}
The way to put the packages in hiera is similar:
profiles::puppetinstall::puppetserver_packages:
- 'toml-rb'
Cheers!