diff --git a/REFERENCE.md b/REFERENCE.md
index 7e4b9a1..35735a6 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -13,6 +13,7 @@
* [`knot::records::defaults::srv`](#knot--records--defaults--srv): defaults for srv records
* [`knot::records::defaults::tlsa`](#knot--records--defaults--tlsa): defaults for tlsa records
* [`knot::records::defaults::webserver`](#knot--records--defaults--webserver): default values for knot::records::webserver
+* [`knot::records::defaults::xmpp`](#knot--records--defaults--xmpp): default settings for knot::records::xmpp
* [`knot::records::sshfp::export`](#knot--records--sshfp--export): export sshfp keys for inclusion in dns
* [`knot::records::sshfp::import`](#knot--records--sshfp--import): import exported sshfp records
@@ -26,6 +27,7 @@
* [`knot::records::srv`](#knot--records--srv): add srv records
* [`knot::records::tlsa`](#knot--records--tlsa): add tlsa records
* [`knot::records::webserver`](#knot--records--webserver): add webserver dns records to the domain
+* [`knot::records::xmpp`](#knot--records--xmpp): add srv records
### Resource types
@@ -586,7 +588,6 @@ Example:
'target_port' => 443,
'target' => 'autodiscover.hostname.com'
}
-default from knot::records::defaults::mail
Default value: `[]`
@@ -858,6 +859,118 @@ tlsa service records to create (using define knot::records::tlsa)
Default value: `[{ 'port' => 443, 'proto' => 'tcp' }]`
+### `knot::records::defaults::xmpp`
+
+default settings for knot::records::xmpp
+
+#### Parameters
+
+The following parameters are available in the `knot::records::defaults::xmpp` class:
+
+* [`xmpp_client`](#-knot--records--defaults--xmpp--xmpp_client)
+* [`xmpp_client_service`](#-knot--records--defaults--xmpp--xmpp_client_service)
+* [`xmpps_client`](#-knot--records--defaults--xmpp--xmpps_client)
+* [`xmpps_client_service`](#-knot--records--defaults--xmpp--xmpps_client_service)
+* [`xmpp_server`](#-knot--records--defaults--xmpp--xmpp_server)
+* [`xmpp_server_service`](#-knot--records--defaults--xmpp--xmpp_server_service)
+* [`xmpps_server`](#-knot--records--defaults--xmpp--xmpps_server)
+* [`xmpps_server_service`](#-knot--records--defaults--xmpp--xmpps_server_service)
+* [`txt_records`](#-knot--records--defaults--xmpp--txt_records)
+* [`tlsa`](#-knot--records--defaults--xmpp--tlsa)
+* [`ttl`](#-knot--records--defaults--xmpp--ttl)
+
+##### `xmpp_client`
+
+Data type: `Array`
+
+srv setting for SRV record of xmpp_client
+if not explicitly set { target => $dest_server } will be added.
+
+Default value: `[{ 'priority' => 0, 'weight' => 5, 'target_port' => 5222 }]`
+
+##### `xmpp_client_service`
+
+Data type: `Array[Knot::Record::Service]`
+
+Array of services for xmpp_client.
+
+Default value: `[{ 'port' => 'xmpp-client', 'proto' => 'tcp' }]`
+
+##### `xmpps_client`
+
+Data type: `Array`
+
+srv setting for SRV record of xmpps_client
+if not explicitly set { target => $dest_server } will be added.
+
+Default value: `[{ 'priority' => 0, 'weight' => 5, 'target_port' => 5223 }]`
+
+##### `xmpps_client_service`
+
+Data type: `Array[Knot::Record::Service]`
+
+Array of services for xmpps_client.
+
+Default value: `[{ 'port' => 'xmpps-client', 'proto' => 'tcp' }]`
+
+##### `xmpp_server`
+
+Data type: `Array`
+
+srv setting for SRV record of xmpp_server
+if not explicitly set { target => $dest_server } will be added.
+
+Default value: `[{ 'priority' => 0, 'weight' => 5, 'target_port' => 5269 }]`
+
+##### `xmpp_server_service`
+
+Data type: `Array[Knot::Record::Service]`
+
+Array of services for xmpp_server.
+
+Default value: `[{ 'port' => 'xmpp-server', 'proto' => 'tcp' }]`
+
+##### `xmpps_server`
+
+Data type: `Array`
+
+srv setting for SRV record of xmpps_server
+if not explicitly set { target => $dest_server } will be added.
+
+Default value: `[{ 'priority' => 0, 'weight' => 5, 'target_port' => 5270 }]`
+
+##### `xmpps_server_service`
+
+Data type: `Array[Knot::Record::Service]`
+
+Array of services for xmpps_server.
+
+Default value: `[{ 'port' => 'xmpps-server', 'proto' => 'tcp' }]`
+
+##### `txt_records`
+
+Data type: `Array[String[1]]`
+
+add _xmppconnect txt records.
+
+Default value: `[]`
+
+##### `tlsa`
+
+Data type: `Array[Knot::Record::Tlsa]`
+
+tlsa records to create (using define knot::records::tlsa)
+
+Default value: `[]`
+
+##### `ttl`
+
+Data type: `Integer`
+
+the time to live (used for all records)
+
+Default value: `3600`
+
### `knot::records::sshfp::export`
export sshfp keys for inclusion in dns
@@ -2484,6 +2597,166 @@ default from knot::records::defaults::webserver (port 443, tcp)
Default value: `undef`
+### `knot::records::xmpp`
+
+default values can be configured in the class
+knot::records::defaults::srv which is included
+here (eg in hiera).
+
+#### Parameters
+
+The following parameters are available in the `knot::records::xmpp` defined type:
+
+* [`dest_server`](#-knot--records--xmpp--dest_server)
+* [`rname`](#-knot--records--xmpp--rname)
+* [`target_zone`](#-knot--records--xmpp--target_zone)
+* [`xmpp_client`](#-knot--records--xmpp--xmpp_client)
+* [`xmpp_client_service`](#-knot--records--xmpp--xmpp_client_service)
+* [`xmpps_client`](#-knot--records--xmpp--xmpps_client)
+* [`xmpps_client_service`](#-knot--records--xmpp--xmpps_client_service)
+* [`xmpp_server`](#-knot--records--xmpp--xmpp_server)
+* [`xmpp_server_service`](#-knot--records--xmpp--xmpp_server_service)
+* [`xmpps_server`](#-knot--records--xmpp--xmpps_server)
+* [`xmpps_server_service`](#-knot--records--xmpp--xmpps_server_service)
+* [`ttl`](#-knot--records--xmpp--ttl)
+* [`txt_records`](#-knot--records--xmpp--txt_records)
+* [`tlsa`](#-knot--records--xmpp--tlsa)
+* [`tlsa_service`](#-knot--records--xmpp--tlsa_service)
+
+##### `dest_server`
+
+Data type: `String[1]`
+
+the destination xmpp server
+
+##### `rname`
+
+Data type: `Optional[String[1]]`
+
+the hostname to add
+
+Default value: `undef`
+
+##### `target_zone`
+
+Data type: `Optional[String[1]]`
+
+the target zone to add the records
+
+Default value: `undef`
+
+##### `xmpp_client`
+
+Data type: `Optional[Array]`
+
+srv setting for SRV record of xmpp_client
+if not explicitly set { target => $dest_server } will be added.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpp_client_service`
+
+Data type: `Optional[Array[Knot::Record::Service]]`
+
+Array of services for xmpp_client.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpps_client`
+
+Data type: `Optional[Array]`
+
+srv setting for SRV record of xmpps_client
+if not explicitly set { target => $dest_server } will be added.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpps_client_service`
+
+Data type: `Optional[Array[Knot::Record::Service]]`
+
+Array of services for xmpps_client.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpp_server`
+
+Data type: `Optional[Array]`
+
+srv setting for SRV record of xmpp_server
+if not explicitly set { target => $dest_server } will be added.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpp_server_service`
+
+Data type: `Optional[Array[Knot::Record::Service]]`
+
+Array of services for xmpp_server.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpps_server`
+
+Data type: `Optional[Array]`
+
+srv setting for SRV record of xmpps_server
+if not explicitly set { target => $dest_server } will be added.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `xmpps_server_service`
+
+Data type: `Optional[Array[Knot::Record::Service]]`
+
+Array of services for xmpps_server.
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `ttl`
+
+Data type: `Optional[Integer]`
+
+the time to live (used for all records)
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `txt_records`
+
+Data type: `Optional[Array[String[1]]]`
+
+add _xmppconnect txt records.
+remark: deprecated but ...
+
+Default value: `undef`
+
+##### `tlsa`
+
+Data type: `Optional[Array[Knot::Record::Tlsa]]`
+
+tlsa records to create (using define knot::records::tlsa)
+default from knot::records::defaults::xmpp
+
+Default value: `undef`
+
+##### `tlsa_service`
+
+Data type: `Optional[Array[Knot::Record::Service]]`
+
+tlsa services to create tlsa records for (using define knot::records::tlsa)
+defaults to the target ports of $xmpps_server + $xmpps_client
+
+Default value: `undef`
+
## Resource types
### `knot_record`
diff --git a/manifests/records/defaults/mail.pp b/manifests/records/defaults/mail.pp
index ba2cb89..391bb5b 100644
--- a/manifests/records/defaults/mail.pp
+++ b/manifests/records/defaults/mail.pp
@@ -16,7 +16,6 @@
# 'target_port' => 443,
# 'target' => 'autodiscover.hostname.com'
# }
-# default from knot::records::defaults::mail
# @param autoconfig
# target to config for autconfig (eg. Thunderbird)
# a CNAME record is created
diff --git a/manifests/records/defaults/xmpp.pp b/manifests/records/defaults/xmpp.pp
new file mode 100644
index 0000000..016cd26
--- /dev/null
+++ b/manifests/records/defaults/xmpp.pp
@@ -0,0 +1,43 @@
+# @summary default settings for knot::records::xmpp
+#
+# @param xmpp_client
+# srv setting for SRV record of xmpp_client
+# if not explicitly set { target => $dest_server } will be added.
+# @param xmpp_client_service
+# Array of services for xmpp_client.
+# @param xmpps_client
+# srv setting for SRV record of xmpps_client
+# if not explicitly set { target => $dest_server } will be added.
+# @param xmpps_client_service
+# Array of services for xmpps_client.
+# @param xmpp_server
+# srv setting for SRV record of xmpp_server
+# if not explicitly set { target => $dest_server } will be added.
+# @param xmpp_server_service
+# Array of services for xmpp_server.
+# @param xmpps_server
+# srv setting for SRV record of xmpps_server
+# if not explicitly set { target => $dest_server } will be added.
+# @param xmpps_server_service
+# Array of services for xmpps_server.
+# @param txt_records
+# add _xmppconnect txt records.
+# @param tlsa
+# tlsa records to create (using define knot::records::tlsa)
+# @param ttl
+# the time to live (used for all records)
+#
+class knot::records::defaults::xmpp (
+ Array $xmpp_client = [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5222 }],
+ Array[Knot::Record::Service] $xmpp_client_service = [{ 'port' => 'xmpp-client', 'proto' => 'tcp' }],
+ Array $xmpps_client = [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5223 }],
+ Array[Knot::Record::Service] $xmpps_client_service = [{ 'port' => 'xmpps-client', 'proto' => 'tcp' }],
+ Array $xmpp_server = [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5269 }],
+ Array[Knot::Record::Service] $xmpp_server_service = [{ 'port' => 'xmpp-server', 'proto' => 'tcp' }],
+ Array $xmpps_server = [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5270 }],
+ Array[Knot::Record::Service] $xmpps_server_service = [{ 'port' => 'xmpps-server', 'proto' => 'tcp' }],
+ Array[Knot::Record::Tlsa] $tlsa = [],
+ Array[String[1]] $txt_records = [],
+ Integer $ttl = 3600,
+) {
+}
diff --git a/manifests/records/xmpp.pp b/manifests/records/xmpp.pp
new file mode 100644
index 0000000..8467e0a
--- /dev/null
+++ b/manifests/records/xmpp.pp
@@ -0,0 +1,149 @@
+# @summary add srv records
+#
+# default values can be configured in the class
+# knot::records::defaults::srv which is included
+# here (eg in hiera).
+#
+# @param dest_server
+# the destination xmpp server
+# @param rname
+# the hostname to add
+# @param target_zone
+# the target zone to add the records
+# @param xmpp_client
+# srv setting for SRV record of xmpp_client
+# if not explicitly set { target => $dest_server } will be added.
+# default from knot::records::defaults::xmpp
+# @param xmpp_client_service
+# Array of services for xmpp_client.
+# default from knot::records::defaults::xmpp
+# @param xmpps_client
+# srv setting for SRV record of xmpps_client
+# if not explicitly set { target => $dest_server } will be added.
+# default from knot::records::defaults::xmpp
+# @param xmpps_client_service
+# Array of services for xmpps_client.
+# default from knot::records::defaults::xmpp
+# @param xmpp_server
+# srv setting for SRV record of xmpp_server
+# if not explicitly set { target => $dest_server } will be added.
+# default from knot::records::defaults::xmpp
+# @param xmpp_server_service
+# Array of services for xmpp_server.
+# default from knot::records::defaults::xmpp
+# @param xmpps_server
+# srv setting for SRV record of xmpps_server
+# if not explicitly set { target => $dest_server } will be added.
+# default from knot::records::defaults::xmpp
+# @param xmpps_server_service
+# Array of services for xmpps_server.
+# default from knot::records::defaults::xmpp
+# @param ttl
+# the time to live (used for all records)
+# default from knot::records::defaults::xmpp
+# @param txt_records
+# add _xmppconnect txt records.
+# remark: deprecated but ...
+# @param tlsa
+# tlsa records to create (using define knot::records::tlsa)
+# default from knot::records::defaults::xmpp
+# @param tlsa_service
+# tlsa services to create tlsa records for (using define knot::records::tlsa)
+# defaults to the target ports of $xmpps_server + $xmpps_client
+#
+define knot::records::xmpp (
+ String[1] $dest_server,
+ Optional[String[1]] $rname = undef,
+ Optional[String[1]] $target_zone = undef,
+ Optional[Array] $xmpp_client = undef,
+ Optional[Array[Knot::Record::Service]] $xmpp_client_service = undef,
+ Optional[Array] $xmpps_client = undef,
+ Optional[Array[Knot::Record::Service]] $xmpps_client_service = undef,
+ Optional[Array] $xmpp_server = undef,
+ Optional[Array[Knot::Record::Service]] $xmpp_server_service = undef,
+ Optional[Array] $xmpps_server = undef,
+ Optional[Array[Knot::Record::Service]] $xmpps_server_service = undef,
+ Optional[Integer] $ttl = undef,
+ Optional[Array[String[1]]] $txt_records = undef,
+ Optional[Array[Knot::Record::Tlsa]] $tlsa = undef,
+ Optional[Array[Knot::Record::Service]] $tlsa_service = undef,
+) {
+ $_target_zone = pick($target_zone, knot::zone($title))
+ $_rname = pick($rname, knot::hname($title))
+
+ include knot::records::defaults::xmpp
+
+ $_xmpp_client = pick($xmpp_client, $knot::records::defaults::xmpp::xmpp_client)
+ $_xmpp_client_service = pick($xmpp_client_service, $knot::records::defaults::xmpp::xmpp_client_service)
+ $_xmpps_client = pick($xmpps_client, $knot::records::defaults::xmpp::xmpps_client)
+ $_xmpps_client_service = pick($xmpps_client_service, $knot::records::defaults::xmpp::xmpps_client_service)
+ $_xmpp_server = pick($xmpp_server, $knot::records::defaults::xmpp::xmpp_server)
+ $_xmpp_server_service = pick($xmpp_server_service, $knot::records::defaults::xmpp::xmpp_server_service)
+ $_xmpps_server = pick($xmpps_server, $knot::records::defaults::xmpp::xmpps_server)
+ $_xmpps_server_service = pick($xmpps_server_service, $knot::records::defaults::xmpp::xmpps_server_service)
+ $_ttl = pick($ttl, $knot::records::defaults::xmpp::ttl)
+ $_txt_records = pick($txt_records, $knot::records::defaults::xmpp::txt_records)
+
+ $_tlsa = pick($tlsa, $knot::records::defaults::xmpp::tlsa)
+
+ if $tlsa_service {
+ $_tlsa_service = $tlsa_service
+ } else {
+ $_tlsa_service = ($_xmpps_client + $_xmpps_server).map | $t | {
+ { 'port' => $t['target_port'], 'proto' => 'tcp' }
+ }
+ }
+
+ knot::records::srv { "SRV xmpp-client ${title}":
+ target_zone => $_target_zone,
+ rname => $_rname,
+ srv => $_xmpp_client.map | $t | { { 'target' => $dest_server } + $t },
+ service => $_xmpp_client_service,
+ ttl => $_ttl,
+ }
+ knot::records::srv { "SRV xmpps-client ${title}":
+ target_zone => $_target_zone,
+ rname => $_rname,
+ srv => $_xmpps_client.map | $t | { { 'target' => $dest_server } + $t },
+ service => $_xmpps_client_service,
+ ttl => $_ttl,
+ }
+
+ knot::records::srv { "SRV xmpp-server ${title}":
+ target_zone => $_target_zone,
+ rname => $_rname,
+ srv => $_xmpp_server.map | $t | { { 'target' => $dest_server } + $t },
+ service => $_xmpp_server_service,
+ ttl => $_ttl,
+ }
+ knot::records::srv { "SRV xmpps-server ${title}":
+ target_zone => $_target_zone,
+ rname => $_rname,
+ srv => $_xmpps_server.map | $t | { { 'target' => $dest_server } + $t },
+ service => $_xmpps_server_service,
+ ttl => $_ttl,
+ }
+
+ knot::records::tlsa { "XMPPS TLSA ${title}":
+ target_zone => $_target_zone,
+ rname => $_rname,
+ tlsa => $_tlsa,
+ ttl => $_ttl,
+ service => $_tlsa_service,
+ }
+
+ $_txt_records.each | String[1] $r | {
+ if $_rname == '.' {
+ $_txt_rname = '_xmppconnect'
+ } else {
+ $_txt_rname = "_xmppconnect.${_rname}"
+ }
+ knot_record { "TXT xmpp for ${title} (${r})":
+ target_zone => $_target_zone,
+ rname => $_txt_rname,
+ rtype => 'TXT',
+ rttl => $_ttl,
+ rcontent => "\"${r}\"",
+ }
+ }
+}
diff --git a/spec/classes/records/defaults/xmpp_spec.rb b/spec/classes/records/defaults/xmpp_spec.rb
new file mode 100644
index 0000000..38d3060
--- /dev/null
+++ b/spec/classes/records/defaults/xmpp_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'knot::records::defaults::xmpp' do
+ let :default_params do
+ {}
+ end
+
+ shared_examples 'knot::records::defaults::xmpp shared examples' do
+ it { is_expected.to compile.with_all_deps }
+ end
+
+ on_supported_os.each do |os, os_facts|
+ context "on #{os}" do
+ let(:facts) { os_facts }
+
+ context 'with defaults' do
+ let :params do
+ default_params
+ end
+
+ it_behaves_like 'knot::records::defaults::xmpp shared examples'
+ end
+ end
+ end
+end
diff --git a/spec/defines/records/xmpp_spec.rb b/spec/defines/records/xmpp_spec.rb
new file mode 100644
index 0000000..40be2a1
--- /dev/null
+++ b/spec/defines/records/xmpp_spec.rb
@@ -0,0 +1,86 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'knot::records::xmpp' do
+ let :default_params do
+ {
+ xmpp_client: [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5222 }],
+ xmpp_client_service: [{ 'port' => 'xmpp-client', 'proto' => 'tcp' }],
+ xmpps_client: [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5223 }],
+ xmpps_client_service: [{ 'port' => 'xmpps-client', 'proto' => 'tcp' }],
+ xmpp_server: [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5269 }],
+ xmpp_server_service: [{ 'port' => 'xmpp-server', 'proto' => 'tcp' }],
+ xmpps_server: [{ 'priority' => 0, 'weight' => 5, 'target_port' => 5270 }],
+ xmpps_server_service: [{ 'port' => 'xmpps-server', 'proto' => 'tcp' }],
+ tlsa: [],
+ ttl: 3600,
+ }
+ end
+
+ shared_examples 'knot::records::xmpp shared examples' do
+ it { is_expected.to compile.with_all_deps }
+ it { is_expected.to contain_class('knot::records::defaults::xmpp') }
+
+ it {
+ is_expected.to contain_knot__records__srv("SRV xmpp-client #{title}")
+ .with_target_zone(params[:target_zone])
+ .with_rname(params[:rname])
+ .with_srv(params[:xmpp_client].map { |item| item.merge({ target: params[:dest_target] }) })
+ .with_service(params[:xmpp_client_service])
+ .with_ttl(params[:ttl])
+ }
+
+ it {
+ is_expected.to contain_knot__records__srv("SRV xmpps-client #{title}")
+ .with_target_zone(params[:target_zone])
+ .with_rname(params[:rname])
+ .with_srv(params[:xmpps_client].map { |item| item.merge({ target: params[:dest_target] }) })
+ .with_service(params[:xmpps_client_service])
+ .with_ttl(params[:ttl])
+ }
+
+ it {
+ is_expected.to contain_knot__records__srv("SRV xmpp-server #{title}")
+ .with_target_zone(params[:target_zone])
+ .with_rname(params[:rname])
+ .with_srv(params[:xmpp_server].map { |item| item.merge({ target: params[:dest_target] }) })
+ .with_service(params[:xmpp_server_service])
+ .with_ttl(params[:ttl])
+ }
+
+ it {
+ is_expected.to contain_knot__records__srv("SRV xmpps-server #{title}")
+ .with_target_zone(params[:target_zone])
+ .with_rname(params[:rname])
+ .with_srv(params[:xmpps_server].map { |item| item.merge({ target: params[:dest_target] }) })
+ .with_service(params[:xmpps_server_service])
+ .with_ttl(params[:ttl])
+ }
+
+ it {
+ is_expected.to contain_knot__records__tlsa("XMPPS TLSA #{title}")
+ .with_target_zone(params[:target_zone])
+ .with_rname(params[:rname])
+ .with_tlsa(params[:tlsa])
+ .with_ttl(params[:ttl])
+ }
+ end
+
+ on_supported_os.each do |os, os_facts|
+ context "on #{os}" do
+ let(:facts) { os_facts }
+
+ context 'with defaults' do
+ let(:title) { 'xmpp.example.org' }
+ let :params do
+ default_params.merge(dest_server: 'xmpp.example.org',
+ rname: 'xmpp',
+ target_zone: 'example.org')
+ end
+
+ it_behaves_like 'knot::records::xmpp shared examples'
+ end
+ end
+ end
+end