diff --git a/manifests/serial/login.pp b/manifests/serial/login.pp new file mode 100644 index 0000000000000000000000000000000000000000..2dabdb9e8b1d4717c73e949ff9e0fc636d78563a --- /dev/null +++ b/manifests/serial/login.pp @@ -0,0 +1,99 @@ +# Copyright © 2018 Thomas Bellman, Linköping, Sweden +# Licensed under the GNU LGPL v3+; see the README file for more information. + + +/* + * Manage login (getty) on serial ports. + * + * Parameters: + * - name Name of serial port device (without /dev/ prefix). + * - ensure One of 'enabled' (the default) or 'disabled'. + * - speeds (List of) speeds in bits/second. + * - termtype Default terminal type connected to the port. + * - rootlogin To 'allow' or 'forbid' root to login on the port. + * Default is to make no changes to /etc/securetty. + */ +# FIXME: Currently only supports systemd + +define console::serial::login( + $ensure='enabled', + $speeds=[115200,38400,9600], + $termtype='vt100', + $rootlogin=undef, +) +{ + case $ensure { + 'enabled', 'disabled': { } + default: { + fail("Console::Serial::Login[${title}]: ", + "Bad value for parameter ensure, ``${ensure}''") + } + } + + case "${::initsystem}::${::operatingsystem}-${::operatingsystemrelease}" + { + /systemd::.*/: { + console::serial::login::systemd { + $name: + ensure => $ensure, + speeds => $speeds, termtype => $termtype; + } + } + + default: { + fail("Console::Serial::Login[${title}]: ", + "Unsupported operating system/init system") + } + } + + if ($rootlogin != undef and $rootlogin != false) + { + console::rootlogin { + $name: + ensure => $rootlogin; + } + } +} + + + +# Internal helper definition +# +define console::serial::login::systemd( + $ensure, + $speeds, + $termtype, +) +{ + $svcdir = "/etc/systemd/system/serial-getty@${name}.service.d" + file { + $svcdir: + ensure => $ensure ? { + 'enabled' => directory, 'disabled' => undef, + }, + owner => 'root', group => 'root', mode => '0755'; + + "${svcdir}/param.conf": + ensure => $ensure ? { + 'enabled' => file, 'disabled' => absent, + }, + content => inline_template( + "[Service]\n", + "ExecStart=\n", + "ExecStart=-/sbin/agetty --keep-baud <%= [@speeds].flatten.join(',') %> %I <%= @termtype %>\n" + ), + owner => 'root', group => 'root', mode => '0444', + notify => Service["serial-getty@${name}"]; + } + + service { + "serial-getty@${name}": + ensure => $ensure ? { + 'enabled' => running, 'disabled' => stopped, + }, + enable => $ensure ? { + 'enabled' => true, 'disabled' => false, + }, + ; + } +}