Add new Redis cookbook
This commit is contained in:
18
cookbooks/redisio/recipes/_install_prereqs.rb
Normal file
18
cookbooks/redisio/recipes/_install_prereqs.rb
Normal 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
|
||||
56
cookbooks/redisio/recipes/configure.rb
Normal file
56
cookbooks/redisio/recipes/configure.rb
Normal 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
|
||||
12
cookbooks/redisio/recipes/default.rb
Normal file
12
cookbooks/redisio/recipes/default.rb
Normal 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
|
||||
14
cookbooks/redisio/recipes/disable.rb
Normal file
14
cookbooks/redisio/recipes/disable.rb
Normal 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
|
||||
12
cookbooks/redisio/recipes/disable_os_default.rb
Normal file
12
cookbooks/redisio/recipes/disable_os_default.rb
Normal 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
|
||||
13
cookbooks/redisio/recipes/enable.rb
Normal file
13
cookbooks/redisio/recipes/enable.rb
Normal 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
|
||||
22
cookbooks/redisio/recipes/install.rb
Normal file
22
cookbooks/redisio/recipes/install.rb
Normal 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'
|
||||
4
cookbooks/redisio/recipes/redis_gem.rb
Normal file
4
cookbooks/redisio/recipes/redis_gem.rb
Normal 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
|
||||
78
cookbooks/redisio/recipes/sentinel.rb
Normal file
78
cookbooks/redisio/recipes/sentinel.rb
Normal 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
|
||||
38
cookbooks/redisio/recipes/sentinel_enable.rb
Normal file
38
cookbooks/redisio/recipes/sentinel_enable.rb
Normal 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
|
||||
25
cookbooks/redisio/recipes/ulimit.rb
Normal file
25
cookbooks/redisio/recipes/ulimit.rb
Normal 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
|
||||
Reference in New Issue
Block a user