Moved clustering setup to an attribute
Clustering is set to false by default. When enabled, will setup rabbitmq disk node clustering. Also, added opscode to attribution, somehow had removed them in the previous rebase. Change-Id: Idd249d0d950f5f4eb44cd7c10566ece254ed7f45
This commit is contained in:
parent
1c0e58dc33
commit
c4bcd7ee7b
|
@ -44,6 +44,7 @@ None
|
|||
* `openstack["mq"]["server_role"]` - which role should other nodes search on to find the messaging service, defaults to 'os-ops-messaging'
|
||||
* `openstack["mq"]["service_type"]` - which service to use, defaults to 'rabbitmq'
|
||||
* `openstack["mq"]["bind_interface"]` - bind to interfaces IPv4 address
|
||||
* `openstack["mq"]["cluster"]` - whether or not to cluster rabbit, defaults to 'false'
|
||||
* `openstack["mq"]["port"]` - which service port to use
|
||||
|
||||
Testing
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#
|
||||
|
||||
default["openstack"]["mq"]["bind_interface"] = "lo"
|
||||
default["openstack"]["mq"]["cluster"] = false
|
||||
# TODO(retr0h): Delete when these attributes are merged into openstack-common
|
||||
default["openstack"]["mq"]["server_role"] = "os-ops-messaging"
|
||||
default["openstack"]["mq"]["service_type"] = "rabbitmq"
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Cookbook Name:: openstack-ops-messaging
|
||||
# Recipe:: rabbitmq-server
|
||||
#
|
||||
# Copyright 2013, Opscode, Inc.
|
||||
# Copyright 2013, AT&T Services, Inc.
|
||||
# Copyright 2013, Craig Tracey <craigtracey@gmail.com>
|
||||
#
|
||||
|
@ -25,7 +26,6 @@ end
|
|||
rabbit_server_role = node["openstack"]["mq"]["server_role"]
|
||||
user = node["openstack"]["mq"]["user"]
|
||||
pass = user_password user
|
||||
cookie = service_password "rabbit_cookie"
|
||||
vhost = node["openstack"]["mq"]["vhost"]
|
||||
bind_interface = node["openstack"]["mq"]["bind_interface"]
|
||||
listen_address = address_for node["openstack"]["mq"]["bind_interface"]
|
||||
|
@ -37,12 +37,16 @@ node.override["rabbitmq"]["port"] = node["openstack"]["mq"]["port"]
|
|||
node.override["rabbitmq"]["address"] = listen_address
|
||||
node.override["rabbitmq"]["default_user"] = user
|
||||
node.override["rabbitmq"]["default_pass"] = pass
|
||||
node.override["rabbitmq"]["erlang_cookie"] = cookie
|
||||
node.override["rabbitmq"]["use_distro_version"] = true
|
||||
node.override["rabbitmq"]["cluster"] = true
|
||||
qs = "roles:#{rabbit_server_role} AND environment:#{node.chef_environment}"
|
||||
node.override["rabbitmq"]["cluster_disk_nodes"] = search(:node, qs).map do |n|
|
||||
"#{user}@#{n['hostname']}"
|
||||
|
||||
# Clustering
|
||||
if node["openstack"]["mq"]["cluster"]
|
||||
node.override["rabbitmq"]["cluster"] = node["openstack"]["mq"]["cluster"]
|
||||
node.override["rabbitmq"]["erlang_cookie"] = service_password "rabbit_cookie"
|
||||
qs = "roles:#{rabbit_server_role} AND environment:#{node.chef_environment}"
|
||||
node.override["rabbitmq"]["cluster_disk_nodes"] = search(:node, qs).map do |n|
|
||||
"#{user}@#{n['hostname']}"
|
||||
end
|
||||
end
|
||||
|
||||
include_recipe "rabbitmq"
|
||||
|
@ -85,7 +89,8 @@ end
|
|||
|
||||
# Remove the mnesia database. This is necessary so the nodes
|
||||
# in the cluster will be able to recognize one another.
|
||||
# TODO(retr0h): This should be handled upstream.
|
||||
# TODO(retr0h): This should be handled upstream, and in a
|
||||
# non-distro specific way (e.g.) `rabbitmqctl reset`.
|
||||
execute "Reset mnesia" do
|
||||
cwd "/var/lib/rabbitmq"
|
||||
command <<-EOH.gsub(/^\s+/, "")
|
||||
|
@ -96,4 +101,5 @@ execute "Reset mnesia" do
|
|||
EOH
|
||||
|
||||
not_if { ::File.exists? "/var/lib/rabbitmq/.reset_mnesia_database" }
|
||||
only_if { node["openstack"]["mq"]["cluster"] }
|
||||
end
|
||||
|
|
|
@ -19,13 +19,34 @@ describe "openstack-ops-messaging::rabbitmq-server" do
|
|||
expect(@chef_run.node["rabbitmq"]["address"]).to eql "127.0.0.1"
|
||||
expect(@chef_run.node["rabbitmq"]["default_user"]).to eql "rabbit-user"
|
||||
expect(@chef_run.node['rabbitmq']['default_pass']).to eql "rabbit-pass"
|
||||
expect(@chef_run.node['rabbitmq']['erlang_cookie']).to eql(
|
||||
"erlang-cookie"
|
||||
)
|
||||
expect(@chef_run.node['rabbitmq']['cluster']).to be_true
|
||||
expect(@chef_run.node['rabbitmq']['cluster_disk_nodes']).to eql(
|
||||
["rabbit-user@host1", "rabbit-user@host2"]
|
||||
)
|
||||
end
|
||||
|
||||
describe "cluster" do
|
||||
before do
|
||||
@chef_run = ::ChefSpec::ChefRunner.new(::UBUNTU_OPTS) do |n|
|
||||
n.set["openstack"]["mq"] = {
|
||||
"user" => "rabbit-user",
|
||||
"cluster" => true
|
||||
}
|
||||
end
|
||||
@chef_run.converge "openstack-ops-messaging::rabbitmq-server"
|
||||
end
|
||||
|
||||
it "overrides cluster" do
|
||||
expect(@chef_run.node['rabbitmq']['cluster']).to be_true
|
||||
end
|
||||
|
||||
it "overrides erlang_cookie" do
|
||||
expect(@chef_run.node['rabbitmq']['erlang_cookie']).to eql(
|
||||
"erlang-cookie"
|
||||
)
|
||||
end
|
||||
|
||||
it "overrides cluster_disk_nodes" do
|
||||
expect(@chef_run.node['rabbitmq']['cluster_disk_nodes']).to eql(
|
||||
["rabbit-user@host1", "rabbit-user@host2"]
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
it "includes rabbit recipes" do
|
||||
|
@ -119,41 +140,60 @@ describe "openstack-ops-messaging::rabbitmq-server" do
|
|||
|
||||
describe "mnesia" do
|
||||
before do
|
||||
::File.stub(:exists?).and_call_original
|
||||
opts = ::UBUNTU_OPTS.merge(:evaluate_guards => true)
|
||||
@chef_run = ::ChefSpec::ChefRunner.new opts do |n|
|
||||
n.set["openstack"]["mq"] = {
|
||||
"user" => "rabbit-user",
|
||||
"vhost" => "/test-vhost"
|
||||
}
|
||||
end
|
||||
@cmd = <<-EOH.gsub(/^\s+/, "")
|
||||
service rabbitmq-server stop;
|
||||
rm -rf mnesia/;
|
||||
touch .reset_mnesia_database;
|
||||
service rabbitmq-server start
|
||||
EOH
|
||||
@file = "/var/lib/rabbitmq/.reset_mnesia_database"
|
||||
end
|
||||
|
||||
it "resets database" do
|
||||
::File.should_receive(:exists?).
|
||||
with(@file).
|
||||
and_return(false)
|
||||
@chef_run.converge "openstack-ops-messaging::rabbitmq-server"
|
||||
it "doesn't reset the database" do
|
||||
opts = ::UBUNTU_OPTS.merge(:evaluate_guards => true)
|
||||
chef_run = ::ChefSpec::ChefRunner.new opts do |n|
|
||||
n.set["openstack"]["mq"] = {
|
||||
"user" => "rabbit-user",
|
||||
"vhost" => "/test-vhost"
|
||||
}
|
||||
end
|
||||
chef_run.converge "openstack-ops-messaging::rabbitmq-server"
|
||||
|
||||
expect(@chef_run).to execute_command(@cmd).with(
|
||||
:cwd => "/var/lib/rabbitmq"
|
||||
)
|
||||
expect(chef_run).not_to execute_command(@cmd)
|
||||
end
|
||||
|
||||
it "doesn't reset database when already did" do
|
||||
::File.should_receive(:exists?).
|
||||
with(@file).
|
||||
and_return(true)
|
||||
@chef_run.converge "openstack-ops-messaging::rabbitmq-server"
|
||||
describe "cluster" do
|
||||
before do
|
||||
::File.stub(:exists?).and_call_original
|
||||
opts = ::UBUNTU_OPTS.merge(:evaluate_guards => true)
|
||||
@chef_run = ::ChefSpec::ChefRunner.new opts do |n|
|
||||
n.set["openstack"]["mq"] = {
|
||||
"user" => "rabbit-user",
|
||||
"vhost" => "/test-vhost",
|
||||
"cluster" => true
|
||||
}
|
||||
end
|
||||
@file = "/var/lib/rabbitmq/.reset_mnesia_database"
|
||||
end
|
||||
|
||||
expect(@chef_run).not_to execute_command(@cmd)
|
||||
it "resets database" do
|
||||
::File.should_receive(:exists?).
|
||||
with(@file).
|
||||
and_return(false)
|
||||
@chef_run.converge "openstack-ops-messaging::rabbitmq-server"
|
||||
|
||||
expect(@chef_run).to execute_command(@cmd).with(
|
||||
:cwd => "/var/lib/rabbitmq"
|
||||
)
|
||||
end
|
||||
|
||||
it "doesn't reset database when already did" do
|
||||
::File.should_receive(:exists?).
|
||||
with(@file).
|
||||
and_return(true)
|
||||
@chef_run.converge "openstack-ops-messaging::rabbitmq-server"
|
||||
|
||||
expect(@chef_run).not_to execute_command(@cmd)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue