Skip to content

Commit

Permalink
Add radsniff support for Debian-like OSes and specifying envfile and …
Browse files Browse the repository at this point in the history
…pidfile to support any OS
  • Loading branch information
nward committed May 14, 2021
1 parent 038d176 commit 83f6c2c
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 22 deletions.
13 changes: 0 additions & 13 deletions files/radsniff.service

This file was deleted.

10 changes: 10 additions & 0 deletions manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,14 @@
}

$radacctdir = "\${logdir}/radacct"

# Default radsniff environment file location
$fr_radsniff_envfile = $::osfamily ? {
'RedHat' => '/etc/sysconfig/radsniff',
'Debian' => '/etc/defaults/radsniff',
default => undef,
}

# Default radsniff pid file location
$fr_radsniff_pidfile = "/var/run/${fr_service}/radsniff.pid"
}
30 changes: 26 additions & 4 deletions manifests/radsniff.pp
Original file line number Diff line number Diff line change
@@ -1,20 +1,42 @@
# @summary configure and run radsniff
#
# @param envfile path to the environment file, used by the systemd unit
# @param options commandline options passed to radsniff when it runs
# @param
class freeradius::radsniff (
Optional[String] $envfile = undef,
String $options = '',
) {
Optional[String] $pidfile = undef,
) inherits freeradius::params {
unless $::freeradius::utils_support {
fail('freeradius::radsniff requires freeradius have utils_support enabled')
}

unless $facts['os']['family'] == 'RedHat' {
fail('freeradius::radsniff only supports RedHat like OSes at the moment')
# Calculate the envfile to use - specified, then calculated, then error if none
if $envfile {
$final_envfile = $envfile
} else {
if $freeradius::fr_radsniff_envfile {
$final_envfile = $freeradius::fr_radsniff_envfile
} else {
fail('freeradius::radsniff requires envfile to be explicitly set on this OS')
}
}

# Calculate the pidfile to use - specified, then calculated, then error if none
if $pidfile {
$final_pidfile = $pidfile
} else {
if $freeradius::fr_radsniff_pidfile {
$final_pidfile = $freeradius::fr_radsniff_pidfile
} else {
fail('freeradius::radsniff requires pidfile to be explicitly set on this OS')
}
}

$escaped_cmd = $options.regsubst('"','\\\\"','G')

file {'/etc/sysconfig/radsniff':
file { $envfile:
content => @("SYSCONFIG"),
RADSNIFF_OPTIONS="${escaped_cmd}"
| SYSCONFIG
Expand Down
62 changes: 57 additions & 5 deletions spec/classes/radsniff.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@
}
end

if os_facts[:osfamily] =~ %r{^RedHat|Debian$}
it do
is_expected.to contain_service('radsniff')
.with_ensure('running')
.with_enable(true)
end
end

case os_facts[:osfamily]
when 'RedHat'
it do
Expand All @@ -23,19 +31,63 @@
end

it do
is_expected.to contain_service('radsniff')
.with_ensure('running')
.with_enable(true)
is_expected.to contain_systemd__unit_file('radsniff.service')
.with_content(%r{^Pidfile=/var/run/radiusd/radsniff.pid$})
.with_content(%r{^EnvironmentFile=/etc/sysconfig/radsniff$})
.with_content(%r{^ExecStart=/usr/bin/radsniff -P /var/run/radiusd/radsniff.pid -d /etc/raddb $RADSNIFF_OPTIONS$})
.that_notifies('Service[radsniff]')
end
when 'Debian'
it do
is_expected.to contain_file('/etc/defaults/radsniff')
.with_content(%r{RADSNIFF_OPTIONS="radsniff cmd \\"line\\" options"})
.that_notifies('Service[radsniff]')
.that_requires('Package[freeradius-utils]')
end

it do
is_expected.to contain_systemd__unit_file('radsniff.service')
.with_source('puppet:///modules/freeradius/radsniff.service')
.with_content(%r{^Pidfile=/var/run/freeradius/radsniff.pid$})
.with_content(%r{^EnvironmentFile=/etc/defaults/radsniff$})
.with_content(%r{^ExecStart=/usr/bin/radsniff -P /var/run/freeradius/radsniff.pid -d /etc/freeradius $RADSNIFF_OPTIONS$})
.that_notifies('Service[radsniff]')
end
else
it do
is_expected.to compile.and_raise_error(%r{radsniff only supports RedHat})
is_expected.to compile.and_raise_error(%r{freeradius::radsniff requires envfile to be explicitly set on this OS})
is_expected.to compile.and_raise_error(%r{freeradius::radsniff requires pidfile to be explicitly set on this OS})
end
end

context 'with envfile and pidfile set' do
let(:params) do
super().merge(
envfile: '/test/env/file',
pidfile: '/a/pid/file',
)
end

if os_facts[:osfamily] !~ %r{^RedHat|Debian$}
it do
is_expected.to contain_service('radsniff')
.with_ensure('running')
.with_enable(true)
end
end

it do
is_expected.to contain_file('/test/env/file')
.with_content(%r{RADSNIFF_OPTIONS="radsniff cmd \\"line\\" options"})
.that_notifies('Service[radsniff]')
.that_requires('Package[freeradius-utils]')
end

it do
is_expected.to contain_systemd__unit_file('radsniff.service')
.with_content(%r{^Pidfile=/a/pid/file$})
.with_content(%r{^EnvironmentFile=/test/env/file$})
.with_content(%r{^ExecStart=/usr/bin/radsniff -P /a/pid/file -d /etc/freeradius $RADSNIFF_OPTIONS$})
.that_notifies('Service[radsniff]')
end
end
end
Expand Down
13 changes: 13 additions & 0 deletions templates/radsniff.service.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Unit]
Description=Capture RADIUS statistics
After=syslog.target network.target
After=radiusd.target

[Service]
Type=forking
Pidfile=<%=scope['::freeradius::radsniff::final_pidfile']%>
EnvironmentFile=<%=scope['::freeradius::radsniff::final_envpath']%>
ExecStart=/usr/bin/radsniff -P <%=scope['::freeradius::radsniff::pidpath']%> -d <%=scope['::freeradius::radsniff::fr_basepath']%> $RADSNIFF_OPTIONS

[Install]
WantedBy=multi-user.target

0 comments on commit 83f6c2c

Please sign in to comment.