From 503703fb2b79362cd95566b889476f6479ba04c8 Mon Sep 17 00:00:00 2001 From: Jan Klare Date: Thu, 11 Feb 2016 07:42:46 +0100 Subject: [PATCH] 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 --- recipes/rabbitmq-server.rb | 31 ++++++++++++++----------------- spec/rabbitmq-server_spec.rb | 15 ++++++--------- spec/spec_helper.rb | 2 +- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/recipes/rabbitmq-server.rb b/recipes/rabbitmq-server.rb index 6a187b9..d2c36b5 100644 --- a/recipes/rabbitmq-server.rb +++ b/recipes/rabbitmq-server.rb @@ -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 diff --git a/spec/rabbitmq-server_spec.rb b/spec/rabbitmq-server_spec.rb index 58194a8..09e4214 100644 --- a/spec/rabbitmq-server_spec.rb +++ b/spec/rabbitmq-server_spec.rb @@ -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 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 784c8ce..1004afa 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -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' }