summaryrefslogtreecommitdiff
path: root/data/templates/dns-dynamic
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-06-05 22:04:21 +0200
committerGitHub <noreply@github.com>2023-06-05 22:04:21 +0200
commit47cce6805562c11b75ef9d5d761881e275d1a27d (patch)
treee75bac5474b8f47cf0a37c47fa6acf78e2116e92 /data/templates/dns-dynamic
parent3cfeddebb73e12de15d46d13c44003ede2d72c19 (diff)
parentc14825f55d286d54ca3c04703ecbded1cb4c2cca (diff)
downloadvyos-1x-47cce6805562c11b75ef9d5d761881e275d1a27d.tar.gz
vyos-1x-47cce6805562c11b75ef9d5d761881e275d1a27d.zip
Merge pull request #2005 from indrajitr/ddclient-improvement-round-2
dns: T5144: Modernize dynamic dns operation (round 2)
Diffstat (limited to 'data/templates/dns-dynamic')
-rw-r--r--data/templates/dns-dynamic/ddclient.conf.j272
-rw-r--r--data/templates/dns-dynamic/override.conf.j211
2 files changed, 83 insertions, 0 deletions
diff --git a/data/templates/dns-dynamic/ddclient.conf.j2 b/data/templates/dns-dynamic/ddclient.conf.j2
new file mode 100644
index 000000000..a19b79c00
--- /dev/null
+++ b/data/templates/dns-dynamic/ddclient.conf.j2
@@ -0,0 +1,72 @@
+{% macro render_config(host, address, web_options, ip_suffixes=['']) %}
+{# Address: use=if, if=ethX, usev6=ifv6, ifv6=ethX, usev6=webv6, webv6=https://v6.example.com #}
+{% for ipv in ip_suffixes %}
+use{{ ipv }}={{ address if address == 'web' else 'if' }}{{ ipv }}, \
+{% if address == 'web' %}
+{% if web_options.url is vyos_defined %}
+web{{ ipv }}={{ web_options.url }}, \
+{% endif %}
+{% if web_options.skip is vyos_defined %}
+web-skip{{ ipv }}='{{ web_options.skip }}', \
+{% endif %}
+{% else %}
+if{{ ipv }}={{ address }}, \
+{% endif %}
+{% endfor %}
+{# Other service options #}
+{% for k,v in kwargs.items() %}
+{% if v is vyos_defined %}
+{{ k }}={{ v }}{{ ',' if not loop.last }} \
+{% endif %}
+{% endfor %}
+{# Actual hostname for the service #}
+{{ host }}
+{% endmacro %}
+### Autogenerated by dns_dynamic.py ###
+daemon=1m
+syslog=yes
+ssl=yes
+pid={{ config_file | replace('.conf', '.pid') }}
+cache={{ config_file | replace('.conf', '.cache') }}
+
+{% if address is vyos_defined %}
+{% for address, service_cfg in address.items() %}
+{% if service_cfg.rfc2136 is vyos_defined %}
+{% for name, config in service_cfg.rfc2136.items() %}
+{% if config.description is vyos_defined %}
+# {{ config.description }}
+
+{% endif %}
+{% for host in config.host_name if config.host_name is vyos_defined %}
+# RFC2136 dynamic DNS configuration for {{ name }}: [{{ config.zone }}, {{ host }}]
+{# Don't append 'new-style' compliant suffix ('usev4', 'usev6', 'ifv4', 'ifv6' etc.)
+ to the properties since 'nsupdate' doesn't support that yet. #}
+{{ render_config(host, address, service_cfg.web_options,
+ protocol='nsupdate', server=config.server, zone=config.zone,
+ password=config.key, ttl=config.ttl) }}
+
+{% endfor %}
+{% endfor %}
+{% endif %}
+{% if service_cfg.service is vyos_defined %}
+{% for name, config in service_cfg.service.items() %}
+{% if config.description is vyos_defined %}
+# {{ config.description }}
+
+{% endif %}
+{% for host in config.host_name if config.host_name is vyos_defined %}
+{% set ip_suffixes = ['v4', 'v6'] if config.ip_version == 'both'
+ else (['v6'] if config.ip_version == 'ipv6' else ['']) %}
+# Web service dynamic DNS configuration for {{ name }}: [{{ config.protocol }}, {{ host }}]
+{# For ipv4 only setup, don't append 'new-style' compliant suffix ('usev4', 'ifv4', 'webv4' etc.)
+ to the properties and instead live through the deprecation warnings for better compatibility
+ with most ddclient protocols. #}
+{{ render_config(host, address, service_cfg.web_options, ip_suffixes,
+ protocol=config.protocol, server=config.server, zone=config.zone,
+ login=config.username, password=config.password) }}
+
+{% endfor %}
+{% endfor %}
+{% endif %}
+{% endfor %}
+{% endif %}
diff --git a/data/templates/dns-dynamic/override.conf.j2 b/data/templates/dns-dynamic/override.conf.j2
new file mode 100644
index 000000000..8a9dfcd70
--- /dev/null
+++ b/data/templates/dns-dynamic/override.conf.j2
@@ -0,0 +1,11 @@
+{% set vrf_command = 'ip vrf exec ' ~ vrf ~ ' ' if vrf is vyos_defined else '' %}
+[Unit]
+ConditionPathExists={{ config_file }}
+After=vyos-router.service
+
+[Service]
+PIDFile=
+PIDFile={{ config_file | replace('.conf', '.pid') }}
+EnvironmentFile=
+ExecStart=
+ExecStart=/usr/bin/ddclient -file {{ config_file }}