diff options
Diffstat (limited to 'kickstart/kickstart/index.php')
-rw-r--r-- | kickstart/kickstart/index.php | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/kickstart/kickstart/index.php b/kickstart/kickstart/index.php new file mode 100644 index 0000000..7ea2e54 --- /dev/null +++ b/kickstart/kickstart/index.php @@ -0,0 +1,183 @@ +<?php + +#$VERBOSE = 1; + +# disks will be synchronized with k3 +$KATRIN_SERVERS = array( + "ks" => "ipekatrin-v3.ks", + "domain" => "ipe.kit.edu", + "netmask" => "255.255.254.0", + "gw" => "141.52.64.207", + "ns" => "141.52.3.3,141.52.8.18", + "time" => "141.52.8.18", + "sysdisks" => "sdc,sdd", + "append_sol" => "console=tty1 console=ttyS1,115200 earlyprint=serial,ttyS1,115200", + "raid" => "RAID1", + "size" => "80000", + "bootsize" => "2048", + "ethdev" => "enp3s0f1", + "ethdev2" => "enp3s0f0", +); + +$SERVER_LIST = array( + "ipecsavm" => array_merge($KATRIN_SERVERS, array( + "ks" => "ipekatrin-v2.ks", + "macs" => array("66:66:66:13:13:00"), + "ip" => "192.168.26.254", + "netmask" => "255.255.255.0", + "gw" => "192.168.26.117", + "sysdisks" => "sda,sdb", + "raid" => "RAID0", + "size" => "60000", + "ethdev" => "link", + )), + "ipechilinga2" => array_merge($KATRIN_SERVERS, array( + "domain" => "ka.fzk.de", + "macs" => array("48:5b:39:75:fe:ec"), + "headers" => array( + "REMOTE_ADDR" => array("141.52.64.104") + ) + )), + "ipekatrin1" => array_merge($KATRIN_SERVERS, array( + "macs" => array("0c:c4:7a:de:f1:08", "0c:c4:7a:de:f1:09") + )), + "ipekatrin2" => array_merge($KATRIN_SERVERS, array( + "macs" => array("0c:c4:7a:de:f0:e6", "0c:c4:7a:de:f0:e7") + )), + "ipekatrin3" => array_merge($KATRIN_SERVERS, array( + "macs" => array("0c:c4:7a:a8:81:3e", "0c:c4:7a:a8:81:3f"), + "sysdisks" => "sdb,sdc", + "ethdev" => "eno2", + "ethdev2" => "eno1", + )) +); + + +function get_server($srvid) { + global $SERVER_LIST; + + $server = $SERVER_LIST[$srvid]; + + if (!isset($server["fqdn"])) + $server["fqdn"] = "{$srvid}.{$server['domain']}"; + + if (!isset($server["ip"])) + $server["ip"] = gethostbyname($server["fqdn"]); + + $disks = explode(",", $server["sysdisks"]); + if (!isset($server["bootdisk"])) + $server["bootdisk"] = $disks[0]; + + if (!isset($server["disk1"])) + $server["disk1"] = $disks[0]; + + if ((isset($disks[1]))&&(!isset($server["disk2"]))) + $server["disk2"] = $disks[1]; + + + unset($server["macs"]); + unset($server["headers"]); + + return $server; +} + +function find_mac($macs, $mac_header) { + if (!is_array($macs)) $macs = array($macs); + + foreach ($macs as $mac) { + if (preg_match("/$mac/", $mac_header)) + return true; + } + return false; +} + +function find_server_by_mac($mac_header) { + global $SERVER_LIST; + + foreach ($SERVER_LIST as $srvid => $server) { + if (find_mac($server['macs'], $mac_header)) + return get_server($srvid); + } + return false; +} + +function find_server_by_header($http_header, $value) { + global $SERVER_LIST; + + foreach ($SERVER_LIST as $srvid => $server) { + if ((is_array($server["headers"]))&&(isset($server["headers"][$http_header]))) { + $expected = $server["headers"][$http_header]; + if (!is_array($expected)) $expected = array($expected); + foreach ($expected as $re) { + if (preg_match("/$re/", $value)) + return get_server($srvid); + } + } + } + return false; +} + +function find_server() { + global $_SERVER; + + $headers = getallheaders(); + for ($i = 0; $i < 10; $i++) { + $if = "X-RHN-Provisioning-MAC-$i"; + if (!isset($headers[$if])) break; + + $server = find_server_by_mac($headers[$if]); + if ($server) return $server; + } + + foreach ($_SERVER as $header => $value) { + $server = find_server_by_header($header, $value); + if ($server) return $server; + } + + return false; +} + + + + +#echo "Request from: " . $_SERVER["REMOTE_ADDR"]; + +$server = find_server(); +if (!$server) { + $f = fopen("/srv/www/htdocs/ands/logs/kickstart-new.log", "a+"); + if ($f) { + fwrite($f, print_r($_SERVER, true)); + fwrite($f, print_r(getallheaders(), true)); + fclose($f); + } + return; +} + +$ks = file_get_contents($server["ks"]); + +$patterns=array(); $values=array(); +foreach ($server as $key => $val) { + array_push($patterns, "/@" . strtoupper($key) . "@/"); + array_push($values, $val); +} + +$ks = preg_replace($patterns, $values, $ks); + +if ($VERBOSE) { + $f = fopen("/srv/www/htdocs/ands/logs/kickstart.log", "a+"); + if ($f) { + fwrite($f, "-----------------------------------------------------\n"); + fwrite($f, print_r($server, true)); + fwrite($f, print_r($_SERVER, true)); + fwrite($f, print_r(getallheaders(), true)); + fwrite($f, "-----------------------------------------------------\n"); + fwrite($f, $ks); + fwrite($f, "=====================================================\n"); + fclose($f); + } +} + +header("Content-type: text/plain"); +echo $ks; + +?> |