Ondřej Svoboda has uploaded a new change for review. Change subject: net: add a resolv.conf writer ......................................................................
net: add a resolv.conf writer Change-Id: I41b81b04fbe3e3e2398f28cb16fb0dbbc0382249 Signed-off-by: Ondřej Svoboda <osvob...@redhat.com> --- M lib/vdsm/network/ip/resolv.py 1 file changed, 46 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/05/62705/1 diff --git a/lib/vdsm/network/ip/resolv.py b/lib/vdsm/network/ip/resolv.py index 5d9ce22..c21b43f 100644 --- a/lib/vdsm/network/ip/resolv.py +++ b/lib/vdsm/network/ip/resolv.py @@ -18,22 +18,60 @@ # Refer to the README and COPYING files for full details of the license from __future__ import absolute_import +from vdsm import dsaversion + DNS_CONF_FILE = '/etc/resolv.conf' +MAXNS = 3 # the resolver suppors no more than this number of nameservers def get_host_nameservers(): - """Returns a list of nameservers listed in /etc/resolv.conf""" - with open(DNS_CONF_FILE, 'r') as file_object: - file_text = file_object.read() - return _parse_nameservers(file_text) + """Return a list of nameservers listed in /etc/resolv.conf""" + return _parse_nameservers(_read_resolv_conf()) + + +def _read_resolv_conf(): + with open(DNS_CONF_FILE, 'r') as f: + return f.read() def _parse_nameservers(file_text): nameservers = [] - for line in file_text.splitlines(): - words = line.strip().split() - if len(words) < 2: - continue + for words in _parse_lines(file_text): if words[0] == 'nameserver': nameservers.append(words[1]) return nameservers + + +def _parse_lines(file_text): + for line in file_text.splitlines(): + if not line or line[0] in ';#': + continue + words = line.strip().split() + if len(words) >= 2: + yield words + + +def update(nameservers): + file_text = _read_resolv_conf() + old_nameservers = _parse_nameservers(file_text) + nameservers = list(nameservers) + _extend_with_unique(nameservers, old_nameservers) + + lines = ['# Generated by VDSM version ' + dsaversion.raw_version_revision] + for words in _parse_lines(file_text): + if words[0] == 'nameserver': + if nameservers: + ns = nameservers.pop(0) + lines.append('nameserver ' + ns) + else: + lines.append(' '.join(words)) + + with open(DNS_CONF_FILE, 'w') as f: + return f.writelines(line + '\n' for line in lines) + + +def _extend_with_unique(nameservers, old_nameservers): + while len(nameservers) < MAXNS and old_nameservers: + ns = old_nameservers.pop(0) + if ns not in nameservers: + nameservers.append(ns) -- To view, visit https://gerrit.ovirt.org/62705 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I41b81b04fbe3e3e2398f28cb16fb0dbbc0382249 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Ondřej Svoboda <osvob...@redhat.com> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/admin/lists/vdsm-patches@lists.fedorahosted.org