If you have some commands that you want to run before everything else, it can be annoying to add a require statement to every resource (as Puppet doesn’t execute things in order). Luckily you can get around this using stages.
stage { 'preinstall': before => Stage['main'] } class apt_get_update { file { '/etc/apt/sources.list': ensure => 'file', source => '/vagrant/puppet/sysconfig/apt/sources.list', notify => [Exec['Import GPG keys'], Exec['Update Aptitude sources']], } exec { 'Import GPG keys': command => 'apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32', require => File['/etc/apt/sources.list'], refreshonly => true, } exec { 'Update Aptitude sources': command => 'apt-get update', require => Exec['Import GPG keys'], refreshonly => true, } } class { 'apt_get_update': stage => preinstall }
The above code will execute before the “main” stage (e.g. everything).
See: Puppet Run Stages
Thanks a lot!
Fixed a provisioning issue that I’ve been trying to fix for a couple of hours!
Great code snippet.