use bind_service instead of endpoints and cluster properly

* rabbitmq should use the bind_service attribute instead of the endpoint one,
  since these could be different
* adapted rabbitmq clustering attributes
* adapted rabbitmq clustering search to point to recipe instead of role

Depends-On: Iae7e302973805af3cb44be1b29d0e61e76eb0aa0
Implements: blueprint cookbook-refactoring
Change-Id: I08ed288e63422078d9beb36d14fd3c05f1cac435
This commit is contained in:
Jan Klare 2016-02-11 07:42:46 +01:00
parent 1e0a81aecd
commit 503703fb2b
3 changed files with 21 additions and 27 deletions

View File

@ -27,34 +27,31 @@ end
user = node['openstack']['mq']['user']
pass = get_password 'user', user
vhost = node['openstack']['mq']['vhost']
rabbit_endpoint = node['openstack']['endpoints']['mq']
bind_interface = rabbit_endpoint.bind_interface
if bind_interface
listen_address = address_for bind_interface
else
listen_address = rabbit_endpoint.host
end
bind_mq = node['openstack']['bind_service']['mq']
bind_mq_address = bind_address bind_mq
# Used by OpenStack#rabbit_servers/#rabbit_server
node.set['openstack']['mq']['listen'] = listen_address
node.set['openstack']['mq']['listen'] = bind_mq_address
if node['openstack']['mq']['rabbitmq']['use_ssl']
if node['rabbitmq']['ssl_port'] != rabbit_endpoint.port
node.override['rabbitmq']['ssl_port'] = rabbit_endpoint.port
if node['rabbitmq']['ssl_port'] != bind_mq.port
node.normal['rabbitmq']['ssl_port'] = bind_mq.port
else
Chef::Log.error 'Unable to listen on the port #{rabbit_endpoint.port} for RabbitMQ TCP, which is listened on by SSL!'
Chef::Log.error "Unable to listen on the port #{bind_mq.port} for RabbitMQ TCP, which is listened on by SSL!"
end
else
node.override['rabbitmq']['port'] = rabbit_endpoint.port
node.normal['rabbitmq']['port'] = bind_mq.port
end
node.override['rabbitmq']['address'] = listen_address
node.normal['rabbitmq']['address'] = bind_mq_address
node.normal['rabbitmq']['nodename'] = "#{user}@#{node['hostname']}"
# Clustering
if node['openstack']['mq']['cluster']
node.override['rabbitmq']['cluster'] = node['openstack']['mq']['cluster']
node.override['rabbitmq']['erlang_cookie'] = get_password 'service', 'rabbit_cookie'
node.normal['rabbitmq']['clustering']['enable'] = node['openstack']['mq']['cluster']
node.normal['rabbitmq']['erlang_cookie'] = get_password 'service', 'rabbit_cookie'
if node['openstack']['mq']['search_for_cluster_disk_nodes']
qs = "roles:#{node['openstack']['mq']['server_role']} AND chef_environment:#{node.chef_environment}"
node.override['rabbitmq']['cluster_disk_nodes'] = search(:node, qs).map do |n|
qs = "recipes:openstack-ops-messaging\\:\\:rabbitmq-server AND chef_environment:#{node.chef_environment}"
node.normal['rabbitmq']['clustering']['use_auto_clustering'] = true
node.normal['rabbitmq']['clustering']['cluster_nodes'] = search(:node, qs).map do |n|
"#{user}@#{n['hostname']}"
end.sort
end

View File

@ -19,15 +19,12 @@ describe 'openstack-ops-messaging::rabbitmq-server' do
end
it 'overrides rabbit and openstack image attributes' do
node.set['openstack']['endpoints']['mq']['bind_interface'] = 'eth0'
node.set['openstack']['bind_service']['mq']['interface'] = 'eth0'
node.set['openstack']['bind_service']['mq']['port'] = '4242'
node.set['openstack']['endpoints']['mq']['port'] = '4242'
node.set['openstack']['mq']['user'] = 'foo'
node.set['openstack']['mq']['vhost'] = '/bar'
expect(chef_run.node['openstack']['mq']['listen']).to eq('33.44.55.66')
expect(chef_run.node['openstack']['endpoints']['mq']['port']).to eq('4242')
expect(chef_run.node['openstack']['mq']['user']).to eq('foo')
expect(chef_run.node['openstack']['mq']['vhost']).to eq('/bar')
expect(chef_run.node['openstack']['mq']['image']['rabbit']['port']).to eq('4242')
expect(chef_run.node['openstack']['mq']['image']['rabbit']['userid']).to eq('foo')
expect(chef_run.node['openstack']['mq']['image']['rabbit']['vhost']).to eq('/bar')
@ -36,7 +33,7 @@ describe 'openstack-ops-messaging::rabbitmq-server' do
describe 'rabbit ssl' do
before do
node.set['openstack']['mq']['rabbitmq']['use_ssl'] = true
node.set['openstack']['endpoints']['mq']['port'] = '1234'
node.set['openstack']['bind_service']['mq']['port'] = '1234'
end
it 'overrides rabbit ssl attributes' do
@ -54,7 +51,7 @@ describe 'openstack-ops-messaging::rabbitmq-server' do
end
it 'overrides cluster' do
expect(chef_run.node['rabbitmq']['cluster']).to be_truthy
expect(chef_run.node['rabbitmq']['clustering']['enable']).to be_truthy
end
it 'overrides erlang_cookie' do
@ -64,14 +61,14 @@ describe 'openstack-ops-messaging::rabbitmq-server' do
end
it 'overrides and sorts cluster_disk_nodes' do
expect(chef_run.node['rabbitmq']['cluster_disk_nodes']).to eq(
expect(chef_run.node['rabbitmq']['clustering']['cluster_nodes']).to eq(
['guest@host1', 'guest@host2']
)
end
it 'does not search for cluster_disk_nodes' do
node.set['openstack']['mq']['search_for_cluster_disk_nodes'] = false
expect(chef_run.node['rabbitmq']['cluster_disk_nodes']).to eq([])
expect(chef_run.node['rabbitmq']['clustering']['cluster_nodes']).to eq([])
end
end

View File

@ -30,7 +30,7 @@ shared_context 'ops_messaging_stubs' do
.with('eth0')
.and_return '33.44.55.66'
allow_any_instance_of(Chef::Recipe).to receive(:search)
.with(:node, 'roles:os-ops-messaging AND chef_environment:_default')
.with(:node, 'recipes:openstack-ops-messaging\\:\\:rabbitmq-server AND chef_environment:_default')
.and_return [
{ 'hostname' => 'host2' },
{ 'hostname' => 'host1' }