Skip to content

Commit bb96180

Browse files
committed
MODULES-1382: support multiple access log directives
1 parent 2b93f57 commit bb96180

File tree

4 files changed

+143
-32
lines changed

4 files changed

+143
-32
lines changed

manifests/vhost.pp

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@
4040
$logroot_mode = undef,
4141
$log_level = undef,
4242
$access_log = true,
43-
$access_log_file = undef,
44-
$access_log_pipe = undef,
45-
$access_log_syslog = undef,
46-
$access_log_format = undef,
47-
$access_log_env_var = undef,
43+
$access_log_file = false,
44+
$access_log_pipe = false,
45+
$access_log_syslog = false,
46+
$access_log_format = false,
47+
$access_log_env_var = false,
48+
$access_logs = undef,
4849
$aliases = undef,
4950
$directories = undef,
5051
$error_log = true,
@@ -269,19 +270,28 @@
269270
# Is apache::mod::shib enabled (or apache::mod['shib2'])
270271
$shibboleth_enabled = defined(Apache::Mod['shib2'])
271272

272-
# Define log file names
273-
if $access_log_file {
274-
$access_log_destination = "${logroot}/${access_log_file}"
275-
} elsif $access_log_pipe {
276-
$access_log_destination = $access_log_pipe
277-
} elsif $access_log_syslog {
278-
$access_log_destination = $access_log_syslog
279-
} else {
280-
if $ssl {
281-
$access_log_destination = "${logroot}/${name}_access_ssl.log"
273+
if $access_log and !$access_logs {
274+
if $access_log_file {
275+
$_logs_dest = "${logroot}/${access_log_file}"
276+
} elsif $access_log_pipe {
277+
$_logs_dest = $access_log_pipe
278+
} elsif $access_log_syslog {
279+
$_logs_dest = $access_log_syslog
282280
} else {
283-
$access_log_destination = "${logroot}/${name}_access.log"
281+
$_logs_dest = undef
284282
}
283+
$_access_logs = [{
284+
'file' => $access_log_file,
285+
'pipe' => $access_log_pipe,
286+
'syslog' => $access_log_syslog,
287+
'format' => $access_log_format,
288+
'env' => $access_log_env_var
289+
}]
290+
} elsif $access_logs {
291+
if !is_array($access_logs) {
292+
fail("Apache::Vhost[${name}]: access_logs must be an array of hashes")
293+
}
294+
$_access_logs = $access_logs
285295
}
286296

287297
if $error_log_file {
@@ -298,17 +308,6 @@
298308
}
299309
}
300310

301-
# Set access log format
302-
if $access_log_format {
303-
$_access_log_format = "\"${access_log_format}\""
304-
} else {
305-
$_access_log_format = 'combined'
306-
}
307-
308-
if $access_log_env_var {
309-
$_access_log_env_var = "env=${access_log_env_var}"
310-
}
311-
312311
if $ip {
313312
if $port {
314313
$listen_addr_port = "${ip}:${port}"
@@ -569,7 +568,8 @@
569568
# - $access_log_destination
570569
# - $_access_log_format
571570
# - $_access_log_env_var
572-
if $access_log {
571+
# - $access_logs
572+
if $access_log or $access_logs {
573573
concat::fragment { "${name}-access_log":
574574
target => "${priority_real}-${filename}.conf",
575575
order => 100,

spec/acceptance/vhost_spec.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,34 @@ class { 'apache': }
761761
end
762762
end
763763

764+
describe 'multiple access_logs' do
765+
it 'applies cleanly' do
766+
pp = <<-EOS
767+
class { 'apache': }
768+
host { 'test.server': ip => '127.0.0.1' }
769+
apache::vhost { 'test.server':
770+
docroot => '/tmp',
771+
logroot => '/tmp',
772+
access_logs => [
773+
{'file' => 'log1'},
774+
{'file' => 'log2', 'env' => 'admin' },
775+
{'file' => '/var/tmp/log3', 'format' => '%h %l'},
776+
{'syslog' => 'syslog' }
777+
]
778+
}
779+
EOS
780+
apply_manifest(pp, :catch_failures => true)
781+
end
782+
783+
describe file("#{$vhost_dir}/25-test.server.conf") do
784+
it { is_expected.to be_file }
785+
it { is_expected.to contain 'CustomLog "/tmp/log1" combined' }
786+
it { is_expected.to contain 'CustomLog "/tmp/log2" combined env=admin' }
787+
it { is_expected.to contain 'CustomLog "/var/tmp/log3" "%h %l"' }
788+
it { is_expected.to contain 'CustomLog "syslog" combined' }
789+
end
790+
end
791+
764792
describe 'aliases' do
765793
it 'applies cleanly' do
766794
pp = <<-EOS

spec/defines/vhost_spec.rb

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,63 @@
407407
it { is_expected.to contain_concat__fragment('rspec.example.com-file_footer') }
408408
end
409409
end
410+
describe 'access logs' do
411+
let :facts do
412+
{
413+
:osfamily => 'RedHat',
414+
:operatingsystemrelease => '6',
415+
:concat_basedir => '/dne',
416+
:operatingsystem => 'RedHat',
417+
:id => 'root',
418+
:kernel => 'Linux',
419+
:path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
420+
}
421+
end
422+
context 'single log file' do
423+
let(:params) do
424+
{
425+
'docroot' => '/rspec/docroot',
426+
'access_log_file' => 'my_log_file',
427+
}
428+
end
429+
it { is_expected.to contain_concat__fragment('rspec.example.com-access_log').with(
430+
:content => /^\s+CustomLog.*my_log_file" combined\s*$/
431+
)}
432+
end
433+
context 'single log file with environment' do
434+
let(:params) do
435+
{
436+
'docroot' => '/rspec/docroot',
437+
'access_log_file' => 'my_log_file',
438+
'access_log_env_var' => 'prod'
439+
}
440+
end
441+
it { is_expected.to contain_concat__fragment('rspec.example.com-access_log').with(
442+
:content => /^\s+CustomLog.*my_log_file" combined\s+env=prod$/
443+
)}
444+
end
445+
context 'multiple log files' do
446+
let(:params) do
447+
{
448+
'docroot' => '/rspec/docroot',
449+
'access_logs' => [
450+
{ 'file' => '/tmp/log1', 'env' => 'dev' },
451+
{ 'file' => 'log2' },
452+
{ 'syslog' => 'syslog', 'format' => '%h %l' }
453+
],
454+
}
455+
end
456+
it { is_expected.to contain_concat__fragment('rspec.example.com-access_log').with(
457+
:content => /^\s+CustomLog "\/tmp\/log1"\s+combined\s+env=dev$/
458+
)}
459+
it { is_expected.to contain_concat__fragment('rspec.example.com-access_log').with(
460+
:content => /^\s+CustomLog "\/var\/log\/httpd\/log2"\s+combined\s*$/
461+
)}
462+
it { is_expected.to contain_concat__fragment('rspec.example.com-access_log').with(
463+
:content => /^\s+CustomLog "syslog" "%h %l"\s*$/
464+
)}
465+
end
466+
end # access logs
410467
describe 'validation' do
411468
context 'bad ensure' do
412469
let :params do
@@ -620,5 +677,15 @@
620677
let :facts do default_facts end
621678
it { expect { is_expected.to compile }.to raise_error }
622679
end
680+
context 'bad access_logs' do
681+
let :params do
682+
{
683+
'docroot' => '/rspec/docroot',
684+
'access_logs' => '/var/log/somewhere',
685+
}
686+
end
687+
let :facts do default_facts end
688+
it { expect { is_expected.to compile }.to raise_error }
689+
end
623690
end
624691
end

templates/vhost/_access_log.erb

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
1-
<% if @access_log and @_access_log_env_var -%>
2-
CustomLog "<%= @access_log_destination %>" <%= @_access_log_format %> <%= @_access_log_env_var %>
3-
<% elsif @access_log -%>
4-
CustomLog "<%= @access_log_destination %>" <%= @_access_log_format %>
1+
<% @_access_logs.each do |log| -%>
2+
<% env ||= "env=#{log['env']}" if log['env'] -%>
3+
<% env ||= '' -%>
4+
<% format ||= "\"#{log['format']}\"" if log['format'] -%>
5+
<% format ||= 'combined' -%>
6+
<% if log['file'] -%>
7+
<% if log['file'].chars.first == '/' -%>
8+
<% destination = "#{log['file']}" -%>
9+
<% else -%>
10+
<% destination = "#{@logroot}/#{log['file']}" -%>
11+
<% end -%>
12+
<% elsif log['syslog'] -%>
13+
<% destination = "syslog" -%>
14+
<% elsif log['pipe'] -%>
15+
<% destination = log['pipe'] -%>
16+
<% else -%>
17+
<% destination ||= "#{@logroot}/#{@name}_access_ssl.log" if @ssl -%>
18+
<% destination ||= "#{@logroot}/#{@name}_access.log" -%>
19+
<% end -%>
20+
CustomLog "<%= destination %>" <%= format %> <%= env %>
521
<% end -%>

0 commit comments

Comments
 (0)