"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; ?>