From a18271b8658d3a0d9db61601c5d96333c48b3f2c Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 22 Jun 2022 11:37:46 +0200 Subject: [PATCH] Use a stricter data type on apache::vhost::aliases This also implements a real test on the rendered template. It appears it was passing in something invalid ever since it was introduced in f1d64a0a0b71af0102d10da69e333aa9ac5a15f5. The test block is moved because Rubocop didn't quite understand it otherwise. --- manifests/vhost.pp | 7 ++++--- spec/acceptance/default_mods_spec.rb | 20 ++++++++++++-------- spec/defines/vhost_spec.rb | 13 +++++++++++-- templates/vhost/_aliases.erb | 14 ++++++-------- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/manifests/vhost.pp b/manifests/vhost.pp index a92331f68d..42f43a7a3e 100644 --- a/manifests/vhost.pp +++ b/manifests/vhost.pp @@ -1803,7 +1803,7 @@ Optional[Array[Hash]] $access_logs = undef, Boolean $use_servername_for_filenames = false, Boolean $use_port_for_filenames = false, - Optional[Variant[Array[Hash],Hash,String]] $aliases = undef, + Array[Hash[String[1], String[1]]] $aliases = [], Optional[Variant[Hash, Array[Variant[Array,Hash]]]] $directories = undef, Boolean $error_log = true, Optional[String] $error_log_file = undef, @@ -2222,7 +2222,6 @@ # Load mod_alias if needed and not yet loaded if ($scriptalias or $scriptaliases != []) - or ($aliases and $aliases != []) or ($redirect_source and $redirect_dest) or ($redirectmatch_regexp or $redirectmatch_status or $redirectmatch_dest) { if ! defined(Class['apache::mod::alias']) and ($ensure == 'present') { @@ -2376,7 +2375,9 @@ # Template uses: # - $aliases - if $aliases and ! empty($aliases) { + if ! empty($aliases) and $ensure == 'present' { + include apache::mod::alias + concat::fragment { "${name}-aliases": target => "${priority_real}${filename}.conf", order => 20, diff --git a/spec/acceptance/default_mods_spec.rb b/spec/acceptance/default_mods_spec.rb index fa5a6beabe..8e38d98f0f 100644 --- a/spec/acceptance/default_mods_spec.rb +++ b/spec/acceptance/default_mods_spec.rb @@ -38,10 +38,12 @@ class { 'apache': } apache::vhost { 'defaults.example.com': docroot => '#{apache_hash['doc_root']}/defaults', - aliases => { - alias => '/css', - path => '#{apache_hash['doc_root']}/css', - }, + aliases => [ + { + alias => '/css', + path => '#{apache_hash['doc_root']}/css', + }, + ], directories => [ { 'path' => "#{apache_hash['doc_root']}/admin", @@ -76,10 +78,12 @@ class { 'apache': } apache::vhost { 'defaults.example.com': docroot => '#{apache_hash['doc_root']}/defaults', - aliases => { - alias => '/css', - path => '#{apache_hash['doc_root']}/css', - }, + aliases => [ + { + alias => '/css', + path => '#{apache_hash['doc_root']}/css', + }, + ], setenv => 'TEST1 one', } MANIFEST diff --git a/spec/defines/vhost_spec.rb b/spec/defines/vhost_spec.rb index 3a408977cc..190915b050 100644 --- a/spec/defines/vhost_spec.rb +++ b/spec/defines/vhost_spec.rb @@ -104,12 +104,17 @@ 'logroot_owner' => 'root', 'logroot_group' => 'root', 'log_level' => 'crit', + 'aliases' => [ + { + 'alias' => '/image', + 'path' => '/rspec/image', + }, + ], 'access_log' => false, 'access_log_file' => 'httpd_access_log', 'access_log_syslog' => true, 'access_log_format' => '%h %l %u %t \"%r\" %>s %b', 'access_log_env_var' => '', - 'aliases' => '/image', 'directories' => [ { 'path' => '/var/www/files', @@ -619,7 +624,11 @@ ) } it { is_expected.to contain_concat__fragment('rspec.example.com-docroot') } - it { is_expected.to contain_concat__fragment('rspec.example.com-aliases') } + it { + is_expected.to contain_concat__fragment('rspec.example.com-aliases').with( + content: %r{^\s+Alias /image "/rspec/image"$}, + ) + } it { is_expected.to contain_concat__fragment('rspec.example.com-itk') } it { is_expected.to contain_concat__fragment('rspec.example.com-fallbackresource') } it { is_expected.to contain_concat__fragment('rspec.example.com-directories') } diff --git a/templates/vhost/_aliases.erb b/templates/vhost/_aliases.erb index f9771bc728..29b3e9961d 100644 --- a/templates/vhost/_aliases.erb +++ b/templates/vhost/_aliases.erb @@ -1,16 +1,14 @@ -<% if @aliases and ! @aliases.empty? -%> ## Alias declarations for resources outside the DocumentRoot - <%- [@aliases].flatten.compact.each do |alias_statement| -%> - <%- if alias_statement["path"] != '' -%> - <%- if alias_statement["alias"] and alias_statement["alias"] != '' -%> + <%- @aliases.each do |alias_statement| -%> + <%- if alias_statement["path"] -%> + <%- if alias_statement["alias"] -%> Alias <%= alias_statement["alias"] %> "<%= alias_statement["path"] %>" - <%- elsif alias_statement["aliasmatch"] and alias_statement["aliasmatch"] != '' -%> + <%- elsif alias_statement["aliasmatch"] -%> AliasMatch <%= alias_statement["aliasmatch"] %> "<%= alias_statement["path"] %>" - <%- elsif alias_statement["scriptalias"] and alias_statement["scriptalias"] != '' -%> + <%- elsif alias_statement["scriptalias"] -%> ScriptAlias <%= alias_statement["scriptalias"] %> "<%= alias_statement["path"] %>" - <%- elsif alias_statement["scriptaliasmatch"] and alias_statement["scriptaliasmatch"] != '' -%> + <%- elsif alias_statement["scriptaliasmatch"] -%> ScriptAliasMatch <%= alias_statement["scriptaliasmatch"] %> "<%= alias_statement["path"] %>" <%- end -%> <%- end -%> <%- end -%> -<% end -%>