Add support for oslo.cache parameters

Since [1] was merged, ceilometer supports caching attributes of gnocchi
resource using the oslo.cache library. This change allows setting
parameters of the oslo.cache library to leverage the caching feature.

[1] 2511cfb6e48c5d03cd198ecf9f09f36db3caced8

Backport note:
This partially imports a7cf7060dd so that
the new class can be used along with the ceilometer class. The existing
parameters of the ceilometer class are not deprecated by this change.

Change-Id: I382816bc199f0d54337b25ab6e07fd0a32d2e4e8
(cherry picked from commit 5d40c9503c)
(cherry picked from commit 39e0c0730e)
This commit is contained in:
Takashi Kajinami 2021-11-29 10:49:36 +09:00
parent 0cbffcf9ea
commit d87416f281
4 changed files with 291 additions and 26 deletions

175
manifests/cache.pp Normal file
View File

@ -0,0 +1,175 @@
# Class ceilometer::cache
#
# ceilometer cache configuration
#
# == parameters
#
# [*config_prefix*]
# (Optional) Prefix for building the configuration dictionary for
# the cache region. This should not need to be changed unless there
# is another dogpile.cache region with the same configuration name.
# (string value)
# Defaults to $::os_service_default
#
# [*expiration_time*]
# (Optional) Default TTL, in seconds, for any cached item in the
# dogpile.cache region. This applies to any cached method that
# doesn't have an explicit cache expiration time defined for it.
# (integer value)
# Defaults to $::os_service_default
#
# [*backend*]
# (Optional) Dogpile.cache backend module. It is recommended that
# Memcache with pooling (oslo_cache.memcache_pool) or Redis
# (dogpile.cache.redis) be used in production deployments. (string value)
# Defaults to $::os_service_default
#
# [*backend_argument*]
# (Optional) Arguments supplied to the backend module. Specify this option
# once per argument to be passed to the dogpile.cache backend.
# Example format: "<argname>:<value>". (list value)
# Defaults to $::os_service_default
#
# [*proxies*]
# (Optional) Proxy classes to import that will affect the way the
# dogpile.cache backend functions. See the dogpile.cache documentation on
# changing-backend-behavior. (list value)
# Defaults to $::os_service_default
#
# [*enabled*]
# (Optional) Global toggle for caching. (boolean value)
# Defaults to $::os_service_default
#
# [*debug_cache_backend*]
# (Optional) Extra debugging from the cache backend (cache keys,
# get/set/delete/etc calls). This is only really useful if you need
# to see the specific cache-backend get/set/delete calls with the keys/values.
# Typically this should be left set to false. (boolean value)
# Defaults to $::os_service_default
#
# [*memcache_servers*]
# (Optional) Memcache servers in the format of "host:port".
# (dogpile.cache.memcache and oslo_cache.memcache_pool backends only).
# (list value)
# Defaults to $::os_service_default
#
# [*memcache_dead_retry*]
# (Optional) Number of seconds memcached server is considered dead before
# it is tried again. (dogpile.cache.memcache and oslo_cache.memcache_pool
# backends only). (integer value)
# Defaults to $::os_service_default
#
# [*memcache_socket_timeout*]
# (Optional) Timeout in seconds for every call to a server.
# (dogpile.cache.memcache and oslo_cache.memcache_pool backends only).
# (floating point value)
# Defaults to $::os_service_default
#
# [*memcache_pool_maxsize*]
# (Optional) Max total number of open connections to every memcached server.
# (oslo_cache.memcache_pool backend only). (integer value)
# Defaults to $::os_service_default
#
# [*memcache_pool_unused_timeout*]
# (Optional) Number of seconds a connection to memcached is held unused
# in the pool before it is closed. (oslo_cache.memcache_pool backend only)
# (integer value)
# Defaults to $::os_service_default
#
# [*memcache_pool_connection_get_timeout*]
# (Optional) Number of seconds that an operation will wait to get a memcache
# client connection. (integer value)
# Defaults to $::os_service_default
#
# [*manage_backend_package*]
# (Optional) (Optional) Whether to install the backend package for the cache.
# Defaults to true
#
# [*tls_enabled*]
# (Optional) Global toggle for TLS usage when comunicating with
# the caching servers.
# Default to $::os_service_default
#
# [*tls_cafile*]
# (Optional) Path to a file of concatenated CA certificates in PEM
# format necessary to establish the caching server's authenticity.
# If tls_enabled is False, this option is ignored.
# Default to $::os_service_default
#
# [*tls_certfile*]
# (Optional) Path to a single file in PEM format containing the
# client's certificate as well as any number of CA certificates
# needed to establish the certificate's authenticity. This file
# is only required when client side authentication is necessary.
# If tls_enabled is False, this option is ignored.
# Default to $::os_service_default
#
# [*tls_keyfile*]
# (Optional) Path to a single file containing the client's private
# key in. Otherwhise the private key will be taken from the file
# specified in tls_certfile. If tls_enabled is False, this option
# is ignored.
# Default to $::os_service_default
#
# [*tls_allowed_ciphers*]
# (Optional) Set the available ciphers for sockets created with
# the TLS context. It should be a string in the OpenSSL cipher
# list format. If not specified, all OpenSSL enabled ciphers will
# be available.
# Default to $::os_service_default
#
class ceilometer::cache (
$config_prefix = $::os_service_default,
$expiration_time = $::os_service_default,
$backend = $::os_service_default,
$backend_argument = $::os_service_default,
$proxies = $::os_service_default,
$enabled = $::os_service_default,
$debug_cache_backend = $::os_service_default,
$memcache_servers = $::os_service_default,
$memcache_dead_retry = $::os_service_default,
$memcache_socket_timeout = $::os_service_default,
$memcache_pool_maxsize = $::os_service_default,
$memcache_pool_unused_timeout = $::os_service_default,
$memcache_pool_connection_get_timeout = $::os_service_default,
$manage_backend_package = true,
$tls_enabled = $::os_service_default,
$tls_cafile = $::os_service_default,
$tls_certfile = $::os_service_default,
$tls_keyfile = $::os_service_default,
$tls_allowed_ciphers = $::os_service_default,
) {
include ceilometer::deps
$backend_real = pick($::ceilometer::cache_backend, $backend)
$memcache_servers_real = pick($::ceilometer::memcache_servers, $memcache_servers)
$tls_enabled_real = pick($::ceilometer::cache_tls_enabled, $tls_enabled)
$tls_cafile_real = pick($::ceilometer::cache_tls_cafile, $tls_cafile)
$tls_certfile_real = pick($::ceilometer::cache_tls_certfile, $tls_certfile)
$tls_keyfile_real = pick($::ceilometer::cache_tls_keyfile, $tls_keyfile)
$tls_allowed_ciphers_real = pick($::ceilometer::cache_tls_allowed_ciphers, $tls_allowed_ciphers)
$manage_backend_package_real = pick($::ceilometer::manage_backend_package, $manage_backend_package)
oslo::cache { 'ceilometer_config':
config_prefix => $config_prefix,
expiration_time => $expiration_time,
backend => $backend_real,
backend_argument => $backend_argument,
proxies => $proxies,
enabled => $enabled,
debug_cache_backend => $debug_cache_backend,
memcache_servers => $memcache_servers_real,
memcache_dead_retry => $memcache_dead_retry,
memcache_socket_timeout => $memcache_socket_timeout,
memcache_pool_maxsize => $memcache_pool_maxsize,
memcache_pool_unused_timeout => $memcache_pool_unused_timeout,
memcache_pool_connection_get_timeout => $memcache_pool_connection_get_timeout,
manage_backend_package => $manage_backend_package_real,
tls_enabled => $tls_enabled_real,
tls_cafile => $tls_cafile_real,
tls_certfile => $tls_certfile_real,
tls_keyfile => $tls_keyfile_real,
tls_allowed_ciphers => $tls_allowed_ciphers_real,
}
}

View File

@ -127,22 +127,22 @@
#
# [*cache_backend*]
# (Optional) The backend to pass to oslo::cache.
# Defaults to $::os_service_default
# Defaults to undef
#
# [*memcache_servers*]
# (Optional) A list of memcached server(s) to use for caching. (list value)
# Defaults to $::os_service_default
# Defaults to undef
#
# [*cache_tls_enabled*]
# (Optional) Global toggle for TLS usage when comunicating with
# the caching servers.
# Default to $::os_service_default
# Defaults to undef
#
# [*cache_tls_cafile*]
# (Optional) Path to a file of concatenated CA certificates in PEM
# format necessary to establish the caching server's authenticity.
# If tls_enabled is False, this option is ignored.
# Default to $::os_service_default
# Defaults to undef
#
# [*cache_tls_certfile*]
# (Optional) Path to a single file in PEM format containing the
@ -150,21 +150,21 @@
# needed to establish the certificate's authenticity. This file
# is only required when client side authentication is necessary.
# If tls_enabled is False, this option is ignored.
# Default to $::os_service_default
# Defaults to undef
#
# [*cache_tls_keyfile*]
# (Optional) Path to a single file containing the client's private
# key in. Otherwhise the private key will be taken from the file
# specified in tls_certfile. If tls_enabled is False, this option
# is ignored.
# Default to $::os_service_default
# Defaults to undef
#
# [*cache_tls_allowed_ciphers*]
# (Optional) Set the available ciphers for sockets created with
# the TLS context. It should be a string in the OpenSSL cipher
# list format. If not specified, all OpenSSL enabled ciphers will
# be available.
# Default to $::os_service_default
# Defaults to undef
#
# [*manage_backend_package*]
# (Optional) If we should install the cache backend package.
@ -287,14 +287,14 @@ class ceilometer(
$kombu_reconnect_delay = $::os_service_default,
$kombu_failover_strategy = $::os_service_default,
$kombu_compression = $::os_service_default,
$cache_backend = $::os_service_default,
$memcache_servers = $::os_service_default,
$cache_tls_enabled = $::os_service_default,
$cache_tls_cafile = $::os_service_default,
$cache_tls_certfile = $::os_service_default,
$cache_tls_keyfile = $::os_service_default,
$cache_tls_allowed_ciphers = $::os_service_default,
$manage_backend_package = true,
$cache_backend = undef,
$memcache_servers = undef,
$cache_tls_enabled = undef,
$cache_tls_cafile = undef,
$cache_tls_certfile = undef,
$cache_tls_keyfile = undef,
$cache_tls_allowed_ciphers = undef,
$manage_backend_package = undef,
$amqp_server_request_prefix = $::os_service_default,
$amqp_broadcast_prefix = $::os_service_default,
$amqp_group_request_prefix = $::os_service_default,
@ -328,6 +328,8 @@ class ceilometer(
will be removed in a future release.')
}
include ceilometer::cache
group { 'ceilometer':
ensure => present,
name => 'ceilometer',
@ -410,15 +412,4 @@ will be removed in a future release.')
rpc_response_timeout => $rpc_response_timeout,
control_exchange => $control_exchange,
}
oslo::cache { 'ceilometer_config':
backend => $cache_backend,
memcache_servers => $memcache_servers,
tls_enabled => $cache_tls_enabled,
tls_cafile => $cache_tls_cafile,
tls_certfile => $cache_tls_certfile,
tls_keyfile => $cache_tls_keyfile,
tls_allowed_ciphers => $cache_tls_allowed_ciphers,
manage_backend_package => $manage_backend_package,
}
}

View File

@ -0,0 +1,4 @@
---
features:
- |
The new ``ceilometer::cache`` class has been added.

View File

@ -0,0 +1,95 @@
require 'spec_helper'
describe 'ceilometer::cache' do
let :params do
{}
end
shared_examples_for 'ceilometer::cache' do
context 'with default parameters' do
it 'configures cache' do
is_expected.to contain_oslo__cache('ceilometer_config').with(
:config_prefix => '<SERVICE DEFAULT>',
:expiration_time => '<SERVICE DEFAULT>',
:backend => '<SERVICE DEFAULT>',
:backend_argument => '<SERVICE DEFAULT>',
:proxies => '<SERVICE DEFAULT>',
:enabled => '<SERVICE DEFAULT>',
:debug_cache_backend => '<SERVICE DEFAULT>',
:memcache_servers => '<SERVICE DEFAULT>',
:memcache_dead_retry => '<SERVICE DEFAULT>',
:memcache_socket_timeout => '<SERVICE DEFAULT>',
:memcache_pool_maxsize => '<SERVICE DEFAULT>',
:memcache_pool_unused_timeout => '<SERVICE DEFAULT>',
:memcache_pool_connection_get_timeout => '<SERVICE DEFAULT>',
:tls_enabled => '<SERVICE DEFAULT>',
:tls_cafile => '<SERVICE DEFAULT>',
:tls_certfile => '<SERVICE DEFAULT>',
:tls_keyfile => '<SERVICE DEFAULT>',
:tls_allowed_ciphers => '<SERVICE DEFAULT>',
:manage_backend_package => true,
)
end
end
context 'with overridden parameters' do
let :params do
{
:config_prefix => 'prefix',
:expiration_time => 3600,
:backend => 'oslo_cache.memcache_pool',
:proxies => ['proxy01:8888', 'proxy02:8888'],
:enabled => true,
:debug_cache_backend => false,
:memcache_servers => ['memcached01:11211', 'memcached02:11211'],
:memcache_dead_retry => '60',
:memcache_socket_timeout => '300.0',
:memcache_pool_maxsize => '10',
:memcache_pool_unused_timeout => '120',
:memcache_pool_connection_get_timeout => '360',
:tls_enabled => false,
:manage_backend_package => false,
}
end
it 'configures cache' do
is_expected.to contain_oslo__cache('ceilometer_config').with(
:config_prefix => 'prefix',
:expiration_time => 3600,
:backend => 'oslo_cache.memcache_pool',
:backend_argument => '<SERVICE DEFAULT>',
:proxies => ['proxy01:8888', 'proxy02:8888'],
:enabled => true,
:debug_cache_backend => false,
:memcache_servers => ['memcached01:11211', 'memcached02:11211'],
:memcache_dead_retry => '60',
:memcache_socket_timeout => '300.0',
:memcache_pool_maxsize => '10',
:memcache_pool_unused_timeout => '120',
:memcache_pool_connection_get_timeout => '360',
:tls_enabled => false,
:tls_cafile => '<SERVICE DEFAULT>',
:tls_certfile => '<SERVICE DEFAULT>',
:tls_keyfile => '<SERVICE DEFAULT>',
:tls_allowed_ciphers => '<SERVICE DEFAULT>',
:manage_backend_package => false,
)
end
end
end
on_supported_os({
:supported_os => OSDefaults.get_supported_os
}).each do |os,facts|
context "on #{os}" do
let (:facts) do
facts.merge!(OSDefaults.get_facts())
end
it_configures 'ceilometer::cache'
end
end
end