From 6401b89019652e3d8300df0e961a1c72de3e7abf Mon Sep 17 00:00:00 2001 From: Christoph Albers Date: Tue, 13 Dec 2016 15:14:51 +0100 Subject: [PATCH] RPC_backend / transport_url workover - added rabbit_transport_url method to endpoints library usage i.e for block-storage will be node.default['openstack']['block-storage']['conf_secrets'] ['DEFAULT']['transport_url'] = rabbit_transport_url 'block-storage' Change-Id: I0a6da37e3f2b839590b6349fd906d47c5206fbb3 --- libraries/endpoints.rb | 13 +++++++++++++ spec/endpoints_spec.rb | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/libraries/endpoints.rb b/libraries/endpoints.rb index c982182a..dbd4a16b 100644 --- a/libraries/endpoints.rb +++ b/libraries/endpoints.rb @@ -30,6 +30,19 @@ module ::Openstack nil end + # Shortcut to get the transport_url for rabbitmq + def rabbit_transport_url(service) + mq_user = node['openstack']['mq'][service]['rabbit']['userid'] + mq_password = get_password 'user', mq_user + mq_port = node['openstack']['endpoints']['mq']['port'] + vhost = node['openstack']['mq']['vhost'] + bind_mq = node['openstack']['bind_service']['mq'] + bind_mq_address = bind_address bind_mq + url = "rabbit://#{mq_user}:#{mq_password}@#{bind_mq_address}:#{mq_port}" + url += "/#{vhost}" unless vhost == '/' + url + end + # Shortcut to get the SQLAlchemy DB URI for a named service def db_uri(service, user, pass, is_slave = false) # rubocop:disable MethodLength, CyclomaticComplexity info = db(service) diff --git a/spec/endpoints_spec.rb b/spec/endpoints_spec.rb index 41986979..9b8cc6e7 100644 --- a/spec/endpoints_spec.rb +++ b/spec/endpoints_spec.rb @@ -99,6 +99,31 @@ describe 'openstack-common::default' do end end + describe 'transport_url' do + it do + allow(subject).to receive(:node).and_return(chef_run.node) + allow(subject).to receive(:get_password) + .with('user', 'guest') + .and_return('mypass') + expected = 'rabbit://guest:mypass@127.0.0.1:5672' + expect(subject.rabbit_transport_url('compute')).to eq(expected) + end + + it do + node.set['openstack']['mq']['service_type'] = 'rabbit' + node.set['openstack']['mq']['compute']['rabbit']['userid'] = 'rabbit2' + node.set['openstack']['endpoints']['mq']['port'] = 1234 + node.set['openstack']['bind_service']['mq']['host'] = '10.0.0.1' + node.set['openstack']['mq']['vhost'] = 'anyhost' + allow(subject).to receive(:node).and_return(chef_run.node) + allow(subject).to receive(:get_password) + .with('user', 'rabbit2') + .and_return('mypass2') + expected = 'rabbit://rabbit2:mypass2@10.0.0.1:1234/anyhost' + expect(subject.rabbit_transport_url('compute')).to eq(expected) + end + end + describe '#db' do it 'returns nil when no openstack.db not in node attrs' do allow(subject).to receive(:node).and_return({})