diff --git a/manifests/profile/base/ceilometer.pp b/manifests/profile/base/ceilometer.pp index 802fec1fe..fe98e0bed 100644 --- a/manifests/profile/base/ceilometer.pp +++ b/manifests/profile/base/ceilometer.pp @@ -67,22 +67,6 @@ # Enable ssl oslo messaging services # Defaults to hiera('ceilometer::rabbit_use_ssl', '0') # -# [*notifier_host_addr*] -# (optional) Ip address of ceilometer notifier (edge qdr Endpoint) -# Defaults to false -# -# [*notifier_host_port*] -# (optional) Ceilometer notifier port -# Defaults to undef -# -# [*event_pipeline_publishers*] -# (Optional) A list of event pipeline publishers -# Defaults to undef -# -# [*pipeline_publishers*] -# (Optional) A list of pipeline publishers -# Defaults to undef - class tripleo::profile::base::ceilometer ( $step = Integer(hiera('step')), $oslomsg_rpc_proto = hiera('messaging_rpc_service_name', 'rabbit'), @@ -96,10 +80,6 @@ class tripleo::profile::base::ceilometer ( $oslomsg_notify_port = hiera('ceilometer::rabbit_port', '5672'), $oslomsg_notify_username = hiera('ceilometer::rabbit_userid', 'guest'), $oslomsg_use_ssl = hiera('ceilometer::rabbit_use_ssl', '0'), - $notifier_host_addr = false, - $notifier_host_port = undef, - $event_pipeline_publishers = undef, - $pipeline_publishers = undef, ) { if $step >= 3 { @@ -123,28 +103,6 @@ class tripleo::profile::base::ceilometer ( }), } - if $notifier_host_addr { - class {'::ceilometer::agent::notification' : - event_pipeline_publishers => concat(any2array(os_transport_url({ - 'transport' => 'notifier', - 'host' => $notifier_host_addr, - 'port' => $notifier_host_port, - 'query' => { 'driver' => 'amqp' }, - })), $event_pipeline_publishers), - pipeline_publishers => concat(any2array(os_transport_url({ - 'transport' => 'notifier', - 'host' => $notifier_host_addr, - 'port' => $notifier_host_port, - 'query' => { 'driver' => 'amqp' }, - })), $pipeline_publishers), - } - } - else { - class {'::ceilometer::agent::notification' : - event_pipeline_publishers => $event_pipeline_publishers, - pipeline_publishers => $pipeline_publishers, - } - } include ::ceilometer::config include ::ceilometer::dispatcher::gnocchi } diff --git a/manifests/profile/base/ceilometer/agent/notification.pp b/manifests/profile/base/ceilometer/agent/notification.pp index 428600117..cf70a6193 100644 --- a/manifests/profile/base/ceilometer/agent/notification.pp +++ b/manifests/profile/base/ceilometer/agent/notification.pp @@ -23,15 +23,89 @@ # for more details. # Defaults to hiera('step') # +# [*notifier_enabled*] +# (optional) Enable configuration of notifier as pipeline publisher. +# Defaults to false +# +# [*notifier_events_enabled*] +# (optional) Enable configuration of event notifier as pipeline publisher. +# Defaults to false +# +# [*notifier_host_addr*] +# (optional) IP address of Ceilometer notifier (edge qdr Endpoint) +# Defaults to undef +# +# [*notifier_host_port*] +# (optional) Ceilometer notifier port +# Defaults to undef +# +# [*notifier_params*] +# (optional) Query parameters for notifier URL +# Defaults to {'driver' => 'amqp', 'topic' => 'ceilometer/metering.sample'} +# +# [*notifier_event_params*] +# (optional) Query parameters for event notifier URL +# Defaults to {'driver' => 'amqp', 'topic' => 'ceilometer/event.sample'} +# +# [*event_pipeline_publishers*] +# (Optional) A list of event pipeline publishers +# Defaults to undef +# +# [*pipeline_publishers*] +# (Optional) A list of pipeline publishers +# Defaults to undef class tripleo::profile::base::ceilometer::agent::notification ( - $step = Integer(hiera('step')), + $step = Integer(hiera('step')), + $notifier_enabled = false, + $notifier_events_enabled = false, + $notifier_host_addr = undef, + $notifier_host_port = undef, + $notifier_params = {'driver' => 'amqp', 'topic' => 'ceilometer/metering.sample'}, + $notifier_event_params = {'driver' => 'amqp', 'topic' => 'ceilometer/event.sample'}, + $pipeline_publishers = undef, + $event_pipeline_publishers = undef, ) { include ::tripleo::profile::base::ceilometer include ::tripleo::profile::base::ceilometer::upgrade if $step >= 4 { include ::ceilometer::agent::auth - include ::ceilometer::agent::notification - } + if $pipeline_publishers { + $other_publishers = Array($pipeline_publishers, true) + } else { + $other_publishers = [] + } + if $notifier_enabled { + $real_pipeline_publishers = $other_publishers + [os_transport_url({ + 'transport' => 'notifier', + 'host' => $notifier_host_addr, + 'port' => $notifier_host_port, + 'query' => $notifier_params, + })] + } else { + $real_pipeline_publishers = $other_publishers + } + + if $event_pipeline_publishers { + $other_event_publishers = Array($event_pipeline_publishers, true) + } else { + $other_event_publishers = [] + } + if $notifier_events_enabled { + $real_event_pipeline_publishers = $other_event_publishers + [os_transport_url({ + 'transport' => 'notifier', + 'host' => $notifier_host_addr, + 'port' => $notifier_host_port, + 'query' => $notifier_event_params, + })] + } else { + $real_event_pipeline_publishers = $other_event_publishers + } + + class { '::ceilometer::agent::notification': + event_pipeline_publishers => $real_event_pipeline_publishers, + pipeline_publishers => $real_pipeline_publishers, + } + } } diff --git a/spec/classes/tripleo_profile_base_ceilometer_agent_notification_spec.rb b/spec/classes/tripleo_profile_base_ceilometer_agent_notification_spec.rb new file mode 100644 index 000000000..51759b3ca --- /dev/null +++ b/spec/classes/tripleo_profile_base_ceilometer_agent_notification_spec.rb @@ -0,0 +1,68 @@ +# +# Copyright (C) 2020 Red Hat, Inc. +# +# 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. +# + +require 'spec_helper' + +describe 'tripleo::profile::base::ceilometer::agent::notification' do + shared_examples_for 'tripleo::profile::base::ceilometer::agent::notification' do + before :each do + facts.merge!({ :step => params[:step] }) + end + + context 'with step less than 4' do + let(:params) do + { :step => 3 } + end + + it 'should do nothing' do + is_expected.to contain_class('tripleo::profile::base::ceilometer::agent::notification') + is_expected.to_not contain_class('ceilometer::agent::notification') + end + end + + context 'with step 4 and notifier configured' do + let(:pre_condition) do + "class { 'ceilometer::agent::auth': auth_password => 'password' }" + end + + let(:params) do + { :step => 4, + :notifier_enabled => false, + :notifier_events_enabled => true, + :notifier_host_addr => '127.0.0.1', + :notifier_host_port => '5666' } + end + + it 'should trigger complete configuration' do + is_expected.to contain_class('ceilometer::agent::notification').with( + :event_pipeline_publishers => ["notifier://127.0.0.1:5666/?driver=amqp&topic=ceilometer/event.sample"], + :pipeline_publishers => [] + ) + end + end + end + + + on_supported_os.each do |os, facts| + context "on #{os}" do + let(:facts) do + facts.merge({ :hostname => 'node.example.com' }) + end + + it_behaves_like 'tripleo::profile::base::ceilometer::agent::notification' + end + end +end