Add Redis puppet module
Add upstream Redis puppet module which will be used as base module for Ceilometer-Redis plugin: https://github.com/fsalum/puppet-redis Partially implements: blueprint ceilometer-central-agent-ha Change-Id: Icbd879623790bf96e54b6dad7435594f107cb650
This commit is contained in:
parent
9721e5ce8d
commit
6a9a83d0d9
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
language: ruby
|
||||
bundler_args: --without development
|
||||
script: "bundle exec rake validate && bundle exec rake lint && bundle exec rake spec SPEC_OPTS='--color --format documentation'"
|
||||
matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
- rvm: 1.8.7
|
||||
env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.6.0"
|
||||
- rvm: 1.8.7
|
||||
env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.7.0"
|
||||
- rvm: 1.8.7
|
||||
env: PUPPET_GEM_VERSION="~> 3.0"
|
||||
- rvm: 1.9.3
|
||||
env: PUPPET_GEM_VERSION="~> 3.0"
|
||||
- rvm: 2.0.0
|
||||
env: PUPPET_GEM_VERSION="~> 3.0"
|
||||
- rvm: 2.1.6
|
||||
env: PUPPET_GEM_VERSION="~> 4.0"
|
||||
notifications:
|
||||
email: false
|
|
@ -0,0 +1,99 @@
|
|||
## fsalum-redis changelog
|
||||
|
||||
Release notes for the fsalum-redis module.
|
||||
|
||||
------------------------------------------
|
||||
|
||||
#### 1.0.3 - 2014-11-25
|
||||
|
||||
* Version lookup not working (#41)
|
||||
* Remove from facter warning when redis is not installed #42 (@pmoranga)
|
||||
|
||||
#### 1.0.2 - 2014-10-25
|
||||
|
||||
* Fixed Travis integration and tests
|
||||
* Added metadata.json
|
||||
* Making it compatible to be 'puppet approved' :)
|
||||
|
||||
#### 1.0.1 - 2014-09-16
|
||||
|
||||
* Allowing redis package name as a param. #35 (@nprimmer)
|
||||
* add $redis_version_override #37 (@tmclaugh)
|
||||
|
||||
#### 1.0.0 - 2014-06-08
|
||||
|
||||
Many CHANGES to this version, complete rewrite of redis.conf template
|
||||
to support Redis 2.2 to 2.8.
|
||||
|
||||
Make sure to test the module and parameters before upgrading in production.
|
||||
|
||||
Thanks to @zxjinn and @zeroecco for their hard work on this release.
|
||||
|
||||
* some parameters were removed, added and/or default values changed
|
||||
* update redis.conf to the latest version available #32 (@zxjinn)
|
||||
* Logic for redis config file to support 2.2.x through 2.8.x #31 (@zeroecco)
|
||||
* Unixsocketoptions #33 (@nbeernink)
|
||||
* Changed operating system check to validate osfamily #29 (@george-b)
|
||||
|
||||
#### 0.0.12 - 2014-03-21
|
||||
|
||||
* Unset cleanup #27 (@trlinkin)
|
||||
* toggle ability to notify service to restart when config file changes #28 (@tmclaugh)
|
||||
|
||||
#### 0.0.11 - 2014-02-19
|
||||
|
||||
* system_sysctl parameter for redis class (@tehmaspc)
|
||||
|
||||
#### 0.0.10 - 2014-02-19
|
||||
|
||||
* Allow conf_bind to be unset (@stevelacey)
|
||||
* Changing default of glueoutputbuf to UNSET (@tehmaspc)
|
||||
|
||||
#### 0.0.9 - 2014-01-09
|
||||
|
||||
* Add quotes around all instances of UNSET (@charlesdunbar)
|
||||
|
||||
#### 0.0.8 - 2013-12-20
|
||||
|
||||
* Setting mode permission for conf_dir (@KlavsKlavsen)
|
||||
|
||||
#### 0.0.7 - 2013-12-11
|
||||
|
||||
* Add glueoutputbuf config option (@kryptx)
|
||||
* Add support for Amazon Linux AMI (@mattboston)
|
||||
|
||||
#### 0.0.6 - 2013-08-01
|
||||
|
||||
* Install package before poking config (@doismellburning)
|
||||
|
||||
#### 0.0.5 - 2013-06-06
|
||||
|
||||
* Fix Puppet 3.2.1 deprecation warnings (@ripienaar)
|
||||
* Fix duplicate entry for logrotate on Debian/RHEL using different paths (@arthurfurlan)
|
||||
* Add $conf_nosave parameter (@fsalum)
|
||||
* Minor changes to params variables (@fsalum)
|
||||
* Update CHANGELOG format
|
||||
|
||||
------------------------------------------
|
||||
|
||||
#### 0.0.4 - 2013-04-18
|
||||
|
||||
* Creates conf_dir directory if it doesn't exist
|
||||
|
||||
------------------------------------------
|
||||
|
||||
#### 0.0.3 - 2013-02-25
|
||||
|
||||
* Fixing redis.conf less options on Debian
|
||||
|
||||
------------------------------------------
|
||||
|
||||
#### 0.0.2 - 2013-02-25
|
||||
|
||||
* Fixing redis.conf location for Debian
|
||||
|
||||
------------------------------------------
|
||||
|
||||
#### 0.0.1 - 2013-02-25
|
||||
|
||||
* Initial Forge release
|
|
@ -0,0 +1,24 @@
|
|||
source ENV['GEM_SOURCE'] || "https://rubygems.org"
|
||||
|
||||
group :development, :test do
|
||||
gem 'rake', :require => false
|
||||
gem 'rspec-puppet', :require => false
|
||||
gem 'puppetlabs_spec_helper', :require => false
|
||||
gem 'puppet-lint', :require => false
|
||||
gem 'puppet_facts', :require => false
|
||||
gem 'metadata-json-lint', :require => false
|
||||
end
|
||||
|
||||
if facterversion = ENV['FACTER_GEM_VERSION']
|
||||
gem 'facter', facterversion, :require => false
|
||||
else
|
||||
gem 'facter', :require => false
|
||||
end
|
||||
|
||||
if puppetversion = ENV['PUPPET_GEM_VERSION']
|
||||
gem 'puppet', puppetversion, :require => false
|
||||
else
|
||||
gem 'puppet', :require => false
|
||||
end
|
||||
|
||||
# vim:ft=ruby
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {2014} {Felipe Salum}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,13 @@
|
|||
name 'fsalum-redis'
|
||||
version '1.0.3'
|
||||
source 'git://github.com/fsalum/puppet-redis.git'
|
||||
author 'Felipe Salum'
|
||||
license 'Apache License, Version 2.0'
|
||||
summary 'Puppet module for Redis Server'
|
||||
description 'Module to install and configure a Redis server'
|
||||
project_page 'https://github.com/fsalum/puppet-redis'
|
||||
|
||||
## Add dependencies, if any:
|
||||
|
||||
# https://forge.puppetlabs.com/thias/sysctl
|
||||
dependency 'thias/sysctl', '>= 0.3.0'
|
|
@ -0,0 +1,108 @@
|
|||
#Redis Module for Puppet
|
||||
[![puppet-redis](https://img.shields.io/puppetforge/v/fsalum/redis.svg)](https://forge.puppetlabs.com/fsalum/redis) [![Build Status](https://travis-ci.org/fsalum/puppet-redis.svg?branch=master)](https://travis-ci.org/fsalum/puppet-redis)
|
||||
|
||||
This module installs and manages a Redis server. All redis.conf options are
|
||||
accepted in the parameterized class.
|
||||
|
||||
##Important
|
||||
|
||||
If you are upgrading this module from 0.x to 1.0+, please test it carefully
|
||||
outside production as it is not fully backwards compatible.
|
||||
|
||||
Some class parameters were added, removed or had their default values changed.
|
||||
|
||||
The redis.conf template has been completely rewritten to support Redis 2.2+ to 2.8+.
|
||||
|
||||
##Operating System
|
||||
|
||||
Tested on CentOS 6.5, Ubuntu Saucy/Trusty/Precise, Debian 7.4
|
||||
redis.conf options compatible with Redis 2.2, 2.4, 2.6, 2.8
|
||||
|
||||
##Quick Start
|
||||
|
||||
Use the default parameters:
|
||||
|
||||
class { 'redis': }
|
||||
|
||||
To change the port and listening network interface:
|
||||
|
||||
class { 'redis':
|
||||
conf_port => '6379',
|
||||
conf_bind => '0.0.0.0',
|
||||
}
|
||||
|
||||
##Parameters
|
||||
|
||||
Check the [init.pp](https://github.com/fsalum/puppet-redis/blob/master/manifests/init.pp) file for a complete list of parameters accepted.
|
||||
|
||||
* custom sysctl
|
||||
|
||||
To enable and set important Linux kernel sysctl parameters as described in the [Redis Admin Guide](http://redis.io/topics/admin) - use the following configuration option:
|
||||
|
||||
class { 'redis':
|
||||
system_sysctl => true
|
||||
}
|
||||
|
||||
By default, this sysctl parameter will not be enabled. Furthermore, you will need the sysctl module defined in the [Modulefile](https://github.com/fsalum/puppet-redis/blob/master/Modulefile) file.
|
||||
|
||||
* service restart
|
||||
|
||||
If you need to execute a controlled restart of redis after changes due master/slave relationships to avoid that both are restarted at the same time use the parameter below.
|
||||
|
||||
class { 'redis':
|
||||
service_restart => false
|
||||
}
|
||||
|
||||
By default service restart is true.
|
||||
|
||||
#Sentinel
|
||||
|
||||
This module supports Redis Sentinel that comes with Redis 2.8+ with all the configuration parameters.
|
||||
|
||||
It manages upstart scripts (can be deactivated with parameter manage_upstart_scripts = false).
|
||||
|
||||
##Operating System
|
||||
|
||||
Tested on Ubuntu 14.04 with Redis 2.8
|
||||
|
||||
##Quick Start
|
||||
|
||||
Example:
|
||||
|
||||
class { redis::sentinel:
|
||||
conf_port => '26379',
|
||||
sentinel_confs => {
|
||||
'mymaster' => {
|
||||
'monitor' => '127.0.0.1 6379 2',
|
||||
'down-after-milliseconds' => '60000',
|
||||
'failover-timeout' => 180000,
|
||||
'notification-script' => '/etc/redis/scripts/thescript.py',
|
||||
'parallel-syncs' => '3',
|
||||
},
|
||||
'resque' => {
|
||||
'monitor' => '127.0.0.1 6379 4',
|
||||
'down-after-milliseconds' => '10000',
|
||||
'failover-timeout' => 180000,
|
||||
'notification-script' => '/etc/redis/scripts/thescript.py',
|
||||
'parallel-syncs' => '5',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
##Copyright and License
|
||||
|
||||
Copyright (C) 2014 Felipe Salum
|
||||
|
||||
Felipe Salum can be contacted at: fsalum@gmail.com
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,11 @@
|
|||
require 'puppetlabs_spec_helper/rake_tasks'
|
||||
require 'puppet-lint/tasks/puppet-lint'
|
||||
|
||||
PuppetLint.configuration.fail_on_warnings
|
||||
PuppetLint.configuration.send('relative')
|
||||
PuppetLint.configuration.send('disable_80chars')
|
||||
PuppetLint.configuration.send('disable_class_inherits_from_params_class')
|
||||
PuppetLint.configuration.send('disable_class_parameter_defaults')
|
||||
PuppetLint.configuration.send('disable_documentation')
|
||||
PuppetLint.configuration.send('disable_single_quote_string_with_variables')
|
||||
PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
|
|
@ -0,0 +1,43 @@
|
|||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
#
|
||||
|
||||
if ENV['VAGRANT_HOME'].nil?
|
||||
ENV['VAGRANT_HOME'] = './'
|
||||
end
|
||||
|
||||
redis = {
|
||||
:'centos5' => { :memory => '120', :ip => '10.1.1.10', :box => 'puppetlabs/centos-5.11-64-puppet', :domain => 'redis.local' },
|
||||
:'centos65' => { :memory => '120', :ip => '10.1.1.11', :box => 'puppetlabs/centos-6.5-64-puppet', :domain => 'redis.local' },
|
||||
:'precise' => { :memory => '120', :ip => '10.1.1.20', :box => 'puppetlabs/ubuntu-12.04-64-puppet', :domain => 'redis.local' },
|
||||
:'saucy' => { :memory => '120', :ip => '10.1.1.21', :box => 'puppetlabs/ubuntu-13.10-64-puppet', :domain => 'redis.local' },
|
||||
:'trusty' => { :memory => '240', :ip => '10.1.1.22', :box => 'puppetlabs/ubuntu-14.04-64-puppet', :domain => 'redis.local' },
|
||||
:'squeeze' => { :memory => '120', :ip => '10.1.1.30', :box => 'puppetlabs/debian-6.0.9-64-puppet', :domain => 'redis.local' },
|
||||
:'wheezy' => { :memory => '120', :ip => '10.1.1.31', :box => 'puppetlabs/debian-7.6-64-puppet', :domain => 'redis.local' },
|
||||
}
|
||||
|
||||
Vagrant::Config.run("2") do |config|
|
||||
config.vbguest.auto_update = true
|
||||
config.hostmanager.enabled = false
|
||||
|
||||
redis.each_pair do |name, opts|
|
||||
config.vm.define name do |n|
|
||||
config.vm.provider :virtualbox do |vb|
|
||||
vb.customize ["modifyvm", :id, "--memory", opts[:memory] ]
|
||||
end
|
||||
n.vm.network "private_network", ip: opts[:ip]
|
||||
n.vm.box = opts[:box]
|
||||
n.vm.host_name = "#{name}" + "." + opts[:domain]
|
||||
n.vm.synced_folder "#{ENV['VAGRANT_HOME']}","/etc/puppet/modules/redis"
|
||||
n.vm.provision :shell, :inline => "gem install puppet facter --no-ri --no-rdoc" if name == "trusty"
|
||||
n.vm.provision :shell, :inline => "puppet module install thias-sysctl --force"
|
||||
n.vm.provision :puppet do |puppet|
|
||||
puppet.manifests_path = "tests"
|
||||
puppet.manifest_file = "init.pp"
|
||||
#puppet.manifest_file = "sentinel.pp"
|
||||
puppet.module_path = "./"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -0,0 +1,71 @@
|
|||
require 'facter'
|
||||
|
||||
Facter.add("redis_version", :timeout => 120) do
|
||||
confine :osfamily => "Debian"
|
||||
|
||||
setcode do
|
||||
|
||||
dpkg = `which apt-cache 2> /dev/null`.chomp
|
||||
if dpkg == ''
|
||||
dpkg = '/usr/bin/apt-cache'
|
||||
end
|
||||
|
||||
redis_version = Facter::Util::Resolution.exec('/usr/bin/redis-server --version')
|
||||
if redis_version.nil?
|
||||
redis_version = Facter::Util::Resolution.exec(dpkg+" show redis-server 2> /dev/null | /bin/grep -i 'version:' | /usr/bin/awk '{printf(\"%s\",$2)}' | sort -nr | head -1")
|
||||
end
|
||||
|
||||
case redis_version
|
||||
when /2\.8\.[0-9]/
|
||||
#set version to 2.8
|
||||
redis_version = '2.8.x'
|
||||
when /2\.6\.[0-9]/
|
||||
#set version to 2.6
|
||||
redis_version = '2.6.x'
|
||||
when /2\.4\.[0-9]/
|
||||
#set version to 2.4
|
||||
redis_version = '2.4.x'
|
||||
when /2\.2\.[0-9]/
|
||||
#set version to 2.2
|
||||
redis_version = '2.2.x'
|
||||
else
|
||||
redis_version = 'nil'
|
||||
end
|
||||
redis_version
|
||||
end
|
||||
end
|
||||
|
||||
Facter.add("redis_version", :timeout => 120) do
|
||||
confine :osfamily => "RedHat"
|
||||
|
||||
setcode do
|
||||
|
||||
yum = `which yum 2> /dev/null`.chomp
|
||||
if yum == ''
|
||||
yum = '/usr/bin/yum'
|
||||
end
|
||||
|
||||
redis_version = Facter::Util::Resolution.exec('/usr/sbin/redis-server --version')
|
||||
if redis_version.nil?
|
||||
redis_version = Facter::Util::Resolution.exec(yum+" info redis 2> /dev/null | /bin/grep '^Version' | /bin/awk -F ':' '{printf(\"%s\",$2)}' | sort -nr | head -1")
|
||||
end
|
||||
|
||||
case redis_version
|
||||
when /2\.8\.[0-9]/
|
||||
#set version to 2.8
|
||||
redis_version = '2.8.x'
|
||||
when /2\.6\.[0-9]/
|
||||
#set version to 2.6
|
||||
redis_version = '2.6.x'
|
||||
when /2\.4\.[0-9]/
|
||||
#set version to 2.4
|
||||
redis_version = '2.4.x'
|
||||
when /2\.2\.[0-9]/
|
||||
#set version to 2.2
|
||||
redis_version = '2.2.x'
|
||||
else
|
||||
redis_version = 'nil'
|
||||
end
|
||||
redis_version
|
||||
end
|
||||
end
|
|
@ -0,0 +1,211 @@
|
|||
# == Class: redis
|
||||
#
|
||||
# Install and configure a Redis server
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# All the redis.conf parameters can be passed to the class.
|
||||
# See below for a complete list of parameters accepted.
|
||||
#
|
||||
# Check the README.md file for any further information about parameters for this class.
|
||||
#
|
||||
# === Examples
|
||||
#
|
||||
# class { redis:
|
||||
# conf_port => '6380',
|
||||
# conf_bind => '0.0.0.0',
|
||||
# }
|
||||
#
|
||||
# === Authors
|
||||
#
|
||||
# Felipe Salum <fsalum@gmail.com>
|
||||
#
|
||||
# === Copyright
|
||||
#
|
||||
# Copyright 2013 Felipe Salum, unless otherwise noted.
|
||||
#
|
||||
class redis (
|
||||
$conf_activerehashing = 'yes',
|
||||
$conf_aof_rewrite_incremental_fsync = 'yes', # 2.6+
|
||||
$conf_append = {}, # hash of custom variables+values
|
||||
$conf_appendfilename = undef, # default appendonly.aof
|
||||
$conf_appendfsync = 'everysec',
|
||||
$conf_appendonly = 'no',
|
||||
$conf_auto_aof_rewrite_min_size = '64mb',
|
||||
$conf_auto_aof_rewrite_percentage = '100',
|
||||
$conf_bind = '0.0.0.0',
|
||||
$conf_client_output_buffer_limit_normal = '0 0 0', # 2.6+
|
||||
$conf_client_output_buffer_limit_pubsub = '32mb 8mb 60', # 2.6+
|
||||
$conf_client_output_buffer_limit_slave = '256mb 64mb 60', # 2.6+
|
||||
$conf_daemonize = 'yes',
|
||||
$conf_databases = '16',
|
||||
$conf_dbfilename = 'dump.rdb',
|
||||
$conf_dir = '/var/lib/redis/',
|
||||
$conf_glueoutputbuf = undef,
|
||||
$conf_hash_max_zipmap_entries = '512',
|
||||
$conf_hash_max_zipmap_value = '64',
|
||||
$conf_hll_sparse_max_bytes = undef, # default 3000, 2.8.5?+
|
||||
$conf_hz = '10', # 2.6+
|
||||
$conf_include = [], # array of custom include files
|
||||
$conf_list_max_ziplist_entries = '512',
|
||||
$conf_list_max_ziplist_value = '64',
|
||||
$conf_logfile = undef, #default ""
|
||||
$conf_loglevel = 'notice',
|
||||
$conf_lua_time_limit = '5000', # 2.6+
|
||||
$conf_masterauth = undef,
|
||||
$conf_maxclients = undef, # default 10000 in 2.6+
|
||||
$conf_maxmemory = undef,
|
||||
$conf_maxmemory_policy = undef,
|
||||
$conf_maxmemory_samples = undef,
|
||||
$conf_min_slaves_max_lag = undef, # default 10, 2.8+
|
||||
$conf_min_slaves_to_write = undef, # 2.8+
|
||||
$conf_no_appendfsync_on_rewrite = 'no',
|
||||
$conf_nosave = undef,
|
||||
$conf_notify_keyspace_events = undef, # 2.8+
|
||||
$conf_pidfile = undef,
|
||||
$conf_port = '6379',
|
||||
$conf_rdbchecksum = 'yes', # 2.6+
|
||||
$conf_rdbcompression = 'yes',
|
||||
$conf_repl_backlog_size = '1mb', # 2,8+
|
||||
$conf_repl_backlog_ttl = '3600', # 2.8+
|
||||
$conf_repl_disable_tcp_nodelay = 'no', # 2,6+
|
||||
$conf_repl_ping_slave_period = '10', # 2.4+
|
||||
$conf_repl_timeout = '60', # 2.4+
|
||||
$conf_requirepass = undef,
|
||||
$conf_save = {'900' =>'1', '300' => '10', '60' => '10000'},
|
||||
$conf_set_max_intset_entries = '512',
|
||||
$conf_slave_priority = undef, # 2.6+
|
||||
$conf_slave_read_only = 'yes', # 2.6+
|
||||
$conf_slave_serve_stale_data = 'yes',
|
||||
$conf_slaveof = undef,
|
||||
$conf_slowlog_log_slower_than = '10000',
|
||||
$conf_slowlog_max_len = '128',
|
||||
$conf_stop_writes_on_bgsave_error = 'yes', # 2.6+
|
||||
$conf_syslog_enabled = undef,
|
||||
$conf_syslog_facility = undef,
|
||||
$conf_syslog_ident = undef,
|
||||
$conf_tcp_backlog = undef, # default is 511, 2.8.5+
|
||||
$conf_tcp_keepalive = '0', # 2.6+
|
||||
$conf_timeout = '0',
|
||||
$conf_unixsocket = '/tmp/redis.sock', # 2.2+
|
||||
$conf_unixsocketperm = '755', # 2.4+
|
||||
$conf_vm_enabled = 'no', # deprecated in 2.4+
|
||||
$conf_vm_max_memory = '0', # deprecated in 2.4+
|
||||
$conf_vm_max_threads = '4', # deprecated in 2.4+
|
||||
$conf_vm_page_size = '32', # deprecated in 2.4+
|
||||
$conf_vm_pages = '134217728', # deprecated in 2.4+
|
||||
$conf_vm_swap_file = '/tmp/redis.swap', # deprecated in 2.4+
|
||||
$conf_zset_max_ziplist_entries = '128', # 2.4+
|
||||
$conf_zset_max_ziplist_value = '64', # 2.4+
|
||||
$package_ensure = 'present',
|
||||
$package_name = undef,
|
||||
$redis_version_override = undef,
|
||||
$service_enable = true,
|
||||
$service_ensure = 'running',
|
||||
$service_restart = true,
|
||||
$system_sysctl = false,
|
||||
) {
|
||||
|
||||
include redis::params
|
||||
|
||||
$conf_redis = $redis::params::conf
|
||||
$conf_logrotate = $redis::params::conf_logrotate
|
||||
$service = $redis::params::service
|
||||
|
||||
if $redis_version_override {
|
||||
$redis_version_real = $redis_version_override
|
||||
} else {
|
||||
$redis_version_real = $package_ensure ? {
|
||||
/2\.2\..*/ => '2.2.x',
|
||||
/2\.4\..*/ => '2.4.x',
|
||||
/2\.6\..*/ => '2.6.x',
|
||||
/2\.8\..*/ => '2.8.x',
|
||||
default => $::redis_version
|
||||
}
|
||||
}
|
||||
|
||||
if $package_name {
|
||||
$package = $package_name
|
||||
}else{
|
||||
$package = $redis::params::package
|
||||
}
|
||||
|
||||
if $conf_pidfile {
|
||||
$conf_pidfile_real = $conf_pidfile
|
||||
}else{
|
||||
$conf_pidfile_real = $::redis::params::pidfile
|
||||
}
|
||||
|
||||
if $conf_logfile {
|
||||
$conf_logfile_real = $conf_logfile
|
||||
}else{
|
||||
$conf_logfile_real = $::redis::params::logfile
|
||||
}
|
||||
|
||||
package { 'redis':
|
||||
ensure => $package_ensure,
|
||||
name => $package,
|
||||
}
|
||||
|
||||
service { 'redis':
|
||||
ensure => $service_ensure,
|
||||
name => $service,
|
||||
enable => $service_enable,
|
||||
hasrestart => true,
|
||||
hasstatus => true,
|
||||
require => [ Package['redis'],
|
||||
Exec[$conf_dir],
|
||||
File[$conf_redis] ],
|
||||
}
|
||||
|
||||
file { $conf_redis:
|
||||
path => $conf_redis,
|
||||
content => template('redis/redis.conf.erb'),
|
||||
owner => root,
|
||||
group => root,
|
||||
mode => '0644',
|
||||
require => Package['redis'],
|
||||
}
|
||||
|
||||
file { $conf_logrotate:
|
||||
path => $conf_logrotate,
|
||||
content => template('redis/logrotate.erb'),
|
||||
owner => root,
|
||||
group => root,
|
||||
mode => '0644',
|
||||
}
|
||||
|
||||
exec { $conf_dir:
|
||||
path => '/bin:/usr/bin:/sbin:/usr/sbin',
|
||||
command => "mkdir -p ${conf_dir}",
|
||||
user => root,
|
||||
group => root,
|
||||
creates => $conf_dir,
|
||||
before => Service['redis'],
|
||||
require => Package['redis'],
|
||||
}
|
||||
|
||||
file { $conf_dir:
|
||||
ensure => directory,
|
||||
owner => redis,
|
||||
group => redis,
|
||||
mode => '0755',
|
||||
before => Service['redis'],
|
||||
require => Exec[$conf_dir],
|
||||
}
|
||||
|
||||
if ( $system_sysctl == true ) {
|
||||
# add necessary kernel parameters
|
||||
# see the redis admin guide here: http://redis.io/topics/admin
|
||||
sysctl { 'vm.overcommit_memory':
|
||||
value => '1',
|
||||
}
|
||||
}
|
||||
|
||||
if $service_restart == true {
|
||||
# https://github.com/fsalum/puppet-redis/pull/28
|
||||
Exec[$conf_dir] ~> Service['redis']
|
||||
File[$conf_redis] ~> Service['redis']
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
# Class: redis::params
|
||||
#
|
||||
# This class configures parameters for the puppet-redis module.
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# Actions:
|
||||
#
|
||||
# Requires:
|
||||
#
|
||||
# Sample Usage:
|
||||
#
|
||||
class redis::params {
|
||||
|
||||
case $::osfamily {
|
||||
'redhat': {
|
||||
$package = 'redis'
|
||||
$service = 'redis'
|
||||
$conf = '/etc/redis.conf'
|
||||
$conf_logrotate = '/etc/logrotate.d/redis'
|
||||
$pidfile = '/var/run/redis/redis.pid'
|
||||
$logfile = '/var/log/redis/redis.log'
|
||||
}
|
||||
'debian': {
|
||||
$package = 'redis-server'
|
||||
$service = 'redis-server'
|
||||
$conf = '/etc/redis/redis.conf'
|
||||
$conf_logrotate = '/etc/logrotate.d/redis-server'
|
||||
$pidfile = '/var/run/redis/redis-server.pid'
|
||||
$logfile = '/var/log/redis/redis-server.log'
|
||||
}
|
||||
default: {
|
||||
fail("Unsupported osfamily: ${::osfamily}, module ${module_name} only support osfamily RedHat and Debian")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,152 @@
|
|||
# == Class: redis::sentinel
|
||||
#
|
||||
# Install and configure a Redis Sentinel
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# All the sentinel.conf parameters can be passed to the class.
|
||||
# See below for a complete list of parameters accepted.
|
||||
#
|
||||
# Check the README.md file for any further information about parameters for this class.
|
||||
#
|
||||
# === Examples
|
||||
#
|
||||
# class { redis::sentinel:
|
||||
# conf_port => '26379',
|
||||
# sentinel_confs => {
|
||||
# 'mymaster' => {
|
||||
# 'monitor' => '127.0.0.1 6379 2',
|
||||
# 'down-after-milliseconds' => '60000',
|
||||
# 'notification-script' => '/etc/redis/scripts/thescript.py',
|
||||
# 'parallel-syncs' => '3',
|
||||
# }
|
||||
# 'resque' => {
|
||||
# 'monitor' => 'resque 6379 4',
|
||||
# 'down-after-milliseconds' => '10000',
|
||||
# 'failover-timeout' => 180000,
|
||||
# 'notification-script' => '/etc/redis/scripts/thescript.py',
|
||||
# 'parallel-syncs' => '5',
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# === Authors
|
||||
#
|
||||
# Victor Garcia <bravejolie@gmail.com>
|
||||
#
|
||||
# === Copyright
|
||||
#
|
||||
# Copyright 2013 Felipe Salum, unless otherwise noted.
|
||||
#
|
||||
class redis::sentinel (
|
||||
$conf_port = '26379',
|
||||
$conf_daemonize = 'yes',
|
||||
$sentinel_confs = [],
|
||||
$service_enable = true,
|
||||
$service_ensure = 'running',
|
||||
$service_restart = true,
|
||||
$manage_upstart_scripts = true,
|
||||
$package_name = undef,
|
||||
) {
|
||||
|
||||
include redis::sentinel_params
|
||||
|
||||
$conf_sentinel = $redis::sentinel_params::conf
|
||||
$conf_sentinel_orig = "${conf_sentinel}.puppet"
|
||||
$conf_logrotate = $redis::sentinel_params::conf_logrotate
|
||||
$service = $redis::sentinel_params::service
|
||||
$upstart_script = $redis::sentinel_params::upstart_script
|
||||
|
||||
if $package_name {
|
||||
$package = $package_name
|
||||
}else{
|
||||
$package = $redis::sentinel_params::package
|
||||
}
|
||||
|
||||
if $conf_pidfile {
|
||||
$conf_pidfile_real = $conf_pidfile
|
||||
}else{
|
||||
$conf_pidfile_real = $::redis::sentinel_params::pidfile
|
||||
}
|
||||
if $conf_logfile {
|
||||
$conf_logfile_real = $conf_logfile
|
||||
}else{
|
||||
$conf_logfile_real = $::redis::sentinel_params::logfile
|
||||
}
|
||||
|
||||
package { 'redis':
|
||||
ensure => $package_ensure,
|
||||
name => $package,
|
||||
}
|
||||
|
||||
if $manage_upstart_scripts == true {
|
||||
service { 'sentinel':
|
||||
ensure => $service_ensure,
|
||||
name => $service,
|
||||
hasrestart => true,
|
||||
hasstatus => true,
|
||||
require => [ File[$conf_sentinel_orig],
|
||||
File[$upstart_script] ],
|
||||
provider => 'upstart'
|
||||
}
|
||||
} else {
|
||||
service { 'sentinel':
|
||||
ensure => $service_ensure,
|
||||
name => $service,
|
||||
enable => $service_enable,
|
||||
hasrestart => true,
|
||||
hasstatus => true,
|
||||
require => [ Package['redis'],
|
||||
File[$conf_sentinel_orig] ],
|
||||
}
|
||||
}
|
||||
|
||||
# Sentinel rewrites the config file so, to avoid overriding it
|
||||
# with the original content everytime puppet runs, this manages the
|
||||
# "notify" event on an original file that triggers a copy to the good one
|
||||
# only if it changed.
|
||||
file { $conf_sentinel_orig:
|
||||
content => template('redis/sentinel.conf.erb'),
|
||||
owner => redis,
|
||||
group => redis,
|
||||
mode => '0644',
|
||||
require => Package['redis'],
|
||||
notify => Exec["cp ${conf_sentinel_orig} ${conf_sentinel}"],
|
||||
}
|
||||
|
||||
file { $conf_sentinel:
|
||||
owner => redis,
|
||||
group => redis,
|
||||
require => Package['redis'],
|
||||
}
|
||||
|
||||
exec { "cp ${conf_sentinel_orig} ${conf_sentinel}":
|
||||
path => '/bin:/usr/bin:/sbin:/usr/sbin',
|
||||
refreshonly => true,
|
||||
user => redis,
|
||||
group => redis,
|
||||
notify => Service['sentinel'],
|
||||
require => File[$conf_sentinel],
|
||||
}
|
||||
|
||||
file { $conf_logrotate:
|
||||
path => $conf_logrotate,
|
||||
content => template('redis/logrotate.erb'),
|
||||
owner => root,
|
||||
group => root,
|
||||
mode => '0644',
|
||||
}
|
||||
|
||||
if $service_restart == true {
|
||||
# https://github.com/fsalum/puppet-redis/pull/28
|
||||
File[$conf_sentinel_orig] ~> Service['sentinel']
|
||||
}
|
||||
|
||||
if $manage_upstart_scripts == true {
|
||||
file { $upstart_script:
|
||||
ensure => present,
|
||||
content => template('redis/sentinel-init.conf.erb'),
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
# Class: redis::sentinel_params
|
||||
#
|
||||
# This class configures sentinel parameters for the puppet-redis module.
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# Actions:
|
||||
#
|
||||
# Requires:
|
||||
#
|
||||
# Sample Usage:
|
||||
#
|
||||
class redis::sentinel_params {
|
||||
|
||||
case $::osfamily {
|
||||
# TODO: add redhat support
|
||||
#'redhat': {
|
||||
# $package = 'redis'
|
||||
# $service = 'redis-sentinel'
|
||||
# $conf = '/etc/sentinel.conf'
|
||||
# $conf_dir = undef
|
||||
# $conf_logrotate = '/etc/logrotate.d/sentinel'
|
||||
# $pidfile = '/var/run/redis/sentinel.pid'
|
||||
# $logfile = '/var/log/redis/sentinel.log'
|
||||
# $upstart_script = '/etc/init/redis-sentinel.conf'
|
||||
#}
|
||||
'debian': {
|
||||
$package = 'redis-server'
|
||||
$service = 'redis-sentinel'
|
||||
$conf_dir = '/etc/redis'
|
||||
$conf = '/etc/redis/sentinel.conf'
|
||||
$conf_logrotate = '/etc/logrotate.d/redis-sentinel'
|
||||
$pidfile = '/var/run/redis/redis-sentinel.pid'
|
||||
$logfile = '/var/log/redis/redis-sentinel.log'
|
||||
$upstart_script = '/etc/init/redis-sentinel.conf'
|
||||
}
|
||||
default: {
|
||||
fail("Unsupported osfamily: ${::osfamily}, module ${module_name} only support osfamily RedHat and Debian")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"name": "fsalum-redis",
|
||||
"version": "1.0.3",
|
||||
"author": "Felipe Salum",
|
||||
"summary": "Puppet module for Redis Server",
|
||||
"license": "Apache-2.0",
|
||||
"source": "git://github.com/fsalum/puppet-redis.git",
|
||||
"project_page": "https://github.com/fsalum/puppet-redis",
|
||||
"issues_url": "https://github.com/fsalum/puppet-redis/issues",
|
||||
"tags": ["redis", "memcached", "cache", "nosql"],
|
||||
"operatingsystem_support": [
|
||||
{
|
||||
"operatingsystem": "Centos",
|
||||
"operatingsystemrelease": [
|
||||
"5",
|
||||
"6"
|
||||
]
|
||||
},
|
||||
{
|
||||
"operatingsystem": "Ubuntu",
|
||||
"operatingsystemrelease": [
|
||||
"12.04",
|
||||
"13.10",
|
||||
"14.04"
|
||||
]
|
||||
},
|
||||
{
|
||||
"operatingsystem":"Debian",
|
||||
"operatingsystemrelease": [
|
||||
"6",
|
||||
"7"
|
||||
]
|
||||
}
|
||||
],
|
||||
"requirements": [
|
||||
{
|
||||
"name": "pe",
|
||||
"version_requirement": "3.x"
|
||||
},
|
||||
{
|
||||
"name": "puppet",
|
||||
"version_requirement": "3.x"
|
||||
}
|
||||
],
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "thias/sysctl",
|
||||
"version_requirement": ">= 0.3.0"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
dir = File.expand_path(File.dirname(__FILE__))
|
||||
$LOAD_PATH.unshift File.join(dir, 'lib')
|
||||
|
||||
require 'mocha'
|
||||
require 'puppet'
|
||||
require 'rspec'
|
||||
require 'spec/autorun'
|
||||
|
||||
Spec::Runner.configure do |config|
|
||||
config.mock_with :mocha
|
||||
end
|
||||
|
||||
# We need this because the RAL uses 'should' as a method. This
|
||||
# allows us the same behaviour but with a different method name.
|
||||
class Object
|
||||
alias :must :should
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
<%= @conf_logfile_real %> {
|
||||
weekly
|
||||
rotate 10
|
||||
copytruncate
|
||||
delaycompress
|
||||
compress
|
||||
notifempty
|
||||
missingok
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,14 @@
|
|||
# redis-sentinel - Redis Datastore Server
|
||||
#
|
||||
# Redis is a key value in memory persistent datastore
|
||||
|
||||
start on (local-filesystems and runlevel [2345])
|
||||
stop on runlevel [016]
|
||||
respawn
|
||||
expect fork
|
||||
limit nofile 20000 65000
|
||||
pre-start script
|
||||
mkdir -p /var/run/redis-sentinel
|
||||
chown redis:redis /var/run/redis-sentinel
|
||||
end script
|
||||
exec start-stop-daemon --start --chuid redis:redis --pidfile <%= @conf_pidfile_real %> --umask 007 --exec /usr/bin/redis-sentinel -- <%= @conf_sentinel %>
|
|
@ -0,0 +1,178 @@
|
|||
# By default Redis does not run as a daemon. Use 'yes' if you need it.
|
||||
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
|
||||
<%- if @conf_daemonize -%>
|
||||
daemonize <%= @conf_daemonize %>
|
||||
<%- end -%>
|
||||
|
||||
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
|
||||
# default. You can specify a custom pid file location here.
|
||||
pidfile <%= @conf_pidfile_real %>
|
||||
|
||||
# port <sentinel-port>
|
||||
# The port that this sentinel instance will run on
|
||||
<%- if @conf_port -%>
|
||||
port <%= @conf_port %>
|
||||
<%- end -%>
|
||||
|
||||
# Specify the log file name. Also 'stdout' can be used to force
|
||||
# Redis to log on the standard output. Note that if you use standard
|
||||
# output for logging but daemonize, logs will be sent to /dev/null
|
||||
logfile <%= @conf_logfile_real %>
|
||||
|
||||
<%- if @sentinel_confs -%>
|
||||
<%- @sentinel_confs.keys.sort.each do |master| -%>
|
||||
# Sentinel configuration for <%= master %>
|
||||
sentinel monitor <%= master %> <%= @sentinel_confs[master]['monitor'] %>
|
||||
<%- @sentinel_confs[master].keys.sort.each do |key| -%>
|
||||
<%- if key != 'monitor' -%>
|
||||
sentinel <%= key %> <%= master %> <%= @sentinel_confs[master][key] %>
|
||||
<%- end -%>
|
||||
<%- end -%>
|
||||
<%- end -%>
|
||||
<%- end -%>
|
||||
|
||||
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
|
||||
#
|
||||
# Tells Sentinel to monitor this master, and to consider it in O_DOWN
|
||||
# (Objectively Down) state only if at least <quorum> sentinels agree.
|
||||
#
|
||||
# Note that whatever is the ODOWN quorum, a Sentinel will require to
|
||||
# be elected by the majority of the known Sentinels in order to
|
||||
# start a failover, so no failover can be performed in minority.
|
||||
#
|
||||
# Slaves are auto-discovered, so you don't need to specify slaves in
|
||||
# any way. Sentinel itself will rewrite this configuration file adding
|
||||
# the slaves using additional configuration options.
|
||||
# Also note that the configuration file is rewritten when a
|
||||
# slave is promoted to master.
|
||||
#
|
||||
# Note: master name should not include special characters or spaces.
|
||||
# The valid charset is A-z 0-9 and the three characters ".-_".
|
||||
#sentinel monitor mymaster 127.0.0.1 6379 2
|
||||
|
||||
# sentinel auth-pass <master-name> <password>
|
||||
#
|
||||
# Set the password to use to authenticate with the master and slaves.
|
||||
# Useful if there is a password set in the Redis instances to monitor.
|
||||
#
|
||||
# Note that the master password is also used for slaves, so it is not
|
||||
# possible to set a different password in masters and slaves instances
|
||||
# if you want to be able to monitor these instances with Sentinel.
|
||||
#
|
||||
# However you can have Redis instances without the authentication enabled
|
||||
# mixed with Redis instances requiring the authentication (as long as the
|
||||
# password set is the same for all the instances requiring the password) as
|
||||
# the AUTH command will have no effect in Redis instances with authentication
|
||||
# switched off.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
|
||||
|
||||
# sentinel down-after-milliseconds <master-name> <milliseconds>
|
||||
#
|
||||
# Number of milliseconds the master (or any attached slave or sentinel) should
|
||||
# be unreachable (as in, not acceptable reply to PING, continuously, for the
|
||||
# specified period) in order to consider it in S_DOWN state (Subjectively
|
||||
# Down).
|
||||
#
|
||||
# Default is 30 seconds.
|
||||
#sentinel down-after-milliseconds mymaster 30000
|
||||
|
||||
# sentinel parallel-syncs <master-name> <numslaves>
|
||||
#
|
||||
# How many slaves we can reconfigure to point to the new slave simultaneously
|
||||
# during the failover. Use a low number if you use the slaves to serve query
|
||||
# to avoid that all the slaves will be unreachable at about the same
|
||||
# time while performing the synchronization with the master.
|
||||
#sentinel parallel-syncs mymaster 1
|
||||
|
||||
# sentinel failover-timeout <master-name> <milliseconds>
|
||||
#
|
||||
# Specifies the failover timeout in milliseconds. It is used in many ways:
|
||||
#
|
||||
# - The time needed to re-start a failover after a previous failover was
|
||||
# already tried against the same master by a given Sentinel, is two
|
||||
# times the failover timeout.
|
||||
#
|
||||
# - The time needed for a slave replicating to a wrong master according
|
||||
# to a Sentinel current configuration, to be forced to replicate
|
||||
# with the right master, is exactly the failover timeout (counting since
|
||||
# the moment a Sentinel detected the misconfiguration).
|
||||
#
|
||||
# - The time needed to cancel a failover that is already in progress but
|
||||
# did not produced any configuration change (SLAVEOF NO ONE yet not
|
||||
# acknowledged by the promoted slave).
|
||||
#
|
||||
# - The maximum time a failover in progress waits for all the slaves to be
|
||||
# reconfigured as slaves of the new master. However even after this time
|
||||
# the slaves will be reconfigured by the Sentinels anyway, but not with
|
||||
# the exact parallel-syncs progression as specified.
|
||||
#
|
||||
# Default is 3 minutes.
|
||||
#sentinel failover-timeout mymaster 180000
|
||||
|
||||
# SCRIPTS EXECUTION
|
||||
#
|
||||
# sentinel notification-script and sentinel reconfig-script are used in order
|
||||
# to configure scripts that are called to notify the system administrator
|
||||
# or to reconfigure clients after a failover. The scripts are executed
|
||||
# with the following rules for error handling:
|
||||
#
|
||||
# If script exits with "1" the execution is retried later (up to a maximum
|
||||
# number of times currently set to 10).
|
||||
#
|
||||
# If script exits with "2" (or an higher value) the script execution is
|
||||
# not retried.
|
||||
#
|
||||
# If script terminates because it receives a signal the behavior is the same
|
||||
# as exit code 1.
|
||||
#
|
||||
# A script has a maximum running time of 60 seconds. After this limit is
|
||||
# reached the script is terminated with a SIGKILL and the execution retried.
|
||||
|
||||
# NOTIFICATION SCRIPT
|
||||
#
|
||||
# sentinel notification-script <master-name> <script-path>
|
||||
#
|
||||
# Call the specified notification script for any sentinel event that is
|
||||
# generated in the WARNING level (for instance -sdown, -odown, and so forth).
|
||||
# This script should notify the system administrator via email, SMS, or any
|
||||
# other messaging system, that there is something wrong with the monitored
|
||||
# Redis systems.
|
||||
#
|
||||
# The script is called with just two arguments: the first is the event type
|
||||
# and the second the event description.
|
||||
#
|
||||
# The script must exist and be executable in order for sentinel to start if
|
||||
# this option is provided.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# sentinel notification-script mymaster /var/redis/notify.sh
|
||||
|
||||
# CLIENTS RECONFIGURATION SCRIPT
|
||||
#
|
||||
# sentinel client-reconfig-script <master-name> <script-path>
|
||||
#
|
||||
# When the master changed because of a failover a script can be called in
|
||||
# order to perform application-specific tasks to notify the clients that the
|
||||
# configuration has changed and the master is at a different address.
|
||||
#
|
||||
# The following arguments are passed to the script:
|
||||
#
|
||||
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
|
||||
#
|
||||
# <state> is currently always "failover"
|
||||
# <role> is either "leader" or "observer"
|
||||
#
|
||||
# The arguments from-ip, from-port, to-ip, to-port are used to communicate
|
||||
# the old address of the master and the new address of the elected slave
|
||||
# (now a master).
|
||||
#
|
||||
# This script should be resistant to multiple invocations.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
mod "redis",
|
||||
:git => "git://github.com/fsalum/puppet-redis.git"
|
|
@ -0,0 +1,97 @@
|
|||
node default {
|
||||
|
||||
case $::osfamily {
|
||||
'RedHat': {
|
||||
package { 'epel-release':
|
||||
ensure => present,
|
||||
source => 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm',
|
||||
provider => rpm,
|
||||
before => Class['redis'],
|
||||
}
|
||||
}
|
||||
'Debian': {
|
||||
# redis is on repository
|
||||
}
|
||||
default: {
|
||||
fail("Unsupported osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}, module ${module_name} only support osfamily RedHat and Debian")
|
||||
}
|
||||
}
|
||||
|
||||
class { 'redis':
|
||||
conf_activerehashing => 'yes',
|
||||
conf_aof_rewrite_incremental_fsync => 'yes', # 2.6+
|
||||
conf_appendfilename => 'appendonly.aof',
|
||||
conf_appendfsync => 'everysec',
|
||||
conf_appendonly => 'no',
|
||||
conf_auto_aof_rewrite_min_size => '64mb',
|
||||
conf_auto_aof_rewrite_percentage => '100',
|
||||
conf_bind => '0.0.0.0',
|
||||
conf_client_output_buffer_limit_normal => '0 0 0', # 2.6+
|
||||
conf_client_output_buffer_limit_pubsub => '32mb 8mb 60', # 2.6+
|
||||
conf_client_output_buffer_limit_slave => '256mb 64mb 60', # 2.6+
|
||||
conf_daemonize => 'yes',
|
||||
conf_databases => '16',
|
||||
conf_dbfilename => 'dump.rdb',
|
||||
conf_dir => '/var/lib/redis/',
|
||||
conf_glueoutputbuf => undef,
|
||||
conf_hash_max_zipmap_entries => '512',
|
||||
conf_hash_max_zipmap_value => '64',
|
||||
conf_hll_sparse_max_bytes => undef, # default 3000 in 2.8+
|
||||
conf_hz => '10', # 2.6+
|
||||
conf_include => undef,
|
||||
conf_list_max_ziplist_entries => '512',
|
||||
conf_list_max_ziplist_value => '64',
|
||||
conf_logfile => '',
|
||||
conf_loglevel => 'notice',
|
||||
conf_lua_time_limit => '5000', # 2.6+
|
||||
conf_masterauth => undef,
|
||||
conf_maxclients => '128', # default 10000 in 2.6+
|
||||
conf_maxmemory => undef,
|
||||
conf_maxmemory_policy => undef,
|
||||
conf_maxmemory_samples => undef,
|
||||
conf_min_slaves_max_lag => '10', # default 10, 2.8+
|
||||
conf_min_slaves_to_write => undef, # 2.8+
|
||||
conf_no_appendfsync_on_rewrite => 'no',
|
||||
conf_nosave => undef,
|
||||
conf_notify_keyspace_events => undef, # 2.8+
|
||||
conf_pidfile => undef,
|
||||
conf_port => '6379',
|
||||
conf_rdbchecksum => 'yes', # 2.6+
|
||||
conf_rdbcompression => 'yes',
|
||||
conf_repl_backlog_size => '1mb', # 2,8+
|
||||
conf_repl_backlog_ttl => '3600', # 2.8+
|
||||
conf_repl_disable_tcp_nodelay => 'no', # 2,6+
|
||||
conf_repl_ping_slave_period => '10', # 2.4+
|
||||
conf_repl_timeout => '60', # 2.4+
|
||||
conf_requirepass => undef,
|
||||
conf_save => {"900" =>"1", "300" => "10", "60" => "10000"},
|
||||
conf_set_max_intset_entries => '512',
|
||||
conf_slave_priority => undef, # 2.6+
|
||||
conf_slave_read_only => 'yes', # 2.6+
|
||||
conf_slave_serve_stale_data => 'yes',
|
||||
conf_slaveof => undef,
|
||||
conf_slowlog_log_slower_than => '10000',
|
||||
conf_slowlog_max_len => '128',
|
||||
conf_stop_writes_on_bgsave_error => 'yes', # 2.6+
|
||||
conf_syslog_enabled => undef,
|
||||
conf_syslog_facility => undef,
|
||||
conf_syslog_ident => undef,
|
||||
conf_tcp_backlog => undef, # 2.8.5+
|
||||
conf_tcp_keepalive => '0', # 2.6+
|
||||
conf_timeout => '0',
|
||||
conf_vm_enabled => 'no', # deprecated in 2.4+
|
||||
conf_vm_max_memory => '0', # deprecated in 2.4+
|
||||
conf_vm_max_threads => '4', # deprecated in 2.4+
|
||||
conf_vm_page_size => '32', # deprecated in 2.4+
|
||||
conf_vm_pages => '134217728', # deprecated in 2.4+
|
||||
conf_vm_swap_file => '/tmp/redis.swap', # deprecated in 2.4+
|
||||
conf_zset_max_ziplist_entries => '128', # 2.4+
|
||||
conf_zset_max_ziplist_value => '64', # 2.4+
|
||||
package_ensure => 'present',
|
||||
service_enable => true,
|
||||
service_ensure => 'running',
|
||||
service_restart => true,
|
||||
system_sysctl => true,
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
node default {
|
||||
|
||||
case $::osfamily {
|
||||
#'RedHat': {
|
||||
# package { 'epel-release':
|
||||
# ensure => present,
|
||||
# source => 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm',
|
||||
# provider => rpm,
|
||||
# before => Class['redis'],
|
||||
# }
|
||||
#}
|
||||
'Debian': {
|
||||
# redis is on repository
|
||||
}
|
||||
default: {
|
||||
fail("Unsupported osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}, module ${module_name} only support osfamily RedHat and Debian")
|
||||
}
|
||||
}
|
||||
|
||||
class { 'redis::sentinel':
|
||||
conf_port => '26379',
|
||||
sentinel_confs => {
|
||||
'mymaster' => {
|
||||
'monitor' => '127.0.0.1 6379 2',
|
||||
'down-after-milliseconds' => '60000',
|
||||
'failover-timeout' => 180000,
|
||||
'parallel-syncs' => '3',
|
||||
},
|
||||
'resque' => {
|
||||
'monitor' => '127.0.0.1 6379 4',
|
||||
'down-after-milliseconds' => '10000',
|
||||
'failover-timeout' => 180000,
|
||||
'parallel-syncs' => '5',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue