X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Frsync%2Fmanifests%2Fsite.pp;h=7d0882c81eed45494f9b96d66d5aacaf5df7ad7c;hb=a3602762e8a1122180fd557284f7e78875ea89ec;hp=04c1e20e915ccc5dde9fcba7644c2d46e5ab8e50;hpb=b529b139a60ea8355089511737c8264185d8d074;p=mirror%2Fdsa-puppet.git diff --git a/modules/rsync/manifests/site.pp b/modules/rsync/manifests/site.pp index 04c1e20e9..7d0882c81 100644 --- a/modules/rsync/manifests/site.pp +++ b/modules/rsync/manifests/site.pp @@ -1,111 +1,56 @@ +# an rsync site, systemd socket activated define rsync::site ( - $bind='', - $bind6='', - $source=undef, - $content=undef, - $max_clients=200, - $ensure=present, - $sslname=undef, - $sslport=1873 -){ - - include rsync - - $fname_real = "/etc/rsyncd-${name}.conf" - case $ensure { - present,absent: {} - default: { fail ( "Invald ensure `${ensure}' for ${name}" ) } - } - - if ($source and $content) { - fail ( "Can't define both source and content for ${name}" ) - } - - if $source { - file { $fname_real: - ensure => $ensure, - source => $source - } - } elsif $content { - file { $fname_real: - ensure => $ensure, - content => $content, - } - } else { - fail ( "Can't find config for ${name}" ) - } - - xinetd::service { "rsync-${name}": - bind => $bind, - id => "${name}-rsync", - server => '/usr/bin/rsync', - service => 'rsync', - server_args => "--daemon --config=${fname_real}", - ferm => false, - instances => $max_clients, - require => File[$fname_real] - } - - if $bind6 != '' { - if $bind == '' { - fail("Cannot listen on * and a specific ipv6 address") - } - xinetd::service { "rsync-${name}6": - bind => $bind6, - id => "${name}-rsync6", - server => '/usr/bin/rsync', - service => 'rsync', - server_args => "--daemon --config=${fname_real}", - ferm => false, - instances => $max_clients, - require => File[$fname_real] - } - } - - if $sslname { - file { "/etc/rsyncd-${name}-stunnel.conf": - content => template('rsync/rsyncd-stunnel.conf.erb'), - require => File["/etc/ssl/debian/certs/${sslname}.crt-chained"], - } - @ferm::rule { "rsync-${name}-ssl": - domain => '(ip ip6)', - description => 'Allow rsync access', - rule => "&SERVICE(tcp, $sslport)", - } - xinetd::service { "rsync-${name}-ssl": - bind => $bind, - id => "rsync-${name}-ssl", - server => '/usr/bin/stunnel4', - server_args => "/etc/rsyncd-${name}-stunnel.conf", - service => "rsync-ssl", - type => 'UNLISTED', - port => "$sslport", - ferm => true, - instances => $max_clients, - require => File["/etc/rsyncd-${name}-stunnel.conf"], - } - if $bind6 != '' { - xinetd::service { "rsync-${name}-ssl6": - bind => $bind6, - id => "rsync-${name}-ssl6", - server => '/usr/bin/stunnel4', - server_args => "/etc/rsyncd-${name}-stunnel.conf", - service => "rsync-ssl", - type => 'UNLISTED', - port => "$sslport", - ferm => true, - instances => $max_clients, - require => File["/etc/rsyncd-${name}-stunnel.conf"], - } - } - - dnsextras::tlsa_record{ "tlsa-${sslname}-${sslport}": - zone => 'debian.org', - certfile => [ "/etc/puppet/modules/ssl/files/servicecerts/${sslname}.crt", "/etc/puppet/modules/ssl/files/from-letsencrypt/${sslname}.crt" ], - port => $sslport, - hostname => "$sslname", - } - } - - Service['rsync']->Service['xinetd'] + Array[String] $binds = ['[::]'], + Optional[String] $source = undef, + Optional[String] $content = undef, + Integer $max_clients = 200, + Enum['present','absent'] $ensure = 'present', + Optional[String] $sslname = undef, +) { + include rsync + + $fname_real_rsync = "/etc/rsyncd-${name}.conf" + $fname_real_stunnel = "/etc/rsyncd-${name}-stunnel.conf" + + file { $fname_real_rsync: + ensure => $ensure, + content => $content, + source => $source, + } + + dsa_systemd::socket_service { "rsyncd-${name}": + ensure => $ensure, + service_content => template('rsync/systemd-rsyncd.service.erb'), + socket_content => template('rsync/systemd-rsyncd.socket.erb'), + require => File[$fname_real_rsync], + } + + if $sslname { + file { $fname_real_stunnel: + ensure => $ensure, + content => template('rsync/systemd-rsyncd-stunnel.conf.erb'), + require => File["/etc/ssl/debian/certs/${sslname}.crt-chained"], + } + + dsa_systemd::socket_service { "rsyncd-${name}-stunnel": + ensure => $ensure, + service_content => template('rsync/systemd-rsyncd-stunnel.service.erb'), + socket_content => template('rsync/systemd-rsyncd-stunnel.socket.erb'), + require => File[$fname_real_stunnel], + } + + ferm::rule { "rsync-${name}-ssl": + domain => '(ip ip6)', + description => 'Allow rsync access', + rule => '&SERVICE(tcp, 1873)', + } + + $certdir = hiera('paths.letsencrypt_dir') + dnsextras::tlsa_record{ "tlsa-${sslname}-1873": + zone => 'debian.org', + certfile => [ "${certdir}/${sslname}.crt" ], + port => 1873, + hostname => $sslname, + } + } }