Skip to content

Commit

Permalink
Manage more parameters extension
Browse files Browse the repository at this point in the history
  • Loading branch information
Antonin Dvorak authored and ekohl committed Feb 13, 2024
1 parent 04768e7 commit 8ffb6e4
Show file tree
Hide file tree
Showing 16 changed files with 85 additions and 53 deletions.
8 changes: 4 additions & 4 deletions data/Amazon.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
tftp::package: tftp-server
tftp::root: "/var/lib/tftpboot"
tftp::service: tftp.socket
tftp::syslinux_package: syslinux
tftp::package: 'tftp-server'
tftp::root: '/var/lib/tftpboot'
tftp::service: 'tftp.socket'
tftp::syslinux_package: 'syslinux'
10 changes: 6 additions & 4 deletions data/Archlinux.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
---
tftp::package: tftp-hpa
tftp::root: "/srv/tftp"
tftp::service: tftpd.socket
tftp::syslinux_package: syslinux
tftp::package: 'tftp-hpa'
tftp::root: '/srv/tftp'
tftp::service: 'tftpd.service'
tftp::syslinux_package: 'syslinux'
tftp::username: 'nobody'
tftp::options: '--secure'
10 changes: 5 additions & 5 deletions data/Debian.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
tftp::package: tftpd-hpa
tftp::root: "/srv/tftp"
tftp::service: tftpd-hpa
tftp::package: 'tftpd-hpa'
tftp::root: '/srv/tftp'
tftp::service: 'tftpd-hpa'
tftp::syslinux_package:
- syslinux-common
- pxelinux
- 'syslinux-common'
- 'pxelinux'
tftp::username: 'tftp'
tftp::options: '--secure'
8 changes: 4 additions & 4 deletions data/DragonFly.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
tftp::package: tftp-hpa
tftp::root: "/tftpboot"
tftp::service: tftpd
tftp::syslinux_package: syslinux
tftp::package: 'tftp-hpa'
tftp::root: '/tftpboot'
tftp::service: 'tftpd'
tftp::syslinux_package: 'syslinux'
8 changes: 4 additions & 4 deletions data/FreeBSD.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
tftp::package: tftp-hpa
tftp::root: "/tftpboot"
tftp::service: tftpd
tftp::syslinux_package: syslinux
tftp::package: 'tftp-hpa'
tftp::root: '/tftpboot'
tftp::service: 'tftpd'
tftp::syslinux_package: 'syslinux'
11 changes: 7 additions & 4 deletions data/RedHat.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
---
tftp::service: tftp.socket
tftp::package: tftp-server
tftp::root: "/var/lib/tftpboot"
tftp::syslinux_package: syslinux
tftp::service:
- 'tftp.socket'
- 'tftp.service'
tftp::package: 'tftp-server'
tftp::root: '/var/lib/tftpboot'
tftp::syslinux_package: 'syslinux'
tftp::options: '--secure'
22 changes: 20 additions & 2 deletions manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,32 @@
group => 'root',
mode => '0644',
content => template('tftp/tftpd-hpa.erb'),
notify => Service[$tftp::service],
}
}
'Archlinux': {
file { '/etc/conf.d/tftpd':
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
content => template('tftp/tftpd.erb'),
notify => Service[$tftp::service],
}
}
'RedHat': {
systemd::dropin_file { 'root-directory.conf':
systemd::dropin_file { 'tftp-socket-override.conf':
unit => 'tftp.socket',
content => epp('tftp/tftp.socket-override.epp'),
}
systemd::dropin_file { 'tftp-service-override.conf':
unit => 'tftp.service',
content => epp('tftp/tftp.service-override.epp'),
require => Systemd::Dropin_file['tftp-socket-override.conf'],
}
}
default: {}
default: {
notify { "Unsupported platform: ${facts['os']['family']}, the tftp service will run with with default parameters": }
}
}
}
11 changes: 6 additions & 5 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,20 @@
# @param syslinux_package Name of the syslinux package, essential for pxe boot
# @param manage_syslinux_package manages the syslinux package, defaults to true
# @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 service Name of the TFTP service
# @param service_provider Override TFTP service provider
# @param username Configures the service 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
# @param options Configures service options

class tftp (
Stdlib::Absolutepath $root,
String $package,
Variant[String, Array[String]] $syslinux_package,
Boolean $manage_syslinux_package,
Boolean $manage_root_dir,
Optional[String] $service = undef,
Variant[String, Array[String]] $service,
Optional[String] $service_provider = undef,
String $username = 'root',
Stdlib::Port $port = 69,
Expand Down
1 change: 0 additions & 1 deletion manifests/service.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
service { $tftp::service:
ensure => running,
enable => true,
alias => 'tftpd',
provider => $tftp::service_provider,
}
}
12 changes: 4 additions & 8 deletions spec/acceptance/tftp_port_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class { 'tftp':

service_name = case fact('osfamily')
when 'Archlinux'
'tftpd.socket'
'tftpd.service'
when 'RedHat'
'tftp.socket'
when 'Debian'
Expand All @@ -30,16 +30,12 @@ class { 'tftp':
it { is_expected.to be_running }
end

describe port(69), unless: service_name.end_with?('.socket') do
describe port(69) 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')
describe port(1234) do
it { is_expected.to be_listening.with('udp').or be_listening.with('udp6') }
end

describe command("echo get /test /tmp/downloaded_file | tftp #{fact('fqdn')} 1234") do
Expand Down
6 changes: 3 additions & 3 deletions spec/acceptance/tftp_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class { 'tftp': }

service_name = case fact('osfamily')
when 'Archlinux'
'tftpd.socket'
'tftpd.service'
when 'RedHat'
'tftp.socket'
when 'Debian'
Expand All @@ -28,8 +28,8 @@ class { 'tftp': }
it { is_expected.to be_running }
end

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

describe command("echo get /test /tmp/downloaded_file | tftp #{fact('fqdn')}") do
Expand Down
16 changes: 8 additions & 8 deletions spec/classes/init_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,36 +46,37 @@
should contain_service('tftp.socket')
.with_ensure('running')
.with_enable('true')
.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$})
should contain_systemd__dropin_file('tftp-service-override.conf')
.with_content("[Service]\nExecStart=\nExecStart=/usr/sbin/in.tftpd --secure /var/lib/tftpboot\n")
end

it 'should contain the socket override' do
should contain_systemd__dropin_file('tftp-socket-override.conf')
.with_content("[Socket]\nListenDatagram=\nListenDatagram=69\n")
end
when 'FreeBSD'
it 'should contain the service' do
should contain_service('tftpd')
.with_ensure('running')
.with_enable('true')
.with_alias('tftpd')
.that_subscribes_to('Class[Tftp::Config]')
end
when 'Archlinux'
it 'should contain the service' do
should contain_service('tftpd.socket')
should contain_service('tftpd.service')
.with_ensure('running')
.with_enable('true')
.with_alias('tftpd')
.that_subscribes_to('Class[Tftp::Config]')
end
else
it 'should contain the service' do
should contain_service('tftpd-hpa')
.with_ensure('running')
.with_enable('true')
.with_alias('tftpd')
.that_subscribes_to('Class[Tftp::Config]')
end
end
Expand Down Expand Up @@ -146,7 +147,6 @@
should contain_service('tftp.socket')
.with_ensure('running')
.with_enable('true')
.with_alias('tftpd')
.that_subscribes_to('Class[Tftp::Config]')
end
end
Expand Down
7 changes: 7 additions & 0 deletions spec/setup_acceptance_node.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,10 @@
ensure => installed,
}
}

# without it "ss" command is not found and "port listening" tests fail
if $facts['os']['name'] == 'Fedora' {
package { 'iproute':
ensure => installed,
}
}
2 changes: 1 addition & 1 deletion templates/tftp.service-override.epp
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[Service]
ExecStart=
ExecStart=/usr/sbin/in.tftp -s <%= $tftp::root %>
ExecStart=/usr/sbin/in.tftpd <%= $tftp::options %> <%= $tftp::root %>
3 changes: 3 additions & 0 deletions templates/tftp.socket-override.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[Socket]
ListenDatagram=
ListenDatagram=<%= $tftp::port %>
3 changes: 3 additions & 0 deletions templates/tftpd.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# /etc/conf.d/tftpd

TFTPD_ARGS="<%= scope['tftp::options'] %> <%= scope['tftp::root'] %> --address <%= scope['tftp::address'] %>:<%= scope['tftp::port'] %> --user <%= scope['tftp::username'] %>"

0 comments on commit 8ffb6e4

Please sign in to comment.