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

Reply via email to