summaryrefslogtreecommitdiff
path: root/ncserver/module/system.py
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2020-09-11 06:14:07 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2020-09-11 06:14:07 -0500
commit16e322a9c71cde15d3112d8f3ffc174e656f50ef (patch)
tree36571bee64207a74644ccdbfc5db2d7668a75f7c /ncserver/module/system.py
parent70a92347b60eb83c8d30b7ecda24a7d7fd7970f3 (diff)
downloadnetconfapk-16e322a9c71cde15d3112d8f3ffc174e656f50ef.tar.gz
netconfapk-16e322a9c71cde15d3112d8f3ffc174e656f50ef.tar.bz2
netconfapk-16e322a9c71cde15d3112d8f3ffc174e656f50ef.tar.xz
netconfapk-16e322a9c71cde15d3112d8f3ffc174e656f50ef.zip
ietf-system: Modularise /etc/resolv.conf parsing
Diffstat (limited to 'ncserver/module/system.py')
-rw-r--r--ncserver/module/system.py34
1 files changed, 27 insertions, 7 deletions
diff --git a/ncserver/module/system.py b/ncserver/module/system.py
index 7e6616e..5962327 100644
--- a/ncserver/module/system.py
+++ b/ncserver/module/system.py
@@ -81,10 +81,20 @@ def _parse_ntp_conf_to(sys_node):
# XXX TODO: parse NTP configuration.
-def _parse_resolv_conf_to(sys_node):
- """Parse /etc/resolv.conf into /sys:system/dns-resolver format."""
- root = util.subelm(sys_node, 'sys:dns-resolver')
+def _parse_resolv_conf() -> dict:
+ """Parse /etc/resolv.conf and return the configuration.
+
+ The return value is a dictionary with the following keys:
+
+ * resolvers: a dict, with each key being the name of the resolver
+ and the value being the resolver IP
+
+ * search: a list, containing search domains
+
+ * attempts: the number of attempts to resolve a name
+ * timeout: the timeout in seconds to resolve a name
+ """
with open('/etc/resolv.conf', 'r') as rconf_f:
rconf = rconf_f.readlines()
@@ -123,18 +133,28 @@ def _parse_resolv_conf_to(sys_node):
elif line.startswith('domain') or line.startswith('search'):
search = line[7:].split(' ')
- for domain in search:
+ return {'resolvers': resolvers, 'search': search, 'attempts': attempts,
+ 'timeout': timeout}
+
+
+def _parse_resolv_conf_to(sys_node):
+ """Parse /etc/resolv.conf into /sys:system/dns-resolver format."""
+ root = util.subelm(sys_node, 'sys:dns-resolver')
+
+ resolv_conf = _parse_resolv_conf()
+
+ for domain in resolv_conf['search']:
root.append(util.leaf_elm('sys:search', domain))
- for pair in resolvers.items():
+ for pair in resolv_conf['resolvers'].items():
res = util.subelm(root, 'sys:server')
res.append(util.leaf_elm('sys:name', pair[0]))
udp = util.subelm(res, 'sys:udp-and-tcp')
udp.append(util.leaf_elm('sys:address', pair[1]))
opts = util.subelm(root, 'sys:options')
- opts.append(util.leaf_elm('sys:timeout', timeout))
- opts.append(util.leaf_elm('sys:attempts', attempts))
+ opts.append(util.leaf_elm('sys:timeout', resolv_conf['timeout']))
+ opts.append(util.leaf_elm('sys:attempts', resolv_conf['attempts']))
def _parse_authn_to(sys_node):