Merge remote-tracking branch 'gfa/gfa/prosody'
[mirror/dsa-puppet.git] / 3rdparty / modules / prosody / manifests / virtualhost.pp
1 # == Type: prosody::virtualhost
2 define prosody::virtualhost(
3   Hash                           $custom_options = {},
4   Enum[present, absent]          $ensure         = present,
5   Optional[Stdlib::Absolutepath] $ssl_key        = undef,
6   Optional[Stdlib::Absolutepath] $ssl_cert       = undef,
7   Boolean                        $ssl_copy       = true,
8   Optional[String]               $user           = undef,
9   Optional[String]               $group          = undef,
10   Hash                           $components     = {},
11 ) {
12   # Check if SSL set correctly
13   if (($ssl_key != undef) and ($ssl_cert == undef)) {
14     fail('The prosody::virtualhost type needs both ssl_key *and* ssl_cert set')
15   }
16   if (($ssl_key == undef) and ($ssl_cert != undef)) {
17     fail('The prosody::virtualhost type needs both ssl_key *and* ssl_cert set')
18   }
19
20   if (($ssl_key != undef) and ($ssl_cert != undef) and ($ssl_copy == true)) {
21     # Copy the provided sources to prosody certs folder
22     $prosody_ssl_key  = "/etc/prosody/certs/${name}.key"
23     $prosody_ssl_cert = "/etc/prosody/certs/${name}.crt"
24
25     $file_user = pick_default($user, 'prosody')
26     $file_group = pick_default($group, 'prosody')
27
28     file {
29       $prosody_ssl_key:
30         source => $ssl_key,
31         links  => follow,
32         mode   => '0640',
33         owner  => $file_user,
34         group  => $file_group;
35       $prosody_ssl_cert:
36         source => $ssl_cert,
37         links  => follow,
38         mode   => '0644',
39         owner  => $file_user,
40         group  => $file_group;
41     }
42
43     $config_requires = [File[$prosody_ssl_key], File[$prosody_ssl_cert], Class['::prosody::package']]
44   }
45
46   elsif (($ssl_key != undef) and ($ssl_cert != undef) and ($ssl_copy == false)) {
47     $prosody_ssl_key  = $ssl_key
48     $prosody_ssl_cert = $ssl_cert
49   }
50
51   else {
52     $config_requires = Class['::prosody::package']
53   }
54
55   $conf_avail_fn = "/etc/prosody/conf.avail/${name}.cfg.lua"
56
57   file { $conf_avail_fn:
58       ensure  => $ensure,
59       require => $config_requires,
60       content => template('prosody/virtualhost.cfg.erb'),
61       notify  => Class['::prosody::service'],
62   }
63
64   $cfg_ensure = $ensure ? {
65     'present' => link,
66     'absent'  => absent,
67   }
68
69   file { "/etc/prosody/conf.d/${name}.cfg.lua":
70     ensure  => $cfg_ensure,
71     target  => $conf_avail_fn,
72     notify  => Class['::prosody::service'],
73     require => File[$conf_avail_fn];
74   }
75 }