Use a template to get more of the from-letsencrypt certs and keys, and no longer...
[mirror/dsa-puppet.git] / modules / rsync / manifests / site.pp
index 9ec16ab..60cab39 100644 (file)
 define rsync::site (
-       $bind='',
-       $source='',
-       $content='',
-       $fname="/etc/rsyncd-${title}.conf",
+       $binds=['[::]'],
+       $source=undef,
+       $content=undef,
        $max_clients=200,
-       $ensure=present
-){
-
+       $ensure=present,
+       $sslname=undef,
+) {
        include rsync
 
+       $fname_real_rsync = "/etc/rsyncd-${name}.conf"
+       $fname_real_stunnel = "/etc/rsyncd-${name}-stunnel.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}" )
+       $ensure_service = $ensure ? {
+               present => running,
+               absent  => stopped,
+       }
+
+       $ensure_enable = $ensure ? {
+               present => true,
+               absent  => false,
+       }
+
+       file { $fname_real_rsync:
+               ensure  => $ensure,
+               content => $content,
+               source  => $source,
+               owner   => 'root',
+               group   => 'root',
+               mode    => '0444',
+       }
+
+       file { "/etc/systemd/system/rsyncd-${name}@.service":
+               ensure  => $ensure,
+               content => template('rsync/systemd-rsyncd.service.erb'),
+               owner   => 'root',
+               group   => 'root',
+               mode    => '0444',
+               require => File[$fname_real_rsync],
+               notify  => Exec['systemctl daemon-reload'],
+       }
+
+       file { "/etc/systemd/system/rsyncd-${name}.socket":
+               ensure  => $ensure,
+               content => template('rsync/systemd-rsyncd.socket.erb'),
+               owner   => 'root',
+               group   => 'root',
+               mode    => '0444',
+               notify  => [
+                       Exec['systemctl daemon-reload'],
+                       Service["rsyncd-${name}.socket"],
+               ],
+       }
+
+       service { "rsyncd-${name}.socket":
+               ensure   => $ensure_service,
+               enable   => $ensure_enable,
+               require  => [
+                       Exec['systemctl daemon-reload'],
+                       File["/etc/systemd/system/rsyncd-${name}@.service"],
+                       File["/etc/systemd/system/rsyncd-${name}.socket"],
+               ],
+               provider => systemd,
        }
 
-       if $source {
-               file { $fname:
-                       ensure => $ensure,
-                       source => $source
+       if $sslname {
+               file { $fname_real_stunnel:
+                       ensure  => $ensure,
+                       content => template('rsync/systemd-rsyncd-stunnel.conf.erb'),
+                       owner   => 'root',
+                       group   => 'root',
+                       mode    => '0444',
+                       require => File["/etc/ssl/debian/certs/${sslname}.crt-chained"],
                }
-       } elsif $content {
-               file { $fname:
+
+               file { "/etc/systemd/system/rsyncd-${name}-stunnel@.service":
                        ensure  => $ensure,
-                       content => $content,
+                       content => template('rsync/systemd-rsyncd-stunnel.service.erb'),
+                       owner   => 'root',
+                       group   => 'root',
+                       mode    => '0444',
+                       require => File[$fname_real_stunnel],
+                       notify  => Exec['systemctl daemon-reload'],
                }
-       } else {
-               fail ( "Can't find config for ${name}" )
-       }
 
-       xinetd::service { "rsync-${name}":
-               bind        => $bind,
-               id          => "${name}-rsync",
-               server      => '/usr/sbin/rsyncd',
-               port        => 'rsync',
-               server_args => $fname,
-               ferm        => false,
-               instances   => $max_clients,
-               require     => File[$fname]
-       }
+               file { "/etc/systemd/system/rsyncd-${name}-stunnel.socket":
+                       ensure  => $ensure,
+                       content => template('rsync/systemd-rsyncd-stunnel.socket.erb'),
+                       owner   => 'root',
+                       group   => 'root',
+                       mode    => '0444',
+                       notify  => [
+                               Exec['systemctl daemon-reload'],
+                               Service["rsyncd-${name}-stunnel.socket"]
+                       ],
+               }
 
-       Service['rsync']->Service['xinetd']
+               service { "rsyncd-${name}-stunnel.socket":
+                       ensure   => $ensure_service,
+                       enable   => $ensure_enable,
+                       require  => [
+                               Exec['systemctl daemon-reload'],
+                               File["/etc/systemd/system/rsyncd-${name}-stunnel@.service"],
+                               File["/etc/systemd/system/rsyncd-${name}-stunnel.socket"],
+                               Service["rsyncd-${name}.socket"],
+                       ],
+                       provider => systemd,
+               }
+
+               @ferm::rule { "rsync-${name}-ssl":
+                       domain      => '(ip ip6)',
+                       description => 'Allow rsync access',
+                       rule        => '&SERVICE(tcp, 1873)',
+               }
+
+               dnsextras::tlsa_record{ "tlsa-${sslname}-1873":
+                       zone     => 'debian.org',
+                       certfile => [ "/srv/puppet.debian.org/from-letsencrypt/${sslname}.crt" ],
+                       port     => 1873,
+                       hostname => $sslname,
+               }
+       }
 }