{% 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{{ ipv }}-skip='{{ web_options.skip }}', \ {% endif %} {% else %} if{{ ipv }}={{ address }}, \ {% endif %} {% endfor %} {# Other service options with special treatment for password #} {% for k,v in kwargs.items() if v is vyos_defined %} {{ k | replace('_', '-') }}={{ "'%s'" % (v) if k == 'password' else v }}{{ ',' if not loop.last }} \ {% endfor %} {# Actual hostname for the service #} {{ host }} {% endmacro %} ### Autogenerated by service_dns_dynamic.py ### daemon={{ interval }} syslog=yes ssl=yes pid={{ config_file | replace('.conf', '.pid') }} cache={{ config_file | replace('.conf', '.cache') }} {# ddclient default (web=dyndns) doesn't support ssl and results in process lockup #} web=googledomains {# ddclient default (use=ip) results in confusing warning message in log #} use=no {% if name is vyos_defined %} {% for service, config in name.items() %} {% if config.description is vyos_defined %} # {{ config.description }} {% endif %} {% for host in config.host_name if config.host_name is vyos_defined %} {# ip_suffixes can be either of ['v4'], ['v6'], ['v4', 'v6'] for all protocols except 'nsupdate' ip_suffixes must be [''] for nsupdate since it doesn't support usevX/wantipvX yet #} {% set ip_suffixes = ['v4', 'v6'] if config.ip_version == 'both' else ([config.ip_version[2:]] if config.protocol != 'nsupdate' else ['']) %} {% set password = config.key if config.protocol == 'nsupdate' else config.password %} {% set address = 'web' if config.address.web is vyos_defined else config.address.interface %} {% set web_options = config.address.web | default({}) %} # Web service dynamic DNS configuration for {{ service }}: [{{ config.protocol }}, {{ host }}] {{ render_config(host, address, web_options, ip_suffixes, protocol=config.protocol, server=config.server, zone=config.zone, login=config.username, password=password, ttl=config.ttl, min_interval=config.wait_time, max_interval=config.expiry_time) }} {% endfor %} {% endfor %} {% endif %}