Skip to content

Commit a1806d1

Browse files
authored
Merge pull request echocat#99 from echocat/develop
merge for release 2.0.0
2 parents 79416a1 + 4dae897 commit a1806d1

11 files changed

+203
-82
lines changed

CHANGELOG.md

+16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
## 2016-11-15 - 2.0.0 (Feature/Bugfix release)
2+
3+
#### Bugfixes:
4+
5+
- Fix broken systemd part for Debian
6+
- Fix cluster coverage error in redis.conf template
7+
- Add required update-rc.d headers to debian init.d scripts
8+
9+
#### Features:
10+
11+
- redis and sentinel: allow turning off protected mode
12+
- Added option to redis.conf: client-output-buffer-limit, as a hash
13+
- Added option to redis.conf: repl_backlog_size, a simple value
14+
- allows for compatibility with Amazon Linux
15+
- Add cluster params documentation + enable cluster support
16+
117
## 2016-06-24 - 1.9.0 (Feature/Bugfix release)
218

319
#### Bugfixes:

Gemfile

+20-3
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,32 @@ def location_for(place, version = nil)
1010
end
1111
end
1212

13-
gem 'puppet', *location_for(ENV['PUPPET_GEM_VERSION'] || '~> 4')
14-
gem 'facter', *location_for(ENV['FACTER_GEM_VERSION'] || '~> 2')
1513
gem 'puppetlabs_spec_helper', '>= 0.1.0', :require => false
1614
gem 'puppet-lint', '>= 0.3.2', :require => false
1715
gem 'rspec-puppet', '>= 2.3.2', :require => false
1816
gem 'rspec-puppet-facts', :require => false
1917
gem 'metadata-json-lint', :require => false
20-
gem 'rake', '< 11.0.0' # rubi <1.9 versus rake 11.0.0 workaround
18+
# rubi <1.9 versus rake 11.0.0 workaround
19+
gem 'rake', '< 11.0.0', :require => false if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
20+
gem 'json', '< 2.0.0', :require => false if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
21+
gem 'json_pure', '<= 2.0.1', :require => false if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
2122

23+
gem 'puppet', *location_for(ENV['PUPPET_GEM_VERSION'])
24+
25+
# Only explicitly specify Facter/Hiera if a version has been specified.
26+
# Otherwise it can lead to strange bundler behavior. If you are seeing weird
27+
# gem resolution behavior, try setting `DEBUG_RESOLVER` environment variable
28+
# to `1` and then run bundle install.
29+
gem 'facter', *location_for(ENV['FACTER_GEM_VERSION']) if ENV['FACTER_GEM_VERSION']
30+
gem 'hiera', *location_for(ENV['HIERA_GEM_VERSION']) if ENV['HIERA_GEM_VERSION']
31+
32+
33+
# Evaluate Gemfile.local if it exists
2234
if File.exists? "#{__FILE__}.local"
2335
eval(File.read("#{__FILE__}.local"), binding)
2436
end
37+
38+
# Evaluate ~/.gemfile if it exists
39+
if File.exists?(File.join(Dir.home, '.gemfile'))
40+
eval(File.read(File.join(Dir.home, '.gemfile')), binding)
41+
end

README.md

+25-11
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Most of the time you will only need `redis_version`.
5454
}
5555
```
5656
To install redis from package use the following parameters.
57-
You will need `redis_version` and `redis_package`.
57+
You will need `redis_version` and `redis_package`.
5858
```puppet
5959
class { 'redis::install':
6060
redis_version => '2.8.18-1.el6.remi',
@@ -112,12 +112,16 @@ node 'redis-master.my.domain' {
112112
113113
redis::server {
114114
'master':
115-
redis_memory => '1g',
116-
redis_ip => '0.0.0.0',
117-
redis_port => 6379,
118-
running => true,
119-
enabled => true,
120-
requirepass => 'some_really_long_random_password',
115+
redis_memory => '1g',
116+
redis_ip => '0.0.0.0',
117+
redis_port => 6379,
118+
running => true,
119+
enabled => true,
120+
requirepass => 'some_really_long_random_password',
121+
client_output_buffer_limit => {
122+
'normal' => '0 0 0',
123+
'slave' => '500000000 300000000 60',
124+
},
121125
}
122126
}
123127
@@ -145,7 +149,7 @@ node 'redis-slave.my.domain' {
145149
Please note that right now you can only create cluster-enabled instances
146150
but you cannot configure a Redis Cluster only with this module. You should
147151
still use `redis-trib.rb` from Redis source distribution or configure it
148-
by hand with redis cluster commands. Moreover, the cluster mode will be enabled
152+
by hand with redis cluster commands. Moreover, the cluster mode will be enabled
149153
only for Redis >= 3.0
150154

151155
A simple example of a cluster-enabled instance, with a timeout of 5 seconds to
@@ -253,7 +257,7 @@ The dir to which the newly built redis binaries are copied.
253257
Redis system user. Default: undef (string)
254258
Default 'undef' results to 'root' as redis system user
255259

256-
Some redis install packages create the redis system user by default (at
260+
Some redis install packages create the redis system user by default (at
257261
least SLES and Ubuntu provide redis install packages).
258262
Normally the log directory and the pid directory are created also by
259263
the redis install package. Therefor, these values must be adjusted too.
@@ -266,7 +270,7 @@ Default 'undef' results to 'root' as redis system group
266270

267271
#####`download_base`
268272

269-
Url where to find the source tar.gz.
273+
Url where to find the source tar.gz.
270274
Default value is 'http://download.redis.io/releases'
271275

272276
####Defined Type: `redis::server`
@@ -398,11 +402,17 @@ Configure Redis save snapshotting. Example: [[900, 1], [300, 10]]. Default: []
398402

399403
Boolean. Default: `false`
400404

401-
Configure if the redis config is overwritten by puppet followed by a restart.
405+
Configure if the redis config is overwritten by puppet followed by a restart.
402406
Since redis automatically rewrite their config since
403407
version 2.8 setting this to `true` will trigger a redis restart on each puppet
404408
run with redis 2.8 or later.
405409

410+
#####`client_output_buffer_limit`
411+
412+
Hash containing 3 possible classes as keys (normal, slave, pubsub) and with the
413+
values set to the hard limit, soft limit and seconds.
414+
Default: empty
415+
406416
#####`manage_logrotate`
407417

408418
Configure logrotate rules for redis server. Default: true
@@ -429,6 +439,10 @@ Configure Redis slave to be in read-only mode. Default: true (boolean)
429439

430440
Configure Redis slave replication timeout in seconds. Default: 60 (number)
431441

442+
#####`repl_backlog_size`
443+
444+
Configure Redis slave backlog size in bytes. Default: undef
445+
432446
#####`repl_ping_slave_period`
433447

434448
Configure Redis replication ping slave period in seconds. Default: 10 (number)

Rakefile

+1-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp", "vendor/
1313

1414
desc "Validate manifests, templates, and ruby files in lib."
1515
task :validate do
16-
Dir['manifests/**/*.pp'].each do |manifest|
17-
sh "puppet parser validate --noop #{manifest}"
18-
end
16+
sh "puppet parser validate --noop #{Dir['manifests/**/*.pp'].join(" ")}"
1917
Dir['lib/**/*.rb'].each do |lib_file|
2018
sh "ruby -c #{lib_file}"
2119
end

manifests/sentinel.pp

+11-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
# Path for pid file. Full pid path is <sentinel_pid_dir>/redis-sentinel_<redis_name>.pid. Default: /var/run
1616
# [*monitors*]
1717
# Default is
18+
#
19+
# [*protected_mode*]
20+
# If no password and/or no bind address is set, sentinel defaults to being reachable only
21+
# on the loopback interface. Turn this behaviour off by setting protected mode to 'no'.
22+
#
1823
# {
1924
# 'mymaster' => {
2025
# master_host => '127.0.0.1',
@@ -50,6 +55,7 @@
5055
$sentinel_log_dir = '/var/log',
5156
$sentinel_pid_dir = '/var/run',
5257
$sentinel_run_dir = '/var/run/redis',
58+
$protected_mode = undef,
5359
$monitors = {
5460
'mymaster' => {
5561
master_host => '127.0.0.1',
@@ -80,6 +86,10 @@
8086
validate_bool($enabled)
8187
validate_bool($manage_logrotate)
8288

89+
if $protected_mode {
90+
validate_re($protected_mode,['^no$', '^yes$'])
91+
}
92+
8393
$redis_install_dir = $::redis::install::redis_install_dir
8494
$sentinel_init_script = $::operatingsystem ? {
8595
/(Debian|Ubuntu)/ => 'redis/etc/init.d/debian_redis-sentinel.erb',
@@ -98,7 +108,7 @@
98108
}
99109

100110
# startup script
101-
if ($::osfamily == 'RedHat' and versioncmp($::operatingsystemmajrelease, '7') >=0) {
111+
if ($::osfamily == 'RedHat' and versioncmp($::operatingsystemmajrelease, '7') >=0 and $::operatingsystem != 'Amazon') {
102112
$service_file = "/usr/lib/systemd/system/redis-sentinel_${sentinel_name}.service"
103113
exec { "systemd_service_${sentinel_name}_preset":
104114
command => "/bin/systemctl preset redis-sentinel_${sentinel_name}.service",

manifests/server.pp

+69-42
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,19 @@
6969
# Configure Redis slave replication timeout
7070
# [*repl_ping_slave_period*]
7171
# Configure Redis replication ping slave period
72+
# [*repl_backlog_size*]
73+
# Replication backlog size (in bytes or multiples). Default: undef
7274
# [*save*]
7375
# Configure Redis save snapshotting. Example: [[900, 1], [300, 10]]. Default: []
7476
# [*hash_max_ziplist_entries*]
7577
# Threshold for ziplist entries. Default: 512
7678
# [*hash_max_ziplist_value*]
7779
# Threshold for ziplist value. Default: 64
7880
#
81+
# [*protected_mode*]
82+
# If no password and/or no bind address is set, redis defaults to being reachable only
83+
# on the loopback interface. Turn this behaviour off by setting protected mode to 'no'.
84+
#
7985
# [*redis_run_dir*]
8086
#
8187
# Default: `/var/run/redis`
@@ -84,6 +90,11 @@
8490
# the config files created by puppet will be copied to this directory and redis will be started from
8591
# this copy.
8692
#
93+
# [*client_output_buffer_limit*]
94+
# Hash containing 3 possible classes as keys (normal, slave, pubsub) and
95+
# with the values set to the hard limit, soft limit and seconds.
96+
# Default: empty
97+
#
8798
# [*manage_logrotate*]
8899
# Configure logrotate rules for redis server. Default: true
89100
#
@@ -106,50 +117,53 @@
106117
# is at least an hash slot uncovered.
107118

108119
define redis::server (
109-
$redis_name = $name,
110-
$redis_memory = '100mb',
111-
$redis_ip = '127.0.0.1',
112-
$redis_port = 6379,
113-
$redis_usesocket = false,
114-
$redis_socket = '/tmp/redis.sock',
115-
$redis_socketperm = 755,
116-
$redis_mempolicy = 'allkeys-lru',
117-
$redis_memsamples = 3,
118-
$redis_timeout = 0,
119-
$redis_nr_dbs = 1,
120-
$redis_dbfilename = 'dump.rdb',
121-
$redis_dir = '/var/lib',
122-
$redis_log_dir = '/var/log',
123-
$redis_pid_dir = '/var/run',
124-
$redis_run_dir = '/var/run/redis',
125-
$redis_loglevel = 'notice',
126-
$redis_appedfsync = 'everysec',
127-
$running = true,
128-
$enabled = true,
129-
$requirepass = undef,
130-
$maxclients = undef,
131-
$appendfsync_on_rewrite = false,
132-
$aof_rewrite_percentage = 100,
133-
$aof_rewrite_minsize = 64,
134-
$redis_appendfsync = 'everysec',
135-
$redis_enabled_append_file = false,
136-
$redis_append_file = undef,
137-
$redis_append_enable = false,
138-
$slaveof = undef,
139-
$masterauth = undef,
140-
$slave_serve_stale_data = true,
141-
$slave_read_only = true,
142-
$repl_timeout = 60,
143-
$repl_ping_slave_period = 10,
144-
$save = [],
145-
$hash_max_ziplist_entries = 512,
146-
$hash_max_ziplist_value = 64,
147-
$manage_logrotate = true,
148-
$cluster_enabled = false,
120+
$redis_name = $name,
121+
$redis_memory = '100mb',
122+
$redis_ip = '127.0.0.1',
123+
$redis_port = 6379,
124+
$redis_usesocket = false,
125+
$redis_socket = '/tmp/redis.sock',
126+
$redis_socketperm = 755,
127+
$redis_mempolicy = 'allkeys-lru',
128+
$redis_memsamples = 3,
129+
$redis_timeout = 0,
130+
$redis_nr_dbs = 1,
131+
$redis_dbfilename = 'dump.rdb',
132+
$redis_dir = '/var/lib',
133+
$redis_log_dir = '/var/log',
134+
$redis_pid_dir = '/var/run',
135+
$redis_run_dir = '/var/run/redis',
136+
$redis_loglevel = 'notice',
137+
$redis_appedfsync = 'everysec',
138+
$running = true,
139+
$enabled = true,
140+
$requirepass = undef,
141+
$maxclients = undef,
142+
$appendfsync_on_rewrite = false,
143+
$aof_rewrite_percentage = 100,
144+
$aof_rewrite_minsize = 64,
145+
$redis_appendfsync = 'everysec',
146+
$redis_enabled_append_file = false,
147+
$redis_append_file = undef,
148+
$redis_append_enable = false,
149+
$slaveof = undef,
150+
$masterauth = undef,
151+
$slave_serve_stale_data = true,
152+
$slave_read_only = true,
153+
$repl_timeout = 60,
154+
$repl_ping_slave_period = 10,
155+
$repl_backlog_size = undef,
156+
$save = [],
157+
$hash_max_ziplist_entries = 512,
158+
$hash_max_ziplist_value = 64,
159+
$client_output_buffer_limit = {},
160+
$manage_logrotate = true,
161+
$cluster_enabled = false,
149162
$cluster_node_timeout = undef,
150163
$cluster_slave_validity_factor = undef,
151164
$cluster_migration_barrier = undef,
152165
$cluster_require_full_coverage = true,
166+
$protected_mode = undef,
153167
) {
154168
$redis_user = $::redis::install::redis_user
155169
$redis_group = $::redis::install::redis_group
@@ -175,8 +189,21 @@
175189
}
176190

177191
# startup script
178-
if ($::osfamily == 'RedHat' and versioncmp($::operatingsystemmajrelease, '7') >=0) {
179-
$service_file = "/usr/lib/systemd/system/redis-server_${redis_name}.service"
192+
case $::osfamily {
193+
'RedHat': {
194+
$service_file = "/usr/lib/systemd/system/redis-server_${redis_name}.service"
195+
if $::operatingsystemmajrelease >= 7 { $has_systemd = true }
196+
}
197+
'Debian': {
198+
$service_file = "/etc/systemd/system/redis-server_${redis_name}.service"
199+
if $::operatingsystemmajrelease >= 8 { $has_systemd = true }
200+
}
201+
default: {
202+
$has_systemd = false
203+
}
204+
}
205+
206+
if $has_systemd {
180207
exec { "systemd_service_${redis_name}_preset":
181208
command => "/bin/systemctl preset redis-server_${redis_name}.service",
182209
notify => Service["redis-server_${redis_name}"],

metadata.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
}
3131
],
3232
"name": "dwerder-redis",
33-
"version": "1.9.0",
33+
"version": "2.0.0",
3434
"source": "https://github.com/echocat/puppet-redis.git",
3535
"author": "Daniel Werdermann",
3636
"license": "MPL-2.0",

templates/etc/init.d/debian_redis-sentinel.erb

+13-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
#!/bin/sh
22
#
3-
# redis - this script starts and stops the redis-server daemon
4-
#
5-
# chkconfig: - 85 15
6-
# description: Redis Sentinel is a monitor for redis servers
7-
# processname: redis-sentinel
8-
# config: /etc/redis-sentinel_<%= @sentinel_name %>.conf
9-
# pidfile: <%= @sentinel_pid_dir %>/redis-sentinel_<%= @sentinel_name %>.pid
3+
### BEGIN INIT INFO
4+
# Provides: redis-sentinel_<%= @sentinel_name %>
5+
# Required-Start: $syslog $remote_fs
6+
# Required-Stop: $syslog $remote_fs
7+
# Should-Start: $local_fs
8+
# Should-Stop: $local_fs
9+
# Default-Start: 2 3 4 5
10+
# Default-Stop: 0 1 6
11+
# Short-Description: Redis Sentinel is a monitor for redis servers
12+
# Description: Redis Sentinel is a monitor for redis servers
13+
### END INIT INFO
1014

1115
# Source function library.
1216
. /lib/lsb/init-functions
@@ -24,7 +28,7 @@ start() {
2428
local retval
2529

2630
[ -f "$REDIS_CONF_FILE" ] || exit 6
27-
[ -d <%= @sentinel_run_dir %> ] mkdir -p <%= @sentinel_run_dir %>
31+
[ -d <%= @sentinel_run_dir %> ] || mkdir -p <%= @sentinel_run_dir %>
2832
cp -u $REDIS_CONF_FILE $RUNTIME_CONF_FILE
2933

3034
log_daemon_msg "Starting $REDIS_NAME"
@@ -92,7 +96,7 @@ case "$1" in
9296
restart
9397
;;
9498
reload)
95-
rh_status_q || exit 7
99+
status_q || exit 7
96100
reload
97101
;;
98102
status)

0 commit comments

Comments
 (0)