diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 5d04747..38cacd4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,184 +1,199 @@ This module has grown over time based on a range of contributions from people using it. If you follow these contributing guidelines your patch will likely make it into a release a little more quickly. ## Contributing Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. [Contributor Code of Conduct](https://voxpupuli.org/coc/). 1. Fork the repo. 1. Create a separate branch for your change. 1. We only take pull requests with passing tests, and documentation. [travis-ci](http://travis-ci.org) runs the tests for us. You can also execute them locally. This is explained in a later section. 1. Checkout [our docs](https://voxpupuli.org/docs/#reviewing-a-module-pr) we use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html). They provide some guidance for new code that might help you before you submit a pull request. 1. Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, please add a test. 1. Squash your commits down into logical components. Make sure to rebase against our current master. 1. Push the branch to your fork and submit a pull request. Please be prepared to repeat some of these steps as our contributors review your code. ## Dependencies The testing and development tools have a bunch of dependencies, all managed by [bundler](http://bundler.io/) according to the [Puppet support matrix](http://docs.puppetlabs.com/guides/platforms.html#ruby-versions). By default the tests use a baseline version of Puppet. If you have Ruby 2.x or want a specific version of Puppet, you must set an environment variable such as: ```sh export PUPPET_VERSION="~> 5.5.6" ``` You can install all needed gems for spec tests into the modules directory by running: ```sh -bundle install --path .vendor/ --without development system_tests release +bundle install --path .vendor/ --without development system_tests release --jobs "$(nproc)" ``` If you also want to run acceptance tests: ```sh -bundle install --path .vendor/ --with system_tests --without development release +bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)" ``` Our all in one solution if you don't know if you need to install or update gems: ```sh -bundle install --path .vendor/ --with system_tests --without development release; bundle update; bundle clean +bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)"; bundle update; bundle clean +``` + +As an alternative to the `--jobs "$(nproc)` parameter, you can set an +environment variable: + +```sh +BUNDLE_JOBS="$(nproc)" +``` + +### Note for OS X users + +`nproc` isn't a valid command unter OS x. As an alternative, you can do: + +```sh +--jobs "$(sysctl -n hw.ncpu)" ``` ## Syntax and style The test suite will run [Puppet Lint](http://puppet-lint.com/) and [Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to check various syntax and style things. You can run these locally with: ```sh bundle exec rake lint bundle exec rake validate ``` It will also run some [Rubocop](http://batsov.com/rubocop/) tests against it. You can run those locally ahead of time with: ```sh bundle exec rake rubocop ``` ## Running the unit tests The unit test suite covers most of the code, as mentioned above please add tests if you're adding new functionality. If you've not used [rspec-puppet](http://rspec-puppet.com/) before then feel free to ask about how best to test your new feature. To run the linter, the syntax checker and the unit tests: ```sh bundle exec rake test ``` To run your all the unit tests ```sh bundle exec rake spec ``` To run a specific spec test set the `SPEC` variable: ```sh bundle exec rake spec SPEC=spec/foo_spec.rb ``` ### Unit tests in docker Some people don't want to run the dependencies locally or don't want to install ruby. We ship a Dockerfile that enables you to run all unit tests and linting. You only need to run: ```sh docker build . ``` Please ensure that a docker daemon is running and that your user has the permission to talk to it. You can specify a remote docker host by setting the `DOCKER_HOST` environment variable. it will copy the content of the module into the docker image. So it will not work if a Gemfile.lock exists. ## Integration tests The unit tests just check the code runs, not that it does exactly what we want on a real machine. For that we're using [beaker](https://github.com/puppetlabs/beaker). This fires up a new virtual machine (using vagrant) and runs a series of simple tests against it after applying the module. You can run this with: ```sh bundle exec rake acceptance ``` This will run the tests on the module's default nodeset. You can override the nodeset used, e.g., ```sh BEAKER_set=centos-7-x64 bundle exec rake acceptance ``` There are default rake tasks for the various acceptance test modules, e.g., ```sh bundle exec rake beaker:centos-7-x64 bundle exec rake beaker:ssh:centos-7-x64 ``` If you don't want to have to recreate the virtual machine every time you can use `BEAKER_destroy=no` and `BEAKER_provision=no`. On the first run you will at least need `BEAKER_provision` set to yes (the default). The Vagrantfile for the created virtual machines will be in `.vagrant/beaker_vagrant_files`. Beaker also supports docker containers. We also use that in our automated CI pipeline at [travis-ci](http://travis-ci.org). To use that instead of Vagrant: -``` +```sh PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian9-64{hypervisor=docker} BEAKER_destroy=yes bundle exec rake beaker ``` You can replace the string `debian9` with any common operating system. The following strings are known to work: * ubuntu1604 * ubuntu1804 * debian8 * debian9 * centos6 * centos7 The easiest way to debug in a docker container is to open a shell: ```sh docker exec -it -u root ${container_id_or_name} bash ``` The source of this file is in our [modulesync_config](https://github.com/voxpupuli/modulesync_config/blob/master/moduleroot/.github/CONTRIBUTING.md.erb) repository. diff --git a/.msync.yml b/.msync.yml index 5519891..23dfa32 100644 --- a/.msync.yml +++ b/.msync.yml @@ -1 +1 @@ -modulesync_config_version: '2.7.0' +modulesync_config_version: '2.8.0' diff --git a/Gemfile b/Gemfile index 5393193..d315c74 100644 --- a/Gemfile +++ b/Gemfile @@ -1,84 +1,85 @@ source ENV['GEM_SOURCE'] || "https://rubygems.org" def location_for(place, fake_version = nil) if place =~ /^(git[:@][^#]*)#(.*)/ [fake_version, { :git => $1, :branch => $2, :require => false }].compact elsif place =~ /^file:\/\/(.*)/ ['>= 0', { :path => File.expand_path($1), :require => false }] else [place, { :require => false }] end end group :test do gem 'puppetlabs_spec_helper', '>= 2.14.0', :require => false gem 'rspec-puppet-facts', '>= 1.8.0', :require => false gem 'rspec-puppet-utils', :require => false gem 'puppet-lint-leading_zero-check', :require => false gem 'puppet-lint-trailing_comma-check', :require => false gem 'puppet-lint-version_comparison-check', :require => false gem 'puppet-lint-classes_and_types_beginning_with_digits-check', :require => false gem 'puppet-lint-unquoted_string-check', :require => false gem 'puppet-lint-variable_contains_upcase', :require => false gem 'puppet-lint-absolute_classname-check', :require => false + gem 'puppet-lint-topscope-variable-check', :require => false gem 'metadata-json-lint', :require => false gem 'redcarpet', :require => false gem 'rubocop', '~> 0.49.1', :require => false gem 'rubocop-rspec', '~> 1.15.0', :require => false gem 'mocha', '~> 1.4.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false gem 'parallel_tests', :require => false gem 'redis', :require => false gem 'mock_redis', :require => false end group :development do gem 'travis', :require => false gem 'travis-lint', :require => false gem 'guard-rake', :require => false gem 'overcommit', '>= 0.39.1', :require => false end group :system_tests do gem 'winrm', :require => false if beaker_version = ENV['BEAKER_VERSION'] gem 'beaker', *location_for(beaker_version) else gem 'beaker', '>= 4.2.0', :require => false end if beaker_rspec_version = ENV['BEAKER_RSPEC_VERSION'] gem 'beaker-rspec', *location_for(beaker_rspec_version) else gem 'beaker-rspec', :require => false end gem 'serverspec', :require => false gem 'beaker-hostgenerator', '>= 1.1.22', :require => false gem 'beaker-docker', :require => false gem 'beaker-puppet', :require => false gem 'beaker-puppet_install_helper', :require => false gem 'beaker-module_install_helper', :require => false gem 'rbnacl', '>= 4', :require => false gem 'rbnacl-libsodium', :require => false gem 'bcrypt_pbkdf', :require => false end group :release do gem 'github_changelog_generator', :require => false, :git => 'https://github.com/github-changelog-generator/github-changelog-generator' gem 'puppet-blacksmith', :require => false gem 'voxpupuli-release', :require => false, :git => 'https://github.com/voxpupuli/voxpupuli-release-gem' gem 'puppet-strings', '>= 2.2', :require => false end if facterversion = ENV['FACTER_GEM_VERSION'] gem 'facter', facterversion.to_s, :require => false, :groups => [:test] else gem 'facter', :require => false, :groups => [:test] end ENV['PUPPET_VERSION'].nil? ? puppetversion = '~> 6.0' : puppetversion = ENV['PUPPET_VERSION'].to_s gem 'puppet', puppetversion, :require => false, :groups => [:test] # vim: syntax=ruby diff --git a/manifests/config.pp b/manifests/config.pp index 7a5a085..3818eee 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -1,71 +1,71 @@ # = Class: redis::config # # This class provides configuration for Redis. # class redis::config { File { - owner => $::redis::config_owner, - group => $::redis::config_group, - mode => $::redis::config_file_mode, + owner => $redis::config_owner, + group => $redis::config_group, + mode => $redis::config_file_mode, } - file { $::redis::config_dir: + file { $redis::config_dir: ensure => directory, - mode => $::redis::config_dir_mode, + mode => $redis::config_dir_mode, } - file {$::redis::log_dir: + file {$redis::log_dir: ensure => directory, - group => $::redis::service_group, - mode => $::redis::log_dir_mode, - owner => $::redis::service_user, + group => $redis::service_group, + mode => $redis::log_dir_mode, + owner => $redis::service_user, } - file {$::redis::workdir: + file {$redis::workdir: ensure => directory, - group => $::redis::service_group, - mode => $::redis::workdir_mode, - owner => $::redis::service_user, + group => $redis::service_group, + mode => $redis::workdir_mode, + owner => $redis::service_user, } - if $::redis::default_install { + if $redis::default_install { redis::instance {'default': - pid_file => $::redis::pid_file, - log_file => $::redis::log_file, - manage_service_file => $::redis::manage_service_file, - unixsocket => $::redis::unixsocket, - workdir => $::redis::workdir, + pid_file => $redis::pid_file, + log_file => $redis::log_file, + manage_service_file => $redis::manage_service_file, + unixsocket => $redis::unixsocket, + workdir => $redis::workdir, } } - if $::redis::ulimit { + if $redis::ulimit { contain redis::ulimit } $service_provider_lookup = pick(getvar('service_provider'), false) unless $facts['osfamily'] == 'Debian' or $service_provider_lookup == 'systemd' { file { '/var/run/redis': ensure => 'directory', - owner => $::redis::config_owner, - group => $::redis::config_group, + owner => $redis::config_owner, + group => $redis::config_group, mode => '0755', } } # Adjust /etc/default/redis-server on Debian systems case $::osfamily { 'Debian': { file { '/etc/default/redis-server': ensure => present, - group => $::redis::config_group, - mode => $::redis::config_file_mode, - owner => $::redis::config_owner, + group => $redis::config_group, + mode => $redis::config_file_mode, + owner => $redis::config_owner, } } default: { } } } diff --git a/manifests/init.pp b/manifests/init.pp index 499e5e9..77287d7 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,282 +1,282 @@ # This class installs redis # # @example Default install # include redis # # @example Slave Node # class { '::redis': # bind => '10.0.1.2', # slaveof => '10.0.1.1 6379', # } # # @example Binding on multiple interfaces # class { 'redis': # bind => ['127.0.0.1', '10.0.0.1', '10.1.0.1'], # } # # @example Binding on all interfaces # class { 'redis': # bind => [], # } # # @param [String] activerehashing Enable/disable active rehashing. # @param [String] aof_load_truncated Enable/disable loading truncated AOF file # @param [String] aof_rewrite_incremental_fsync Enable/disable fsync for AOF file # @param [String] appendfilename The name of the append only file # @param appendfsync Adjust fsync mode. Default: `everysec` # @param [String] appendonly Enable/disable appendonly mode. # @param [String] auto_aof_rewrite_min_size Adjust minimum size for auto-aof-rewrite. # @param [String] auto_aof_rewrite_percentage Adjust percentatge for auto-aof-rewrite. # @param bind Configure which IP address(es) to listen on. To bind on all interfaces, use an empty array. # @param config_dir Directory containing the configuration files. # @param config_dir_mode Adjust mode for directory containing configuration files. # @param [String] config_file_orig The location and name of a config file that provides the source # @param [String] config_file Adjust main configuration file. # @param config_file_mode Adjust permissions for configuration files. # @param [String] config_group Adjust filesystem group for config files. # @param [String] config_owner Adjust filesystem owner for config files. # @param [String] conf_template Define which template to use. # @param [String] daemonize Have Redis run as a daemon. # @param default_install Configure a default install of redis. # @param [String] databases Set the number of databases. # @param [String] dbfilename The filename where to dump the DB # @param [String] extra_config_file Description # @param [String] hash_max_ziplist_entries Set max ziplist entries for hashes. # @param [String] hash_max_ziplist_value Set max ziplist values for hashes. # @param [String] hll_sparse_max_bytes HyperLogLog sparse representation bytes limit # @param [String] hz Set redis background tasks frequency # @param [String] latency_monitor_threshold Latency monitoring threshold in milliseconds # @param [String] list_max_ziplist_entries Set max ziplist entries for lists. # @param [String] list_max_ziplist_value Set max ziplist values for lists. # @param log_dir Specify directory where to write log entries. # @param log_dir_mode Adjust mode for directory containing log files. # @param log_file Specify file where to write log entries. # @param [String] log_level Specify the server verbosity level. # @param manage_repo Enable/disable upstream repository configuration. # @param manage_package Enable/disable management of package # @param [String] managed_by_cluster_manager Choose if redis will be managed by a cluster manager such as pacemaker or rgmanager # @param [String] masterauth If the master is password protected (using the "requirepass" configuration # @param [String] maxclients Set the max number of connected clients at the same time. # @param [String] maxmemory Don't use more memory than the specified amount of bytes. # @param [String] maxmemory_policy How Redis will select what to remove when maxmemory is reached. # @param [String] maxmemory_samples Select as well the sample size to check. # @param [String] min_slaves_max_lag The lag in seconds # @param [String] min_slaves_to_write Minimum number of slaves to be in "online" state # @param [String] no_appendfsync_on_rewrite If you have latency problems turn this to 'true'. Otherwise leave it as # @param [String] notify_keyspace_events Which events to notify Pub/Sub clients about events happening # @param [String] notify_service You may disable service reloads when config files change if you # @param [String] package_ensure Default action for package. # @param [String] package_name Upstream package name. # @param [String] pid_file Where to store the pid. # @param port Configure which port to listen on. # @param [String] protected_mode Whether protected mode is enabled or not. Only applicable when no bind is set. # @param [String] ppa_repo Specify upstream (Ubuntu) PPA entry. # @param [String] rdbcompression Enable/disable compression of string objects using LZF when dumping. # @param [String] repl_backlog_size The replication backlog size # @param [String] repl_backlog_ttl The number of seconds to elapse before freeing backlog buffer # @param [String] repl_disable_tcp_nodelay Enable/disable TCP_NODELAY on the slave socket after SYNC # @param [Integer] repl_ping_slave_period Slaves send PINGs to server in a predefined interval. It's possible # @param [String] repl_timeout Set the replication timeout for: # @param [String] requirepass Require clients to issue AUTH before processing any # other commands. # @param [String] save_db_to_disk Set if save db to disk. # @param [String] save_db_to_disk_interval save the dataset every N seconds if there are at least M changes in the dataset # @param service_manage Specify if the service should be part of the catalog. # @param [String] service_enable Enable/disable daemon at boot. # @param [String] service_ensure Specify if the server should be running. # @param [String] service_group Specify which group to run as. # @param [String] service_hasrestart Does the init script support restart? # @param [String] service_hasstatus Does the init script support status? # @param [String] service_name Specify the service name for Init or Systemd. # @param [String] service_provider Specify the service provider to use # @param [String] service_user Specify which user to run as. # @param [String] set_max_intset_entries The following configuration setting sets the limit in the size of the # set in order to use this special memory saving encoding. # Default: 512 # @param [String] slave_priority The priority number for slave promotion by Sentinel # @param [String] slave_read_only You can configure a slave instance to accept writes or not. # @param [String] slave_serve_stale_data When a slave loses its connection with the master, or when the replication # is still in progress, the slave can act in two different ways: # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will # still reply to client requests, possibly with out of date data, or the # data set may just be empty if this is the first synchronization. # # 2) if slave-serve-stale-data is set to 'no' the slave will reply with # an error "SYNC with master in progress" to all the kind of commands # but to INFO and SLAVEOF. # # Default: true # # @param [String] slaveof Use slaveof to make a Redis instance a copy of another Redis server. # @param [String] slowlog_log_slower_than Tells Redis what is the execution time, in microseconds, to exceed # in order for the command to get logged. # Default: 10000 # # @param [String] slowlog_max_len Tells Redis what is the length to exceed in order for the command # to get logged. # Default: 1024 # # @param [String] stop_writes_on_bgsave_error If false then Redis will continue to work as usual even if there # are problems with disk, permissions, and so forth. # Default: true # # @param [String] syslog_enabled Enable/disable logging to the system logger. # @param [String] syslog_facility Specify the syslog facility. # Must be USER or between LOCAL0-LOCAL7. # Default: undef # # @param [String] tcp_backlog Sets the TCP backlog # @param [String] tcp_keepalive TCP keepalive. # @param [String] timeout Close the connection after a client is idle for N seconds (0 to disable). # @param [String] ulimit Limit the use of system-wide resources. # @param [String] unixsocket Define unix socket path # @param [String] unixsocketperm Define unix socket file permissions # @param workdir The DB will be written inside this directory, with the filename specified # above using the 'dbfilename' configuration directive. # Default: /var/lib/redis/ # @param workdir_mode Adjust mode for data directory. # @param [String] zset_max_ziplist_entries Set max entries for sorted sets. # @param [String] zset_max_ziplist_value Set max values for sorted sets. # @param cluster_enabled Enables redis 3.0 cluster functionality # @param [String] cluster_config_file Config file for saving cluster nodes configuration. This file is never touched by humans. # Only set if cluster_enabled is true # Default: nodes.conf # @param [String] cluster_node_timeout Node timeout # Only set if cluster_enabled is true # Default: 5000 # @param [Integer] cluster_slave_validity_factor Control variable to disable promoting slave in case of disconnection from master # Only set if cluster_enabled is true # Default: 0 # @param [Boolean] cluster_require_full_coverage If false Redis Cluster will server queries even if requests about a subset of keys can be processed # Only set if cluster_enabled is true # Default: true # @param [Integer] cluster_migration_barrier Minimum number of slaves master will remain connected with, for another slave to migrate to a master which is no longer covered by any slave # Only set if cluster_enabled is true # Default: 1 class redis ( - $activerehashing = $::redis::params::activerehashing, - $aof_load_truncated = $::redis::params::aof_load_truncated, - $aof_rewrite_incremental_fsync = $::redis::params::aof_rewrite_incremental_fsync, - $appendfilename = $::redis::params::appendfilename, - Enum['no', 'always', 'everysec'] $appendfsync = $::redis::params::appendfsync, - $appendonly = $::redis::params::appendonly, - $auto_aof_rewrite_min_size = $::redis::params::auto_aof_rewrite_min_size, - $auto_aof_rewrite_percentage = $::redis::params::auto_aof_rewrite_percentage, - Variant[Stdlib::IP::Address, Array[Stdlib::IP::Address]] $bind = $::redis::params::bind, - $output_buffer_limit_slave = $::redis::params::output_buffer_limit_slave, - $output_buffer_limit_pubsub = $::redis::params::output_buffer_limit_pubsub, - $conf_template = $::redis::params::conf_template, - Stdlib::Absolutepath $config_dir = $::redis::params::config_dir, - Stdlib::Filemode $config_dir_mode = $::redis::params::config_dir_mode, - $config_file = $::redis::params::config_file, - Stdlib::Filemode $config_file_mode = $::redis::params::config_file_mode, - $config_file_orig = $::redis::params::config_file_orig, - $config_group = $::redis::params::config_group, - $config_owner = $::redis::params::config_owner, - $daemonize = $::redis::params::daemonize, - $databases = $::redis::params::databases, - Boolean $default_install = $::redis::params::default_install, - $dbfilename = $::redis::params::dbfilename, - $extra_config_file = $::redis::params::extra_config_file, - $hash_max_ziplist_entries = $::redis::params::hash_max_ziplist_entries, - $hash_max_ziplist_value = $::redis::params::hash_max_ziplist_value, - $hll_sparse_max_bytes = $::redis::params::hll_sparse_max_bytes, - $hz = $::redis::params::hz, - $latency_monitor_threshold = $::redis::params::latency_monitor_threshold, - $list_max_ziplist_entries = $::redis::params::list_max_ziplist_entries, - $list_max_ziplist_value = $::redis::params::list_max_ziplist_value, - Stdlib::Absolutepath $log_dir = $::redis::params::log_dir, - Stdlib::Filemode $log_dir_mode = $::redis::params::log_dir_mode, - Stdlib::Absolutepath $log_file = $::redis::params::log_file, - $log_level = $::redis::params::log_level, - Boolean $manage_service_file = $::redis::params::manage_service_file, - Boolean $manage_package = $::redis::params::manage_package, - Boolean $manage_repo = $::redis::params::manage_repo, - $masterauth = $::redis::params::masterauth, - $maxclients = $::redis::params::maxclients, - $maxmemory = $::redis::params::maxmemory, - $maxmemory_policy = $::redis::params::maxmemory_policy, - $maxmemory_samples = $::redis::params::maxmemory_samples, - $min_slaves_max_lag = $::redis::params::min_slaves_max_lag, - $min_slaves_to_write = $::redis::params::min_slaves_to_write, - $no_appendfsync_on_rewrite = $::redis::params::no_appendfsync_on_rewrite, - $notify_keyspace_events = $::redis::params::notify_keyspace_events, - $notify_service = $::redis::params::notify_service, - $managed_by_cluster_manager = $::redis::params::managed_by_cluster_manager, - $package_ensure = $::redis::params::package_ensure, - $package_name = $::redis::params::package_name, - $pid_file = $::redis::params::pid_file, - Stdlib::Port $port = $::redis::params::port, - $protected_mode = $::redis::params::protected_mode, - $ppa_repo = $::redis::params::ppa_repo, - $rdbcompression = $::redis::params::rdbcompression, - $repl_backlog_size = $::redis::params::repl_backlog_size, - $repl_backlog_ttl = $::redis::params::repl_backlog_ttl, - $repl_disable_tcp_nodelay = $::redis::params::repl_disable_tcp_nodelay, - Integer[1] $repl_ping_slave_period = $::redis::params::repl_ping_slave_period, - $repl_timeout = $::redis::params::repl_timeout, - $requirepass = $::redis::params::requirepass, - $save_db_to_disk = $::redis::params::save_db_to_disk, - $save_db_to_disk_interval = $::redis::params::save_db_to_disk_interval, - $service_enable = $::redis::params::service_enable, - $service_ensure = $::redis::params::service_ensure, - $service_group = $::redis::params::service_group, - $service_hasrestart = $::redis::params::service_hasrestart, - $service_hasstatus = $::redis::params::service_hasstatus, - Boolean $service_manage = $::redis::params::service_manage, - $service_name = $::redis::params::service_name, - $service_provider = $::redis::params::service_provider, - $service_user = $::redis::params::service_user, - $set_max_intset_entries = $::redis::params::set_max_intset_entries, - $slave_priority = $::redis::params::slave_priority, - $slave_read_only = $::redis::params::slave_read_only, - $slave_serve_stale_data = $::redis::params::slave_serve_stale_data, - $slaveof = $::redis::params::slaveof, - $slowlog_log_slower_than = $::redis::params::slowlog_log_slower_than, - $slowlog_max_len = $::redis::params::slowlog_max_len, - $stop_writes_on_bgsave_error = $::redis::params::stop_writes_on_bgsave_error, - $syslog_enabled = $::redis::params::syslog_enabled, - $syslog_facility = $::redis::params::syslog_facility, - $tcp_backlog = $::redis::params::tcp_backlog, - $tcp_keepalive = $::redis::params::tcp_keepalive, - $timeout = $::redis::params::timeout, - $unixsocket = $::redis::params::unixsocket, - $unixsocketperm = $::redis::params::unixsocketperm, - $ulimit = $::redis::params::ulimit, - Stdlib::Absolutepath $workdir = $::redis::params::workdir, - Stdlib::Filemode $workdir_mode = $::redis::params::workdir_mode, - $zset_max_ziplist_entries = $::redis::params::zset_max_ziplist_entries, - $zset_max_ziplist_value = $::redis::params::zset_max_ziplist_value, - Boolean $cluster_enabled = $::redis::params::cluster_enabled, - $cluster_config_file = $::redis::params::cluster_config_file, - $cluster_node_timeout = $::redis::params::cluster_node_timeout, - Integer[0] $cluster_slave_validity_factor = $::redis::params::cluster_slave_validity_factor, - Boolean $cluster_require_full_coverage = $::redis::params::cluster_require_full_coverage, - Integer[0] $cluster_migration_barrier = $::redis::params::cluster_migration_barrier + $activerehashing = $redis::params::activerehashing, + $aof_load_truncated = $redis::params::aof_load_truncated, + $aof_rewrite_incremental_fsync = $redis::params::aof_rewrite_incremental_fsync, + $appendfilename = $redis::params::appendfilename, + Enum['no', 'always', 'everysec'] $appendfsync = $redis::params::appendfsync, + $appendonly = $redis::params::appendonly, + $auto_aof_rewrite_min_size = $redis::params::auto_aof_rewrite_min_size, + $auto_aof_rewrite_percentage = $redis::params::auto_aof_rewrite_percentage, + Variant[Stdlib::IP::Address, Array[Stdlib::IP::Address]] $bind = $redis::params::bind, + $output_buffer_limit_slave = $redis::params::output_buffer_limit_slave, + $output_buffer_limit_pubsub = $redis::params::output_buffer_limit_pubsub, + $conf_template = $redis::params::conf_template, + Stdlib::Absolutepath $config_dir = $redis::params::config_dir, + Stdlib::Filemode $config_dir_mode = $redis::params::config_dir_mode, + $config_file = $redis::params::config_file, + Stdlib::Filemode $config_file_mode = $redis::params::config_file_mode, + $config_file_orig = $redis::params::config_file_orig, + $config_group = $redis::params::config_group, + $config_owner = $redis::params::config_owner, + $daemonize = $redis::params::daemonize, + $databases = $redis::params::databases, + Boolean $default_install = $redis::params::default_install, + $dbfilename = $redis::params::dbfilename, + $extra_config_file = $redis::params::extra_config_file, + $hash_max_ziplist_entries = $redis::params::hash_max_ziplist_entries, + $hash_max_ziplist_value = $redis::params::hash_max_ziplist_value, + $hll_sparse_max_bytes = $redis::params::hll_sparse_max_bytes, + $hz = $redis::params::hz, + $latency_monitor_threshold = $redis::params::latency_monitor_threshold, + $list_max_ziplist_entries = $redis::params::list_max_ziplist_entries, + $list_max_ziplist_value = $redis::params::list_max_ziplist_value, + Stdlib::Absolutepath $log_dir = $redis::params::log_dir, + Stdlib::Filemode $log_dir_mode = $redis::params::log_dir_mode, + Stdlib::Absolutepath $log_file = $redis::params::log_file, + $log_level = $redis::params::log_level, + Boolean $manage_service_file = $redis::params::manage_service_file, + Boolean $manage_package = $redis::params::manage_package, + Boolean $manage_repo = $redis::params::manage_repo, + $masterauth = $redis::params::masterauth, + $maxclients = $redis::params::maxclients, + $maxmemory = $redis::params::maxmemory, + $maxmemory_policy = $redis::params::maxmemory_policy, + $maxmemory_samples = $redis::params::maxmemory_samples, + $min_slaves_max_lag = $redis::params::min_slaves_max_lag, + $min_slaves_to_write = $redis::params::min_slaves_to_write, + $no_appendfsync_on_rewrite = $redis::params::no_appendfsync_on_rewrite, + $notify_keyspace_events = $redis::params::notify_keyspace_events, + $notify_service = $redis::params::notify_service, + $managed_by_cluster_manager = $redis::params::managed_by_cluster_manager, + $package_ensure = $redis::params::package_ensure, + $package_name = $redis::params::package_name, + $pid_file = $redis::params::pid_file, + Stdlib::Port $port = $redis::params::port, + $protected_mode = $redis::params::protected_mode, + $ppa_repo = $redis::params::ppa_repo, + $rdbcompression = $redis::params::rdbcompression, + $repl_backlog_size = $redis::params::repl_backlog_size, + $repl_backlog_ttl = $redis::params::repl_backlog_ttl, + $repl_disable_tcp_nodelay = $redis::params::repl_disable_tcp_nodelay, + Integer[1] $repl_ping_slave_period = $redis::params::repl_ping_slave_period, + $repl_timeout = $redis::params::repl_timeout, + $requirepass = $redis::params::requirepass, + $save_db_to_disk = $redis::params::save_db_to_disk, + $save_db_to_disk_interval = $redis::params::save_db_to_disk_interval, + $service_enable = $redis::params::service_enable, + $service_ensure = $redis::params::service_ensure, + $service_group = $redis::params::service_group, + $service_hasrestart = $redis::params::service_hasrestart, + $service_hasstatus = $redis::params::service_hasstatus, + Boolean $service_manage = $redis::params::service_manage, + $service_name = $redis::params::service_name, + $service_provider = $redis::params::service_provider, + $service_user = $redis::params::service_user, + $set_max_intset_entries = $redis::params::set_max_intset_entries, + $slave_priority = $redis::params::slave_priority, + $slave_read_only = $redis::params::slave_read_only, + $slave_serve_stale_data = $redis::params::slave_serve_stale_data, + $slaveof = $redis::params::slaveof, + $slowlog_log_slower_than = $redis::params::slowlog_log_slower_than, + $slowlog_max_len = $redis::params::slowlog_max_len, + $stop_writes_on_bgsave_error = $redis::params::stop_writes_on_bgsave_error, + $syslog_enabled = $redis::params::syslog_enabled, + $syslog_facility = $redis::params::syslog_facility, + $tcp_backlog = $redis::params::tcp_backlog, + $tcp_keepalive = $redis::params::tcp_keepalive, + $timeout = $redis::params::timeout, + $unixsocket = $redis::params::unixsocket, + $unixsocketperm = $redis::params::unixsocketperm, + $ulimit = $redis::params::ulimit, + Stdlib::Absolutepath $workdir = $redis::params::workdir, + Stdlib::Filemode $workdir_mode = $redis::params::workdir_mode, + $zset_max_ziplist_entries = $redis::params::zset_max_ziplist_entries, + $zset_max_ziplist_value = $redis::params::zset_max_ziplist_value, + Boolean $cluster_enabled = $redis::params::cluster_enabled, + $cluster_config_file = $redis::params::cluster_config_file, + $cluster_node_timeout = $redis::params::cluster_node_timeout, + Integer[0] $cluster_slave_validity_factor = $redis::params::cluster_slave_validity_factor, + Boolean $cluster_require_full_coverage = $redis::params::cluster_require_full_coverage, + Integer[0] $cluster_migration_barrier = $redis::params::cluster_migration_barrier ) inherits redis::params { contain redis::preinstall contain redis::install contain redis::config contain redis::service Class['redis::preinstall'] -> Class['redis::install'] -> Class['redis::config'] - if $::redis::notify_service { + if $redis::notify_service { Class['redis::config'] ~> Class['redis::service'] } if $::puppetversion and versioncmp($::puppetversion, '4.0.0') < 0 { warning("Puppet 3 is EOL as of 01/01/2017, The 3.X.X releases of the module are the last that will support Puppet 3\nFor more information, see https://github.com/arioch/puppet-redis#puppet-3-support") } exec { 'systemd-reload-redis': command => 'systemctl daemon-reload', refreshonly => true, path => '/bin:/usr/bin:/usr/local/bin', } } diff --git a/manifests/install.pp b/manifests/install.pp index f0544cd..3e21fad 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -1,12 +1,12 @@ # = Class: redis::install # # This class installs the application. # class redis::install { - if $::redis::manage_package { - package { $::redis::package_name: - ensure => $::redis::package_ensure, + if $redis::manage_package { + package { $redis::package_name: + ensure => $redis::package_ensure, } } } diff --git a/manifests/instance.pp b/manifests/instance.pp index 5b812ec..16d2b64 100644 --- a/manifests/instance.pp +++ b/manifests/instance.pp @@ -1,363 +1,363 @@ # redis::instance # # This is an defined type to allow the configuration of # multiple redis instances on one machine without conflicts # # @summary Allows the configuration of multiple redis configurations on one machine # # @example # redis::instance {'6380': # port => 6380, # } # # @param [String] activerehashing Enable/disable active rehashing. # @param [String] aof_load_truncated Enable/disable loading truncated AOF file # @param [String] aof_rewrite_incremental_fsync Enable/disable fsync for AOF file # @param [String] appendfilename The name of the append only file # @param appendfsync Adjust fsync mode. Valid options: always, everysec, no. Default: everysec # @param [String] appendonly Enable/disable appendonly mode. # @param [String] auto_aof_rewrite_min_size Adjust minimum size for auto-aof-rewrite. # @param [String] auto_aof_rewrite_percentage Adjust percentatge for auto-aof-rewrite. # @param bind Configure which IP address(es) to listen on. To bind on all interfaces, use an empty array. # @param config_dir Directory containing the configuration files. # @param config_dir_mode Adjust mode for directory containing configuration files. # @param [String] config_file_orig The location and name of a config file that provides the source # @param [String] config_file Adjust main configuration file. # @param config_file_mode Adjust permissions for configuration files. # @param [String] config_group Adjust filesystem group for config files. # @param [String] config_owner Adjust filesystem owner for config files. # @param [String] conf_template Define which template to use. # @param [String] daemonize Have Redis run as a daemon. # @param [String] databases Set the number of databases. # @param [String] dbfilename The filename where to dump the DB # @param [String] extra_config_file Description # @param [String] hash_max_ziplist_entries Set max ziplist entries for hashes. # @param [String] hash_max_ziplist_value Set max ziplist values for hashes. # @param [String] hll_sparse_max_bytes HyperLogLog sparse representation bytes limit # @param [String] hz Set redis background tasks frequency # @param [String] latency_monitor_threshold Latency monitoring threshold in milliseconds # @param [String] list_max_ziplist_entries Set max ziplist entries for lists. # @param [String] list_max_ziplist_value Set max ziplist values for lists. # @param log_dir Specify directory where to write log entries. # @param log_dir_mode Adjust mode for directory containing log files. # @param log_file Specify file where to write log entries. # @param [String] log_level Specify the server verbosity level. # @param [String] masterauth If the master is password protected (using the "requirepass" configuration # @param [String] maxclients Set the max number of connected clients at the same time. # @param [String] maxmemory Don't use more memory than the specified amount of bytes. # @param [String] maxmemory_policy How Redis will select what to remove when maxmemory is reached. # @param [String] maxmemory_samples Select as well the sample size to check. # @param [String] min_slaves_max_lag The lag in seconds # @param [String] min_slaves_to_write Minimum number of slaves to be in "online" state # @param [String] no_appendfsync_on_rewrite If you have latency problems turn this to 'true'. Otherwise leave it as # @param [String] notify_keyspace_events Which events to notify Pub/Sub clients about events happening # @param [String] pid_file Where to store the pid. # @param port Configure which port to listen on. # @param [String] protected_mode Whether protected mode is enabled or not. Only applicable when no bind is set. # @param [String] rdbcompression Enable/disable compression of string objects using LZF when dumping. # @param [String] repl_backlog_size The replication backlog size # @param [String] repl_backlog_ttl The number of seconds to elapse before freeing backlog buffer # @param [String] repl_disable_tcp_nodelay Enable/disable TCP_NODELAY on the slave socket after SYNC # @param [Integer] repl_ping_slave_period Slaves send PINGs to server in a predefined interval. It's possible # @param [String] repl_timeout Set the replication timeout for: # @param [String] requirepass Require clients to issue AUTH before processing any # other commands. # @param [String] save_db_to_disk Set if save db to disk. # @param [String] save_db_to_disk_interval save the dataset every N seconds if there are at least M changes in the dataset # @param [String] service_enable Enable/disable daemon at boot. # @param [String] service_ensure Specify if the server should be running. # @param [String] service_group Specify which group to run as. # @param [String] service_hasrestart Does the init script support restart? # @param [String] service_hasstatus Does the init script support status? # @param [String] service_user Specify which user to run as. # @param [String] set_max_intset_entries The following configuration setting sets the limit in the size of the # set in order to use this special memory saving encoding. # Default: 512 # @param [String] slave_priority The priority number for slave promotion by Sentinel # @param [String] slave_read_only You can configure a slave instance to accept writes or not. # @param [String] slave_serve_stale_data When a slave loses its connection with the master, or when the replication # is still in progress, the slave can act in two different ways: # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will # still reply to client requests, possibly with out of date data, or the # data set may just be empty if this is the first synchronization. # # 2) if slave-serve-stale-data is set to 'no' the slave will reply with # an error "SYNC with master in progress" to all the kind of commands # but to INFO and SLAVEOF. # # Default: true # # @param [String] slaveof Use slaveof to make a Redis instance a copy of another Redis server. # @param [String] slowlog_log_slower_than Tells Redis what is the execution time, in microseconds, to exceed # in order for the command to get logged. # Default: 10000 # # @param [String] slowlog_max_len Tells Redis what is the length to exceed in order for the command # to get logged. # Default: 1024 # # @param [String] stop_writes_on_bgsave_error If false then Redis will continue to work as usual even if there # are problems with disk, permissions, and so forth. # Default: true # # @param [String] syslog_enabled Enable/disable logging to the system logger. # @param [String] syslog_facility Specify the syslog facility. # Must be USER or between LOCAL0-LOCAL7. # Default: undef # # @param [String] tcp_backlog Sets the TCP backlog # @param [String] tcp_keepalive TCP keepalive. # @param [String] timeout Close the connection after a client is idle for N seconds (0 to disable). # @param [String] ulimit Limit the use of system-wide resources. # @param [String] unixsocket Define unix socket path # @param [String] unixsocketperm Define unix socket file permissions # @param workdir The DB will be written inside this directory, with the filename specified # above using the 'dbfilename' configuration directive. # Default: /var/lib/redis/ # @param workdir_mode Adjust mode for data directory. # @param [String] zset_max_ziplist_entries Set max entries for sorted sets. # @param [String] zset_max_ziplist_value Set max values for sorted sets. # @param cluster_enabled Enables redis 3.0 cluster functionality # @param [String] cluster_config_file Config file for saving cluster nodes configuration. This file is never touched by humans. # Only set if cluster_enabled is true # Default: nodes.conf # @param [String] cluster_node_timeout Node timeout # Only set if cluster_enabled is true # Default: 5000 # @param [Integer] cluster_slave_validity_factor Control variable to disable promoting slave in case of disconnection from master # Only set if cluster_enabled is true # Default: 0 # @param [Boolean] cluster_require_full_coverage If false Redis Cluster will server queries even if requests about a subset of keys can be processed # Only set if cluster_enabled is true # Default: true # @param [Integer] cluster_migration_barrier Minimum number of slaves master will remain connected with, for another slave to migrate to a master which is no longer covered by any slave # Only set if cluster_enabled is true # Default: 1 define redis::instance ( - $activerehashing = $::redis::activerehashing, - $aof_load_truncated = $::redis::aof_load_truncated, - $aof_rewrite_incremental_fsync = $::redis::aof_rewrite_incremental_fsync, - $appendfilename = $::redis::appendfilename, - Enum['no', 'always', 'everysec'] $appendfsync = $::redis::appendfsync, - $appendonly = $::redis::appendonly, - $auto_aof_rewrite_min_size = $::redis::auto_aof_rewrite_min_size, - $auto_aof_rewrite_percentage = $::redis::auto_aof_rewrite_percentage, - Variant[Stdlib::IP::Address, Array[Stdlib::IP::Address]] $bind = $::redis::bind, - $output_buffer_limit_slave = $::redis::output_buffer_limit_slave, - $output_buffer_limit_pubsub = $::redis::output_buffer_limit_pubsub, - $conf_template = $::redis::conf_template, - Stdlib::Absolutepath $config_dir = $::redis::config_dir, - Stdlib::Filemode $config_dir_mode = $::redis::config_dir_mode, - $config_file = $::redis::config_file, - Stdlib::Filemode $config_file_mode = $::redis::config_file_mode, - $config_file_orig = $::redis::config_file_orig, - $config_group = $::redis::config_group, - $config_owner = $::redis::config_owner, - $daemonize = $::redis::daemonize, - $databases = $::redis::databases, - $dbfilename = $::redis::dbfilename, - $extra_config_file = $::redis::extra_config_file, - $hash_max_ziplist_entries = $::redis::hash_max_ziplist_entries, - $hash_max_ziplist_value = $::redis::hash_max_ziplist_value, - $hll_sparse_max_bytes = $::redis::hll_sparse_max_bytes, - $hz = $::redis::hz, - $latency_monitor_threshold = $::redis::latency_monitor_threshold, - $list_max_ziplist_entries = $::redis::list_max_ziplist_entries, - $list_max_ziplist_value = $::redis::list_max_ziplist_value, - Stdlib::Absolutepath $log_dir = $::redis::log_dir, - Stdlib::Filemode $log_dir_mode = $::redis::log_dir_mode, - $log_level = $::redis::log_level, - $minimum_version = $::redis::minimum_version, - $masterauth = $::redis::masterauth, - $maxclients = $::redis::maxclients, - $maxmemory = $::redis::maxmemory, - $maxmemory_policy = $::redis::maxmemory_policy, - $maxmemory_samples = $::redis::maxmemory_samples, - $min_slaves_max_lag = $::redis::min_slaves_max_lag, - $min_slaves_to_write = $::redis::min_slaves_to_write, - $no_appendfsync_on_rewrite = $::redis::no_appendfsync_on_rewrite, - $notify_keyspace_events = $::redis::notify_keyspace_events, - $managed_by_cluster_manager = $::redis::managed_by_cluster_manager, - $package_ensure = $::redis::package_ensure, - Stdlib::Port $port = $::redis::port, - $protected_mode = $::redis::protected_mode, - $rdbcompression = $::redis::rdbcompression, - $repl_backlog_size = $::redis::repl_backlog_size, - $repl_backlog_ttl = $::redis::repl_backlog_ttl, - $repl_disable_tcp_nodelay = $::redis::repl_disable_tcp_nodelay, - Integer[1] $repl_ping_slave_period = $::redis::repl_ping_slave_period, - $repl_timeout = $::redis::repl_timeout, - $requirepass = $::redis::requirepass, - $save_db_to_disk = $::redis::save_db_to_disk, - $save_db_to_disk_interval = $::redis::save_db_to_disk_interval, - $service_user = $::redis::service_user, - $set_max_intset_entries = $::redis::set_max_intset_entries, - $slave_priority = $::redis::slave_priority, - $slave_read_only = $::redis::slave_read_only, - $slave_serve_stale_data = $::redis::slave_serve_stale_data, - $slaveof = $::redis::slaveof, - $slowlog_log_slower_than = $::redis::slowlog_log_slower_than, - $slowlog_max_len = $::redis::slowlog_max_len, - $stop_writes_on_bgsave_error = $::redis::stop_writes_on_bgsave_error, - $syslog_enabled = $::redis::syslog_enabled, - $syslog_facility = $::redis::syslog_facility, - $tcp_backlog = $::redis::tcp_backlog, - $tcp_keepalive = $::redis::tcp_keepalive, - $timeout = $::redis::timeout, - $unixsocketperm = $::redis::unixsocketperm, - $ulimit = $::redis::ulimit, - Stdlib::Filemode $workdir_mode = $::redis::workdir_mode, - $zset_max_ziplist_entries = $::redis::zset_max_ziplist_entries, - $zset_max_ziplist_value = $::redis::zset_max_ziplist_value, - Boolean $cluster_enabled = $::redis::cluster_enabled, - $cluster_config_file = $::redis::cluster_config_file, - $cluster_node_timeout = $::redis::cluster_node_timeout, - Integer[0] $cluster_slave_validity_factor = $::redis::cluster_slave_validity_factor, - Boolean $cluster_require_full_coverage = $::redis::cluster_require_full_coverage, - Integer[0] $cluster_migration_barrier = $::redis::cluster_migration_barrier, - $service_ensure = $::redis::service_ensure, - $service_enable = $::redis::service_enable, - $service_group = $::redis::service_group, - $service_hasrestart = $::redis::service_hasrestart, - $service_hasstatus = $::redis::service_hasstatus, + $activerehashing = $redis::activerehashing, + $aof_load_truncated = $redis::aof_load_truncated, + $aof_rewrite_incremental_fsync = $redis::aof_rewrite_incremental_fsync, + $appendfilename = $redis::appendfilename, + Enum['no', 'always', 'everysec'] $appendfsync = $redis::appendfsync, + $appendonly = $redis::appendonly, + $auto_aof_rewrite_min_size = $redis::auto_aof_rewrite_min_size, + $auto_aof_rewrite_percentage = $redis::auto_aof_rewrite_percentage, + Variant[Stdlib::IP::Address, Array[Stdlib::IP::Address]] $bind = $redis::bind, + $output_buffer_limit_slave = $redis::output_buffer_limit_slave, + $output_buffer_limit_pubsub = $redis::output_buffer_limit_pubsub, + $conf_template = $redis::conf_template, + Stdlib::Absolutepath $config_dir = $redis::config_dir, + Stdlib::Filemode $config_dir_mode = $redis::config_dir_mode, + $config_file = $redis::config_file, + Stdlib::Filemode $config_file_mode = $redis::config_file_mode, + $config_file_orig = $redis::config_file_orig, + $config_group = $redis::config_group, + $config_owner = $redis::config_owner, + $daemonize = $redis::daemonize, + $databases = $redis::databases, + $dbfilename = $redis::dbfilename, + $extra_config_file = $redis::extra_config_file, + $hash_max_ziplist_entries = $redis::hash_max_ziplist_entries, + $hash_max_ziplist_value = $redis::hash_max_ziplist_value, + $hll_sparse_max_bytes = $redis::hll_sparse_max_bytes, + $hz = $redis::hz, + $latency_monitor_threshold = $redis::latency_monitor_threshold, + $list_max_ziplist_entries = $redis::list_max_ziplist_entries, + $list_max_ziplist_value = $redis::list_max_ziplist_value, + Stdlib::Absolutepath $log_dir = $redis::log_dir, + Stdlib::Filemode $log_dir_mode = $redis::log_dir_mode, + $log_level = $redis::log_level, + $minimum_version = $redis::minimum_version, + $masterauth = $redis::masterauth, + $maxclients = $redis::maxclients, + $maxmemory = $redis::maxmemory, + $maxmemory_policy = $redis::maxmemory_policy, + $maxmemory_samples = $redis::maxmemory_samples, + $min_slaves_max_lag = $redis::min_slaves_max_lag, + $min_slaves_to_write = $redis::min_slaves_to_write, + $no_appendfsync_on_rewrite = $redis::no_appendfsync_on_rewrite, + $notify_keyspace_events = $redis::notify_keyspace_events, + $managed_by_cluster_manager = $redis::managed_by_cluster_manager, + $package_ensure = $redis::package_ensure, + Stdlib::Port $port = $redis::port, + $protected_mode = $redis::protected_mode, + $rdbcompression = $redis::rdbcompression, + $repl_backlog_size = $redis::repl_backlog_size, + $repl_backlog_ttl = $redis::repl_backlog_ttl, + $repl_disable_tcp_nodelay = $redis::repl_disable_tcp_nodelay, + Integer[1] $repl_ping_slave_period = $redis::repl_ping_slave_period, + $repl_timeout = $redis::repl_timeout, + $requirepass = $redis::requirepass, + $save_db_to_disk = $redis::save_db_to_disk, + $save_db_to_disk_interval = $redis::save_db_to_disk_interval, + $service_user = $redis::service_user, + $set_max_intset_entries = $redis::set_max_intset_entries, + $slave_priority = $redis::slave_priority, + $slave_read_only = $redis::slave_read_only, + $slave_serve_stale_data = $redis::slave_serve_stale_data, + $slaveof = $redis::slaveof, + $slowlog_log_slower_than = $redis::slowlog_log_slower_than, + $slowlog_max_len = $redis::slowlog_max_len, + $stop_writes_on_bgsave_error = $redis::stop_writes_on_bgsave_error, + $syslog_enabled = $redis::syslog_enabled, + $syslog_facility = $redis::syslog_facility, + $tcp_backlog = $redis::tcp_backlog, + $tcp_keepalive = $redis::tcp_keepalive, + $timeout = $redis::timeout, + $unixsocketperm = $redis::unixsocketperm, + $ulimit = $redis::ulimit, + Stdlib::Filemode $workdir_mode = $redis::workdir_mode, + $zset_max_ziplist_entries = $redis::zset_max_ziplist_entries, + $zset_max_ziplist_value = $redis::zset_max_ziplist_value, + Boolean $cluster_enabled = $redis::cluster_enabled, + $cluster_config_file = $redis::cluster_config_file, + $cluster_node_timeout = $redis::cluster_node_timeout, + Integer[0] $cluster_slave_validity_factor = $redis::cluster_slave_validity_factor, + Boolean $cluster_require_full_coverage = $redis::cluster_require_full_coverage, + Integer[0] $cluster_migration_barrier = $redis::cluster_migration_barrier, + $service_ensure = $redis::service_ensure, + $service_enable = $redis::service_enable, + $service_group = $redis::service_group, + $service_hasrestart = $redis::service_hasrestart, + $service_hasstatus = $redis::service_hasstatus, # Defaults for redis::instance $manage_service_file = true, Optional[Stdlib::Absolutepath] $log_file = undef, $pid_file = "/var/run/redis/redis-server-${name}.pid", $unixsocket = "/var/run/redis/redis-server-${name}.sock", - Stdlib::Absolutepath $workdir = "${::redis::workdir}/redis-server-${name}", + Stdlib::Absolutepath $workdir = "${redis::workdir}/redis-server-${name}", ) { if $title == 'default' { - $redis_server_name = $::redis::service_name + $redis_server_name = $redis::service_name $redis_file_name_orig = $config_file_orig $redis_file_name = $config_file } else { $redis_server_name = "redis-server-${name}" $redis_file_name_orig = sprintf('%s/%s.%s', dirname($config_file_orig), $redis_server_name, 'conf.puppet') $redis_file_name = sprintf('%s/%s.%s', dirname($config_file), $redis_server_name, 'conf') } - if $log_dir != $::redis::log_dir { + if $log_dir != $redis::log_dir { file { $log_dir: ensure => directory, group => $service_group, mode => $log_dir_mode, owner => $service_user, } } $_real_log_file = $log_file ? { undef => "${log_dir}/redis-server-${name}.log", default => $log_file, } - if $workdir != $::redis::workdir { + if $workdir != $redis::workdir { file { $workdir: ensure => directory, group => $service_group, mode => $workdir_mode, owner => $service_user, } } if $manage_service_file { $service_provider_lookup = pick(getvar('service_provider'), false) if $service_provider_lookup == 'systemd' { file { "/etc/systemd/system/${redis_server_name}.service": ensure => file, owner => 'root', group => 'root', mode => '0644', content => template('redis/service_templates/redis.service.erb'), } ~> Exec['systemd-reload-redis'] if $title != 'default' { service { $redis_server_name: ensure => $service_ensure, enable => $service_enable, hasrestart => $service_hasrestart, hasstatus => $service_hasstatus, subscribe => [ File["/etc/systemd/system/${redis_server_name}.service"], Exec["cp -p ${redis_file_name_orig} ${redis_file_name}"], ], } } } else { file { "/etc/init.d/${redis_server_name}": ensure => file, mode => '0755', content => template("redis/service_templates/redis.${::osfamily}.erb"), } if $title != 'default' { service { $redis_server_name: ensure => $service_ensure, enable => $service_enable, hasrestart => $service_hasrestart, hasstatus => $service_hasstatus, subscribe => [ File["/etc/init.d/${redis_server_name}"], Exec["cp -p ${redis_file_name_orig} ${redis_file_name}"], ], } } } } File { owner => $config_owner, group => $config_group, mode => $config_file_mode, } file {$redis_file_name_orig: ensure => file, } exec {"cp -p ${redis_file_name_orig} ${redis_file_name}": path => '/usr/bin:/bin', subscribe => File[$redis_file_name_orig], refreshonly => true, } $bind_arr = [$bind].flatten if $package_ensure =~ /^([0-9]+:)?[0-9]+\.[0-9]/ { if ':' in $package_ensure { $_redis_version_real = split($package_ensure, ':') $redis_version_real = $_redis_version_real[1] } else { $redis_version_real = $package_ensure } } else { $redis_version_real = pick(getvar('redis_server_version'), $minimum_version) } if ($redis_version_real and $conf_template == 'redis/redis.conf.erb') { case $redis_version_real { /^2.4./: { if $bind_arr.length > 1 { fail('Redis 2.4 doesn\'t support binding to multiple IPs') } File[$redis_file_name_orig] { content => template('redis/redis.conf.2.4.10.erb') } } /^2.8./: { File[$redis_file_name_orig] { content => template('redis/redis.conf.2.8.erb') } } /^3.2./: { File[$redis_file_name_orig] { content => template('redis/redis.conf.3.2.erb') } } default: { File[$redis_file_name_orig] { content => template($conf_template) } } } } else { File[$redis_file_name_orig] { content => template($conf_template) } } } diff --git a/manifests/preinstall.pp b/manifests/preinstall.pp index 0e47074..e82f412 100644 --- a/manifests/preinstall.pp +++ b/manifests/preinstall.pp @@ -1,47 +1,47 @@ # = Class: redis::preinstall # # This class provides anything required by the install class. # Such as package repositories. # class redis::preinstall { - if $::redis::manage_repo { + if $redis::manage_repo { case $::operatingsystem { 'RedHat', 'CentOS', 'Scientific', 'OEL', 'Amazon': { require 'epel' } 'Debian': { contain 'apt' apt::source { 'dotdeb': location => 'http://packages.dotdeb.org/', release => $::lsbdistcodename, repos => 'all', key => { id => '6572BBEF1B5FF28B28B706837E3F070089DF5277', source => 'http://www.dotdeb.org/dotdeb.gpg', }, include => { 'src' => true }, before => [ Class['apt::update'], - Package[$::redis::package_name], + Package[$redis::package_name], ], } } 'Ubuntu': { contain 'apt' - apt::ppa { $::redis::ppa_repo: + apt::ppa { $redis::ppa_repo: before => [ Class['apt::update'], - Package[$::redis::package_name], + Package[$redis::package_name], ], } } default: { } } } } diff --git a/manifests/sentinel.pp b/manifests/sentinel.pp index b80235f..1ba1bee 100644 --- a/manifests/sentinel.pp +++ b/manifests/sentinel.pp @@ -1,267 +1,267 @@ # = Class: redis::sentinel # # This class installs redis-sentinel # # == Parameters: # # # [*auth_pass*] # The password to use to authenticate with the master and slaves. # # Default: undef # # [*config_file*] # The location and name of the sentinel config file. # # Default for deb: /etc/redis/redis-sentinel.conf # Default for rpm: /etc/redis-sentinel.conf # # [*config_file_orig*] # The location and name of a config file that provides the source # of the sentinel config file. Two different files are needed # because sentinel itself writes to its own config file and we do # not want override that when puppet is run unless there are # changes from the manifests. # # Default for deb: /etc/redis/redis-sentinel.conf.puppet # Default for rpm: /etc/redis-sentinel.conf.puppet # # [*config_file_mode*] # Permissions of config file. # # Default: 0644 # # [*conf_template*] # Define which template to use. # # Default: redis/redis-sentinel.conf.erb # # [*daemonize*] # Have Redis sentinel run as a daemon. # # Default: true # # [*down_after*] # 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. # # Default: 30000 # # [*failover_timeout*] # Specify the failover timeout in milliseconds. # # Default: 180000 # # [*init_script*] # Specifiy the init script that will be created for sentinel. # # Default: undef on rpm, /etc/init.d/redis-sentinel on apt. # # [*log_file*] # Specify where to write log entries. # # Default: /var/log/redis/redis.log # # [*log_level*] # Specify how much we should log. # # Default: notice # # [*master_name*] # Specify the name of the master redis server. # The valid charset is A-z 0-9 and the three characters ".-_". # # Default: mymaster # # [*redis_host*] # Specify the bound host of the master redis server. # # Default: 127.0.0.1 # # [*redis_port*] # Specify the port of the master redis server. # # Default: 6379 # # [*package_name*] # The name of the package that installs sentinel. # # Default: 'redis-server' on apt, 'redis' on rpm # # [*package_ensure*] # Do we ensure this package. # # Default: 'present' # # [*parallel_sync*] # How many slaves can be reconfigured at the same time to use a # new master after a failover. # # Default: 1 # # [*pid_file*] # If sentinel is daemonized it will write its pid at this location. # # Default: /var/run/redis/redis-sentinel.pid # # [*quorum*] # Number of sentinels that must agree that a master is down to # signal sdown state. # # Default: 2 # # [*sentinel_bind*] # Allow optional sentinel server ip binding. Can help overcome # issues arising from protect-mode added Redis 3.2 # # Default: undef # # [*sentinel_port*] # The port of sentinel server. # # Default: 26379 # # [*service_group*] # The group of the config file. # # Default: redis # # [*service_name*] # The name of the service (for puppet to manage). # # Default: redis-sentinel # # [*service_owner*] # The owner of the config file. # # Default: redis # # [*service_enable*] # Enable the service at boot time. # # Default: true # # [*working_dir*] # The directory into which sentinel will change to avoid mount # conflicts. # # Default: /tmp # # [*notification_script*] # Path to the notification script # # Default: undef # # [*client_reconfig_script*] # Path to the client-reconfig script # # Default: undef # == Actions: # - Install and configure Redis Sentinel # # == Sample Usage: # # class { 'redis::sentinel': } # # class {'redis::sentinel': # down_after => 80000, # log_file => '/var/log/redis/sentinel.log', # } # class redis::sentinel ( - $auth_pass = $::redis::params::sentinel_auth_pass, - $config_file = $::redis::params::sentinel_config_file, - $config_file_orig = $::redis::params::sentinel_config_file_orig, - Stdlib::Filemode $config_file_mode = $::redis::params::sentinel_config_file_mode, - $conf_template = $::redis::params::sentinel_conf_template, - $daemonize = $::redis::params::sentinel_daemonize, - $down_after = $::redis::params::sentinel_down_after, - $failover_timeout = $::redis::params::sentinel_failover_timeout, - $init_script = $::redis::params::sentinel_init_script, - $init_template = $::redis::params::sentinel_init_template, - $log_level = $::redis::params::log_level, - $log_file = $::redis::params::log_file, - $master_name = $::redis::params::sentinel_master_name, - Stdlib::Host $redis_host = $::redis::params::sentinel_redis_host, - Stdlib::Port $redis_port = $::redis::params::port, - $package_name = $::redis::params::sentinel_package_name, - $package_ensure = $::redis::params::sentinel_package_ensure, - $parallel_sync = $::redis::params::sentinel_parallel_sync, - $pid_file = $::redis::params::sentinel_pid_file, - $quorum = $::redis::params::sentinel_quorum, - $sentinel_bind = $::redis::params::sentinel_bind, - Stdlib::Port $sentinel_port = $::redis::params::sentinel_port, - $service_group = $::redis::params::service_group, - $service_name = $::redis::params::sentinel_service_name, - $service_ensure = $::redis::params::service_ensure, - Boolean $service_enable = $::redis::params::service_enable, - $service_user = $::redis::params::service_user, - $working_dir = $::redis::params::sentinel_working_dir, - $notification_script = $::redis::params::sentinel_notification_script, - $client_reconfig_script = $::redis::params::sentinel_client_reconfig_script, + $auth_pass = $redis::params::sentinel_auth_pass, + $config_file = $redis::params::sentinel_config_file, + $config_file_orig = $redis::params::sentinel_config_file_orig, + Stdlib::Filemode $config_file_mode = $redis::params::sentinel_config_file_mode, + $conf_template = $redis::params::sentinel_conf_template, + $daemonize = $redis::params::sentinel_daemonize, + $down_after = $redis::params::sentinel_down_after, + $failover_timeout = $redis::params::sentinel_failover_timeout, + $init_script = $redis::params::sentinel_init_script, + $init_template = $redis::params::sentinel_init_template, + $log_level = $redis::params::log_level, + $log_file = $redis::params::log_file, + $master_name = $redis::params::sentinel_master_name, + Stdlib::Host $redis_host = $redis::params::sentinel_redis_host, + Stdlib::Port $redis_port = $redis::params::port, + $package_name = $redis::params::sentinel_package_name, + $package_ensure = $redis::params::sentinel_package_ensure, + $parallel_sync = $redis::params::sentinel_parallel_sync, + $pid_file = $redis::params::sentinel_pid_file, + $quorum = $redis::params::sentinel_quorum, + $sentinel_bind = $redis::params::sentinel_bind, + Stdlib::Port $sentinel_port = $redis::params::sentinel_port, + $service_group = $redis::params::service_group, + $service_name = $redis::params::sentinel_service_name, + $service_ensure = $redis::params::service_ensure, + Boolean $service_enable = $redis::params::service_enable, + $service_user = $redis::params::service_user, + $working_dir = $redis::params::sentinel_working_dir, + $notification_script = $redis::params::sentinel_notification_script, + $client_reconfig_script = $redis::params::sentinel_client_reconfig_script, ) inherits redis::params { require 'redis' if $::osfamily == 'Debian' { # Debian flavour machines have a dedicated redis-sentinel package # This is default in Xenial or Stretch onwards or PPA/other upstream # See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=775414 for context if ( (versioncmp($::operatingsystemmajrelease, '16.04') >= 0 and $::operatingsystem == 'Ubuntu') or (versioncmp($::operatingsystemmajrelease, '9') >= 0 and $::operatingsystem == 'Debian') or - $::redis::manage_repo + $redis::manage_repo ) { package { $package_name: ensure => $package_ensure, before => File[$config_file_orig], } if $init_script { Package[$package_name] -> File[$init_script] } } } file { $config_file_orig: ensure => present, owner => $service_user, group => $service_group, mode => $config_file_mode, content => template($conf_template), } exec { "cp -p ${config_file_orig} ${config_file}": path => '/usr/bin:/bin', subscribe => File[$config_file_orig], notify => Service[$service_name], refreshonly => true, } if $init_script { file { $init_script: ensure => present, owner => 'root', group => 'root', mode => '0755', content => template($init_template), } exec { '/usr/sbin/update-rc.d redis-sentinel defaults': subscribe => File[$init_script], refreshonly => true, notify => Service[$service_name], } } service { $service_name: ensure => $service_ensure, enable => $service_enable, - hasrestart => $::redis::params::service_hasrestart, - hasstatus => $::redis::params::service_hasstatus, + hasrestart => $redis::params::service_hasrestart, + hasstatus => $redis::params::service_hasstatus, } } diff --git a/manifests/service.pp b/manifests/service.pp index 9d86f02..c968e33 100644 --- a/manifests/service.pp +++ b/manifests/service.pp @@ -1,16 +1,16 @@ # = Class: redis::service # # This class manages the Redis daemon. # class redis::service { - if $::redis::service_manage { - service { $::redis::service_name: - ensure => $::redis::service_ensure, - enable => $::redis::service_enable, - hasrestart => $::redis::service_hasrestart, - hasstatus => $::redis::service_hasstatus, - provider => $::redis::service_provider, + if $redis::service_manage { + service { $redis::service_name: + ensure => $redis::service_ensure, + enable => $redis::service_enable, + hasrestart => $redis::service_hasrestart, + hasstatus => $redis::service_hasstatus, + provider => $redis::service_provider, } } } diff --git a/manifests/ulimit.pp b/manifests/ulimit.pp index 3b3ab6c..0a5b081 100644 --- a/manifests/ulimit.pp +++ b/manifests/ulimit.pp @@ -1,76 +1,76 @@ # Redis class for configuring ulimit # Used to DRY up the config class, and # move the logic for ulimit changes all # into one place. # # Parameters are not required as it's a # private class only referencable from # the redis module, where the variables # would already be defined # # @example # contain redis::ulimit # # @author - Peter Souter # # @api private class redis::ulimit { assert_private('The redis::ulimit class is only to be called from the redis::config class') $service_provider_lookup = pick(getvar('service_provider'), false) - if $::redis::managed_by_cluster_manager { + if $redis::managed_by_cluster_manager { file { '/etc/security/limits.d/redis.conf': ensure => 'file', owner => 'root', group => 'root', mode => '0644', - content => "redis soft nofile ${::redis::ulimit}\nredis hard nofile ${::redis::ulimit}\n", + content => "redis soft nofile ${redis::ulimit}\nredis hard nofile ${redis::ulimit}\n", } } if $service_provider_lookup == 'systemd' { - file { "/etc/systemd/system/${::redis::service_name}.service.d/": + file { "/etc/systemd/system/${redis::service_name}.service.d/": ensure => 'directory', owner => 'root', group => 'root', selinux_ignore_defaults => true, } - file { "/etc/systemd/system/${::redis::service_name}.service.d/limit.conf": + file { "/etc/systemd/system/${redis::service_name}.service.d/limit.conf": ensure => file, owner => 'root', group => 'root', mode => '0444', } augeas { 'Systemd redis ulimit' : - incl => "/etc/systemd/system/${::redis::service_name}.service.d/limit.conf", + incl => "/etc/systemd/system/${redis::service_name}.service.d/limit.conf", lens => 'Systemd.lns', changes => [ "defnode nofile Service/LimitNOFILE \"\"", - "set \$nofile/value \"${::redis::ulimit}\"", + "set \$nofile/value \"${redis::ulimit}\"", ], notify => [ Exec['systemd-reload-redis'], ], } } else { augeas { 'redis ulimit': - changes => "set ULIMIT ${::redis::ulimit}", + changes => "set ULIMIT ${redis::ulimit}", } case $::osfamily { 'Debian': { Augeas['redis ulimit'] { context => '/files/etc/default/redis-server', } } 'RedHat': { Augeas['redis ulimit'] { context => '/files/etc/sysconfig/redis', } } default: { - warning("Not sure how to set ULIMIT on non-systemd OSFamily ${::osfamily}, PR's welcome") + warning("Not sure how to set ULIMIT on non-systemd OSFamily ${facts['osfamily']}, PR's welcome") } } } }