Skip to content

Commit

Permalink
More flexibility in configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
ekohl committed Feb 13, 2024
1 parent fd1b011 commit 04768e7
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 4 deletions.
1 change: 1 addition & 0 deletions .fixtures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ fixtures:
repositories:
augeas_core: 'https://github.com/puppetlabs/puppetlabs-augeas_core'
stdlib: 'https://github.com/puppetlabs/puppetlabs-stdlib'
systemd: 'https://github.com/camptocamp/puppet-systemd'
2 changes: 2 additions & 0 deletions data/Debian.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ tftp::service: tftpd-hpa
tftp::syslinux_package:
- syslinux-common
- pxelinux
tftp::username: 'tftp'
tftp::options: '--secure'
26 changes: 22 additions & 4 deletions manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,28 @@
ensure_resource('file', $tftp::root, { 'ensure' => 'directory' })
}

if $facts['os']['family'] =~ /^(FreeBSD|DragonFly)$/ {
augeas { 'set root directory':
context => '/files/etc/rc.conf',
changes => "set tftpd_flags '\"-s ${tftp::root}\"'",
case $facts['os']['family'] {
'FreeBSD', 'DragonFly': {
augeas { 'set root directory':
context => '/files/etc/rc.conf',
changes => "set tftpd_flags '\"-s ${tftp::root}\"'",
}
}
'Debian': {
file { '/etc/default/tftpd-hpa':
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
content => template('tftp/tftpd-hpa.erb'),
}
}
'RedHat': {
systemd::dropin_file { 'root-directory.conf':
unit => 'tftp.service',
content => epp('tftp/tftp.service-override.epp'),
}
}
default: {}
}
}
8 changes: 8 additions & 0 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
# @param manage_root_dir manages the root dir, which tftpd will serve, defaults to true
# @param service Name of the TFTP service, when daemon is true
# @param service_provider Override TFTP service provider, when daemon is true
# @param username Configures the daemon user
# @param port Configures the Listen Port
# @param address Configures the Listen Address, if empty it will listen on IPv4 and IPv6 (only on tftpd-hpa)
# @param options Configures daemon options
class tftp (
Stdlib::Absolutepath $root,
String $package,
Expand All @@ -28,6 +32,10 @@
Boolean $manage_root_dir,
Optional[String] $service = undef,
Optional[String] $service_provider = undef,
String $username = 'root',
Stdlib::Port $port = 69,
Optional[Stdlib::IP::Address] $address = undef,
Optional[String] $options = undef,
) {
contain tftp::install
contain tftp::config
Expand Down
53 changes: 53 additions & 0 deletions spec/acceptance/tftp_port_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
require 'spec_helper_acceptance'

describe 'tftp with default parameters' do
it_behaves_like 'an idempotent resource' do
let(:manifest) do
<<-EOS
class { 'tftp':
port => 1234,
}
file { "${tftp::root}/test":
ensure => file,
content => 'running on a different port',
}
EOS
end
end

service_name = case fact('osfamily')
when 'Archlinux'
'tftpd.socket'
when 'RedHat'
'tftp.socket'
when 'Debian'
'tftpd-hpa'
end

describe service(service_name) do
it { is_expected.to be_enabled }
it { is_expected.to be_running }
end

describe port(69), unless: service_name.end_with?('.socket') do
it { is_expected.not_to be_listening }
end

describe port(1234), unless: service_name.end_with?('.socket') do
it { is_expected.to be_listening.with('udp') }
end

describe 'ensure tftp client is installed' do
on hosts, puppet('resource', 'package', 'tftp', 'ensure=installed')
end

describe command("echo get /test /tmp/downloaded_file | tftp #{fact('fqdn')} 1234") do
its(:exit_status) { should eq 0 }
end

describe file('/tmp/downloaded_file') do
it { should be_file }
its(:content) { should eq 'running on a different port' }
end
end
5 changes: 5 additions & 0 deletions spec/classes/init_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@
.with_alias('tftpd')
.that_subscribes_to('Class[Tftp::Config]')
end

it 'should contain the service override' do
should contain_systemd__dropin_file('root-directory.conf')
.with_content(%r{^ExecStart=/usr/sbin/in\.tftp -s /var/lib/tftpboot$})
end
when 'FreeBSD'
it 'should contain the service' do
should contain_service('tftpd')
Expand Down
3 changes: 3 additions & 0 deletions templates/tftp.service-override.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=/usr/sbin/in.tftp -s <%= $tftp::root %>
6 changes: 6 additions & 0 deletions templates/tftpd-hpa.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# /etc/default/tftpd-hpa

TFTP_USERNAME="<%= scope['tftp::username'] %>"
TFTP_DIRECTORY="<%= scope['tftp::root'] %>"
TFTP_ADDRESS="<%= scope['tftp::address'] %>:<%= scope['tftp::port'] %>"
TFTP_OPTIONS="<%= scope['tftp::options'] %>"

0 comments on commit 04768e7

Please sign in to comment.