blob: 9bf1dbbf4ab03dacdaa3e4c19e60dda52ab594ff [file] [log] [blame]
<?php
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# $Id$
#
# Need to put base directory here
include("include/zoni_www_registration.conf");
include("include/zoni_functions.php");
$G = init_globals();
$PYTHONPATH=$G['ZONI_BASE_DIR'] . "/src";
$verbose = (isset($_GET['verbose'])) ? $_GET['verbose']: 0;
print "verbose is $verbose";
DEBUG($verbose, "<pre>");
DEBUG($verbose, $G);
$action = (isset($_GET['action'])) ? $_GET['action']: NULL;
DEBUG($verbose, "Action is $action");
// Action = reg
$mac_addr = (isset($_GET['mac'])) ? $_GET['mac']: NULL;
DEBUG($verbose, "mac_addr - $mac_addr<br>\n");
// This format of the mac is required for pxe
$mod_mac = (isset($_GET['mod_mac'])) ? $_GET['mod_mac']: NULL;
DEBUG($verbose, "mod_mac - $mod_mac<br>\n");
$tmp_sys_model = (isset($_GET['sys_model'])) ? $_GET['sys_model']: NULL;
# Remove spaces
$sys_model = preg_replace("/ /", "_", $tmp_sys_model);
DEBUG($verbose, "sys_model- $sys_model ");
$bios_rev = (isset($_GET['bios_rev'])) ? $_GET['bios_rev']: NULL;
DEBUG($verbose, "bios_rev - $bios_rev");
$system_serial_number = (isset($_GET['system_serial_number'])) ? $_GET['system_serial_number']: NULL;
DEBUG($verbose, "system_serial_number - $system_serial_number");
$chassis_serial_number = (isset($_GET['chassis_serial_number'])) ? $_GET['chassis_serial_number']: NULL;
DEBUG($verbose, "chassis_serial_number - $chassis_serial_number");
$system_uuid = (isset($_GET['system_uuid'])) ? $_GET['system_uuid']: NULL;
DEBUG($verbose, "system_uuid - $system_uuid");
$sys_vendor = (isset($_GET['sys_vendor'])) ? $_GET['sys_vendor']: NULL;
DEBUG($verbose, "sys_vendor - $sys_vendor");
$num_disks = (isset($_GET['num_disks'])) ? $_GET['num_disks']: NULL;
DEBUG($verbose, "num_disks - $num_disks");
// action = Query
$proc_vendor = (isset($_GET['proc_vendor'])) ? $_GET['proc_vendor']: NULL;
DEBUG($verbose, "proc_vendor - $proc_vendor");
$proc_model = (isset($_GET['proc_model'])) ? $_GET['proc_model']: NULL;
DEBUG($verbose, "proc_model - $proc_model");
$clock_speed = (isset($_GET['clock_speed'])) ? $_GET['clock_speed']: NULL;
DEBUG($verbose, "clock_speed - $clock_speed");
$proc_cache = (isset($_GET['proc_cache'])) ? $_GET['proc_cache']: NULL;
DEBUG($verbose, "proc_cache - $proc_cache");
$cpu_flags = (isset($_GET['cpu_flags'])) ? $_GET['cpu_flags']: NULL;
DEBUG($verbose, "cpu_flags - $cpu_flags");
$num_procs = (isset($_GET['num_procs'])) ? $_GET['num_procs']: NULL;
$num_procs = ($num_procs == 0 || $num_procs == "") ? 1 :$num_procs;
DEBUG($verbose, "num_procs - $num_procs");
$num_cores = (isset($_GET['num_cores'])) ? $_GET['num_cores']: NULL;
$num_cores = ($num_cores == "" || $num_cores == 0) ? 1 :$num_cores ;
DEBUG($verbose, "num_cores - $num_cores");
$mem_total = (isset($_GET['mem_total'])) ? $_GET['mem_total']: NULL;
DEBUG($verbose, "mem_total - $mem_total");
$disk_info = (isset($_GET['disk_info'])) ? $_GET['disk_info']: NULL;
DEBUG($verbose, "disk_info - $disk_info");
// action=finalize
$ip_addr = (isset($_GET['ip_addr'])) ? $_GET['ip_addr']: NULL;
DEBUG($verbose, "ip_addr - $ip_addr");
$location = (isset($_GET['location'])) ? $_GET['location']: NULL;
DEBUG($verbose, "location - $location");
$hostname = (isset($_GET['hostname'])) ? $_GET['hostname']: NULL;
DEBUG($verbose, "hostname - $hostname");
$image = (isset($_GET['image'])) ? $_GET['image']: NULL;
DEBUG($verbose, "image - $image");
// action=bootopt
$image_name = (isset($_GET['image_name'])) ? $_GET['image_name']: NULL;
DEBUG($verbose, "image_name - $image_name");
$machine_type = (isset($_GET['machine_type'])) ? $_GET['machine_type']: NULL;
DEBUG($verbose, "machine_type - $machine_type");
// IPMI
$ipmi_addr = (isset($_GET['ipmi_addr'])) ? $_GET['ipmi_addr']: NULL;
$ipmi_mac = (isset($_GET['ipmi_mac'])) ? $_GET['ipmi_mac']: NULL;
$ipmi_ver = (isset($_GET['ipmi_ver'])) ? $_GET['ipmi_ver']: NULL;
$ipmi_rev = (isset($_GET['ipmi_rev'])) ? $_GET['ipmi_rev']: NULL;
$ipmi_password = (isset($_GET['ipmi_password'])) ? $_GET['ipmi_password']: NULL;
// Allocation
$next_image = (isset($_GET['next_image'])) ? $_GET['next_image']: NULL;
// hardware
$hwport = (isset($_GET['hwport'])) ? $_GET['hwport']: NULL;
$hwdev = (isset($_GET['hwdev'])) ? $_GET['hwdev']: NULL;
DEBUG($verbose, "hardware $hwdev $hwport");
// Disk info
$disk_split = explode(" ", $disk_info);
// action=update-hostinfo
// getting ip_addr and hostname which are already grabbed
// DEBUG : Write out request uri
$requesturi = $_SERVER['REQUEST_URI'];
file_put_contents("/tmp/requesturi.txt", $requesturi);
// Get a db handle
$myconn = new db_connection($G['DB_HOST'],
$G['DB_USER'],
$G['DB_PASS'],
$G['DB_INST']);
// Add the link
// Reg is set in the reg initrd image
// This will run the first time a system is booted
if ($action == "register_system") {
// If the system is not in the db, add it
if (!($myconn->system_exists($mac_addr))) {
$query = "insert into sysinfo ";
$query .= "(mac_addr, num_procs, num_cores, mem_total, ";
$query .= "clock_speed, sys_vendor, sys_model, proc_vendor, ";
$query .= "proc_model, proc_cache, bios_rev, system_serial_number, ";
$query .= "chassis_serial_number, system_uuid, init_checkin, ";
$query .= "cpu_flags)";
$query .= " values ('$mac_addr', '$num_procs', '$num_cores', ";
$query .= " '$mem_total', '$clock_speed', '$sys_vendor', ";
$query .= " '$sys_model', '$proc_vendor', '$proc_model', ";
$query .= " '$proc_cache', '$bios_rev', '$system_serial_number', ";
$query .= " '$chassis_serial_number', '$system_uuid', NOW(), ";
$query .= "'$cpu_flags') ";
DEBUG(1, "query is $query<br>\n");
$result = mysql_query($query)
or die('Add system query failed: ' . mysql_error());
} else {
# Update it
$query = "update sysinfo set ";
#$query .= "mac_addr = '$mac_addr', ";
$query .= "num_procs = '$num_procs', ";
$query .= "num_cores = '$num_cores', ";
$query .= "mem_total = '$mem_total', ";
$query .= "clock_speed = '$clock_speed', ";
$query .= "sys_vendor = '$sys_vendor', ";
$query .= "sys_model = '$sys_model', ";
$query .= "proc_vendor = '$proc_vendor', ";
$query .= "proc_model = '$proc_model', ";
$query .= "proc_cache = '$proc_cache', ";
$query .= "bios_rev = '$bios_rev', ";
$query .= "chassis_serial_number = '$chassis_serial_number', ";
$query .= "system_uuid = '$system_uuid', ";
$query .= "cpu_flags = '$cpu_flags', ";
$query .= "last_update = now() ";
$query .= " where system_serial_number = '$system_serial_number'";
DEBUG($verbose, "<br>query is $query <br>\n");
$result = mysql_query($query)
or die('Update system query failed: ' . mysql_error());
}
# Update disk info
$sys_id = $myconn->get_sys_id($mac_addr);
if ($myconn->check_dup("diskmap", "sys_id", $sys_id)) {
DEBUG($verbose, "deleting from diskmap");
$query = "delete from diskmap ";
$query .= "where sys_id = '$sys_id'";
DEBUG($verbose, "query is $query<br>\n");
$result = mysql_query($query)
or die('Delete from diskmap failed: ' . mysql_error());
}
# Iterate through the disks and add to db
for ($i = 0; $i < count($disk_split); $i++) {
$tmpval = explode(":", $disk_split[$i]);
DEBUG($verbose, $tmpval);
$disk_name = $tmpval[0];
$disk_size = $tmpval[1];
$query = "insert into diskmap";
$query .= "(sys_id, disk_name, disk_size) ";
$query .= "values ('$sys_id', '$disk_name', '$disk_size') ";
DEBUG($verbose, "query is $query<br>\n");
$result = mysql_query($query)
or die('Insert into diskmap failed: ' . mysql_error());
}
}
# add the ip address
if ($action == "addip") {
$query = "update sysinfo set ip_addr = '$ip_addr' where mac_addr = '$mac_addr'";
DEBUG($verbose, "addip query is $query <br>\n");
$result = $myconn->run_query($query);
}
# add the location
if ($action == "addlocation") {
$query = "update sysinfo set location = '$location' where mac_addr = '$mac_addr'";
#DEBUG($verbose, "addip query is $query <br>\n");
print "query is $query";
$result = $myconn->run_query($query);
}
# Update an image only
if ($action == "assign_image") {
$query = "select image_id ";
$query .= "from imageinfo ";
$query .= "where image_name = '$image_name'";
DEBUG($verbose, "query is $query<br>\n");
$results = $myconn->query($query);
DEBUG($verbose, $results);
$num_rows = $myconn->get_num_rows();
DEBUG($verbose, "num rows is $num_rows<br>\n");
$sys_id = $myconn->get_sys_id($mac_addr);
$allocation_id = $myconn->get_something("allocation_id", "allocationinfo", "sys_id", $sys_id);
if ($num_rows == 1) {
$image_id = $results[0][0];
DEBUG($verbose, "imageid is $image_id,m allocation is $allocation_id");
if ($myconn->check_dup("imagemap", "allocation_id", $allocation_id)) {
$query = "delete from imagemap ";
$query .= "where allocation_id = '$allocation_id' ";
DEBUG($verbose, "check_dup query is $query");
$result = $myconn->run_query($query);
}
}
$query = "insert into imagemap ";
$query .= "(allocation_id, image_id) ";
$query .= "values ('$allocation_id', '$image_id')";
$result = $myconn->run_query($query);
$sys_id = $myconn->get_sys_id($mac_addr);
$location = $myconn->get_location($sys_id);
DEBUG($verbose, "creating link in pxe");
print shell_exec("cd {$G['ZONI_BASE_DIR']}; sudo zoni --assignimage $image_name --nodeName $location");
DEBUG($verbose, "finished linking in pxe");
}
# Add initial IPMI entry
if (($action == "add_ipmi") || ($action == "reset_ipmi")) {
$ipmi_name =$location . "-ipmi";
$ipmi_pass = createPassword();
$sys_id = $myconn->get_sys_id($mac_addr);
print "mac is $mac_addr\n";
print "sysid is $sys_id\n";
#$dbipaddr = $myconn->get_ip_addr($mac_addr);
$var = preg_split("/\//", $G['ZONI_IPMI_NETWORK']);
DEBUG($verbose, $var);
$network = $var[1];
$ipmi_netmask = get_netmask($network);
$ipminet = preg_split("/\./", $var[0]);
DEBUG($verbose, "network is $network, ipmi_netmask is $ipmi_netmask");
$hostip = preg_split("/\./", $ip_addr);
DEBUG(1, "ipaddr is $ip_addr");
# Doing the class B for now...
$mymod = pow(2, (32-$network))/ 256;
$oct = ($hostip[2] % $mymod) + $ipminet[2] ;
$ipmi_addr = $hostip[0] . "." . $hostip[1] . "." . $oct . "." . $hostip[3];
DEBUG($verbose, "ipmi_addr is $ipmi_addr");
if (!($myconn->check_dup("hardwareinfo", "hw_mac", $ipmi_mac))) {
$ipmi_notes = "Registered by Zoni on : " . date("r", time()) ;
$query = "insert into hardwareinfo ";
$query .= "(hw_type, hw_mac, hw_name, hw_ipaddr, hw_userid, hw_password, hw_version_sw, hw_version_fw, hw_notes) ";
$query .= "values ('ipmi', '$ipmi_mac', '$ipmi_name', '$ipmi_addr', 'root', '$ipmi_pass', $ipmi_rev, $ipmi_ver, '$ipmi_notes')";
$result = $myconn->run_query($query);
DEBUG($verbose, $query, $result);
$hw_id = $myconn->get_something("hw_id", "hardwareinfo", "hw_mac", $ipmi_mac);
$query = "insert into portmap ";
$query .= "(hw_id, sys_id) ";
$query .= "values ('$hw_id', '$sys_id') ";
$result = $myconn->run_query($query);
DEBUG($verbose, $query, $result);
} else {
# Entry exists, reset password, and update versions
$query = "update hardwareinfo set ";
$query .= "hw_password = '$ipmi_pass', ";
$query .= "hw_ipaddr = '$ipmi_addr', ";
$query .= "hw_version_sw = '$ipmi_ver', ";
$query .= "hw_version_fw = '$ipmi_rev' ";
$query .= "where hw_mac = '$ipmi_mac'";
$result = $myconn->run_query($query);
DEBUG($verbose, "UPDATING THE HARDWEARE INFO");
DEBUG($verbose, $query, $result);
}
# Add gateway later...
$ipmi_gateway = "0.0.0.0";
print "\n\nIPMI_ADDR $ipmi_addr\n";
print "IPMI_PASSWORD $ipmi_pass\n";
print "IPMI_DOMAIN {$G['ZONI_HOME_DOMAIN']}\n";
print "IPMI_NETMASK $ipmi_netmask\n";
print "IPMI_GATEWAY $ipmi_gateway\n";
print "IPMI name is $ipmi_name address is $ipmi_addr\n";
print shell_exec("PYTHONPATH=$PYTHONPATH zoni --addDns $ipmi_name $ipmi_addr");
print shell_exec("PYTHONPATH=$PYTHONPATH zoni --addDhcp $ipmi_name $ipmi_addr $mac_addr");
#print shell_exec("cd /var/www/cluster-admin/scripts-prs/; sudo ./remove_dns ${location}-ipmi");
#print shell_exec("cd /var/www/cluster-admin/scripts-prs/; sudo ./remove_rdns ${location}-ipmi $ipmi_addr");
#print shell_exec("cd /var/www/cluster-admin/scripts-prs/; sudo ./add_dns ${location}-ipmi $ipmi_addr");
#print shell_exec("cd /var/www/cluster-admin/scripts-prs/; sudo ./add_rdns ${location}-ipmi $ipmi_addr");
DEBUG($verbose, "finished add_reset_ipmi");
}
# Add switch info to db
if ($action == "addhardwareinfo") {
# XXX Switch/PDU must already exist before node registration!
print "adding hardware info $hwdev\n\n";
$hw_id = $myconn->get_something("hw_id","hardwareinfo", "hw_name", $hwdev);
$sys_id = $myconn->get_something("sys_id","sysinfo", "mac_addr", $mac_addr);
DEBUG($verbose, "result is $hw_id ");
DEBUG($verbose, "mac is $mac_addr node id is $sys_id");
# If the hardware doesn't exist, skip
if ($hw_id == "") {
DEBUG($verbose, "Hardware doesn't exist!! $hwdev");
exit();
}
$query = "select * from portmap where ";
$query .= "hw_id = '$hw_id' and ";
$query .= "sys_id = '$sys_id'";
$results = $myconn->query($query);
$num_rows = $myconn->get_num_rows();
# If there is an entry, delete and reset
if ($num_rows > 0) {
DEBUG($verbose, "Entry Exists, deleting... ");
$query = "delete from portmap where ";
$query .= "hw_id = '$hw_id' and ";
$query .= "sys_id = '$sys_id'";
$results = $myconn->query($query);
}
DEBUG($verbose, "Adding Entry ... ");
$query = "insert into portmap ";
$query .= "(hw_id, sys_id, port_num) ";
$query .= "values ('$hw_id', '$sys_id', '$hwport') ";
DEBUG($verbose, "Query is $query");
$results = $myconn->query($query);
}
# update dns and dhcp
if ($action == "updatednsdhcp") {
DEBUG($verbose, "Updating DNS/DHCP");
if (!isset($location) || $location == ""){
DEBUG($verbose, "location not set");
# location is not defined in here so get it from db
$sys_id = $myconn->get_sys_id($mac_addr);
$location = $myconn->get_location($sys_id);
}
DEBUG($verbose, "location is $location");
DEBUG($verbose, "doing the dns and dhcp updates");
print shell_exec("PYTHONPATH=$PYTHONPATH zoni --addDns $location $ip_addr");
print shell_exec("PYTHONPATH=$PYTHONPATH zoni --addDhcp $location $ip_addr $mac_addr");
}
# set next boot image after allocation setup
if ($action == "next_image") {
$query = "select image_id ";
$query .= "from imageinfo ";
$query .= "where image_name = '$next_image'";
print "query is $query<br>";
$results = $myconn->query($query);
print_r($results);
$num_rows = $myconn->get_num_rows();
print "num rows is $num_rows";
if ($num_rows == 1) {
$image_id = $results[0][0];
if ($myconn->check_dup("imagemap", "mac_addr", $mac_addr)) {
$query = "delete from imagemap ";
$query .= "where mac_addr = '$mac_addr' ";
$result = mysql_query($query)
or die('Deleting imagemap query failed: ' . mysql_error());
}
$query = "insert into imagemap ";
$query .= "(mac_addr, image_id) ";
$query .= "values ('$mac_addr', '$image_id')";
print "inserting $query<br>\n";
$result = mysql_query($query)
or die('insert into imagemap failed: ' . mysql_error());
echo "creating link in pxe";
# Try to use prs to do this...
# Old version, need to fix later
#print shell_exec("cd /home/rgass/projects/prs/; sudo ./zoni-client.py --assignimage $next_image --nodeName $location");
#print shell_exec("cd /var/www/cluster/scripts/; sudo ./add_pxe_from_db $location");
DEBUG($verbose, "finished linking in pxe");
}
}
# close the connection to the db
$myconn->close();
?>