diff --git a/manifests/cache.pp b/manifests/cache.pp new file mode 100644 index 00000000..139adc0c --- /dev/null +++ b/manifests/cache.pp @@ -0,0 +1,117 @@ +# Class heat::cache +# +# heat 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). +# (integer 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 +# +class heat::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, +) { + + include ::heat::deps + + oslo::cache { 'heat_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, + } +} diff --git a/releasenotes/notes/add_cache_configuration-3fb65deac4c9ea42.yaml b/releasenotes/notes/add_cache_configuration-3fb65deac4c9ea42.yaml new file mode 100644 index 00000000..d55e79c7 --- /dev/null +++ b/releasenotes/notes/add_cache_configuration-3fb65deac4c9ea42.yaml @@ -0,0 +1,4 @@ +--- +features: + - Ability to configure cache for heat using + oslo::cache class. diff --git a/spec/classes/heat_cache_spec.rb b/spec/classes/heat_cache_spec.rb new file mode 100644 index 00000000..19fda1bb --- /dev/null +++ b/spec/classes/heat_cache_spec.rb @@ -0,0 +1,77 @@ +require 'spec_helper' + +describe 'heat::cache' do + + let :params do + { } + end + + shared_examples_for 'heat-cache' do + + context 'with default parameters' do + it 'configures cache' do + is_expected.to contain_heat_config('cache/config_prefix').with_value('') + is_expected.to contain_heat_config('cache/expiration_time').with_value('') + is_expected.to contain_heat_config('cache/backend').with_value('') + is_expected.to contain_heat_config('cache/backend_argument').with_value('') + is_expected.to contain_heat_config('cache/proxies').with_value('') + is_expected.to contain_heat_config('cache/enabled').with_value('') + is_expected.to contain_heat_config('cache/debug_cache_backend').with_value('') + is_expected.to contain_heat_config('cache/memcache_servers').with_value('') + is_expected.to contain_heat_config('cache/memcache_dead_retry').with_value('') + is_expected.to contain_heat_config('cache/memcache_socket_timeout').with_value('') + is_expected.to contain_heat_config('cache/memcache_pool_maxsize').with_value('') + is_expected.to contain_heat_config('cache/memcache_pool_unused_timeout').with_value('') + is_expected.to contain_heat_config('cache/memcache_pool_connection_get_timeout').with_value('') + 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', + :memcache_pool_maxsize => '10', + :memcache_pool_unused_timeout => '120', + :memcache_pool_connection_get_timeout => '360', + } + end + + it 'configures cache' do + is_expected.to contain_heat_config('cache/config_prefix').with_value('prefix') + is_expected.to contain_heat_config('cache/expiration_time').with_value('3600') + is_expected.to contain_heat_config('cache/backend').with_value('oslo_cache.memcache_pool') + is_expected.to contain_heat_config('cache/backend_argument').with_value('') + is_expected.to contain_heat_config('cache/proxies').with_value('proxy01:8888,proxy02:8888') + is_expected.to contain_heat_config('cache/enabled').with_value('true') + is_expected.to contain_heat_config('cache/debug_cache_backend').with_value('false') + is_expected.to contain_heat_config('cache/memcache_servers').with_value('memcached01:11211,memcached02:11211') + is_expected.to contain_heat_config('cache/memcache_dead_retry').with_value('60') + is_expected.to contain_heat_config('cache/memcache_socket_timeout').with_value('300') + is_expected.to contain_heat_config('cache/memcache_pool_maxsize').with_value('10') + is_expected.to contain_heat_config('cache/memcache_pool_unused_timeout').with_value('120') + is_expected.to contain_heat_config('cache/memcache_pool_connection_get_timeout').with_value('360') + 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 'heat-cache' + end + end + +end