puppet-modules/redis/manifests/init.pp
# == Class: redis
#
# Install and configure redis.
#
# === Parameters
#
# [*redis_port*]
# Accept redis connections on this port.
# Default: 6379
#
# [*redis_bind_address*]
# Address to bind to.
# Default: false, which binds to all interfaces
#
# [*version*]
# Version to install.
# Default: 2.4.13
#
# [*redis_src_dir*]
# Location to unpack source code before building and installing it.
# Default: /opt/redis-src
#
# [*redis_bin_dir*]
# Location to install redis binaries.
# Default: /opt/redis
#
# [*redis_max_memory*]
# Set the redis config value maxmemory (bytes).
# Default: 4gb
#
# [*redis_max_clients*]
# Set the redis config value maxclients. If no value provided, it is
# not included in the configuration for 2.6 and set to 0 (unlimited)
# for 2.4.
# Default: 0 (2.4)
# Default: nil (2.6)
#
# [*redis_timeout*]
# Set the redis config value timeout (seconds).
# Default: 300
#
# [*redis_loglevel*]
# Set the redis config value loglevel. Valid values are debug,
# verbose, notice, and warning.
# Default: notice
#
# [*redis_databases*]
# Set the redis config value databases.
# Default: 16
#
# [*redis_slowlog_log_slower_than*]
# Set the redis config value slowlog-log-slower-than (microseconds).
# Default: 10000
#
# [*redis_showlog_max_len*]
# Set the redis config value slowlog-max-len.
# Default: 1024
#
# [*redis_password*]
# Password used by AUTH command. Will be setted is its not nil.
# Default: nil
#
# === Examples
#
# include redis
#
# class { 'redis':
# version => '2.6.4',
# redis_max_memory => '64gb',
# }
#
# === Authors
#
# Thomas Van Doren
#
# === Copyright
#
# Copyright 2012 Thomas Van Doren, unless otherwise noted.
#
class redis (
$redis_port = '6379',
$redis_bind_address = false,
$version = '2.4.13',
$redis_src_dir = '/opt/redis-src',
$redis_bin_dir = '/opt/redis',
$redis_max_memory = '4gb',
$redis_max_clients = false,
$redis_timeout = 300, # 0 = disabled
$redis_loglevel = 'notice',
$redis_databases = 16,
$redis_slowlog_log_slower_than = 10000, # microseconds
$redis_slowlog_max_len = 1024,
$redis_password = false
) {
include wget
include gcc
case $version {
/^2\.4\.\d+$/: {
if ($redis_max_clients == false) {
$real_redis_max_clients = 0
}
else {
$real_redis_max_clients = $redis_max_clients
}
}
/^2\.6\.\d+$/: {
$real_redis_max_clients = $redis_max_clients
}
default: {
fail("Invalid redis version, ${version}. It must match 2.4.\\d+ or 2.6.\\d+.")
}
}
$redis_pkg_name = "redis-${version}.tar.gz"
$redis_pkg = "${redis_src_dir}/${redis_pkg_name}"
File {
owner => root,
group => root,
}
file { $redis_src_dir:
ensure => directory,
}
file { '/etc/redis':
ensure => directory,
}
file { 'redis-lib':
ensure => directory,
path => '/var/lib/redis',
}
file { 'redis-lib-port':
ensure => directory,
path => "/var/lib/redis/${redis_port}",
}
# If the version is 2.4.13, use the tarball that ships with the
# module.
if ($version == '2.4.13') {
file { 'redis-pkg':
ensure => present,
path => $redis_pkg,
mode => '0644',
source => 'puppet:///modules/redis/redis-2.4.13.tar.gz',
}
}
exec { 'get-redis-pkg':
command => "/usr/bin/wget --output-document ${redis_pkg} http://redis.googlecode.com/files/${redis_pkg_name}",
unless => "/usr/bin/test -f ${redis_pkg}",
require => File[$redis_src_dir],
}
file { 'redis-init':
ensure => present,
path => "/etc/init.d/redis_${redis_port}",
mode => '0755',
content => template('redis/redis.init.erb'),
notify => Service['redis'],
}
file { 'redis_port.conf':
ensure => present,
path => "/etc/redis/${redis_port}.conf",
mode => '0644',
content => template('redis/redis_port.conf.erb'),
}
file { 'redis.conf':
ensure => present,
path => '/etc/redis/redis.conf',
mode => '0644',
source => 'puppet:///modules/redis/redis.conf',
}
file { 'redis-cli-link':
ensure => link,
path => '/usr/local/bin/redis-cli',
target => "${redis_bin_dir}/bin/redis-cli",
}
exec { 'unpack-redis':
command => "tar --strip-components 1 -xzf ${redis_pkg}",
cwd => $redis_src_dir,
path => '/bin:/usr/bin',
unless => "test -f ${redis_src_dir}/Makefile",
require => Exec['get-redis-pkg'],
}
exec { 'install-redis':
command => "make && make install PREFIX=${redis_bin_dir}",
cwd => $redis_src_dir,
path => '/bin:/usr/bin',
unless => "test $(${redis_bin_dir}/bin/redis-server --version | cut -d ' ' -f 1) = 'Redis'",
require => [ Exec['unpack-redis'], Class['gcc'] ],
}
service { 'redis':
ensure => running,
name => "redis_${redis_port}",
enable => true,
require => [ File['redis_port.conf'], File['redis.conf'], File['redis-init'], File['redis-lib-port'], Exec['install-redis'] ],
subscribe => File['redis_port.conf'],
}
}