From b57883ee95d1bb1fdfc918dee0ddf15773816236 Mon Sep 17 00:00:00 2001 From: "Minor, Thomas" Date: Tue, 8 Dec 2020 13:22:51 +0100 Subject: [PATCH 01/14] Added cache_disk Deprecates disk_cache --- manifests/mod/cache_disk.pp | 121 ++++++++++++++++++++++++++++++ manifests/mod/disk_cache.pp | 54 ++++--------- templates/mod/cache_disk.conf.erb | 36 +++++++++ 3 files changed, 171 insertions(+), 40 deletions(-) create mode 100644 manifests/mod/cache_disk.pp create mode 100644 templates/mod/cache_disk.conf.erb diff --git a/manifests/mod/cache_disk.pp b/manifests/mod/cache_disk.pp new file mode 100644 index 0000000000..83abcf5f37 --- /dev/null +++ b/manifests/mod/cache_disk.pp @@ -0,0 +1,121 @@ +# @summary +# Installs and configures `mod_cache_disk`. +# +# @description +# This will install an configure the proper module depending on the used apache version, so +# - mod_cache_disk for apache version >= 2.4 +# - mod_disk_cache for older apache versions +# +# @param cache_root +# Defines the name of the directory on the disk to contain cache files. +# Default depends on the Apache version and operating system: +# - Debian: /var/cache/apache2/mod_cache_disk +# - FreeBSD: /var/cache/mod_cache_disk +# - Red Hat, Apache 2.4: /var/cache/httpd/proxy +# - Red Hat, Apache 2.2: /var/cache/mod_proxy +# +# @param cache_enable +# Defines an array of directories to cache, the default is none +# +# @param cache_ignore_headers +# Specifies HTTP header(s) that should not be stored in the cache. +# +# @param cache_dir_length +# The number of characters in subdirectory names +# +# @param cache_dir_levels +# The number of levels of subdirectories in the cache. +# +# @param cache_default_expire +# The default duration to cache a document when no expiry date is specified. +# +# @param cache_max_expire +# The maximum time in seconds to cache a document +# +# @param cache_ignore_no_lastmod +# Ignore the fact that a response has no Last Modified header. +# +# @param cache_header +# Add an X-Cache header to the response. +# +# @param cache_lock +# Enable the thundering herd lock. +# +# @param cache_ignore_cache_control +# Ignore request to not serve cached content to client +# +# @param cache_max_filesize +# The maximum size (in bytes) of a document to be placed in the cache +# +# @note +# Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. +# +# @see https://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html for additional documentation on version 2.2. +# +# @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation on version 2.4. +# +class apache::mod::cache_disk ( + $cache_root = undef, + Array[String] $cache_enable = [], + Optional[String] $cache_ignore_headers = undef, + Optional[Integer] $cache_dir_length = undef, + Optional[Integer] $cache_dir_levels = undef, + Optional[Integer] $cache_default_expire = undef, + Optional[Integer] $cache_max_expire = undef, + Optional[Enum['Off', 'On']] $cache_ignore_no_lastmod = undef, + Optional[Enum['off', 'on']] $cache_header = undef, + Optional[Enum['off', 'on']] $cache_lock = undef, + Optional[Enum['Off', 'On']] $cache_ignore_cache_control = undef, + Optional[Integer] $cache_max_filesize = undef, +) { + include apache + if $cache_root { + $_cache_root = $cache_root + } + elsif versioncmp($apache::apache_version, '2.4') >= 0 { + $_module_name = 'cache_disk' + $_cache_root = $::osfamily ? { + 'debian' => '/var/cache/apache2/mod_cache_disk', + 'redhat' => '/var/cache/httpd/proxy', + 'freebsd' => '/var/cache/mod_cache_disk', + } + } + else { + $_module_name = 'disk_cache' + $_cache_root = $::osfamily ? { + 'debian' => '/var/cache/apache2/mod_disk_cache', + 'redhat' => '/var/cache/mod_proxy', + 'freebsd' => '/var/cache/mod_disk_cache', + } + } + $_configuration_file_name = "${_module_name}.conf" + $_class_name = "::apache::mod::${_module_name}" + + apache::mod { $_module_name: } + + Class['::apache::mod::cache'] -> Class[$_class_name] + + # Template uses + # - $_cache_root + # - $cache_enable + # - $cache_dir_length + # - $cache_ignore_headers + # - $cache_dir_length + # - $cache_dir_levels + # - $cache_default_expire + # - $cache_max_expire + # - $cache_ignore_no_lastmod + # - $cache_header + # - $cache_lock + # - $cache_ignore_cache_control + # - $cache_max_filesize + file { $_configuration_file_name: + ensure => file, + path => "${apache::mod_dir}/${_configuration_file_name}", + mode => $apache::file_mode, + content => template('apache/mod/cache_disk.conf.erb'), + require => Exec["mkdir ${apache::mod_dir}"], + before => File[$apache::mod_dir], + notify => Class['apache::service'], + } +} diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index 4a3dc35883..6b9a0c7a4d 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -6,55 +6,29 @@ # Default depends on the Apache version and operating system: # - Debian: /var/cache/apache2/mod_cache_disk # - FreeBSD: /var/cache/mod_cache_disk -# - Red Hat: /var/cache/httpd/proxy +# - Red Hat, Apache 2.4: /var/cache/httpd/proxy +# - Red Hat, Apache 2.2: /var/cache/mod_proxy # # @param cache_ignore_headers # Specifies HTTP header(s) that should not be stored in the cache. # -# @param default_cache_enable -# Default value is true, which enables "CacheEnable disk /" in disk_cache.conf for the webserver. This would cache -# every request to apache by default for every vhost. If set to false the default cache all behaviour is supressed. -# You can then control this behaviour in individual vhosts by explicitly defining CacheEnable. -# # @note -# On Apache 2.4, mod_cache_disk installed. +# Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. +# This class is deprecated, use mode_cache_disk instead +# +# @see https://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html for additional documentation on version 2.2. # -# @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation. +# @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation on version 2.4. # class apache::mod::disk_cache ( - Optional[Stdlib::Absolutepath] $cache_root = undef, - Optional[String] $cache_ignore_headers = undef, - Boolean $default_cache_enable = true, + $cache_root = undef, + $cache_ignore_headers = undef, ) { - include apache - if $cache_root { - $_cache_root = $cache_root - } else { - $_cache_root = $facts['os']['family'] ? { - 'Debian' => '/var/cache/apache2/mod_cache_disk', - 'RedHat' => '/var/cache/httpd/proxy', - 'FreeBSD' => '/var/cache/mod_cache_disk', - } - } - - apache::mod { 'cache_disk': } - - Class['apache::mod::cache'] -> Class['apache::mod::disk_cache'] - - $parameters = { - 'default_cache_enable' => $default_cache_enable, - '_cache_root' => $_cache_root, - 'cache_ignore_headers' => $cache_ignore_headers, - } + deprecation('apache::mod::disk_cache','This module is deprecated; please use apache::mod::cache_disk') - # Template uses $_cache_root - file { 'disk_cache.conf': - ensure => file, - path => "${apache::mod_dir}/disk_cache.conf", - mode => $apache::file_mode, - content => epp('apache/mod/disk_cache.conf.epp', $parameters), - require => Exec["mkdir ${apache::mod_dir}"], - before => File[$apache::mod_dir], - notify => Class['apache::service'], + class { 'apache::mod::cache_disk': + cache_root => $cache_root, + cache_enable => ['/'], + cache_ignore_headers => $cache_ignore_headers, } } diff --git a/templates/mod/cache_disk.conf.erb b/templates/mod/cache_disk.conf.erb new file mode 100644 index 0000000000..e98632fe10 --- /dev/null +++ b/templates/mod/cache_disk.conf.erb @@ -0,0 +1,36 @@ +CacheRoot "<%= @_cache_root %>" +<%- if @cache_enable -%> + <%- @cache_enable.each do |enable| -%> +CacheEnable disk <%= enable %> + <%- end -%> +<%- end -%> +<%- if @cache_dir_length -%> +CacheDirLength <%= @cache_dir_length %> +<%- end -%> +<%- if @cache_dir_levels -%> +CacheDirLevels <%= @cache_dir_levels %> +<%- end -%> +<%- if @cache_default_expire -%> +CacheDefaultExpire <%= @cache_default_expire %> +<%- end -%> +<%- if @cache_max_expire -%> +CacheMaxExpire <%= @cache_max_expire %> +<%- end -%> +<%- if @cache_ignore_no_lastmod -%> +CacheIgnoreNoLastMod <%= @cache_ignore_no_lastmod %> +<%- end -%> +<%- if @cache_header -%> +CacheHeader <%= @cache_header %> +<%- end -%> +<%- if @cache_lock -%> +CacheLock <%= @cache_lock %> +<%- end -%> +<%- if @cache_ignore_cache_control -%> +CacheIgnoreCacheControl <%= @cache_ignore_cache_control %> +<%- end -%> +<%- if @cache_max_filesize -%> +CacheMaxFileSize <%= @cache_max_filesize %> +<%- end -%> +<%- if @cache_ignore_headers -%> +CacheIgnoreHeaders <%= @cache_ignore_headers -%> +<%- end -%> From 60c3d46fb169829c52ad71e3f9c9969fb01116c6 Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Fri, 12 Jan 2024 09:58:07 +0100 Subject: [PATCH 02/14] Fixing parameters in deprecated module to keep backwards compatibility --- manifests/mod/disk_cache.pp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index 6b9a0c7a4d..4c229c0ff8 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -6,8 +6,6 @@ # Default depends on the Apache version and operating system: # - Debian: /var/cache/apache2/mod_cache_disk # - FreeBSD: /var/cache/mod_cache_disk -# - Red Hat, Apache 2.4: /var/cache/httpd/proxy -# - Red Hat, Apache 2.2: /var/cache/mod_proxy # # @param cache_ignore_headers # Specifies HTTP header(s) that should not be stored in the cache. @@ -16,13 +14,12 @@ # Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. # This class is deprecated, use mode_cache_disk instead # -# @see https://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html for additional documentation on version 2.2. -# # @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation on version 2.4. # class apache::mod::disk_cache ( - $cache_root = undef, - $cache_ignore_headers = undef, + Optional[Stdlib::Absolutepath] $cache_root = undef, + Optional[String] $cache_ignore_headers = undef, + Boolean $default_cache_enable = true, ) { deprecation('apache::mod::disk_cache','This module is deprecated; please use apache::mod::cache_disk') From ec10dff6e20c8bb99de92512ea97a13327ac31fd Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Fri, 12 Jan 2024 12:10:46 +0100 Subject: [PATCH 03/14] Optimization Fix parameters to keep backwards compatibility Added tests --- manifests/mod/cache.pp | 54 +++++++++++- manifests/mod/cache_disk.pp | 108 +++++++++--------------- manifests/mod/disk_cache.pp | 16 +++- spec/classes/mod/cache_disk_spec.rb | 123 ++++++++++++++++++++++++++++ spec/classes/mod/cache_spec.rb | 110 +++++++++++++++++++++++++ spec/classes/mod/disk_cache_spec.rb | 34 ++++---- templates/mod/cache.conf.epp | 30 +++++++ templates/mod/cache_disk.conf.epp | 26 ++++++ templates/mod/cache_disk.conf.erb | 36 -------- templates/mod/disk_cache.conf.epp | 9 -- 10 files changed, 409 insertions(+), 137 deletions(-) create mode 100644 spec/classes/mod/cache_disk_spec.rb create mode 100644 spec/classes/mod/cache_spec.rb create mode 100644 templates/mod/cache.conf.epp create mode 100644 templates/mod/cache_disk.conf.epp delete mode 100644 templates/mod/cache_disk.conf.erb delete mode 100644 templates/mod/disk_cache.conf.epp diff --git a/manifests/mod/cache.pp b/manifests/mod/cache.pp index a822ae9aa4..3ed71a60dc 100644 --- a/manifests/mod/cache.pp +++ b/manifests/mod/cache.pp @@ -1,8 +1,58 @@ # @summary # Installs `mod_cache` -# +# +# @param cache_ignore_headers +# Specifies HTTP header(s) that should not be stored in the cache. +# +# @param cache_default_expire +# The default duration to cache a document when no expiry date is specified. +# +# @param cache_max_expire +# The maximum time in seconds to cache a document +# +# @param cache_ignore_no_lastmod +# Ignore the fact that a response has no Last Modified header. +# +# @param cache_header +# Add an X-Cache header to the response. +# +# @param cache_lock +# Enable the thundering herd lock. +# +# @param cache_ignore_cache_control +# Ignore request to not serve cached content to client +# # @see https://httpd.apache.org/docs/current/mod/mod_cache.html for additional documentation. # -class apache::mod::cache { +class apache::mod::cache ( + Optional[String] $cache_ignore_headers = undef, + Optional[Integer] $cache_default_expire = undef, + Optional[Integer] $cache_max_expire = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_no_lastmod = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_header = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_lock = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_cache_control = undef, +) { + include apache ::apache::mod { 'cache': } + + $_configuration_file_name = 'cache.conf' + + file { $_configuration_file_name: + ensure => file, + path => "${apache::mod_dir}/${_configuration_file_name}", + mode => $apache::file_mode, + content => epp('apache/mod/cache.conf.epp', { + cache_ignore_headers => $cache_ignore_headers, + cache_default_expire => $cache_default_expire, + cache_max_expire => $cache_max_expire, + cache_ignore_no_lastmod => $cache_ignore_no_lastmod, + cache_header => $cache_header, + cache_lock => $cache_lock, + cache_ignore_cache_control => $cache_ignore_cache_control, + }), + require => Exec["mkdir ${apache::mod_dir}"], + before => File[$apache::mod_dir], + notify => Class['apache::service'], + } } diff --git a/manifests/mod/cache_disk.pp b/manifests/mod/cache_disk.pp index 83abcf5f37..97631d4a5a 100644 --- a/manifests/mod/cache_disk.pp +++ b/manifests/mod/cache_disk.pp @@ -12,108 +12,78 @@ # - Debian: /var/cache/apache2/mod_cache_disk # - FreeBSD: /var/cache/mod_cache_disk # - Red Hat, Apache 2.4: /var/cache/httpd/proxy -# - Red Hat, Apache 2.2: /var/cache/mod_proxy # # @param cache_enable # Defines an array of directories to cache, the default is none -# -# @param cache_ignore_headers -# Specifies HTTP header(s) that should not be stored in the cache. -# + # @param cache_dir_length # The number of characters in subdirectory names # # @param cache_dir_levels # The number of levels of subdirectories in the cache. # -# @param cache_default_expire -# The default duration to cache a document when no expiry date is specified. -# -# @param cache_max_expire -# The maximum time in seconds to cache a document -# -# @param cache_ignore_no_lastmod -# Ignore the fact that a response has no Last Modified header. -# -# @param cache_header -# Add an X-Cache header to the response. -# -# @param cache_lock -# Enable the thundering herd lock. -# -# @param cache_ignore_cache_control -# Ignore request to not serve cached content to client -# # @param cache_max_filesize # The maximum size (in bytes) of a document to be placed in the cache # +# @param cache_ignore_headers +# DEPRECATED Ignore request to not serve cached content to client (included for compatibility reasons to support disk_cache) +# +# @param configuration_file_name +# DEPRECATED Name of module configuration file (used for the compatibility layer for disk_cache) +# # @note # Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. # -# @see https://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html for additional documentation on version 2.2. -# # @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation on version 2.4. # class apache::mod::cache_disk ( - $cache_root = undef, - Array[String] $cache_enable = [], - Optional[String] $cache_ignore_headers = undef, - Optional[Integer] $cache_dir_length = undef, - Optional[Integer] $cache_dir_levels = undef, - Optional[Integer] $cache_default_expire = undef, - Optional[Integer] $cache_max_expire = undef, - Optional[Enum['Off', 'On']] $cache_ignore_no_lastmod = undef, - Optional[Enum['off', 'on']] $cache_header = undef, - Optional[Enum['off', 'on']] $cache_lock = undef, - Optional[Enum['Off', 'On']] $cache_ignore_cache_control = undef, - Optional[Integer] $cache_max_filesize = undef, + Optional[String] $cache_root = undef, + Array[String] $cache_enable = [], + Optional[Integer] $cache_dir_length = undef, + Optional[Integer] $cache_dir_levels = undef, + Optional[Integer] $cache_max_filesize = undef, + Optional[String] $cache_ignore_headers = undef, + Optional[String] $configuration_file_name = undef, ) { include apache - if $cache_root { - $_cache_root = $cache_root + + if $cache_ignore_headers { + deprecation( + 'apache::mod::cache_disk', + 'The parameter cache_ignore_headers is deprecated. Please use apache::mod::cache::cache_ignore_headers instead.' + ) } - elsif versioncmp($apache::apache_version, '2.4') >= 0 { - $_module_name = 'cache_disk' - $_cache_root = $::osfamily ? { + + $_cache_root = $cache_root ? { + undef => $facts['os']['family'] ? { 'debian' => '/var/cache/apache2/mod_cache_disk', 'redhat' => '/var/cache/httpd/proxy', 'freebsd' => '/var/cache/mod_cache_disk', - } + }, + default => $cache_root, } - else { - $_module_name = 'disk_cache' - $_cache_root = $::osfamily ? { - 'debian' => '/var/cache/apache2/mod_disk_cache', - 'redhat' => '/var/cache/mod_proxy', - 'freebsd' => '/var/cache/mod_disk_cache', - } + $_configuration_file_name = $configuration_file_name ? { + undef => 'cache_disk.conf', + default => $configuration_file_name } - $_configuration_file_name = "${_module_name}.conf" - $_class_name = "::apache::mod::${_module_name}" + $_class_name = 'apache::mod::cache_disk' - apache::mod { $_module_name: } + apache::mod { 'cache_disk': } - Class['::apache::mod::cache'] -> Class[$_class_name] + Class['apache::mod::cache'] -> Class[$_class_name] - # Template uses - # - $_cache_root - # - $cache_enable - # - $cache_dir_length - # - $cache_ignore_headers - # - $cache_dir_length - # - $cache_dir_levels - # - $cache_default_expire - # - $cache_max_expire - # - $cache_ignore_no_lastmod - # - $cache_header - # - $cache_lock - # - $cache_ignore_cache_control - # - $cache_max_filesize file { $_configuration_file_name: ensure => file, path => "${apache::mod_dir}/${_configuration_file_name}", mode => $apache::file_mode, - content => template('apache/mod/cache_disk.conf.erb'), + content => epp('apache/mod/cache_disk.conf.epp', { + cache_root => $_cache_root, + cache_enable => $cache_enable, + cache_dir_length => $cache_dir_length, + cache_dir_levels => $cache_dir_levels, + cache_max_filesize => $cache_max_filesize, + cache_ignore_headers => $cache_ignore_headers, + }), require => Exec["mkdir ${apache::mod_dir}"], before => File[$apache::mod_dir], notify => Class['apache::service'], diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index 4c229c0ff8..2aa8a9bcc5 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -10,6 +10,11 @@ # @param cache_ignore_headers # Specifies HTTP header(s) that should not be stored in the cache. # +# @param default_cache_enable +# Default value is true, which enables "CacheEnable disk /" in disk_cache.conf for the webserver. This would cache +# every request to apache by default for every vhost. If set to false the default cache all behaviour is supressed. +# You can then control this behaviour in individual vhosts by explicitly defining CacheEnable. +# # @note # Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. # This class is deprecated, use mode_cache_disk instead @@ -21,11 +26,14 @@ Optional[String] $cache_ignore_headers = undef, Boolean $default_cache_enable = true, ) { - deprecation('apache::mod::disk_cache','This module is deprecated; please use apache::mod::cache_disk') + deprecation('apache::mod::disk_cache', 'This module is deprecated; please use apache::mod::cache_disk') class { 'apache::mod::cache_disk': - cache_root => $cache_root, - cache_enable => ['/'], - cache_ignore_headers => $cache_ignore_headers, + cache_root => $cache_root, + cache_enable => ['/'], + cache_ignore_headers => $cache_ignore_headers, + cache_dir_length => 1, + cache_dir_levels => 2, + configuration_file_name => 'cache_disk.conf' } } diff --git a/spec/classes/mod/cache_disk_spec.rb b/spec/classes/mod/cache_disk_spec.rb new file mode 100644 index 0000000000..6a18c61388 --- /dev/null +++ b/spec/classes/mod/cache_disk_spec.rb @@ -0,0 +1,123 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'apache::mod::cache_disk', type: :class do + context 'on a Debian OS' do + include_examples 'Debian 11' + + let(:params) do + { + cache_enable: ['/'], + } + end + + let :pre_condition do + 'class{ "apache": + default_mods => ["cache"], + mod_dir => "/tmp/junk", + }' + end + + it { is_expected.to compile } + it { is_expected.to contain_class('apache::mod::cache_disk') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } + it { is_expected.to contain_apache__mod('cache_disk') } + + default_config = %r{CacheEnable disk /\nCacheRoot "/var/cache/apache2/mod_cache_disk"} + + it { + expect(subject).to contain_file('cache_disk.conf') + .with(content: default_config) + } + + describe 'with multiple cache_enable parameters' do + let(:params) do + { + cache_enable: %w[/ /something], + } + end + + it { + expect(subject).to contain_file('cache_disk.conf') + .with(content: %r{CacheEnable disk /\nCacheEnable disk /something\nCacheRoot "/var/cache/apache2/mod_cache_disk"}) + } + end + + describe 'with cache_dir_length' do + let(:params) do + { + cache_dir_length: 2, + cache_enable: ['/'], + } + end + + it { + expect(subject).to contain_file('cache_disk.conf') + .with(content: %r{#{default_config}\nCacheDirLength 2}) + } + end + + describe 'with cache_dir_levels' do + let(:params) do + { + cache_dir_levels: 2, + cache_enable: ['/'], + } + end + + it { + expect(subject).to contain_file('cache_disk.conf') + .with(content: %r{#{default_config}\nCacheDirLevels 2}) + } + end + end + + context 'on a RedHat 8-based OS' do + include_examples 'RedHat 8' + + let(:params) do + { + cache_enable: ['/'], + } + end + + let :pre_condition do + 'class{ "apache": + default_mods => ["cache"], + mod_dir => "/tmp/junk", + }' + end + + it { is_expected.to compile } + + it { + expect(subject).to contain_file('cache_disk.conf') + .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/httpd/proxy"}) + } + end + + context 'on a FreeBSD OS' do + include_examples 'FreeBSD 10' + + let(:params) do + { + cache_enable: ['/'], + } + end + + let :pre_condition do + 'class{ "apache": + default_mods => ["cache"], + mod_dir => "/tmp/junk", + }' + end + + it { is_expected.to compile } + + it { + expect(subject).to contain_file('cache_disk.conf') + .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/mod_cache_disk"}) + } + end +end diff --git a/spec/classes/mod/cache_spec.rb b/spec/classes/mod/cache_spec.rb new file mode 100644 index 0000000000..ee064f9bc7 --- /dev/null +++ b/spec/classes/mod/cache_spec.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'apache::mod::cache', type: :class do + context 'on a Debian OS' do + include_examples 'Debian 11' + + it { is_expected.to compile } + it { is_expected.to contain_class('apache::mod::cache') } + it { is_expected.to contain_apache__mod('cache') } + + it { + expect(subject).to contain_file('cache.conf') + .with(content: '') + } + + describe 'with cache_ignore_headers' do + let(:params) do + { + cache_ignore_headers: 'Set-Cookie', + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheIgnoreHeaders Set-Cookie}) + } + end + + describe 'with cache_default_expire' do + let(:params) do + { + cache_default_expire: 2000, + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheDefaultExpire 2000}) + } + end + + describe 'with cache_max_expire' do + let(:params) do + { + cache_max_expire: 2000, + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheMaxExpire 2000}) + } + end + + describe 'with cache_ignore_no_lastmod' do + let(:params) do + { + cache_ignore_no_lastmod: 'On', + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheIgnoreNoLastMod On}) + } + end + + describe 'with cache_header' do + let(:params) do + { + cache_header: 'On', + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheHeader On}) + } + end + + describe 'with cache_lock' do + let(:params) do + { + cache_lock: 'On', + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheLock On}) + } + end + + describe 'with cache_ignore_cache_control' do + let(:params) do + { + cache_ignore_cache_control: 'On', + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheIgnoreCacheControl On}) + } + end + + end +end diff --git a/spec/classes/mod/disk_cache_spec.rb b/spec/classes/mod/disk_cache_spec.rb index ce840bdcf6..b893cbd9b1 100644 --- a/spec/classes/mod/disk_cache_spec.rb +++ b/spec/classes/mod/disk_cache_spec.rb @@ -21,11 +21,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/apache2/mod_cache_disk"\nCacheDirLevels 2\nCacheDirLength 1\nCacheIgnoreHeaders Set-Cookie}) } @@ -34,11 +34,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheRoot "/var/cache/apache2/mod_cache_disk"\nCacheDirLevels 2\nCacheDirLength 1\n}) } end @@ -48,11 +48,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/apache2/mod_cache_disk"\nCacheDirLevels 2\nCacheDirLength 1\n}) } end @@ -83,7 +83,7 @@ it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/httpd/proxy"\nCacheDirLevels 2\nCacheDirLength 1\nCacheIgnoreHeaders Set-Cookie}) } @@ -92,11 +92,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheRoot "/var/cache/httpd/proxy"\nCacheDirLevels 2\nCacheDirLength 1\n}) } end @@ -106,11 +106,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/httpd/proxy"\nCacheDirLevels 2\nCacheDirLength 1\n}) } end @@ -140,11 +140,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/mod_cache_disk"\nCacheDirLevels 2\nCacheDirLength 1\nCacheIgnoreHeaders Set-Cookie}) } @@ -153,11 +153,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheRoot "/var/cache/mod_cache_disk"\nCacheDirLevels 2\nCacheDirLength 1\n}) } end @@ -167,11 +167,11 @@ it { is_expected.to compile } it { is_expected.to contain_class('apache::mod::disk_cache') } - it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Disk_cache]') } + it { is_expected.to contain_class('apache::mod::cache').that_comes_before('Class[Apache::Mod::Cache_disk]') } it { is_expected.to contain_apache__mod('cache_disk') } it { - expect(subject).to contain_file('disk_cache.conf') + expect(subject).to contain_file('cache_disk.conf') .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/mod_cache_disk"\nCacheDirLevels 2\nCacheDirLength 1\n}) } end diff --git a/templates/mod/cache.conf.epp b/templates/mod/cache.conf.epp new file mode 100644 index 0000000000..fba0300471 --- /dev/null +++ b/templates/mod/cache.conf.epp @@ -0,0 +1,30 @@ +<% | + Optional[String] $cache_ignore_headers = undef, + Optional[Integer] $cache_default_expire = undef, + Optional[Integer] $cache_max_expire = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_no_lastmod = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_header = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_lock = undef, + Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_cache_control = undef, +| -%> +<%- if $cache_default_expire { -%> +CacheDefaultExpire <%= $cache_default_expire %> +<%- } -%> +<%- if $cache_max_expire { -%> +CacheMaxExpire <%= $cache_max_expire %> +<%- } -%> +<%- if $cache_ignore_no_lastmod { -%> +CacheIgnoreNoLastMod <%= $cache_ignore_no_lastmod %> +<%- } -%> +<%- if $cache_header { -%> +CacheHeader <%= $cache_header %> +<%- } -%> +<%- if $cache_lock { -%> +CacheLock <%= $cache_lock %> +<%- } -%> +<%- if $cache_ignore_cache_control { -%> +CacheIgnoreCacheControl <%= $cache_ignore_cache_control %> +<%- } -%> +<%- if $cache_ignore_headers { -%> +CacheIgnoreHeaders <%= $cache_ignore_headers -%> +<%- } -%> \ No newline at end of file diff --git a/templates/mod/cache_disk.conf.epp b/templates/mod/cache_disk.conf.epp new file mode 100644 index 0000000000..b2fb2b1cb1 --- /dev/null +++ b/templates/mod/cache_disk.conf.epp @@ -0,0 +1,26 @@ +<% | + Optional[String] $cache_root = undef, + Array[String] $cache_enable = [], + Optional[Integer] $cache_dir_length = undef, + Optional[Integer] $cache_dir_levels = undef, + Optional[Integer] $cache_max_filesize = undef, + Optional[String] $cache_ignore_headers = undef, +| -%> +<%- if $cache_enable { -%> + <%- $cache_enable.each |$enable| { -%> +CacheEnable disk <%= $enable %> + <%- } -%> +<%- } -%> +CacheRoot "<%= $cache_root %>" +<%- if $cache_dir_levels { -%> +CacheDirLevels <%= $cache_dir_levels %> +<%- } -%> +<%- if $cache_dir_length { -%> +CacheDirLength <%= $cache_dir_length %> +<%- } -%> +<%- if $cache_max_filesize { -%> +CacheMaxFileSize <%= $cache_max_filesize %> +<%- } -%> +<%- if $cache_ignore_headers { -%> +CacheIgnoreHeaders <%= $cache_ignore_headers -%> +<%- } -%> \ No newline at end of file diff --git a/templates/mod/cache_disk.conf.erb b/templates/mod/cache_disk.conf.erb deleted file mode 100644 index e98632fe10..0000000000 --- a/templates/mod/cache_disk.conf.erb +++ /dev/null @@ -1,36 +0,0 @@ -CacheRoot "<%= @_cache_root %>" -<%- if @cache_enable -%> - <%- @cache_enable.each do |enable| -%> -CacheEnable disk <%= enable %> - <%- end -%> -<%- end -%> -<%- if @cache_dir_length -%> -CacheDirLength <%= @cache_dir_length %> -<%- end -%> -<%- if @cache_dir_levels -%> -CacheDirLevels <%= @cache_dir_levels %> -<%- end -%> -<%- if @cache_default_expire -%> -CacheDefaultExpire <%= @cache_default_expire %> -<%- end -%> -<%- if @cache_max_expire -%> -CacheMaxExpire <%= @cache_max_expire %> -<%- end -%> -<%- if @cache_ignore_no_lastmod -%> -CacheIgnoreNoLastMod <%= @cache_ignore_no_lastmod %> -<%- end -%> -<%- if @cache_header -%> -CacheHeader <%= @cache_header %> -<%- end -%> -<%- if @cache_lock -%> -CacheLock <%= @cache_lock %> -<%- end -%> -<%- if @cache_ignore_cache_control -%> -CacheIgnoreCacheControl <%= @cache_ignore_cache_control %> -<%- end -%> -<%- if @cache_max_filesize -%> -CacheMaxFileSize <%= @cache_max_filesize %> -<%- end -%> -<%- if @cache_ignore_headers -%> -CacheIgnoreHeaders <%= @cache_ignore_headers -%> -<%- end -%> diff --git a/templates/mod/disk_cache.conf.epp b/templates/mod/disk_cache.conf.epp deleted file mode 100644 index 2cfc0e647a..0000000000 --- a/templates/mod/disk_cache.conf.epp +++ /dev/null @@ -1,9 +0,0 @@ -<% if $default_cache_enable { -%> -CacheEnable disk / -<% } -%> -CacheRoot "<%= $_cache_root %>" -CacheDirLevels 2 -CacheDirLength 1 -<% if $cache_ignore_headers { -%> -CacheIgnoreHeaders <%= $cache_ignore_headers -%> -<% } -%> \ No newline at end of file From c39316f4fdc5648d9627ef68dce8cd7b62c37adf Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Tue, 30 Jan 2024 07:17:39 +0100 Subject: [PATCH 04/14] Suggestions from Code Review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Romain Tartière --- manifests/mod/cache.pp | 16 ++++++++-------- manifests/mod/cache_disk.pp | 2 +- manifests/mod/disk_cache.pp | 2 +- templates/mod/cache.conf.epp | 16 ++++++++-------- templates/mod/cache_disk.conf.epp | 2 +- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/manifests/mod/cache.pp b/manifests/mod/cache.pp index 3ed71a60dc..d31cebd3f0 100644 --- a/manifests/mod/cache.pp +++ b/manifests/mod/cache.pp @@ -25,16 +25,16 @@ # @see https://httpd.apache.org/docs/current/mod/mod_cache.html for additional documentation. # class apache::mod::cache ( - Optional[String] $cache_ignore_headers = undef, - Optional[Integer] $cache_default_expire = undef, - Optional[Integer] $cache_max_expire = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_no_lastmod = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_header = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_lock = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_cache_control = undef, + Array[String[1]] $cache_ignore_headers = [], + Optional[Integer] $cache_default_expire = undef, + Optional[Integer] $cache_max_expire = undef, + Optional[Apache::OnOff] $cache_ignore_no_lastmod = undef, + Optional[Apache::OnOff] $cache_header = undef, + Optional[Apache::OnOff] $cache_lock = undef, + Optional[Apache::OnOff] $cache_ignore_cache_control = undef, ) { include apache - ::apache::mod { 'cache': } + apache::mod { 'cache': } $_configuration_file_name = 'cache.conf' diff --git a/manifests/mod/cache_disk.pp b/manifests/mod/cache_disk.pp index 97631d4a5a..c419e8abae 100644 --- a/manifests/mod/cache_disk.pp +++ b/manifests/mod/cache_disk.pp @@ -37,7 +37,7 @@ # @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation on version 2.4. # class apache::mod::cache_disk ( - Optional[String] $cache_root = undef, + Optional[Stdlib::Absolutepath] $cache_root = undef, Array[String] $cache_enable = [], Optional[Integer] $cache_dir_length = undef, Optional[Integer] $cache_dir_levels = undef, diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index 2aa8a9bcc5..fe0fc8b406 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -26,7 +26,7 @@ Optional[String] $cache_ignore_headers = undef, Boolean $default_cache_enable = true, ) { - deprecation('apache::mod::disk_cache', 'This module is deprecated; please use apache::mod::cache_disk') + deprecation('apache::mod::disk_cache', 'This class is deprecated; please use apache::mod::cache_disk') class { 'apache::mod::cache_disk': cache_root => $cache_root, diff --git a/templates/mod/cache.conf.epp b/templates/mod/cache.conf.epp index fba0300471..136f277e40 100644 --- a/templates/mod/cache.conf.epp +++ b/templates/mod/cache.conf.epp @@ -1,11 +1,11 @@ <% | - Optional[String] $cache_ignore_headers = undef, - Optional[Integer] $cache_default_expire = undef, - Optional[Integer] $cache_max_expire = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_no_lastmod = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_header = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_lock = undef, - Optional[Enum['off', 'on', 'Off', 'On']] $cache_ignore_cache_control = undef, + Optional[String] $cache_ignore_headers = undef, + Optional[Integer] $cache_default_expire = undef, + Optional[Integer] $cache_max_expire = undef, + Optional[Apache::OnOff] $cache_ignore_no_lastmod = undef, + Optional[Apache::OnOff] $cache_header = undef, + Optional[Apache::OnOff] $cache_lock = undef, + Optional[Apache::OnOff] $cache_ignore_cache_control = undef, | -%> <%- if $cache_default_expire { -%> CacheDefaultExpire <%= $cache_default_expire %> @@ -27,4 +27,4 @@ CacheIgnoreCacheControl <%= $cache_ignore_cache_control %> <%- } -%> <%- if $cache_ignore_headers { -%> CacheIgnoreHeaders <%= $cache_ignore_headers -%> -<%- } -%> \ No newline at end of file +<%- } -%> diff --git a/templates/mod/cache_disk.conf.epp b/templates/mod/cache_disk.conf.epp index b2fb2b1cb1..030f0ba937 100644 --- a/templates/mod/cache_disk.conf.epp +++ b/templates/mod/cache_disk.conf.epp @@ -23,4 +23,4 @@ CacheMaxFileSize <%= $cache_max_filesize %> <%- } -%> <%- if $cache_ignore_headers { -%> CacheIgnoreHeaders <%= $cache_ignore_headers -%> -<%- } -%> \ No newline at end of file +<%- } -%> From f86abf28f4207814e356ddfb71ed5c3bff9a59ba Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Tue, 30 Jan 2024 07:43:35 +0100 Subject: [PATCH 05/14] Update manifests/mod/disk_cache.pp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Romain Tartière --- manifests/mod/disk_cache.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index fe0fc8b406..57ee028e14 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -31,7 +31,7 @@ class { 'apache::mod::cache_disk': cache_root => $cache_root, cache_enable => ['/'], - cache_ignore_headers => $cache_ignore_headers, + cache_ignore_headers => $cache_ignore_headers.split(' '), cache_dir_length => 1, cache_dir_levels => 2, configuration_file_name => 'cache_disk.conf' From aeef7fb59bd0244d76006928bf358ea9e0f19e36 Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Tue, 30 Jan 2024 07:57:04 +0100 Subject: [PATCH 06/14] Update spec/classes/mod/cache_disk_spec.rb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Romain Tartière --- spec/classes/mod/cache_disk_spec.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/spec/classes/mod/cache_disk_spec.rb b/spec/classes/mod/cache_disk_spec.rb index 6a18c61388..a85054063d 100644 --- a/spec/classes/mod/cache_disk_spec.rb +++ b/spec/classes/mod/cache_disk_spec.rb @@ -26,10 +26,7 @@ default_config = %r{CacheEnable disk /\nCacheRoot "/var/cache/apache2/mod_cache_disk"} - it { - expect(subject).to contain_file('cache_disk.conf') - .with(content: default_config) - } + it { is_expected.to contain_file('cache_disk.conf').with(content: default_config) } describe 'with multiple cache_enable parameters' do let(:params) do From 9fdf75446e69d2ff605add2d98797d3e34e22cbf Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Tue, 30 Jan 2024 09:04:19 +0100 Subject: [PATCH 07/14] Rubocop fixes --- spec/classes/mod/cache_disk_spec.rb | 12 ++++++------ spec/classes/mod/cache_spec.rb | 17 ++++++++--------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/spec/classes/mod/cache_disk_spec.rb b/spec/classes/mod/cache_disk_spec.rb index a85054063d..fdd55fa8d9 100644 --- a/spec/classes/mod/cache_disk_spec.rb +++ b/spec/classes/mod/cache_disk_spec.rb @@ -31,13 +31,13 @@ describe 'with multiple cache_enable parameters' do let(:params) do { - cache_enable: %w[/ /something], + cache_enable: ['/', '/something'], } end it { expect(subject).to contain_file('cache_disk.conf') - .with(content: %r{CacheEnable disk /\nCacheEnable disk /something\nCacheRoot "/var/cache/apache2/mod_cache_disk"}) + .with(content: %r{CacheEnable disk /\nCacheEnable disk /something\nCacheRoot "/var/cache/apache2/mod_cache_disk"}) } end @@ -51,7 +51,7 @@ it { expect(subject).to contain_file('cache_disk.conf') - .with(content: %r{#{default_config}\nCacheDirLength 2}) + .with(content: %r{#{default_config}\nCacheDirLength 2}) } end @@ -65,7 +65,7 @@ it { expect(subject).to contain_file('cache_disk.conf') - .with(content: %r{#{default_config}\nCacheDirLevels 2}) + .with(content: %r{#{default_config}\nCacheDirLevels 2}) } end end @@ -90,7 +90,7 @@ it { expect(subject).to contain_file('cache_disk.conf') - .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/httpd/proxy"}) + .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/httpd/proxy"}) } end @@ -114,7 +114,7 @@ it { expect(subject).to contain_file('cache_disk.conf') - .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/mod_cache_disk"}) + .with(content: %r{CacheEnable disk /\nCacheRoot "/var/cache/mod_cache_disk"}) } end end diff --git a/spec/classes/mod/cache_spec.rb b/spec/classes/mod/cache_spec.rb index ee064f9bc7..8acb57b0db 100644 --- a/spec/classes/mod/cache_spec.rb +++ b/spec/classes/mod/cache_spec.rb @@ -12,7 +12,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: '') + .with(content: '') } describe 'with cache_ignore_headers' do @@ -24,7 +24,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheIgnoreHeaders Set-Cookie}) + .with(content: %r{CacheIgnoreHeaders Set-Cookie}) } end @@ -37,7 +37,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheDefaultExpire 2000}) + .with(content: %r{CacheDefaultExpire 2000}) } end @@ -50,7 +50,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheMaxExpire 2000}) + .with(content: %r{CacheMaxExpire 2000}) } end @@ -63,7 +63,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheIgnoreNoLastMod On}) + .with(content: %r{CacheIgnoreNoLastMod On}) } end @@ -76,7 +76,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheHeader On}) + .with(content: %r{CacheHeader On}) } end @@ -89,7 +89,7 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheLock On}) + .with(content: %r{CacheLock On}) } end @@ -102,9 +102,8 @@ it { expect(subject).to contain_file('cache.conf') - .with(content: %r{CacheIgnoreCacheControl On}) + .with(content: %r{CacheIgnoreCacheControl On}) } end - end end From a7e55d3782b7c0e27b7ff0740e38c49ee72fd21f Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Tue, 30 Jan 2024 11:07:25 +0100 Subject: [PATCH 08/14] Update manifests/mod/cache_disk.pp Co-authored-by: Ewoud Kohl van Wijngaarden --- manifests/mod/cache_disk.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/mod/cache_disk.pp b/manifests/mod/cache_disk.pp index c419e8abae..56c4041f10 100644 --- a/manifests/mod/cache_disk.pp +++ b/manifests/mod/cache_disk.pp @@ -34,7 +34,7 @@ # @note # Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. # -# @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html for additional documentation on version 2.4. +# @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html # class apache::mod::cache_disk ( Optional[Stdlib::Absolutepath] $cache_root = undef, From 9e6e34e58911e20df4d8f86cf0dedd2329cedace Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Tue, 30 Jan 2024 11:08:22 +0100 Subject: [PATCH 09/14] Removed references to Apache 2.2 --- manifests/mod/cache_disk.pp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/manifests/mod/cache_disk.pp b/manifests/mod/cache_disk.pp index 56c4041f10..4ad00a1b38 100644 --- a/manifests/mod/cache_disk.pp +++ b/manifests/mod/cache_disk.pp @@ -11,11 +11,11 @@ # Default depends on the Apache version and operating system: # - Debian: /var/cache/apache2/mod_cache_disk # - FreeBSD: /var/cache/mod_cache_disk -# - Red Hat, Apache 2.4: /var/cache/httpd/proxy +# - Red Hat: /var/cache/httpd/proxy # # @param cache_enable # Defines an array of directories to cache, the default is none - +# # @param cache_dir_length # The number of characters in subdirectory names # @@ -31,9 +31,6 @@ # @param configuration_file_name # DEPRECATED Name of module configuration file (used for the compatibility layer for disk_cache) # -# @note -# Apache 2.2, mod_disk_cache installed. On Apache 2.4, mod_cache_disk installed. -# # @see https://httpd.apache.org/docs/2.4/mod/mod_cache_disk.html # class apache::mod::cache_disk ( From ce2a3a911622ef3a0d2b2d8c074fe170a2dc5cbb Mon Sep 17 00:00:00 2001 From: Dennis Ploeger Date: Wed, 31 Jan 2024 08:51:46 +0100 Subject: [PATCH 10/14] Update manifests/mod/cache_disk.pp Co-authored-by: Ewoud Kohl van Wijngaarden --- manifests/mod/cache_disk.pp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/manifests/mod/cache_disk.pp b/manifests/mod/cache_disk.pp index 4ad00a1b38..c8752fc4f3 100644 --- a/manifests/mod/cache_disk.pp +++ b/manifests/mod/cache_disk.pp @@ -59,10 +59,7 @@ }, default => $cache_root, } - $_configuration_file_name = $configuration_file_name ? { - undef => 'cache_disk.conf', - default => $configuration_file_name - } + $_configuration_file_name = pick($configuration_file_name, 'cache_disk.conf') $_class_name = 'apache::mod::cache_disk' apache::mod { 'cache_disk': } From a84601cd32678c3d07dfc071e1e4f0ee812813bb Mon Sep 17 00:00:00 2001 From: Thomas Minor Date: Wed, 31 Jan 2024 15:52:29 +0100 Subject: [PATCH 11/14] fix: fix apache cache_ignore_header regression --- templates/mod/cache.conf.epp | 4 ++-- templates/mod/cache_disk.conf.epp | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/templates/mod/cache.conf.epp b/templates/mod/cache.conf.epp index 136f277e40..54fa76441f 100644 --- a/templates/mod/cache.conf.epp +++ b/templates/mod/cache.conf.epp @@ -1,5 +1,5 @@ <% | - Optional[String] $cache_ignore_headers = undef, + Optional[Array[String[1]]] $cache_ignore_headers = undef, Optional[Integer] $cache_default_expire = undef, Optional[Integer] $cache_max_expire = undef, Optional[Apache::OnOff] $cache_ignore_no_lastmod = undef, @@ -26,5 +26,5 @@ CacheLock <%= $cache_lock %> CacheIgnoreCacheControl <%= $cache_ignore_cache_control %> <%- } -%> <%- if $cache_ignore_headers { -%> -CacheIgnoreHeaders <%= $cache_ignore_headers -%> +CacheIgnoreHeaders <% $cache_ignore_headers.each |$header| { %><%= $header %> <% } %> <%- } -%> diff --git a/templates/mod/cache_disk.conf.epp b/templates/mod/cache_disk.conf.epp index 030f0ba937..55d3351d15 100644 --- a/templates/mod/cache_disk.conf.epp +++ b/templates/mod/cache_disk.conf.epp @@ -4,7 +4,6 @@ Optional[Integer] $cache_dir_length = undef, Optional[Integer] $cache_dir_levels = undef, Optional[Integer] $cache_max_filesize = undef, - Optional[String] $cache_ignore_headers = undef, | -%> <%- if $cache_enable { -%> <%- $cache_enable.each |$enable| { -%> @@ -21,6 +20,3 @@ CacheDirLength <%= $cache_dir_length %> <%- if $cache_max_filesize { -%> CacheMaxFileSize <%= $cache_max_filesize %> <%- } -%> -<%- if $cache_ignore_headers { -%> -CacheIgnoreHeaders <%= $cache_ignore_headers -%> -<%- } -%> From 6c29fbfa222df6c266058a4efa8398f66b5b58a0 Mon Sep 17 00:00:00 2001 From: Thomas Minor Date: Wed, 31 Jan 2024 22:56:58 +0100 Subject: [PATCH 12/14] refactor: change config line generation to simpler and more readable solution --- templates/mod/cache.conf.epp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/mod/cache.conf.epp b/templates/mod/cache.conf.epp index 54fa76441f..7eafbd6a15 100644 --- a/templates/mod/cache.conf.epp +++ b/templates/mod/cache.conf.epp @@ -26,5 +26,5 @@ CacheLock <%= $cache_lock %> CacheIgnoreCacheControl <%= $cache_ignore_cache_control %> <%- } -%> <%- if $cache_ignore_headers { -%> -CacheIgnoreHeaders <% $cache_ignore_headers.each |$header| { %><%= $header %> <% } %> +CacheIgnoreHeaders <%= $cache_ignore_headers.join(' ') %> <%- } -%> From 873dc6beb85244ab4506cb008c92f68bee3fba5e Mon Sep 17 00:00:00 2001 From: Thomas Minor Date: Thu, 1 Feb 2024 12:16:01 +0100 Subject: [PATCH 13/14] fix: handle undefined value of $cache_ignore_headers in deprecated module and remove module from bsd defaults --- manifests/default_mods.pp | 2 -- manifests/mod/disk_cache.pp | 9 +++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/manifests/default_mods.pp b/manifests/default_mods.pp index b03b2660b5..474b53748b 100644 --- a/manifests/default_mods.pp +++ b/manifests/default_mods.pp @@ -69,8 +69,6 @@ 'FreeBSD': { include apache::mod::actions include apache::mod::authn_core - include apache::mod::cache - include apache::mod::disk_cache include apache::mod::filter include apache::mod::headers include apache::mod::info diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index 57ee028e14..5e46107a7d 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -1,6 +1,6 @@ # @summary # Installs and configures `mod_disk_cache`. -# +# # @param cache_root # Defines the name of the directory on the disk to contain cache files. # Default depends on the Apache version and operating system: @@ -28,10 +28,15 @@ ) { deprecation('apache::mod::disk_cache', 'This class is deprecated; please use apache::mod::cache_disk') + $_cache_ignore_headers = $cache_ignore_headers ? { + undef => [], + default => $cache_ignore_headers.split(' ') + } + class { 'apache::mod::cache_disk': cache_root => $cache_root, cache_enable => ['/'], - cache_ignore_headers => $cache_ignore_headers.split(' '), + cache_ignore_headers => $_cache_ignore_headers, cache_dir_length => 1, cache_dir_levels => 2, configuration_file_name => 'cache_disk.conf' From 8b998bb676cc444f19615dc76cdf1168b2f96842 Mon Sep 17 00:00:00 2001 From: Thomas Minor Date: Tue, 6 Feb 2024 12:05:12 +0100 Subject: [PATCH 14/14] fix: fix problems with deprecated modules and add additional test for multiple values --- manifests/mod/disk_cache.pp | 7 +------ spec/classes/mod/cache_spec.rb | 15 ++++++++++++++- spec/classes/mod/disk_cache_spec.rb | 2 +- templates/mod/cache.conf.epp | 4 ++-- templates/mod/cache_disk.conf.epp | 14 +++++++++----- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/manifests/mod/disk_cache.pp b/manifests/mod/disk_cache.pp index 5e46107a7d..92e56e23f3 100644 --- a/manifests/mod/disk_cache.pp +++ b/manifests/mod/disk_cache.pp @@ -28,15 +28,10 @@ ) { deprecation('apache::mod::disk_cache', 'This class is deprecated; please use apache::mod::cache_disk') - $_cache_ignore_headers = $cache_ignore_headers ? { - undef => [], - default => $cache_ignore_headers.split(' ') - } - class { 'apache::mod::cache_disk': cache_root => $cache_root, cache_enable => ['/'], - cache_ignore_headers => $_cache_ignore_headers, + cache_ignore_headers => $cache_ignore_headers, cache_dir_length => 1, cache_dir_levels => 2, configuration_file_name => 'cache_disk.conf' diff --git a/spec/classes/mod/cache_spec.rb b/spec/classes/mod/cache_spec.rb index 8acb57b0db..3e98a3e679 100644 --- a/spec/classes/mod/cache_spec.rb +++ b/spec/classes/mod/cache_spec.rb @@ -18,7 +18,7 @@ describe 'with cache_ignore_headers' do let(:params) do { - cache_ignore_headers: 'Set-Cookie', + cache_ignore_headers: ['Set-Cookie'], } end @@ -28,6 +28,19 @@ } end + describe 'with cache_ignore_headers' do + let(:params) do + { + cache_ignore_headers: ['Set-Cookie', 'X-Forwarded-For', 'Cross-Origin-Embedder-Policy', 'Expires', 'Access-Control-Allow-Headers'], + } + end + + it { + expect(subject).to contain_file('cache.conf') + .with(content: %r{CacheIgnoreHeaders Access-Control-Allow-Headers Cross-Origin-Embedder-Policy Expires Set-Cookie X-Forwarded-For}) + } + end + describe 'with cache_default_expire' do let(:params) do { diff --git a/spec/classes/mod/disk_cache_spec.rb b/spec/classes/mod/disk_cache_spec.rb index b893cbd9b1..9438d0886d 100644 --- a/spec/classes/mod/disk_cache_spec.rb +++ b/spec/classes/mod/disk_cache_spec.rb @@ -14,7 +14,7 @@ let :pre_condition do 'class{ "apache": - default_mods => ["cache"], + default_mods => ["cache", "disk_cache"], mod_dir => "/tmp/junk", }' end diff --git a/templates/mod/cache.conf.epp b/templates/mod/cache.conf.epp index 7eafbd6a15..354f3b52b8 100644 --- a/templates/mod/cache.conf.epp +++ b/templates/mod/cache.conf.epp @@ -25,6 +25,6 @@ CacheLock <%= $cache_lock %> <%- if $cache_ignore_cache_control { -%> CacheIgnoreCacheControl <%= $cache_ignore_cache_control %> <%- } -%> -<%- if $cache_ignore_headers { -%> -CacheIgnoreHeaders <%= $cache_ignore_headers.join(' ') %> +<%- if ! empty($cache_ignore_headers) { -%> +CacheIgnoreHeaders <%= $cache_ignore_headers.sort.join(' ') %> <%- } -%> diff --git a/templates/mod/cache_disk.conf.epp b/templates/mod/cache_disk.conf.epp index 55d3351d15..6ae5a7b130 100644 --- a/templates/mod/cache_disk.conf.epp +++ b/templates/mod/cache_disk.conf.epp @@ -1,9 +1,10 @@ <% | - Optional[String] $cache_root = undef, - Array[String] $cache_enable = [], - Optional[Integer] $cache_dir_length = undef, - Optional[Integer] $cache_dir_levels = undef, - Optional[Integer] $cache_max_filesize = undef, + Optional[String] $cache_root = undef, + Array[String] $cache_enable = [], + Optional[Integer] $cache_dir_length = undef, + Optional[Integer] $cache_dir_levels = undef, + Optional[Integer] $cache_max_filesize = undef, + Optional[String] $cache_ignore_headers = undef, | -%> <%- if $cache_enable { -%> <%- $cache_enable.each |$enable| { -%> @@ -20,3 +21,6 @@ CacheDirLength <%= $cache_dir_length %> <%- if $cache_max_filesize { -%> CacheMaxFileSize <%= $cache_max_filesize %> <%- } -%> +<%- if $cache_ignore_headers { -%> +CacheIgnoreHeaders <%= $cache_ignore_headers -%> +<%- } -%>