diff --git a/manifests/cache.pp b/manifests/cache.pp new file mode 100644 index 0000000..9d21d26 --- /dev/null +++ b/manifests/cache.pp @@ -0,0 +1,239 @@ +# Class watcher::cache +# +# watcher 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 +# +# [*enable_socket_keepalive*] +# (Optional) Global toggle for the socket keepalive of dogpile's +# pymemcache backend +# Defaults to $::os_service_default +# +# [*socket_keepalive_idle*] +# (Optional) The time (in seconds) the connection needs to remain idle +# before TCP starts sending keepalive probes. Should be a positive integer +# most greater than zero. +# Defaults to $::os_service_default +# +# [*socket_keepalive_interval*] +# (Optional) The time (in seconds) between individual keepalive probes. +# Should be a positive integer most greater than zero. +# Defaults to $::os_service_default +# +# [*socket_keepalive_count*] +# (Optional) The maximum number of keepalive probes TCP should send before +# dropping the connection. Should be a positive integer most greater than +# zero. +# 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) 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 +# +# [*enable_retry_client*] +# (Optional) Enable retry client mechanisms to handle failure. +# Those mechanisms can be used to wrap all kind of pymemcache +# clients. The wrapper allows you to define how many attempts +# to make and how long to wait between attemots. +# Default to $::os_service_default +# +# [*retry_attempts*] +# (Optional) Number of times to attempt an action before failing. +# Default to $::os_service_default +# +# [*retry_delay*] +# (Optional) Number of seconds to sleep between each attempt. +# Default to $::os_service_default +# +# [*hashclient_retry_attempts*] +# (Optional) Amount of times a client should be tried +# before it is marked dead and removed from the pool in +# the HashClient's internal mechanisms. +# Default to $::os_service_default +# +# [*hashclient_retry_delay*] +# (Optional) Time in seconds that should pass between +# retry attempts in the HashClient's internal mechanisms. +# Default to $::os_service_default +# +# [*dead_timeout*] +# (Optional) Time in seconds before attempting to add a node +# back in the pool in the HashClient's internal mechanisms. +# Default to $::os_service_default +# +class watcher::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, + $enable_socket_keepalive = $::os_service_default, + $socket_keepalive_idle = $::os_service_default, + $socket_keepalive_interval = $::os_service_default, + $socket_keepalive_count = $::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, + $enable_retry_client = $::os_service_default, + $retry_attempts = $::os_service_default, + $retry_delay = $::os_service_default, + $hashclient_retry_attempts = $::os_service_default, + $hashclient_retry_delay = $::os_service_default, + $dead_timeout = $::os_service_default, +) { + + include watcher::deps + + oslo::cache { 'watcher_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, + enable_socket_keepalive => $enable_socket_keepalive, + socket_keepalive_idle => $socket_keepalive_idle, + socket_keepalive_interval => $socket_keepalive_interval, + socket_keepalive_count => $socket_keepalive_count, + 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, + enable_retry_client => $enable_retry_client, + retry_attempts => $retry_attempts, + retry_delay => $retry_delay, + hashclient_retry_attempts => $hashclient_retry_attempts, + hashclient_retry_delay => $hashclient_retry_delay, + dead_timeout => $dead_timeout, + } +} diff --git a/manifests/deps.pp b/manifests/deps.pp index 084183b..edb4d14 100644 --- a/manifests/deps.pp +++ b/manifests/deps.pp @@ -24,6 +24,10 @@ class watcher::deps { -> Openstacklib::Policy<||> ~> Anchor['watcher::config::end'] + # all cache settings should be applied and all packages should be installed + # before service startup + Oslo::Cache<||> -> Anchor['watcher::service::begin'] + # all db settings should be applied and all packages should be installed # before dbsync starts Oslo::Db<||> -> Anchor['watcher::db::create_schema::begin'] diff --git a/releasenotes/notes/cache-opts-1d4d358b81b76d2c.yaml b/releasenotes/notes/cache-opts-1d4d358b81b76d2c.yaml new file mode 100644 index 0000000..7df1dd5 --- /dev/null +++ b/releasenotes/notes/cache-opts-1d4d358b81b76d2c.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``watcher::cache`` class, to manage parameters of the oslo.cache + library, has been added. diff --git a/spec/classes/watcher_cache_spec.rb b/spec/classes/watcher_cache_spec.rb new file mode 100644 index 0000000..0fb1c1f --- /dev/null +++ b/spec/classes/watcher_cache_spec.rb @@ -0,0 +1,125 @@ +require 'spec_helper' + +describe 'watcher::cache' do + + let :params do + {} + end + + shared_examples_for 'watcher::cache' do + + context 'with default parameters' do + it 'configures cache' do + is_expected.to contain_oslo__cache('watcher_config').with( + :config_prefix => '', + :expiration_time => '', + :backend => '', + :backend_argument => '', + :proxies => '', + :enabled => '', + :debug_cache_backend => '', + :memcache_servers => '', + :memcache_dead_retry => '', + :memcache_socket_timeout => '', + :enable_socket_keepalive => '', + :socket_keepalive_idle => '', + :socket_keepalive_interval => '', + :socket_keepalive_count => '', + :memcache_pool_maxsize => '', + :memcache_pool_unused_timeout => '', + :memcache_pool_connection_get_timeout => '', + :tls_enabled => '', + :tls_cafile => '', + :tls_certfile => '', + :tls_keyfile => '', + :tls_allowed_ciphers => '', + :enable_retry_client => '', + :retry_attempts => '', + :retry_delay => '', + :hashclient_retry_delay => '', + :dead_timeout => '', + :manage_backend_package => true, + :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', + :enable_socket_keepalive => false, + :socket_keepalive_idle => 1, + :socket_keepalive_interval => 1, + :socket_keepalive_count => 1, + :memcache_pool_maxsize => '10', + :memcache_pool_unused_timeout => '120', + :memcache_pool_connection_get_timeout => '360', + :tls_enabled => false, + :enable_retry_client => false, + :retry_attempts => 2, + :retry_delay => 0, + :hashclient_retry_attempts => 2, + :hashclient_retry_delay => 1, + :dead_timeout => 60, + :manage_backend_package => false, + } + end + + it 'configures cache' do + is_expected.to contain_oslo__cache('watcher_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', + :enable_socket_keepalive => false, + :socket_keepalive_idle => 1, + :socket_keepalive_interval => 1, + :socket_keepalive_count => 1, + :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 => '', + :enable_retry_client => false, + :retry_attempts => 2, + :retry_delay => 0, + :hashclient_retry_attempts => 2, + :hashclient_retry_delay => 1, + :dead_timeout => 60, + :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 'watcher::cache' + end + end + +end