Add new Redis cookbook

This commit is contained in:
2021-11-16 13:25:30 -06:00
parent 80ec84782b
commit 18f65c4fc5
66 changed files with 5780 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
packages_to_install = case node['platform']
when 'debian', 'ubuntu'
%w(
tar
)
when 'redhat', 'centos', 'fedora', 'scientific', 'suse', 'amazon'
%w(
tar
)
else
%w()
end
packages_to_install.each do |pkg|
package pkg do
action :install
end
end

View File

@@ -0,0 +1,56 @@
include_recipe 'redisio::default'
include_recipe 'redisio::ulimit'
redis = node['redisio']
redis_instances = redis['servers']
if redis_instances.nil?
redis_instances = [
{
'port' => '6379',
},
]
end
redisio_configure 'redis-servers' do
version redis['version'] if redis['version']
default_settings redis['default_settings']
servers redis_instances
base_piddir redis['base_piddir']
end
# Create a service resource for each redis instance, named for the port it runs on.
redis_instances.each do |current_server|
server_name = current_server['name'] || current_server['port']
case node['redisio']['job_control']
when 'initd'
service "redis#{server_name}" do
# don't supply start/stop/restart commands, Chef::Provider::Service::*
# do a fine job on it's own, and support systemd correctly
supports start: true, stop: true, restart: false, status: true
end
when 'upstart'
service "redis#{server_name}" do
provider Chef::Provider::Service::Upstart
start_command "start redis#{server_name}"
stop_command "stop redis#{server_name}"
restart_command "restart redis#{server_name}"
supports start: true, stop: true, restart: true, status: false
end
when 'systemd'
service "redis@#{server_name}" do
provider Chef::Provider::Service::Systemd
supports start: true, stop: true, restart: true, status: true
end
when 'rcinit'
service "redis#{server_name}" do
provider Chef::Provider::Service::Freebsd
supports start: true, stop: true, restart: true, status: true
end
else
Chef::Log.error('Unknown job control type, no service resource created!')
end
end
node.override['redisio']['servers'] = redis_instances

View File

@@ -0,0 +1,12 @@
apt_update
unless node['redisio']['package_install']
include_recipe 'redisio::_install_prereqs'
build_essential 'install build deps'
end
unless node['redisio']['bypass_setup']
include_recipe 'redisio::install'
include_recipe 'redisio::disable_os_default'
include_recipe 'redisio::configure'
end

View File

@@ -0,0 +1,14 @@
redis = node['redisio']
redis['servers'].each do |current_server|
server_name = current_server['name'] || current_server['port']
resource_name = if node['redisio']['job_control'] == 'systemd'
"service[redis@#{server_name}]"
else
"service[redis#{server_name}]"
end
resource = resources(resource_name)
resource.action Array(resource.action)
resource.action << :stop
resource.action << :disable
end

View File

@@ -0,0 +1,12 @@
# disable the default OS redis init script
service_name = case node['platform']
when 'debian', 'ubuntu'
'redis-server'
when 'redhat', 'centos', 'fedora', 'scientific', 'suse', 'amazon'
'redis'
end
service service_name do
action [:stop, :disable]
only_if { service_name }
end

View File

@@ -0,0 +1,13 @@
redis = node['redisio']
redis['servers'].each do |current_server|
server_name = current_server['name'] || current_server['port']
resource_name = if node['redisio']['job_control'] == 'systemd'
"service[redis@#{server_name}]"
else
"service[redis#{server_name}]"
end
resource = resources(resource_name)
resource.action Array(resource.action)
resource.action.concat [:start, :enable]
end

View File

@@ -0,0 +1,22 @@
if node['redisio']['package_install']
package 'redisio_package_name' do
package_name node['redisio']['package_name']
version node['redisio']['version'] if node['redisio']['version']
action :install
end
else
include_recipe 'redisio::_install_prereqs'
build_essential 'install build deps'
redis = node['redisio']
location = "#{redis['mirror']}/#{redis['base_name']}#{redis['version']}.#{redis['artifact_type']}"
redisio_install 'redis-installation' do
version redis['version'] if redis['version']
download_url location
safe_install redis['safe_install']
install_dir redis['install_dir'] if redis['install_dir']
end
end
include_recipe 'redisio::ulimit'

View File

@@ -0,0 +1,4 @@
gem_package node['redisio']['gem']['name'] do
version node['redisio']['gem']['version'] unless node['redisio']['gem']['version'].nil?
action :install
end

View File

@@ -0,0 +1,78 @@
include_recipe 'redisio::_install_prereqs'
include_recipe 'redisio::install'
include_recipe 'redisio::ulimit'
redis = node['redisio']
sentinel_instances = redis['sentinels']
if sentinel_instances.nil?
sentinel_instances = [
{
'sentinel_port' => '26379',
'name' => 'mycluster',
'masters' => [
{
'master_name' => 'mycluster_master',
'master_ip' => '127.0.0.1',
'master_port' => '6379',
},
],
},
]
end
redisio_sentinel 'redis-sentinels' do
version redis['version'] if redis['version']
sentinel_defaults redis['sentinel_defaults']
sentinels sentinel_instances
base_piddir redis['base_piddir']
end
bin_path = if node['redisio']['install_dir']
::File.join(node['redisio']['install_dir'], 'bin')
else
node['redisio']['bin_path']
end
template '/lib/systemd/system/redis-sentinel@.service' do
source 'redis-sentinel@.service'
variables(
bin_path: bin_path,
limit_nofile: redis['default_settings']['maxclients'] + 32
)
only_if { node['redisio']['job_control'] == 'systemd' }
end
# Create a service resource for each sentinel instance, named for the port it runs on.
sentinel_instances.each do |current_sentinel|
sentinel_name = current_sentinel['name']
case node['redisio']['job_control']
when 'initd'
service "redis_sentinel_#{sentinel_name}" do
# don't supply start/stop/restart commands, Chef::Provider::Service::*
# do a fine job on it's own, and support systemd correctly
supports start: true, stop: true, restart: true, status: false
end
when 'upstart'
service "redis_sentinel_#{sentinel_name}" do
provider Chef::Provider::Service::Upstart
start_command "start redis_sentinel_#{sentinel_name}"
stop_command "stop redis_sentinel_#{sentinel_name}"
restart_command "restart redis_sentinel_#{sentinel_name}"
supports start: true, stop: true, restart: true, status: false
end
when 'systemd'
service "redis-sentinel@#{sentinel_name}" do
provider Chef::Provider::Service::Systemd
supports start: true, stop: true, restart: true, status: true
end
when 'rcinit'
service "redis_sentinel_#{sentinel_name}" do
provider Chef::Provider::Service::Freebsd
supports start: true, stop: true, restart: true, status: true
end
else
Chef::Log.error('Unknown job control type, no service resource created!')
end
end

View File

@@ -0,0 +1,38 @@
sentinel_instances = node['redisio']['sentinels']
if sentinel_instances.nil?
sentinel_instances = [
{
'sentinel_port' => '26379',
'name' => 'mycluster',
'master_ip' => '127.0.0.1',
'master_port' => '6379',
},
]
end
execute 'reload-systemd-sentinel' do
command 'systemctl daemon-reload'
only_if { node['redisio']['job_control'] == 'systemd' }
action :nothing
end
sentinel_instances.each do |current_sentinel|
sentinel_name = current_sentinel['name']
resource_name = if node['redisio']['job_control'] == 'systemd'
"service[redis-sentinel@#{sentinel_name}]"
else
"service[redis_sentinel_#{sentinel_name}]"
end
resource = resources(resource_name)
resource.action Array(resource.action)
resource.action << :start
if node['redisio']['job_control'] != 'systemd'
resource.action << :enable
else
link "/etc/systemd/system/multi-user.target.wants/redis-sentinel@#{sentinel_name}.service" do
to '/usr/lib/systemd/system/redis-sentinel@.service'
notifies :run, 'execute[reload-systemd-sentinel]', :immediately
end
end
end

View File

@@ -0,0 +1,25 @@
# Pulled from the now replaced ulimit cookbook
# TODO: find a more tidy way to do this
ulimit = node['ulimit']
if platform_family?('debian')
template '/etc/pam.d/su' do
cookbook ulimit['pam_su_template_cookbook']
end
cookbook_file '/etc/pam.d/sudo' do
cookbook node['ulimit']['ulimit_overriding_sudo_file_cookbook']
source node['ulimit']['ulimit_overriding_sudo_file_name']
mode '0644'
end
end
if ulimit.key?('users')
ulimit['users'].each do |user, attributes|
user_ulimit user do
attributes.each do |a, v|
send(a.to_sym, v)
end
end
end
end