diff options
author | Indrajit Raychaudhuri <irc@indrajit.com> | 2023-04-17 16:19:26 -0500 |
---|---|---|
committer | Indrajit Raychaudhuri <irc@indrajit.com> | 2023-04-17 18:09:36 -0500 |
commit | 84e9b48405017f718daa35a0e8b5d5c07d40ae3f (patch) | |
tree | 3652c055f398d9b15a2b3cd12ef51d052110904e /src | |
parent | cdad13fecc8eae760634069218bd33c1bc6f767a (diff) | |
download | vyos-1x-84e9b48405017f718daa35a0e8b5d5c07d40ae3f.tar.gz vyos-1x-84e9b48405017f718daa35a0e8b5d5c07d40ae3f.zip |
dns: T5144: Make dns dynamic status output legacy format compatible
Adjust the output of dynamic dns status to be compatible with both
legacy and new ddclient cache format. This is necessary because the
legacy format is still used by some of the dyndns2 family of protocols.
This is a follow-up to commit 3f3621b6874354.
Diffstat (limited to 'src')
-rwxr-xr-x | src/op_mode/dynamic_dns.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/op_mode/dynamic_dns.py b/src/op_mode/dynamic_dns.py index 2cba33cc8..d41a74db3 100755 --- a/src/op_mode/dynamic_dns.py +++ b/src/op_mode/dynamic_dns.py @@ -21,6 +21,7 @@ import time from tabulate import tabulate from vyos.config import Config +from vyos.template import is_ipv4, is_ipv6 from vyos.util import call cache_file = r'/run/ddclient/ddclient.cache' @@ -46,7 +47,7 @@ def _get_formatted_host_records(host_data): def show_status(): - # A ddclient status file must not always exist + # A ddclient status file might not always exist if not os.path.exists(cache_file): sys.exit(0) @@ -62,9 +63,20 @@ def show_status(): # we pick up the ones we are interested in for kvraw in line.split(' ')[0].split(','): k, v = kvraw.split('=') - if k in columns.keys(): + if k in list(columns.keys()) + ['ip', 'status']: # ip and status are legacy keys props[k] = v + # Extract IPv4 and IPv6 address and status from legacy keys + # Dual-stack isn't supported in legacy format, 'ip' and 'status' are for one of IPv4 or IPv6 + if 'ip' in props: + if is_ipv4(props['ip']): + props['ipv4'] = props['ip'] + props['status-ipv4'] = props['status'] + elif is_ipv6(props['ip']): + props['ipv6'] = props['ip'] + props['status-ipv6'] = props['status'] + del props['ip'] + # Convert mtime to human readable format if 'mtime' in props: props['mtime'] = time.strftime( |