187 lines
6.1 KiB
Ruby
187 lines
6.1 KiB
Ruby
#
|
|
# Cookbook Name:: rabbitmq
|
|
# Recipe:: default
|
|
#
|
|
# Copyright 2009, Benjamin Black
|
|
# Copyright 2009-2013, Opscode, Inc.
|
|
# Copyright 2012, Kevin Nuckolls <kevin.nuckolls@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.
|
|
#
|
|
|
|
include_recipe 'erlang'
|
|
|
|
## Install the package
|
|
case node['platform_family']
|
|
when 'debian'
|
|
# installs the required setsid command -- should be there by default but just in case
|
|
package 'util-linux'
|
|
|
|
if node['rabbitmq']['use_distro_version']
|
|
package 'rabbitmq-server'
|
|
else
|
|
remote_file "#{Chef::Config[:file_cache_path]}/rabbitmq-server_#{node['rabbitmq']['version']}-1_all.deb" do
|
|
source node['rabbitmq']['package']
|
|
action :create_if_missing
|
|
end
|
|
dpkg_package "#{Chef::Config[:file_cache_path]}/rabbitmq-server_#{node['rabbitmq']['version']}-1_all.deb"
|
|
end
|
|
|
|
# Configure job control
|
|
if node['rabbitmq']['job_control'] == 'upstart'
|
|
# We start with stock init.d, remove it if we're not using init.d, otherwise leave it alone
|
|
service node['rabbitmq']['service_name'] do
|
|
action [:stop]
|
|
only_if { File.exists?('/etc/init.d/rabbitmq-server') }
|
|
end
|
|
|
|
execute 'remove rabbitmq init.d command' do
|
|
command 'update-rc.d -f rabbitmq-server remove'
|
|
end
|
|
|
|
file '/etc/init.d/rabbitmq-server' do
|
|
action :delete
|
|
end
|
|
|
|
template "/etc/init/#{node['rabbitmq']['service_name']}.conf" do
|
|
source 'rabbitmq.upstart.conf.erb'
|
|
owner 'root'
|
|
group 'root'
|
|
mode 0644
|
|
variables(:max_file_descriptors => node['rabbitmq']['max_file_descriptors'])
|
|
end
|
|
|
|
service node['rabbitmq']['service_name'] do
|
|
provider Chef::Provider::Service::Upstart
|
|
action [ :enable, :start ]
|
|
#restart_command "stop #{node['rabbitmq']['service_name']} && start #{node['rabbitmq']['service_name']}"
|
|
end
|
|
end
|
|
|
|
## You'll see setsid used in all the init statements in this cookbook. This
|
|
## is because there is a problem with the stock init script in the RabbitMQ
|
|
## debian package (at least in 2.8.2) that makes it not daemonize properly
|
|
## when called from chef. The setsid command forces the subprocess into a state
|
|
## where it can daemonize properly. -Kevin (thanks to Daniel DeLeo for the help)
|
|
if node['rabbitmq']['job_control'] == 'initd'
|
|
service node['rabbitmq']['service_name'] do
|
|
start_command 'setsid /etc/init.d/rabbitmq-server start'
|
|
stop_command 'setsid /etc/init.d/rabbitmq-server stop'
|
|
restart_command 'setsid /etc/init.d/rabbitmq-server restart'
|
|
status_command 'setsid /etc/init.d/rabbitmq-server status'
|
|
supports :status => true, :restart => true
|
|
action [ :enable, :start ]
|
|
end
|
|
end
|
|
|
|
when 'rhel', 'fedora'
|
|
#This is needed since Erlang Solutions' packages provide "esl-erlang"; this package just requires "esl-erlang" and provides "erlang".
|
|
if node['erlang']['install_method'] == 'esl'
|
|
remote_file "#{Chef::Config[:file_cache_path]}/esl-erlang-compat.rpm" do
|
|
source "https://github.com/jasonmcintosh/esl-erlang-compat/blob/master/rpmbuild/RPMS/noarch/esl-erlang-compat-R14B-1.el6.noarch.rpm?raw=true"
|
|
end
|
|
rpm_package "#{Chef::Config[:file_cache_path]}/esl-erlang-compat.rpm"
|
|
end
|
|
|
|
if node['rabbitmq']['use_distro_version'] then
|
|
package 'rabbitmq-server'
|
|
else
|
|
remote_file "#{Chef::Config[:file_cache_path]}/rabbitmq-server-#{node['rabbitmq']['version']}-1.noarch.rpm" do
|
|
source node['rabbitmq']['package']
|
|
action :create_if_missing
|
|
end
|
|
rpm_package "#{Chef::Config[:file_cache_path]}/rabbitmq-server-#{node['rabbitmq']['version']}-1.el6.noarch.rpm"
|
|
end
|
|
|
|
service node['rabbitmq']['service_name'] do
|
|
action [:enable, :start]
|
|
end
|
|
|
|
when 'suse'
|
|
# rabbitmq-server-plugins needs to be first so they both get installed
|
|
# from the right repository. Otherwise, zypper will stop and ask for a
|
|
# vendor change.
|
|
package 'rabbitmq-server-plugins'
|
|
package 'rabbitmq-server'
|
|
when 'smartos'
|
|
package 'rabbitmq'
|
|
|
|
service 'epmd' do
|
|
action :start
|
|
end
|
|
|
|
service node['rabbitmq']['service_name'] do
|
|
action [:enable, :start]
|
|
end
|
|
end
|
|
|
|
if node['rabbitmq']['logdir']
|
|
directory node['rabbitmq']['logdir'] do
|
|
owner 'rabbitmq'
|
|
group 'rabbitmq'
|
|
mode '775'
|
|
recursive true
|
|
end
|
|
end
|
|
|
|
directory node['rabbitmq']['mnesiadir'] do
|
|
owner 'rabbitmq'
|
|
group 'rabbitmq'
|
|
mode '775'
|
|
recursive true
|
|
end
|
|
|
|
template "#{node['rabbitmq']['config_root']}/rabbitmq-env.conf" do
|
|
source 'rabbitmq-env.conf.erb'
|
|
owner 'root'
|
|
group 'root'
|
|
mode 00644
|
|
notifies :restart, "service[#{node['rabbitmq']['service_name']}]"
|
|
end
|
|
|
|
template "#{node['rabbitmq']['config_root']}/rabbitmq.config" do
|
|
source 'rabbitmq.config.erb'
|
|
owner 'root'
|
|
group 'root'
|
|
mode 00644
|
|
notifies :restart, "service[#{node['rabbitmq']['service_name']}]"
|
|
end
|
|
|
|
if File.exists?(node['rabbitmq']['erlang_cookie_path'])
|
|
existing_erlang_key = File.read(node['rabbitmq']['erlang_cookie_path'])
|
|
else
|
|
existing_erlang_key = ''
|
|
end
|
|
|
|
if node['rabbitmq']['cluster'] && (node['rabbitmq']['erlang_cookie'] != existing_erlang_key)
|
|
log "stopping service[#{node['rabbitmq']['service_name']}] to change erlang_cookie" do
|
|
level :info
|
|
notifies :stop, "service[#{node['rabbitmq']['service_name']}]", :immediately
|
|
end
|
|
|
|
template node['rabbitmq']['erlang_cookie_path'] do
|
|
source 'doterlang.cookie.erb'
|
|
owner 'rabbitmq'
|
|
group 'rabbitmq'
|
|
mode 00400
|
|
notifies :start, "service[#{node['rabbitmq']['service_name']}]", :immediately
|
|
notifies :run, "execute[reset-node]", :immediately
|
|
end
|
|
|
|
# Need to reset for clustering #
|
|
execute "reset-node" do
|
|
command "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app"
|
|
action :nothing
|
|
end
|
|
end
|