{% 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={{ timeout }} syslog=yes ssl=yes pid={{ config_file | replace('.conf', '.pid') }} cache={{ config_file | replace('.conf', '.cache') }} {# Explicitly override global options for reliability #} web=googledomains {# ddclient default ('dyndns') doesn't support ssl and results in process lockup #} use=no {# ddclient default ('ip') results in confusing warning message in log #} {% 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 [config.ip_version[2:]] %} {# 'ipvX' -> 'vX' #} # Web service dynamic DNS configuration for {{ name }}: [{{ config.protocol }}, {{ host }}] {{ 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, ttl=config.ttl) }} {% endfor %} {% endfor %} {% endif %} {% endfor %} {% endif %}