Make pipeline config more flexible

This patch:
  - moves Ceilometer notification agent to correct class
  - adds posibility to configure query parameters
  - avoid setting gnocchi publishers by default

Change-Id: I5cd0b6e99f5ffcc495225c61f0773240d90e7930
This commit is contained in:
Martin Magr 2020-01-29 11:46:45 +01:00
parent 48125267dd
commit 4443ae7037
3 changed files with 145 additions and 45 deletions

View File

@ -71,22 +71,6 @@
# Enable ssl oslo messaging services
# Defaults to hiera('oslo_messaging_notify_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('oslo_messaging_rpc_scheme', 'rabbit'),
@ -101,10 +85,6 @@ class tripleo::profile::base::ceilometer (
$oslomsg_notify_port = hiera('oslo_messaging_notify_port', '5672'),
$oslomsg_notify_username = hiera('oslo_messaging_notify_user_name', 'guest'),
$oslomsg_notify_use_ssl = hiera('oslo_messaging_notify_use_ssl', '0'),
$notifier_host_addr = false,
$notifier_host_port = undef,
$event_pipeline_publishers = undef,
$pipeline_publishers = undef,
) {
if $step >= 3 {
@ -131,28 +111,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::logging
}

View File

@ -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,
}
}
}

View File

@ -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