Recipe for managing apt gpg keys
This puppet definition allows you to import pgp keys into apt.
define apt::key($keyid, $ensure, $keyserver = "keyserver.ubuntu.com") {
case $ensure {
present: {
exec { "Import $keyid to apt keystore":
path => "/bin:/usr/bin",
environment => "HOME=/root",
command => "gpg --keyserver $keyserver --recv-keys $keyid && gpg --export --armor $keyid | apt-key add -",
user => "root",
group => "root",
unless => "apt-key list | grep $keyid",
logoutput => on_failure,
}
}
absent: {
exec { "Remove $keyid from apt keystore":
path => "/bin:/usr/bin",
environment => "HOME=/root",
command => "apt-key del $keyid",
user => "root",
group => "root",
onlyif => "apt-key list | grep $keyid",
}
}
default: {
fail "Invalid 'ensure' value '$ensure' for apt::key"
}
}
}
You can use this definition as follows:
node mynode {
apt::key { "KEYID":
keyid => "KEYID",
ensure => present,
}
apt::key { "UNWANTEDKEYID":
keyid => "UNWANTEDKEYID",
ensure => absent,
}
}
If you don't want to store your keys on a public keyserver you could place them on your own webserver like this (assuming that wget is on all your nodes):
define apt::key($ensure, $apt_key_url = "http://www.example.com/apt/keys") {
case $ensure {
"present": {
exec { "apt-key present $name":
command => "/usr/bin/wget -q $apt_key_url/$name -O -|/usr/bin/apt-key add -",
unless => "/usr/bin/apt-key list|/bin/grep -c $name",
}
}
"absent": {
exec { "apt-key absent $name":
command => "/usr/bin/apt-key del $name",
onlyif => "/usr/bin/apt-key list|/bin/grep -c $name",
}
}
default: {
fail "Invalid 'ensure' value '$ensure' for apt::key"
}
}
}
Or you could transport them with a File-Resource to the node before importing them into apt
