[Ovirt-devel] [PATCH node] add network.py script

Joey Boggs jboggs at redhat.com
Mon Oct 25 16:28:33 UTC 2010


---
 scripts/network.py |  207 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 207 insertions(+), 0 deletions(-)
 create mode 100644 scripts/network.py

diff --git a/scripts/network.py b/scripts/network.py
new file mode 100644
index 0000000..28e32f2
--- /dev/null
+++ b/scripts/network.py
@@ -0,0 +1,207 @@
+#!/usr/bin/python
+
+from ovirtfunctions import *
+import tempfile
+import sys
+
+class Network:
+
+    def __init__(self):
+        self.WORKDIR=tempfile.mkdtemp()
+        self.IFCONFIG_FILE_ROOT="/files/etc/sysconfig/network-scripts/ifcfg"
+        self.NTPCONF_FILE_ROOT="/files/etc/ntp"
+        self.NTP_CONFIG_FILE="/etc/ntp.conf"
+        self.NTPSERVERS=""
+        self.CONFIGURED_NIC= ""
+        self.IF_CONFIG = ""
+        self.BR_CONFIG = ""
+        self.VL_CONFIG = ""
+        self.VLAN_ID=""
+        self.VL_ROOT=""
+        self.VL_FILENAME =""
+        self.nic=""
+        self.bridge=""
+        self.vlan_id=""
+
+    def configure_interface(self):
+        log("Configuring Interface")
+        if OVIRT_VARS.has_key("OVIRT_IP_ADDRESS"):
+            IPADDR = OVIRT_VARS["OVIRT_IP_ADDRESS"]
+            NETMASK = OVIRT_VARS["OVIRT_IP_NETMASK"]
+            GATEWAY = OVIRT_VARS["OVIRT_IP_GATEWAY"]
+            PREFIX = OVIRT_VARS["OVIRT_IP_PREFIX"]
+
+        if OVIRT_VARS.has_key("OVIRT_BOOTIF"):
+            self.CONFIGURED_NIC = OVIRT_VARS["OVIRT_BOOTIF"]
+        if not self.CONFIGURED_NIC is None:
+            log("\nDeleting existing network configuration...\n")
+            os.system("cp -a  /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/backup.lo")
+            remove_config("/etc/sysconfig/network-scripts/ifcfg-*")
+            os.system("rm -rf /etc/sysconfig/network-scripts/ifcfg-*")
+            os.system("cp -a  /etc/sysconfig/network-scripts/backup.lo /etc/sysconfig/network-scripts/ifcfg-lo")
+        else:
+            log("\nAborting...\n")
+            return
+
+        for file in os.listdir(self.WORKDIR):
+            os.system("rm -rf %s/%s") % (self.WORKDIR, file)
+        BRIDGE = "br" + self.CONFIGURED_NIC
+        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)
+        self.IF_CONFIG += "rm %s\nset %s/DEVICE %s\n" % (IF_ROOT, IF_ROOT, self.CONFIGURED_NIC)
+        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
+
+        if OVIRT_VARS.has_key("OVIRT_IPV6"):
+            if OVIRT_VARS["OVIRT_IPV6"]  == auto:
+                self.BR_CONFIG += "set %s/IPV6INIT yes\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/IPV6FORWARDING no\n" % BR_ROOT
+                BR_CONFIG += "set %s/IPV6_AUTOCONF yes\n" % BR_ROOT
+            elif OVIRT_VARS["OVIRT_IPV6"] == "dhcp":
+                self.BR_CONFIG += "set %s/IPV6INIT yes\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/IPV6_AUTOCONF no\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/IPV6FORWARDING no\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/DHCPV6C yes\n" % BR_ROOT
+            else:
+                self.BR_CONFIG += "set %s/IPV6INIT yes\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/IPV6ADDR $OVIRT_IPV6\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/IPV6_AUTOCONF no\n" % BR_ROOT
+                self.BR_CONFIG += "set %s/IPV6FORWARDING no\n" % BR_ROOT
+
+        if OVIRT_VARS.has_key("OVIRT_VLAN"):
+            VLAN_ID=OVIRT_VARS["OVIRT_VLAN"]
+            VL_ROOT = "%s.%s" % (IF_ROOT, VLAN_ID)
+            VL_CONFIG += "rm %s\\nset \%s/DEVICE %s.%s\\n" % (VL_ROOT, VL_ROOT, self.CONFIGURED_NIC, VLAN_ID)
+            VL_CONFIG += "set %s/BRIDGE %s\\n" % (VL_ROOT, BRIDGE)
+            VL_CONFIG += "set %s/VLAN yes\n" % VL_ROOT
+            self.VL_FILENAME = "%s.%s" % (IF_FILENAME, OVIRT_VARS[OVIRT_VLAN])
+
+        if not OVIRT_VARS.has_key("OVIRT_IP_ADDRESS"):
+	    if not self.VL_CONFIG:
+	        self.IF_CONFIG += "set %s/BRIDGE %s\n" % (IF_ROOT, BRIDGE)
+                self.BR_CONFIG += "set %s/BOOTPROTO dhcp\n" % BR_ROOT
+        else:
+            if OVIRT_VARS.has_key("OVIRT_IP_ADDRESS") and OVIRT_VARS["OVIRT_IP_ADDRESS"] != "off":
+		if self.VL_CONFIG is None:
+                    self.IF_CONFIG =+ "set %s/BRIDGE %s\n" % (IF_ROOT, BRIDGE)
+                self.BR_CONFIG += "set %s/IPADDR %s\n" % (BR_ROOT, OVIRT_VARS["OVIRT_IP_ADDRESS"])
+                if OVIRT_VARS.has_key("OVIRT_IP_NETMASK"):
+                    self.BR_CONFIG += "set %s/NETMASK %s\n" (BR_ROOT, OVIRT_IP_NETMASK)
+                if OVIRT_VARS.has_key("OVIRT_IP_GATEWAY"):
+                    self.BR_CONFIG += "set %s/GATEWAY %s\n" % (BR_ROOT, OVIRT_IP_GATEWAY)
+        self.IF_CONFIG += "set %s/ONBOOT yes" % IF_ROOT
+        self.BR_CONFIG += "set %s/ONBOOT yes" % BR_ROOT
+        
+        if OVIRT_VARS.has_key("OVIRT_VLAN") and VL_CONFIG is not "" :
+	    self.VL_CONFIG="set %s/ONBOOT yes" % VL_ROOT
+        self.IF_CONFIG = self.IF_CONFIG.split("\n")
+        self.BR_CONFIG = self.BR_CONFIG.split("\n")
+        try:
+            self.VL_CONFIG = self_VL_CONFIG.split("\n")
+        except:
+            pass
+    def configure_dns(self):
+        if OVIRT_VARS.has_key("OVIRT_DNS"):
+            DNS=OVIRT_VARS["OVIRT_DNS"]
+            IF_FILENAME="%s/augtool-br%s" % (self.WORKDIR, CONFIGURED_NIC)
+            IF_ROOT="%s-br%s" % (self.IFCONFIG_FILE_ROOT, self.CONFIGURED_NIC)
+            if not DNS is None:
+                try:
+                    DNS1, DNS2 = DNS.split(" ", 1)
+                    if not DNS1 is None:
+                        os.system("echo \"set %s/DNS1 %s\n\" >> %s") % (IF_ROOT, DNS1)
+                    if not DNS2 is None:
+                        os.system("echo \"set %s/DNS2 %s\n\" >> %s") % (IF_ROOT, DNS2)
+                except:
+                    pass
+
+    def configure_ntp(self):
+        if OVIRT_VARS.has_key("OVIRT_NTP"):
+            NTPSERVERS=OVIRT_NTP
+        else:
+            NTPSERVERS=""
+
+    def save_ntp_configuration(self):
+        ntproot = "/files/etc/ntp.conf"
+        ntpconf = "rm %s\n" % ntproot
+        ntpconf += "set %s/driftfile /var/lib/ntp/drift\n" % ntproot
+        ntpconf += "set %s/includefile /etc/ntp/crypto/pw\n" % ntproot
+        ntpconf += "set %s/keys /etc/ntp/keys" % ntproot
+        ntpconf = ntpconf.split("\n")
+        for line in ntpconf:
+            try:
+                oper, file, value = line.split()
+            except:
+                oper, file = line.split()
+            
+            augtool(line)
+
+        if OVIRT_VARS.has_key("NTPSERVERS"):
+            offset=1
+            SERVERS = OVIRT_VARS["NTPSERVERS"].split(":")
+            for server in SERVERS:
+                os.system("echo \"set /files/etc/ntp.conf/server[%s] %s\n\" >> %s") % (offset, server, ntpconf)
+                offset = offset + 1
+
+    def save_network_configuration(self):
+        net_configured=0
+        augtool_workdir_list = "ls %s/augtool-* >/dev/null"
+        log("Configuring network")
+
+        # delete existing scripts
+        try:
+            for vlan in os.listdir("/proc/net/vlan/"):
+                if "config" in vlan:
+                    os.system("vconfig rem %s") % vlan
+        except:
+            pass
+
+        for script in os.listdir("/etc/sysconfig/network-scripts/"):
+            if "ifcfg" in script:
+                if not "ifcfg-lo" in script:
+                    ovirt_safe_delete_config(script)
+
+        config = self.WORKDIR + "/config-augtool"
+        
+            
+        for line in self.IF_CONFIG:
+            try:
+                oper, file, value = line.split()
+            except:
+                oper, file = line.split()
+            augtool(line)
+            net_configured=1
+            ovirt_store_config("/etc/sysconfig/network-scripts/ifcfg* NTP_CONFIG_FILE")
+            log("Network configured successfully")
+        if net_configured == 1:
+            os.system("service network stop > /dev/null 2>&1")
+            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()
+            for i in brctl_output.split():
+                if_down_cmd = "ifconfig %s down" % i
+                os.system(if_down_cmd)
+                del_br_cmd = "brctl delbr %s" % i
+                os.system(del_br_cmd)
+                os.system("service network start 2> /dev/null")
+            if OVIRT_VARS.has_key("NTP"):
+                log("Testing NTP Configuration")
+                test_ntp_configuration()
+try:
+    if "AUTO" in sys.argv[1]:
+        if OVIRT_VARS.has_key("OVIRT_INIT"):
+            network = Network()
+            network.configure_interface()
+            network.configure_dns()
+            network.configure_ntp()
+            network.save_ntp_configuration()
+            network.save_network_configuration()
+        else:
+            log("No network interface specified. Unable to configure networking.")
+except:
+    log("Exiting..")
+    sys.exit(0)
-- 
1.7.2.3




More information about the ovirt-devel mailing list