Merge "Support notification/polling full config by hiera"

This commit is contained in:
Zuul 2020-05-11 23:07:24 +00:00 committed by Gerrit Code Review
commit 68a44d1344
5 changed files with 149 additions and 8 deletions

View File

@ -57,6 +57,11 @@
# (Optional) Whether to manage event_pipeline.yaml # (Optional) Whether to manage event_pipeline.yaml
# Defaults to false # Defaults to false
# #
# [*event_pipeline_config*]
# (Optional) A hash of the event_pipeline.yaml configuration.
# This is used only if manage_event_pipeline is true.
# Defaults to undef
#
# [*event_pipeline_publishers*] # [*event_pipeline_publishers*]
# (Optional) A list of publishers to put in event_pipeline.yaml # (Optional) A list of publishers to put in event_pipeline.yaml
# Add 'notifier://?topic=alarm.all' to the list if you are using Aodh # Add 'notifier://?topic=alarm.all' to the list if you are using Aodh
@ -67,6 +72,11 @@
# (Optional) Whether to manage pipeline.yaml # (Optional) Whether to manage pipeline.yaml
# Defaults to false # Defaults to false
# #
# [*pipeline_config*]
# (Optional) A hash of the pipeline.yaml configuration.
# This is used only if manage_pipeline is true.
# Defaults to undef
#
# [*pipeline_publishers*] # [*pipeline_publishers*]
# (Optional) A list of publishers to put in pipeline.yaml. # (Optional) A list of publishers to put in pipeline.yaml.
# By default all the data is dispatched to gnocchi # By default all the data is dispatched to gnocchi
@ -83,8 +93,10 @@ class ceilometer::agent::notification (
$package_ensure = 'present', $package_ensure = 'present',
$manage_event_pipeline = false, $manage_event_pipeline = false,
$event_pipeline_publishers = ['gnocchi://'], $event_pipeline_publishers = ['gnocchi://'],
$event_pipeline_config = undef,
$manage_pipeline = false, $manage_pipeline = false,
$pipeline_publishers = ['gnocchi://'], $pipeline_publishers = ['gnocchi://'],
$pipeline_config = undef,
) { ) {
include ceilometer::deps include ceilometer::deps
@ -114,13 +126,19 @@ class ceilometer::agent::notification (
tag => 'ceilometer-service' tag => 'ceilometer-service'
} }
if ($manage_event_pipeline) { if $manage_event_pipeline {
validate_legacy(Array, 'validate_array', $event_pipeline_publishers) if $event_pipeline_config {
validate_legacy(Hash, 'validate_hash', $event_pipeline_config)
$event_pipeline_content = to_yaml($event_pipeline_config)
} else {
validate_legacy(Array, 'validate_array', $event_pipeline_publishers)
$event_pipeline_content = template('ceilometer/event_pipeline.yaml.erb')
}
file { 'event_pipeline': file { 'event_pipeline':
ensure => present, ensure => present,
path => $::ceilometer::params::event_pipeline, path => $::ceilometer::params::event_pipeline,
content => template('ceilometer/event_pipeline.yaml.erb'), content => $event_pipeline_content,
selinux_ignore_defaults => true, selinux_ignore_defaults => true,
mode => '0640', mode => '0640',
owner => 'root', owner => 'root',
@ -129,13 +147,19 @@ class ceilometer::agent::notification (
} }
} }
if ($manage_pipeline) { if $manage_pipeline {
validate_legacy(Array, 'validate_array', $pipeline_publishers) if $pipeline_config {
validate_legacy(Hash, 'validate_hash', $pipeline_config)
$pipeline_content = to_yaml($pipeline_config)
} else {
validate_legacy(Array, 'validate_array', $pipeline_publishers)
$pipeline_content = template('ceilometer/pipeline.yaml.erb')
}
file { 'pipeline': file { 'pipeline':
ensure => present, ensure => present,
path => $::ceilometer::params::pipeline, path => $::ceilometer::params::pipeline,
content => template('ceilometer/pipeline.yaml.erb'), content => $pipeline_content,
selinux_ignore_defaults => true, selinux_ignore_defaults => true,
mode => '0640', mode => '0640',
owner => 'root', owner => 'root',

View File

@ -53,6 +53,11 @@
# the polling.yaml file, used only if manage_polling is true. # the polling.yaml file, used only if manage_polling is true.
# Defaults to $::ceilometer::params::polling_meters # Defaults to $::ceilometer::params::polling_meters
# #
# [*polling_config*]
# (Optional) A hash of the polling.yaml configuration.
# This is used only if manage_polling is true.
# Defaults to undef
#
class ceilometer::agent::polling ( class ceilometer::agent::polling (
$manage_service = true, $manage_service = true,
$enabled = true, $enabled = true,
@ -65,6 +70,7 @@ class ceilometer::agent::polling (
$manage_polling = false, $manage_polling = false,
$polling_interval = 600, $polling_interval = 600,
$polling_meters = $::ceilometer::params::polling_meters, $polling_meters = $::ceilometer::params::polling_meters,
$polling_config = undef,
) inherits ceilometer { ) inherits ceilometer {
include ceilometer::deps include ceilometer::deps
@ -145,10 +151,17 @@ class ceilometer::agent::polling (
} }
if $manage_polling { if $manage_polling {
if $polling_config {
validate_legacy(Hash, 'validate_hash', $polling_config)
$polling_content = to_yaml($polling_config)
} else {
$polling_content = template('ceilometer/polling.yaml.erb')
}
file { 'polling': file { 'polling':
ensure => present, ensure => present,
path => $::ceilometer::params::polling, path => $::ceilometer::params::polling,
content => template('ceilometer/polling.yaml.erb'), content => $polling_content,
selinux_ignore_defaults => true, selinux_ignore_defaults => true,
tag => 'ceilometer-yamls', tag => 'ceilometer-yamls',
} }

View File

@ -0,0 +1,5 @@
---
features:
- Add pipeline_config, event_pipeline_config and polling_config agent
parameters to support setting the whole configuration for these file
by hashes.

View File

@ -165,6 +165,42 @@ describe 'ceilometer::agent::notification' do
])} ])}
end end
context 'with event_pipeline and custom config' do
before { params.merge!(
:manage_event_pipeline => true,
:event_pipeline_config => {
'sources' => [
'name' => 'my_event_source',
'events' => ['*'],
'sinks' => ['my_event_sink'],
],
'sinks' => [
'name' => 'my_event_sink',
'transformers' => [],
'triggers' => [],
'publishers' => ['gnocchi://'],
],
}
)}
it { should contain_file('event_pipeline').with(
:content => '---
sources:
- name: my_event_source
events:
- "*"
sinks:
- my_event_sink
sinks:
- name: my_event_sink
transformers: []
triggers: []
publishers:
- gnocchi://
',
)}
end
context "with event_pipeline management disabled" do context "with event_pipeline management disabled" do
before { params.merge!( before { params.merge!(
:manage_event_pipeline => false :manage_event_pipeline => false
@ -185,6 +221,40 @@ describe 'ceilometer::agent::notification' do
) } ) }
end end
context 'with pipeline and custom config' do
before { params.merge!(
:manage_pipeline => true,
:pipeline_config => {
'sources' => [
'name' => 'my_source',
'meters' => ['*'],
'sinks' => ['my_sink'],
],
'sinks' => [
'name' => 'my_sink',
'transformers' => [],
'publishers' => ['gnocchi://'],
],
}
)}
it { should contain_file('pipeline').with(
:content => '---
sources:
- name: my_source
meters:
- "*"
sinks:
- my_sink
sinks:
- name: my_sink
transformers: []
publishers:
- gnocchi://
',
)}
end
context "with pipeline management disabled" do context "with pipeline management disabled" do
before { params.merge!( before { params.merge!(
:manage_pipeline => false :manage_pipeline => false

View File

@ -139,7 +139,7 @@ sources:
)} )}
end end
context 'with polling and custom config' do context 'with polling and basic custom settings' do
before do before do
params.merge!( :manage_polling => true, params.merge!( :manage_polling => true,
:polling_interval => 30, :polling_interval => 30,
@ -162,6 +162,35 @@ sources:
)} )}
end end
context 'with polling and custom config' do
before do
params.merge!( :manage_polling => true,
:polling_config => {
'sources' => [
'name' => 'my_pollsters',
'interval' => 60,
'meters' => [
'meterfoo',
'meterbar',
],
],
} )
end
it { should contain_file('polling').with(
:ensure => 'present',
:path => '/etc/ceilometer/polling.yaml',
:content => '---
sources:
- name: my_pollsters
interval: 60
meters:
- meterfoo
- meterbar
',
)}
end
context 'with polling management disabled' do context 'with polling management disabled' do
before do before do
params.merge!( :manage_polling => false ) params.merge!( :manage_polling => false )