Introduce tripleo::config

tripleo::config is a class that will take care of param_config in THT.

Example in THT:

puppet_config:
  param_config:
    aodh_config:
      oslo_middleware:
        enable_proxy_headers_parsing: True

tripleo::config will call the aodh_config provider for each
parameter and its value, so here it'll call:

create_resources('aodh_config',
                 'oslo_middleware/enable_proxy_headers_parsing' => {
                   'value' => True
                 } )

Note: we add a filter capability where once can configure
tripleo::config with providers parameter to filter which providers we
want to call.

Change-Id: Ia008917475edcd086fb5076fab320206d05ea557
This commit is contained in:
Emilien Macchi 2019-05-22 10:04:37 -04:00
parent 27c01401d0
commit e452c3d55c
2 changed files with 89 additions and 0 deletions

44
manifests/config.pp Normal file
View File

@ -0,0 +1,44 @@
# == Class: tripleo::config
#
# Configure services with Puppet
#
# === Parameters:
#
# [*configs*]
# (optional) Configuration to inject.
# Should be an hash.
# Default to lookup('param_config', {})
#
# [*providers*]
# (optional) Filter the providers we want
# to use for config.
# Should be an array.
# Default to lookup('param_providers', Array[String], 'deep', [])
#
class tripleo::config(
$configs = lookup('param_config', {}),
$providers = lookup('param_providers', Array[String], 'deep', []),
) {
if ! empty($configs) {
# Allow composable services to load their own configurations.
# Each service can load its config options by using this form:
#
# puppet_config:
# param_config:
# 'aodh_config':
# DEFAULT:
# foo: fooValue
# bar: barValue
$configs.each |$provider, $sections| {
if empty($providers) or ($provider in $providers) {
$sections.each |$section, $params| {
$params.each |$param, $value| {
create_resources($provider, {"${section}/${param}" => {'value' => $value }})
}
}
}
}
}
}

View File

@ -0,0 +1,45 @@
require 'spec_helper'
describe 'tripleo::config' do
let :params do
{ }
end
shared_examples_for 'tripleo::config' do
context 'with glance_api service' do
before :each do
params.merge!(
:configs => { 'glance_api_config' => { 'DEFAULT' => { 'foo' => 'bar', 'foo2' => 'bar2' } } },
)
end
it 'configures arbitrary glance-api configurations' do
is_expected.to contain_glance_api_config('DEFAULT/foo').with_value('bar')
is_expected.to contain_glance_api_config('DEFAULT/foo2').with_value('bar2')
end
end
context 'with glance_api service and provider filter' do
before :each do
params.merge!(
:configs => { 'glance_api_config' => { 'DEFAULT' => { 'foo' => 'bar' } }, 'nova_config' => { 'DEFAULT' => { 'foo' => 'bar' } } },
:providers => ['glance_api_config'],
)
end
it 'configures arbitrary glance-api configurations without nova_config' do
is_expected.to contain_glance_api_config('DEFAULT/foo').with_value('bar')
is_expected.to_not contain_nova_config('DEFAULT/foo').with_value('bar')
end
end
end
on_supported_os.each do |os, facts|
context "on #{os}" do
let(:facts) do
facts.merge({})
end
it_behaves_like 'tripleo::config'
end
end
end