# Start post_install_network_config generated code
#if $getVar("system_name","") != ""

    ## this is being provisioned by system records, not profile records
    ## so we can do the more complex stuff
    ## get the list of interface names
    #set ikeys = $interfaces.keys()
    #set osversion = $getVar("os_version","") 
    #import re
    #set $vlanpattern = $re.compile("[a-zA-Z0-9]+[\.:][0-9]+")
    ## Determine if we should use the MAC address to configure the interfaces first
    ## Only physical interfaces are required to have a MAC address
    ## Also determine the number of bonding devices we have, so we can set the
    ## max-bonds option in modprobe.conf accordingly. -- jcapel

    #set $configbymac = True
    #set $numbondingdevs = 0
    #set $enableipv6 = False

    ## =============================================================================
    #for $iname in $ikeys

        ## look at the interface hash data for the specific interface
    	#set $idata = $interfaces[$iname]

        ## do not configure by mac address if we don't have one AND it's not for bonding/vlans
        ## as opposed to a "real" physical interface
    	#if $idata.get("mac_address", "") == "" and not $vlanpattern.match($iname) and not $idata.get("bonding", "").lower() == "master":
    		## we have to globally turn off the config by mac feature as we can't
    		## use it now
    		#set $configbymac = False
    	#end if

    	## count the number of bonding devices we have.
    	#if $idata.get("bonding", "").lower() == "master"
    	    #set $numbondingdevs += 1
    	#end if

        ## enable IPv6 networking if we set an ipv6 address or turn on autoconfiguration
        #if $idata.get("ipv6_address", "") != "" or $ipv6_autoconfiguration == True
            #set $enableipv6 = True
        #end if

    #end for

    ## end looping through the interfaces to see which ones we need to configure.
    ## =============================================================================
    #set $i = 0
    ## setup bonding if we have to
    #if $numbondingdevs > 0
if [ -f "/etc/modprobe.conf" ]; then
    echo "options bonding max_bonds=$numbondingdevs" >> /etc/modprobe.conf
fi 
    #end if

    ## =============================================================================
    ## create a staging directory to build out our network scripts into
    ## make sure we preserve the loopback device
mkdir /etc/sysconfig/network-scripts/cobbler
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/cobbler/

    ## =============================================================================
    ## configure the gateway if set up (this is global, not a per-interface setting)
    #if $gateway != ""
grep -v GATEWAY /etc/sysconfig/network > /etc/sysconfig/network.cobbler
echo "GATEWAY=$gateway" >> /etc/sysconfig/network.cobbler
rm -f /etc/sysconfig/network
mv /etc/sysconfig/network.cobbler /etc/sysconfig/network
    #end if

    ## =============================================================================
    ## Configure the system's primary hostname. This is also passed to anaconda, but
    ## anaconda doesn't seem to honour it in DHCP-setups.
    #if $hostname != ""
grep -v HOSTNAME /etc/sysconfig/network > /etc/sysconfig/network.cobbler
echo "HOSTNAME=$hostname" >> /etc/sysconfig/network.cobbler
rm -f /etc/sysconfig/network
mv /etc/sysconfig/network.cobbler /etc/sysconfig/network

    # Also set the hostname now, some applications require it (e.g.: if we're
    # connecting to Puppet before a reboot).
/bin/hostname $hostname
    #end if

    #if $enableipv6 == True
grep -v NETWORKING_IPV6 /etc/sysconfig/network > /etc/sysconfig/network.cobbler
echo "NETWORKING_IPV6=yes" >> /etc/sysconfig/network.cobbler
rm -f /etc/sysconfig/network
mv /etc/sysconfig/network.cobbler /etc/sysconfig/network

        #if $ipv6_autoconfiguration != ""
grep -v IPV6_AUTOCONF /etc/sysconfig/network > /etc/sysconfig/network.cobbler
            #if $ipv6_autoconfiguration == True
echo "IPV6_AUTOCONF=yes" >> /etc/sysconfig/network.cobbler
            #else
echo "IPV6_AUTOCONF=no" >> /etc/sysconfig/network.cobbler
            #end if
rm -f /etc/sysconfig/network
mv /etc/sysconfig/network.cobbler /etc/sysconfig/network
        #end if

        #if $ipv6_default_device != ""
grep -v IPV6_DEFAULTDEV /etc/sysconfig/network > /etc/sysconfig/network.cobbler
echo "IPV6_DEFAULTDEV=$ipv6_default_device" >> /etc/sysconfig/network.cobbler
rm -f /etc/sysconfig/network
mv /etc/sysconfig/network.cobbler /etc/sysconfig/network
        #end if

    #end if

    ## =============================================================================
    ## now create the config file for each interface
    #for $iname in $ikeys

        # Start configuration for $iname
        ## create lots of variables to use later
        #set $idata                = $interfaces[$iname]
        #set $mac                  = $idata.get("mac_address", "").upper()
        #set $mtu                  = $idata.get("mtu", "")
        #set $static               = $idata.get("static", "")
        #set $ip                   = $idata.get("ip_address", "")
        #set $netmask              = $idata.get("subnet", "")
        #set $static_routes        = $idata.get("static_routes", "")
        #set $bonding              = $idata.get("bonding", "")
        #set $bonding_master       = $idata.get("bonding_master", "")
        #set $bonding_opts         = $idata.get("bonding_opts", "")
        #set $ipv6_address     	   = $idata.get("ipv6_address", "")
        #set $ipv6_secondaries     = $idata.get("ipv6_secondaries", "")
        #set $ipv6_mtu             = $idata.get("ipv6_mtu", "")
        #set $ipv6_default_gateway = $idata.get("ipv6_default_gateway", "")
        #set $ipv6_static_routes   = $idata.get("ipv6_static_routes", "")
        #set $devfile              = "/etc/sysconfig/network-scripts/cobbler/ifcfg-" + $iname
        #set $routesfile           = "/etc/sysconfig/network-scripts/cobbler/route-" + $iname
        #set $ipv6_routesfile      = "/etc/sysconfig/network-scripts/cobbler/route6-" + $iname

        ## determine if this interface is for a VLAN
        #if $vlanpattern.match($iname)
            ## If this is a VLAN interface, skip it, anaconda doesn't know
            ## about VLANs.
            #set $is_vlan = "true"
        #else
            #set $is_vlan = "false"
        #end if

        ## if this is a bonded interface, configure it in modprobe.conf
        #if $bonding.lower() == "master"
            #if $osversion == "rhel4"
if [ -f "/etc/modprobe.conf" ]; then
    echo "install $iname /sbin/modprobe bonding -o $iname $bonding_opts" >> /etc/modprobe.conf.cobbler
fi
            #else
            ## Add required entry to modprobe.conf
if [ -f "/etc/modprobe.conf" ]; then
    echo "alias $iname bonding" >> /etc/modprobe.conf.cobbler
fi
            #end if
        #end if

        #if $configbymac and $is_vlan == "false" and $bonding.lower() != "master"
            ## This is the code path physical interfaces will follow.
            ## Get the current interface name
IFNAME=\$(ifconfig -a | grep -i '$mac' | cut -d ' ' -f 1)
            ## Rename this interface in modprobe.conf
            ## FIXME: if both interfaces startwith eth this is wrong
if [ -f "/etc/modprobe.conf" ] && [ \$IFNAME ]; then
    grep \$IFNAME /etc/modprobe.conf | sed "s/\$IFNAME/$iname/" >> /etc/modprobe.conf.cobbler
    grep -v \$IFNAME /etc/modprobe.conf >> /etc/modprobe.conf.new
    rm -f /etc/modprobe.conf
    mv /etc/modprobe.conf.new /etc/modprobe.conf
fi
echo "DEVICE=$iname" > $devfile
echo "HWADDR=$mac" >> $devfile
echo "ONBOOT=yes" >> $devfile
            #if $bonding.lower() == "slave" and $bonding_master != ""
                ## if needed setup bonding
echo "SLAVE=yes" >> $devfile
echo "MASTER=$bonding_master" >> $devfile
                ## see Red Hat bugzilla 442339
echo "HOTPLUG=no" >> $devfile
            #end if
            #if $static or $bonding.lower() == "slave"
                ## for static or slave interfaces
                #if $ip != "" and $bonding.lower() != "slave"
                    ## Only configure static networking if an IP-address is
                    ## configured
echo "BOOTPROTO=static" >> $devfile
echo "IPADDR=$ip" >> $devfile
                    #if $netmask == ""
                        ## Default to 255.255.255.0?
                        #set $netmask = "255.255.255.0"
                    #end if
echo "NETMASK=$netmask" >> $devfile
                #else
                    ## Leave the interface unconfigured
                    ## we don't have enough info for static configuration
echo "BOOTPROTO=none" >> $devfile
                #end if
                #if $enableipv6 == True and $ipv6_autoconfiguration == False
                    #if $ipv6_address != ""
echo "IPV6INIT=yes" >> $devfile
echo "IPV6ADDR=$ipv6_address" >> $devfile
                    #end if
                    #if $ipv6_secondaries != ""
                        #set ipv6_secondaries = ' '.join(ipv6_secondaries)
                        ## The quotes around the ipv6 ip's need to be here
echo 'IPV6ADDR_SECONDARIES="$ipv6_secondaries"' >> $devfile
                    #end if
                    #if $ipv6_mtu != ""
echo "IPV6MTU=$ipv6_mtu" >> $devfile
                    #end if
                    #if $ipv6_default_gateway != ""
echo "IPV6_DEFAULTGW=$ipv6_default_gateway" >> $devfile
                    #end if
                #end if
            #else
                ## this is a DHCP interface, much less work to do
echo "BOOTPROTO=dhcp" >> $devfile
            #end if
            #if $mtu != ""
echo "MTU=$mtu" >> $devfile
            #end if
        #else if $is_vlan == "true" or $bonding.lower() == "master"
            ## Handle non-physical interfaces with special care. :)
echo "# Cobbler generated non-physical interface" > $devfile
echo "DEVICE=$iname" >> $devfile
            #if $is_vlan == "true"
                ## configure vlan if required
echo "VLAN=yes" >> $devfile
            #end if
            #if $bonding.lower() == "master" and $bonding_opts != ""
                ## configure bonding if required
cat >> $devfile << EOF
BONDING_OPTS="$bonding_opts"
EOF
            #end if
echo "ONPARENT=yes" >> $devfile
            #if $static
                ## for static non-physical interfaces...
                #if $ip != ""
                    ## Only configure static networking if an IP-address is
                    ## configured
echo "BOOTPROTO=static" >> $devfile
echo "IPADDR=$ip" >> $devfile
                    #if $netmask == ""
                        ## Default to 255.255.255.0?
                        #set $netmask = "255.255.255.0"
                    #end if
echo "NETMASK=$netmask" >> $devfile
                #else
                    ## Leave the interface unconfigured
echo "BOOTPROTO=none" >> $devfile
                #end if
            #else
echo "BOOTPROTO=dhcp" >> $devfile
            #end if
            #if $mtu != ""
echo "MTU=$mtu" >> $devfile
            #end if
        #else if $configbymac == False
            ## We'll end up here when not all physical interfaces present for
            ## this system have MAC-addresses configured for them. We don't
            ## support interface renaming here.
MAC=\$(ifconfig -a | grep $iname | awk '{ print \$5 }')
echo "DEVICE=$iname" > $devfile
echo "HWADDR=\$MAC" >> $devfile
echo "ONBOOT=yes" >> $devfile
            #if $bonding.lower() == "slave" and $bonding_master != ""
                ## if needed setup bonding
echo "SLAVE=yes" >> $devfile
echo "MASTER=$bonding_master" >> $devfile
                ## see Red Hat bugzilla 442339
echo "HOTPLUG=no" >> $devfile
            #end if
            #if $static or $bonding.lower() == "slave"
                ## for static or slave interfaces
                #if $ip != "" and $bonding.lower() != "slave"
                    ## Only configure static networking if an IP-address is
                    ## configured
echo "BOOTPROTO=static" >> $devfile
echo "IPADDR=$ip" >> $devfile
                    #if $netmask == ""
                        ## Default to 255.255.255.0?
                        #set $netmask = "255.255.255.0"
                    #end if
echo "NETMASK=$netmask" >> $devfile
                #else
                    ## Leave the interface unconfigured
                    ## we don't have enough info for static configuration
echo "BOOTPROTO=none" >> $devfile
                #end if
            #else
                ## this is a DHCP interface, much less work to do
echo "BOOTPROTO=dhcp" >> $devfile
            #end if
            #if $mtu != ""
echo "MTU=$mtu" >> $devfile
            #end if
        #else
            # If you end up here, please mail the list... This shouldn't
            # happen. ;-) -- jcapel
	#end if

        ## If the interface is anything but a slave then add DNSn entry
        #if $bonding.lower() != "slave"
            #set $nct = 0
            #for $nameserver in $name_servers
                #set $nct = $nct + 1
echo "DNS$nct=$nameserver" >> $devfile
            #end for
	    #end if

		#for $route in $static_routes
			#set routepattern = $re.compile("[0-9/.]+:[0-9.]+")
			#if $routepattern.match($route)
				#set $routebits = $route.split(":")
				#set [$network, $router] = $route.split(":")
echo "$network via $router" >> $routesfile
			#else
				# Warning: invalid route "$route"
			#end if
		#end for

    #if $enableipv6 == True
        #for $route in $ipv6_static_routes
            #set routepattern = $re.compile("[0-9a-fA-F:/]+,[0-9a-fA-F:]+")
            #if $routepattern.match($route)
                #set $routebits = $route.split(",")
                #set [$network, $router] = $route.split(",")
echo "$network via $router dev $iname" >> $ipv6_routesfile
            #else
                # Warning: invalid route "$route"
            #end if
        #end for
    #end if

	#set $i = $i + 1

    # End configuration for $iname
    #end for	

    ## =============================================================================
    ## Configure name server search path in /etc/resolv.conf
    #set $num_ns = $len($name_servers)
    #set $num_ns_search = $len($name_servers_search)
    #if $num_ns_search > 0
sed -i -e "/^search /d" /etc/resolv.conf
echo -n "search " >>/etc/resolv.conf
        #for $nameserversearch in $name_servers_search
echo -n "$nameserversearch " >>/etc/resolv.conf
        #end for
echo "" >>/etc/resolv.conf
    #end if

    ## =============================================================================
    ## Configure name servers in /etc/resolv.conf
    #if $num_ns > 0
sed -i -e "/^nameserver /d" /etc/resolv.conf
        #for $nameserver in $name_servers
echo "nameserver $nameserver" >>/etc/resolv.conf
        #end for
    #end if

## Move all staged files to their final location
rm -f /etc/sysconfig/network-scripts/ifcfg-*
mv /etc/sysconfig/network-scripts/cobbler/* /etc/sysconfig/network-scripts/
rm -r /etc/sysconfig/network-scripts/cobbler
if [ -f "/etc/modprobe.conf" ]; then
cat /etc/modprobe.conf.cobbler >> /etc/modprobe.conf
rm -f /etc/modprobe.conf.cobbler
fi
#end if
# End post_install_network_config generated code
