Add the prosody module
[mirror/dsa-puppet.git] / 3rdparty / modules / prosody / manifests / virtualhost.pp
diff --git a/3rdparty/modules/prosody/manifests/virtualhost.pp b/3rdparty/modules/prosody/manifests/virtualhost.pp
new file mode 100644 (file)
index 0000000..1f0e909
--- /dev/null
@@ -0,0 +1,75 @@
+# == Type: prosody::virtualhost
+define prosody::virtualhost(
+  Hash                           $custom_options = {},
+  Enum[present, absent]          $ensure         = present,
+  Optional[Stdlib::Absolutepath] $ssl_key        = undef,
+  Optional[Stdlib::Absolutepath] $ssl_cert       = undef,
+  Boolean                        $ssl_copy       = true,
+  Optional[String]               $user           = undef,
+  Optional[String]               $group          = undef,
+  Hash                           $components     = {},
+) {
+  # Check if SSL set correctly
+  if (($ssl_key != undef) and ($ssl_cert == undef)) {
+    fail('The prosody::virtualhost type needs both ssl_key *and* ssl_cert set')
+  }
+  if (($ssl_key == undef) and ($ssl_cert != undef)) {
+    fail('The prosody::virtualhost type needs both ssl_key *and* ssl_cert set')
+  }
+
+  if (($ssl_key != undef) and ($ssl_cert != undef) and ($ssl_copy == true)) {
+    # Copy the provided sources to prosody certs folder
+    $prosody_ssl_key  = "/etc/prosody/certs/${name}.key"
+    $prosody_ssl_cert = "/etc/prosody/certs/${name}.crt"
+
+    $file_user = pick_default($user, 'prosody')
+    $file_group = pick_default($group, 'prosody')
+
+    file {
+      $prosody_ssl_key:
+        source => $ssl_key,
+        links  => follow,
+        mode   => '0640',
+        owner  => $file_user,
+        group  => $file_group;
+      $prosody_ssl_cert:
+        source => $ssl_cert,
+        links  => follow,
+        mode   => '0644',
+        owner  => $file_user,
+        group  => $file_group;
+    }
+
+    $config_requires = [File[$prosody_ssl_key], File[$prosody_ssl_cert], Class['::prosody::package']]
+  }
+
+  elsif (($ssl_key != undef) and ($ssl_cert != undef) and ($ssl_copy == false)) {
+    $prosody_ssl_key  = $ssl_key
+    $prosody_ssl_cert = $ssl_cert
+  }
+
+  else {
+    $config_requires = Class['::prosody::package']
+  }
+
+  $conf_avail_fn = "/etc/prosody/conf.avail/${name}.cfg.lua"
+
+  file { $conf_avail_fn:
+      ensure  => $ensure,
+      require => $config_requires,
+      content => template('prosody/virtualhost.cfg.erb'),
+      notify  => Class['::prosody::service'],
+  }
+
+  $cfg_ensure = $ensure ? {
+    'present' => link,
+    'absent'  => absent,
+  }
+
+  file { "/etc/prosody/conf.d/${name}.cfg.lua":
+    ensure  => $cfg_ensure,
+    target  => $conf_avail_fn,
+    notify  => Class['::prosody::service'],
+    require => File[$conf_avail_fn];
+  }
+}