[Ovirt-devel] [PATCH] persist only configured network configs

Alan Pevec apevec at redhat.com
Thu Aug 11 00:02:33 UTC 2011


blind ifcfg-* persists too much

also add mac/nic mapping missing in network.py

rhbz#725392

Signed-off-by: Alan Pevec <apevec at redhat.com>
---
 scripts/network.py              |   48 +++++++++++++++++++++++++++-----------
 scripts/ovirt-config-networking |   22 +++++++++++------
 scripts/ovirt-functions         |    1 -
 scripts/ovirtfunctions.py       |   13 ----------
 4 files changed, 48 insertions(+), 36 deletions(-)

diff --git a/scripts/network.py b/scripts/network.py
index 65b551c..50d4624 100644
--- a/scripts/network.py
+++ b/scripts/network.py
@@ -17,6 +17,7 @@
 # MA  02110-1301, USA.  A copy of the GNU General Public License is
 # also available at http://www.gnu.org/copyleft/gpl.html.
 from ovirtnode.ovirtfunctions import *
+from glob import glob
 import tempfile
 import sys
 
@@ -25,12 +26,12 @@ class Network:
     def __init__(self):
         OVIRT_VARS = parse_defaults()
         self.WORKDIR=tempfile.mkdtemp()
-        self.IFSCRIPTS_PATH ="/etc/sysconfig/network-scripts/"
-        self.IFCONFIG_FILE_ROOT="/files/etc/sysconfig/network-scripts/ifcfg"
-        self.NTPCONF_FILE_ROOT="/files/etc/ntp"
+        self.IFSCRIPTS_PATH ="/etc/sysconfig/network-scripts/ifcfg-"
+        self.IFCONFIG_FILE_ROOT="/files%s" % self.IFSCRIPTS_PATH
         self.NTP_CONFIG_FILE="/etc/ntp.conf"
         self.NTPSERVERS=""
-        self.CONFIGURED_NIC= ""
+        self.CONFIGURED_NIC = ""
+        self.CONFIGURED_NICS = []
         self.IF_CONFIG = ""
         self.BR_CONFIG = ""
         self.VL_CONFIG = ""
@@ -62,13 +63,15 @@ class Network:
         nic_hwaddr = n_address.readline().strip("\n")
         n_address.close()
         BRIDGE = "br" + self.CONFIGURED_NIC
+        self.CONFIGURED_NICS.append(self.CONFIGURED_NIC)
+        self.CONFIGURED_NICS.append(BRIDGE)
         IF_FILENAME = self.WORKDIR + "/augtool-" + self.CONFIGURED_NIC
         BR_FILENAME = self.WORKDIR + "/augtool-" + BRIDGE
         log("\nConfigure $BRIDGE for use by $NIC..\n\n")
-        IF_ROOT = "%s-%s" % (self.IFCONFIG_FILE_ROOT, self.CONFIGURED_NIC)
+        IF_ROOT = "%s%s" % (self.IFCONFIG_FILE_ROOT, self.CONFIGURED_NIC)
         self.IF_CONFIG += "rm %s\nset %s/DEVICE %s\n" % (IF_ROOT, IF_ROOT, self.CONFIGURED_NIC)
         self.IF_CONFIG += "set %s/HWADDR %s\n" % (IF_ROOT, nic_hwaddr)
-        BR_ROOT = "%s-%s" % (self.IFCONFIG_FILE_ROOT, BRIDGE)
+        BR_ROOT = "%s%s" % (self.IFCONFIG_FILE_ROOT, BRIDGE)
         self.BR_CONFIG += "rm %s\nset %s/DEVICE %s\n" % (BR_ROOT, BR_ROOT, BRIDGE)
         self.BR_CONFIG += "set %s/TYPE Bridge\n" % BR_ROOT
         self.BR_CONFIG += "set %s/PEERNTP yes\n" % BR_ROOT
@@ -96,6 +99,7 @@ class Network:
 
 
         if OVIRT_VARS.has_key("OVIRT_VLAN"):
+            self.CONFIGURED_NICS.append("%s.%s" % (self.CONFIGURED_NIC, VLAN_ID))
             VLAN_ID=OVIRT_VARS["OVIRT_VLAN"]
             VL_ROOT = "%s.%s" % (IF_ROOT, VLAN_ID)
             self.VL_CONFIG += "rm %s\n" % VL_ROOT
@@ -187,16 +191,17 @@ class Network:
         log("Configuring network")
         os.system("ifdown br" + self.CONFIGURED_NIC)
         for vlan in os.listdir("/proc/net/vlan/"):
+            # XXX wrong match e.g. eth10.1 with eth1
             if self.CONFIGURED_NIC in vlan:
                 os.system("vconfig rem " + vlan + "&> /dev/null")
                 ovirt_safe_delete_config(self.IFSCRIPTS_PATH + vlan)
                 os.system("rm -rf " + self.IFSCRIPTS_PATH + vlan)
 
-        for script in os.listdir(self.IFSCRIPTS_PATH):
-            if self.CONFIGURED_NIC in script:
-                log("Removing Script: " + script)
-                ovirt_safe_delete_config("/etc/sysconfig/network-scripts/" + script)
-        augtool("rm", "/files/etc/sysconfig/network-scripts/ifcfg-br"+self.CONFIGURED_NIC, "")
+        for script in glob("%s%s*" % (self.IFSCRIPTS_PATH, self.CONFIGURED_NIC)):
+            # XXX wrong match e.g. eth10 with eth1* (need * to cover VLANs)
+            log("Removing Script: " + script)
+            ovirt_safe_delete_config(script)
+        augtool("rm", self.IFCONFIG_FILE_ROOT+"br"+self.CONFIGURED_NIC, "")
 
         for line in self.IF_CONFIG:
             log(line)
@@ -231,15 +236,30 @@ class Network:
                 except:
                     pass
 
+        # preserve current MAC mappings for *all physical* network interfaces
+        for nicdev in glob('/sys/class/net/*/device'):
+            nic=nicdev.split('/')[4]
+            if nic != self.CONFIGURED_NIC:
+                f=open('/sys/class/net/%s/address' % nic)
+                mac=f.read().strip()
+                f.close()
+                if len(mac) > 0:
+                    self.CONFIGURED_NICS.append(nic)
+                    nicroot = "%s%s" % (self.IFCONFIG_FILE_ROOT, nic)
+                    # XXX augtool does save every time!
+                    augtool("set", "%s/DEVICE" % nicroot, nic)
+                    augtool("set", "%s/HWADDR" % nicroot, mac)
+                    augtool("set", "%s/ONBOOT" % nicroot, "no")
+
         net_configured=1
-        for i in os.listdir("/etc/sysconfig/network-scripts/"):
-            if "ifcfg" in i:
-                ovirt_store_config("/etc/sysconfig/network-scripts/" + i)
+        for nic in self.CONFIGURED_NICS:
+            ovirt_store_config("%s%s" % (self.IFSCRIPTS_PATH, nic) )
         ovirt_store_config(self.NTP_CONFIG_FILE)
         log("Network configured successfully")
         if net_configured == 1:
             log("\nStopping Network service")
             os.system("service network stop &> /dev/null")
+            # XXX eth assumed in breth
             brctl_cmd = "brctl show|grep breth|awk '{print $1}'"
             brctl = subprocess.Popen(brctl_cmd, shell=True, stdout=PIPE, stderr=STDOUT)
             brctl_output = brctl.stdout.read()
diff --git a/scripts/ovirt-config-networking b/scripts/ovirt-config-networking
index 6ddd805..30c8d2d 100755
--- a/scripts/ovirt-config-networking
+++ b/scripts/ovirt-config-networking
@@ -21,6 +21,7 @@ NTPCONF_FILE_ROOT="/files/etc/ntp"
 NTP_CONFIG_FILE="/etc/ntp.conf"
 NTPSERVERS=""
 CONFIGURED_NIC=""
+CONFIGURED_NICS=""
 VLAN_ID=""
 VL_ROOT=""
 
@@ -561,12 +562,14 @@ if ls "$WORKDIR"/augtool-* > /dev/null 2>&1 ; then
 
     config="$WORKDIR"/config-augtool
     cat "$WORKDIR"/augtool-* > $config
-    # must preserve current eth/MAC mapping for *all* network interfaces,
+    CONFIGURED_NICS="$CONFIGURED_NIC br$CONFIGURED_NIC"
+    if [ -n "${VLAN_ID}" ]; then
+        CONFIGURED_NICS="$CONFIGURED_NICS $CONFIGURED_NIC.$VLAN_ID"
+    fi
+    # preserve current MAC mappings for *all physical* network interfaces
     # to avoid dev$RANDOM rhbz#489927
-    # TODO use udev rules to persist network interfaces
-    for eth in $(ls -d /sys/class/net/eth*|grep -v '\.') ; do
-        nic=$(basename $eth)
-        mac=$(cat $eth/address)
+    for nic in $(ls -d /sys/class/net/*/device|cut -d/ -f5) ; do
+        mac=$(cat /sys/class/net/$nic/address)
         if [ -n "$nic" -a -n "$mac" ]; then
             if_root="$IFCONFIG_FILE_ROOT-$nic"
             printf "\nset $if_root/DEVICE $nic" >> $config
@@ -578,6 +581,7 @@ if ls "$WORKDIR"/augtool-* > /dev/null 2>&1 ; then
             fi
             if [ ${CONFIGURED_NIC} != $nic ]; then
                 printf "\nset $if_root/ONBOOT no" >> $config
+                CONFIGURED_NICS="$CONFIGURED_NICS $nic"
             fi
             printf "\nset $if_root/HWADDR $mac" >> $config
             printf "\n" >> $config
@@ -588,9 +592,10 @@ if ls "$WORKDIR"/augtool-* > /dev/null 2>&1 ; then
     if [ $? = 0 ]; then
         log "Network configured successfully"
         net_configured=1
-        ovirt_store_config \
-            /etc/sysconfig/network-scripts/ifcfg* \
-            $NTP_CONFIG_FILE
+        for nic in $CONFIGURED_NICS; do
+            ovirt_store_config /etc/sysconfig/network-scripts/ifcfg-$nic
+        done
+        ovirt_store_config $NTP_CONFIG_FILE
     else
         log "Error configuring network, see $OVIRT_LOGFILE"
         stop_log
@@ -601,6 +606,7 @@ stop_log
 
 if [ "$net_configured" = 1 ]; then
     service network stop > /dev/null 2>&1
+    # XXX eth assumed in breth
     for i in `brctl show | grep breth | awk '{print $1}'`
     do
       ifconfig $i down
diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index 6ee3736..fd99bdf 100644
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -23,7 +23,6 @@ OVIRT_BACKUP_DIR=/var/lib/ovirt-backup
 MANAGEMENT_SCRIPTS_DIR=/etc/node.d
 
 OVIRT_CONFIG_FILES="\
- /etc/sysconfig/network-scripts/ifcfg-*         \
  /etc/rsyslog.conf                              \
  /etc/libvirt/libvirtd.conf                     \
  /etc/sasl2/libvirt.conf                        \
diff --git a/scripts/ovirtfunctions.py b/scripts/ovirtfunctions.py
index ae3c013..0c94363 100644
--- a/scripts/ovirtfunctions.py
+++ b/scripts/ovirtfunctions.py
@@ -100,19 +100,6 @@ OVIRT_BACKUP_DIR="/var/lib/ovirt-backup"
 
 MANAGEMENT_SCRIPTS_DIR="/etc/node.d"
 
-OVIRT_CONFIG_FILES = ["/etc/sysconfig/network-scripts/ifcfg-*", \
-                      "/etc/rsyslog.conf", \
-                      "/etc/libvirt/libvirtd.conf", \
-                      "/etc/sasl2/libvirt.conf", \
-                      "/etc/libvirt/passwd.db", \
-                      "/etc/passwd", \
-                      "/etc/shadow", \
-                      "/etc/ssh/ssh_host*_key*", \
-                      "/etc/default/ovirt", \
-                      "/etc/sysconfig/network", \
-                      "/etc/collectd.conf", \
-                      "/etc/logrotate.d/ovirt-logrotate.conf" ]
-
 def log(log_entry):
     if is_firstboot():
         log_file = open(OVIRT_TMP_LOGFILE, "a")
-- 
1.7.3.4




More information about the ovirt-devel mailing list