---
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