Skip to content

Instantly share code, notes, and snippets.

@nertim
Created November 23, 2012 20:05
Show Gist options
  • Save nertim/4137061 to your computer and use it in GitHub Desktop.
Save nertim/4137061 to your computer and use it in GitHub Desktop.
Puppet script to install and run mongodb
Exec { path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ] }
#####
## source Vikram Dighe
## https://gist.github.com/5aeb4533db6edd94793c
#####
define pparepo($apt_key = "", $dist = $ppa_default_name, $supported = ["precise", "lucid", "hardy"], $ensure = present, $keyserver = "keyserver.ubuntu.com") {
$name_for_file = regsubst($name, '/', '-', 'G')
$file = "/etc/apt/sources.list.d/pparepo-${name_for_file}.list"
file { "$file": }
case $ensure {
present: {
if ($dist) and ($dist in $supported) {
File["$file"] {
content => "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist $name\n"
}
File["$file"] { ensure => file }
if ( $apt_key ) {
apt::key { "$apt_key": }
}
} else {
File["$file"] { ensure => false }
}
}
absent: {
File["$file"] { ensure => false }
}
default: {
fail "Invalid 'ensure' value '$ensure' for pparepo"
}
}
}
#####
## source http://projects.puppetlabs.com/projects/1/wiki/Apt_Keys_Patterns
#####
define apt::key($ensure = present, $keyserver = "keyserver.ubuntu.com") {
$grep_for_key = "apt-key list | grep '^pub' | sed -r 's.^pub\\s+\\w+/..' | grep '^$name'"
case $ensure {
present: {
exec { "Import $name to apt keystore":
path => "/bin:/usr/bin",
environment => "HOME=/root",
command => "gpg --keyserver $keyserver --recv-keys $name && gpg --export --armor $name | apt-key add -",
user => "root",
group => "root",
unless => "$grep_for_key",
logoutput => on_failure,
}
}
absent: {
exec { "Remove $name from apt keystore":
path => "/bin:/usr/bin",
environment => "HOME=/root",
command => "apt-key del $name",
user => "root",
group => "root",
onlyif => "$grep_for_key",
}
}
default: {
fail "Invalid 'ensure' value '$ensure' for apt::key"
}
}
}
pparepo {
"10gen":
apt_key => "7F0CEB10",
dist => "precise",
ensure => "present";
}
exec {
"apt-get_update":
command => "/usr/bin/apt-get update",
require => Pparepo["10gen"];
}
package {
"build-essential":
ensure => "installed",
require => Exec["apt-get_update"];
"mongodb-10gen":
ensure => "installed",
require => Exec["apt-get_update"];
} ~>
service {
"mongodb":
ensure => "running",
enable => true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment