Tuesday, 30 October 2018

Puppet and Chocolatey on Windows


At the start of the year, I decided to give my dotfiles a clean up. In this update, I made the decision to use a configuration management tool. Out of all the offerings I chose Puppet. As a Linux user it's not often I need to set up Windows workstations, but for some tasks I have coming up a Windows workstation was the right tool for the job. So the job began on learning how to use Puppet on Windows, and this is how it went:

This last time I set up a Windows machine was nearly two years ago. Coming straight from Linux my first thought was where's the package manager? This is how I found Chocolatey, back then it wasn't quite APT. Now however combined with the "puppetlabs/chocolatey" module this is quite different.

The one issue I did encounter when installing the module was an SSL problem with the below message:

Error: Could not connect via HTTPS to https://forgeapi.puppetlabs.com
    Unable to verify the SSL certificate
    The certificate may not be signed by a valid CA
    The CA bundle included with OpenSSL may not be valid or up to date

I found a simple fix was installing curl with Chocolatey. Once the Puppet module was installed, installing packages was no problem.

package { [
    'cmder',
    'git',
    'make',
    'openssh',
    'rsync',
    'vscode',
]:
    ensure   => installed,
    provider => chocolatey,
}

One cool feature of Puppet is the paths. You dont need to use a \ as a directory separator. This is a blessing when needing to use double quotes for strings to avoid escaping hell. This was super handy when installing extensions for vscode

define vscode_plugin {
    exec { "code_install_${title}":
        path => 'C:/Program Files/Microsoft VS Code/bin',
        command  => "code.cmd --install-extension ${title}",
    }
}

vscode_plugin { [ 'vscodevim.vim' ]: }