This document requires familiarity with Puppet Environments and their relationship to SIMP Environments. |
Outside of SIMP, Git-based control repositories have been the dominant technology to manage and deploy Puppet code since 2015. At a high-level, this workflow involves:
The upshot is that a control repository branch defines everything needed to recreate a specific Puppet environment.
A branch contains everything required to recreate a Puppet environment, so Puppet Environments can be treated like code:
Since 1 control repo branch = 1 Puppet environment, managing multiple Puppet environments is as simple as using git:
Control repos + Puppet deployment tools enable advanced environment scenarios:
bolt puppetfile install
) before running bolt apply
Although it has been technically possible to use multiple Puppet environments and control repositories since SIMP 5.0 (), in practice this has been cumbersome, risky, and easy to get wrong. Getting it right requires an in-depth knowledge of Puppet environments and SIMP's "extra" environments, and there are still significant limitations.
The recent 6.4.0 release () retooled SIMP so it can safely support single-environment Puppetfile deployments (e.g.,
r10k puppetfile install
from a Puppet environment directory) out of the box. However, there are still two major sources of conflicts with multiple Puppet environments:
simp_rpm_helper
could modify existing files Puppet and SIMP environment directoriessimp config could modify existing files Puppet and SIMP environment directories
simp environment new
can ensure that there is a corresponding secondary and writable environmentssimp environment
tool is only partially implemented, and the rest cannot be implemented safely.SIMP has always assumed that there will be two SIMP-specific "environment" data directories to complement each Puppet environment directory
/var/simp/environments/$environment/.
pki_files
(keydist) and krb3_files
. simp::server::rsync_shares
profile to serve files for various modules./opt/puppetlabs/server/data/puppetserver/simp/environments/$environment/
These are secrets, read by certain Puppet functions while compiling catalogs (and automatically generated if they are missing).simplib::passgen()
simp passgen
CLI toolssh::autokey()
—this function is unused by the stock SIMP modules, but is provided to allow local admins to automatically set up SSH keys as needed.SIMP 6.4.0 addressed many of tool and RPM-related problems by making Puppetfile-based module deployments the preferred method to deploy modules.
simp puppetfile
tool was introduced to automatically generate Puppetfiles based on the current module RPMs.simp environment new
tool was introduced to help users ensure that corresponding SIMP and Puppet environments are created.Improvements focused on making it simple to use Puppetfiles in a single environment, with multiple
made it simple to deploy environments, but they didn't make them safe.
During the development of SIMP 6.4.0, it became apparent that the simp environment
workflow would have problems down the road:
$environment
made it necessary to adopt workarounds like `simp environment new [--copy|--link
]` when environments used the same (or similar) resourcessimp environment rm
command