From dfe0e42f86faf2f6da298a349e8dfdd375e6a161 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 23 Aug 2021 14:16:32 +0900 Subject: [PATCH] Add support for oslo.cache options Neutron uses oslo.cache options for caching. This change adds support for the options implemented in the library. Change-Id: I8d9930c80c65867ebd220153c20d06cdab0a47b5 --- manifests/cache.pp | 166 ++++++++++++++++++ .../notes/cache-opts-efb690721bb97f1f.yaml | 4 + spec/classes/zaqar_cache_spec.rb | 95 ++++++++++ 3 files changed, 265 insertions(+) create mode 100644 manifests/cache.pp create mode 100644 releasenotes/notes/cache-opts-efb690721bb97f1f.yaml create mode 100644 spec/classes/zaqar_cache_spec.rb diff --git a/manifests/cache.pp b/manifests/cache.pp new file mode 100644 index 0000000..991d75b --- /dev/null +++ b/manifests/cache.pp @@ -0,0 +1,166 @@ +# Class zaqar::cache +# +# zaqar 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: ":". (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 zaqar::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 zaqar::deps + + oslo::cache { 'zaqar_config': + config_prefix => $config_prefix, + expiration_time => $expiration_time, + backend => $backend, + backend_argument => $backend_argument, + proxies => $proxies, + enabled => $enabled, + debug_cache_backend => $debug_cache_backend, + memcache_servers => $memcache_servers, + 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, + tls_enabled => $tls_enabled, + tls_cafile => $tls_cafile, + tls_certfile => $tls_certfile, + tls_keyfile => $tls_keyfile, + tls_allowed_ciphers => $tls_allowed_ciphers, + } +} diff --git a/releasenotes/notes/cache-opts-efb690721bb97f1f.yaml b/releasenotes/notes/cache-opts-efb690721bb97f1f.yaml new file mode 100644 index 0000000..21cbe5b --- /dev/null +++ b/releasenotes/notes/cache-opts-efb690721bb97f1f.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + The new ``zaqar::cache`` class has been added. diff --git a/spec/classes/zaqar_cache_spec.rb b/spec/classes/zaqar_cache_spec.rb new file mode 100644 index 0000000..4375f75 --- /dev/null +++ b/spec/classes/zaqar_cache_spec.rb @@ -0,0 +1,95 @@ +require 'spec_helper' + +describe 'zaqar::cache' do + + let :params do + {} + end + + shared_examples_for 'zaqar::cache' do + + context 'with default parameters' do + it 'configures cache' do + is_expected.to contain_oslo__cache('zaqar_config').with( + :config_prefix => '', + :expiration_time => '', + :backend => '', + :backend_argument => '', + :proxies => '', + :enabled => '', + :debug_cache_backend => '', + :memcache_servers => '', + :memcache_dead_retry => '', + :memcache_socket_timeout => '', + :memcache_pool_maxsize => '', + :memcache_pool_unused_timeout => '', + :memcache_pool_connection_get_timeout => '', + :tls_enabled => '', + :tls_cafile => '', + :tls_certfile => '', + :tls_keyfile => '', + :tls_allowed_ciphers => '', + :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('zaqar_config').with( + :config_prefix => 'prefix', + :expiration_time => 3600, + :backend => 'oslo_cache.memcache_pool', + :backend_argument => '', + :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 => '', + :tls_certfile => '', + :tls_keyfile => '', + :tls_allowed_ciphers => '', + :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 'zaqar::cache' + end + end + +end