I\'m trying to create puppet module which automates installation of zend server CE, this is not important here, but steps are as following
Adding this snippet of voodoo worked for us:
Apt::Pin <| |> -> Package <| |>
Apt::Source <| |> -> Package <| |>
This forced an update. YMMV.
In Puppet 3 this can be done by realizing virtual resources using resource collectors
# so you don't have to fully qualify paths to binaries
Exec { path => ['/usr/bin'] }
# virtual resource
@exec { 'sudo apt-get update':
tag => foo_update
}
# realize resource. filter by arbitrary "foo_update"
# tag and relate it to all Package resources
Exec <| tag == foo_update |> -> Package <| |>
You need to specify the dependency relationships. The easiest/cleanest approach is to use the require parameter which is available for all resource types.
package { "zend-server-ce-php-5.2":
ensure => latest,
require => Exec['apt-get update'],
}
etc..
I tried previous variant but it doesn't work for me on Ubuntu 10.04
Finaly I prepared the following script, that runs update everytime the repository is older than one week:
exec { 'apt-get update':
command => "/usr/bin/apt-get update",
onlyif => "/bin/bash -c 'exit $(( $(( $(date +%s) - $(stat -c %Y /var/lib/apt/lists/$( ls /var/lib/apt/lists/ -tr1|tail -1 )) )) <= 604800 ))'"
}
Hope it helps.
I prefer to put apt-upgrade into a separate stage running before the main stage, so I don't have to hard-wire any dependencies. Check here: http://docs.puppetlabs.com/puppet/2.7/reference/lang_run_stages.html.
A simple example would look like below. It implies you have a separate class for doing the actual apt-update:
stage { "init": before => Stage["main"] }
class {"apt-update":
stage => init,
apt_mirror => $apt_mirror
}
Check my sample LAMPP-box on github to see how the pieces fit together: https://github.com/joerx/vagrant-lampp
Note: be careful with apt-upgrade, as some base boxes break by things like kernel upgrades.
You should really be using the apt module to create sources and add keys: https://forge.puppet.com/puppetlabs/apt
If you're using hiera:
apt::sources:
'artifactory-pro-debs':
location: 'http://repos.zend.com/zend-server/deb'
release: 'server
repos: 'non-free'
key:
source: 'http://repos.zend.com/zend.key'