Example #1
0
function getImages($includedeleted = 0, $imageid = 0)
{
    # key in $imagelist is for $includedeleted
    static $imagelist = array(0 => array(), 1 => array());
    if (!empty($imagelist[$includedeleted])) {
        if ($imageid == 0) {
            return $imagelist[$includedeleted];
        } else {
            return array($imageid => $imagelist[$includedeleted][$imageid]);
        }
    }
    # get all image meta data
    $allmetadata = array();
    $query = "SELECT checkuser, " . "rootaccess, " . "subimages, " . "sysprep, " . "sethostname, " . "id " . "FROM imagemeta";
    $qh = doQuery($query);
    while ($row = mysql_fetch_assoc($qh)) {
        $allmetadata[$row['id']] = $row;
    }
    # get all image revision data
    $allrevisiondata = array();
    $query = "SELECT i.id, " . "i.imageid, " . "i.revision, " . "i.userid, " . "CONCAT(u.unityid, '@', a.name) AS user, " . "i.datecreated, " . "DATE_FORMAT(i.datecreated, '%c/%d/%y %l:%i %p') AS prettydate, " . "i.deleted, " . "i.datedeleted, " . "i.production, " . "i.imagename " . "FROM imagerevision i, " . "affiliation a, " . "user u " . "WHERE i.userid = u.id AND ";
    if (!$includedeleted) {
        $query .= "i.deleted = 0 AND ";
    }
    $query .= "u.affiliationid = a.id";
    $qh = doQuery($query, 101);
    while ($row = mysql_fetch_assoc($qh)) {
        $id = $row['imageid'];
        unset($row['imageid']);
        if (!array_key_exists($id, $allrevisiondata)) {
            $allrevisiondata[$id] = array();
        }
        $allrevisiondata[$id][$row['id']] = $row;
    }
    $query = "SELECT i.id AS id," . "i.name AS name, " . "i.prettyname AS prettyname, " . "i.ownerid AS ownerid, " . "CONCAT(u.unityid, '@', a.name) AS owner, " . "i.platformid AS platformid, " . "p.name AS platform, " . "i.OSid AS osid, " . "o.name AS os, " . "o.installtype, " . "ot.id AS ostypeid, " . "ot.name AS ostype, " . "i.minram AS minram, " . "i.minprocnumber AS minprocnumber, " . "i.minprocspeed AS minprocspeed, " . "i.minnetwork AS minnetwork, " . "i.maxconcurrent AS maxconcurrent, " . "i.reloadtime AS reloadtime, " . "i.deleted AS deleted, " . "i.test AS test, " . "r.id AS resourceid, " . "i.lastupdate, " . "i.forcheckout, " . "i.maxinitialtime, " . "i.imagemetaid " . "FROM image i, " . "platform p, " . "OS o, " . "OStype ot, " . "resource r, " . "resourcetype t, " . "user u, " . "affiliation a " . "WHERE i.platformid = p.id AND " . "r.resourcetypeid = t.id AND " . "t.name = 'image' AND " . "r.subid = i.id AND " . "i.OSid = o.id AND " . "o.type = ot.name AND " . "i.ownerid = u.id AND " . "u.affiliationid = a.id ";
    if (!$includedeleted) {
        $query .= "AND i.deleted = 0 ";
    }
    $query .= "ORDER BY i.prettyname";
    $qh = doQuery($query, 120);
    while ($row = mysql_fetch_assoc($qh)) {
        if (is_null($row['maxconcurrent'])) {
            $row['maxconcurrent'] = 0;
        }
        $imagelist[$includedeleted][$row["id"]] = $row;
        $imagelist[$includedeleted][$row["id"]]['checkuser'] = 1;
        $imagelist[$includedeleted][$row["id"]]['rootaccess'] = 1;
        if ($row['ostype'] == 'windows' || $row['ostype'] == 'osx') {
            $imagelist[$includedeleted][$row['id']]['sethostname'] = 0;
        } else {
            $imagelist[$includedeleted][$row['id']]['sethostname'] = 1;
        }
        if ($row["imagemetaid"] != NULL) {
            if (array_key_exists($row['imagemetaid'], $allmetadata)) {
                $metaid = $row['imagemetaid'];
                $imagelist[$includedeleted][$row['id']]['checkuser'] = $allmetadata[$metaid]['checkuser'];
                $imagelist[$includedeleted][$row['id']]['rootaccess'] = $allmetadata[$metaid]['rootaccess'];
                $imagelist[$includedeleted][$row['id']]['sysprep'] = $allmetadata[$metaid]['sysprep'];
                if ($allmetadata[$metaid]['sethostname'] != NULL) {
                    $imagelist[$includedeleted][$row['id']]['sethostname'] = $allmetadata[$metaid]['sethostname'];
                }
                $imagelist[$includedeleted][$row["id"]]["subimages"] = array();
                if ($allmetadata[$metaid]["subimages"]) {
                    $query2 = "SELECT imageid " . "FROM subimages " . "WHERE imagemetaid = {$metaid}";
                    $qh2 = doQuery($query2, 101);
                    while ($row2 = mysql_fetch_assoc($qh2)) {
                        $imagelist[$includedeleted][$row["id"]]["subimages"][] = $row2["imageid"];
                    }
                }
            } else {
                $imagelist[$includedeleted][$row["id"]]["imagemetaid"] = NULL;
            }
        }
        if (array_key_exists($row['id'], $allrevisiondata)) {
            $imagelist[$includedeleted][$row['id']]['imagerevision'] = $allrevisiondata[$row['id']];
        }
        $imagelist[$includedeleted][$row['id']]['connectmethods'] = getImageConnectMethods($row['id']);
    }
    if ($imageid != 0) {
        return array($imageid => $imagelist[$includedeleted][$imageid]);
    }
    return $imagelist[$includedeleted];
}
Example #2
0
 function AJremImageConnectMethod()
 {
     $imageid = getContinuationVar('imageid');
     $methods = getContinuationVar('methods');
     $revids = getContinuationVar('revids');
     $curmethods = getImageConnectMethods($imageid);
     $remidlist = mysql_real_escape_string(processInputVar('ids', ARG_STRING));
     $remids = explode(',', $remidlist);
     $revid = processInputVar('revid', ARG_NUMERIC);
     $newimage = getContinuationVar('newimage');
     foreach ($remids as $id) {
         if (!is_numeric($id)) {
             $arr = array('error' => 'invalidinput', 'msg' => i("Non-numeric data was submitted for a connection method id."));
             sendJSON($arr);
             return;
         }
     }
     if ($revid != 0 && !in_array($revid, $revids)) {
         $arr = array('error' => 'invalidrevision', 'msg' => i("Invalid revision id submitted."));
         sendJSON($arr);
         return;
     }
     if (!$newimage) {
         if ($revid == 0) {
             $revid = getProductionRevisionid($imageid);
         }
         # delete any current entries for method and image
         $query = "DELETE FROM connectmethodmap " . "WHERE imagerevisionid = {$revid} AND " . "connectmethodid IN ({$remidlist}) AND " . "autoprovisioned IS NULL";
         doQuery($query, 101);
         # query to see if enabled for OStype or OS
         $insvals = array();
         foreach ($remids as $id) {
             $query = "SELECT cm.connectmethodid " . "FROM connectmethodmap cm, " . "image i " . "LEFT JOIN OS o ON (o.id = i.OSid) " . "LEFT JOIN OStype ot ON (ot.name = o.type) " . "WHERE i.id = {$imageid} AND " . "cm.autoprovisioned IS NULL AND " . "cm.connectmethodid = {$id} AND " . "cm.disabled = 0 AND " . "(cm.OStypeid = ot.id OR " . "cm.OSid = o.id)";
             $qh = doQuery($query, 101);
             if (mysql_num_rows($qh)) {
                 # if so, add disabled entry for image revision and method
                 $insvals[] = "({$id}, {$revid}, 1)";
             }
         }
         if (count($insvals)) {
             $allinsvals = implode(',', $insvals);
             $query = "INSERT INTO connectmethodmap " . "(connectmethodid, " . "imagerevisionid, " . "disabled) " . "VALUES {$allinsvals}";
             doQuery($query, 101);
         }
     }
     $cdata = $this->basecdata;
     $cdata['imageid'] = $imageid;
     $cdata['methods'] = $methods;
     $cdata['revids'] = $revids;
     $cdata['newimage'] = $newimage;
     $addcont = addContinuationsEntry('AJaddImageConnectMethod', $cdata, 3600, 1, 0);
     $remcont = addContinuationsEntry('AJremImageConnectMethod', $cdata, 3600, 1, 0);
     $arr = array('addcont' => $addcont, 'remcont' => $remcont);
     sendJSON($arr);
     $key = getKey(array('getImageConnectMethods', (int) $imageid, (int) $revid));
     if (array_key_exists($key, $_SESSION['usersessiondata'])) {
         unset($_SESSION['usersessiondata'][$key]);
     }
     $key = getKey(array('getImageConnectMethods', (int) $imageid, 0));
     if (array_key_exists($key, $_SESSION['usersessiondata'])) {
         unset($_SESSION['usersessiondata'][$key]);
     }
 }
Example #3
0
function XMLRPCautoCapture($requestid)
{
    global $user, $xmlrpcBlockAPIUsers;
    if (!in_array($user['id'], $xmlrpcBlockAPIUsers)) {
        return array('status' => 'error', 'errorcode' => 47, 'errormsg' => 'access denied to XMLRPCautoCapture');
    }
    $query = "SELECT id FROM request WHERE id = {$requestid}";
    $qh = doQuery($query, 101);
    if (!mysql_num_rows($qh)) {
        return array('status' => 'error', 'errorcode' => 52, 'errormsg' => 'specified request does not exist');
    }
    $reqData = getRequestInfo($requestid);
    # check state of reservation
    if ($reqData['stateid'] != 14 || $reqData['laststateid'] != 8) {
        return array('status' => 'error', 'errorcode' => 51, 'errormsg' => 'reservation not in valid state');
    }
    # check that not a cluster reservation
    if (count($reqData['reservations']) > 1) {
        return array('status' => 'error', 'errorcode' => 48, 'errormsg' => 'cannot image a cluster reservation');
    }
    require_once ".ht-inc/image.php";
    $imageid = $reqData['reservations'][0]['imageid'];
    $imageData = getImages(0, $imageid);
    $captime = unixToDatetime(time());
    $comments = "start: {$reqData['start']}<br>" . "end: {$reqData['end']}<br>" . "computer: {$reqData['reservations'][0]['reservedIP']}<br>" . "capture time: {$captime}";
    # create new revision if requestor is owner and not a kickstart image
    if ($imageData[$imageid]['installtype'] != 'kickstart' && $reqData['userid'] == $imageData[$imageid]['ownerid']) {
        $rc = Image::AJupdateImage($requestid, $reqData['userid'], $comments, 1);
        if ($rc == 0) {
            return array('status' => 'error', 'errorcode' => 49, 'errormsg' => 'error encountered while attempting to create new revision');
        }
    } else {
        $ownerdata = getUserInfo($reqData['userid'], 1, 1);
        $desc = "This is an autocaptured image.<br>" . "captured from image: {$reqData['reservations'][0]['prettyimage']}<br>" . "captured on: {$captime}<br>" . "owner: {$ownerdata['unityid']}@{$ownerdata['affiliation']}<br>";
        $connectmethods = getImageConnectMethods($imageid, $reqData['reservations'][0]['imagerevisionid']);
        $data = array('requestid' => $requestid, 'desc' => $desc, 'usage' => '', 'owner' => "{$ownerdata['unityid']}@{$ownerdata['affiliation']}", 'name' => "Autocaptured ({$ownerdata['unityid']} - {$requestid})", 'ram' => 64, 'cores' => 1, 'cpuspeed' => 500, 'networkspeed' => 10, 'concurrent' => '', 'checkuser' => 1, 'rootaccess' => 1, 'checkout' => 1, 'sysprep' => 1, 'basedoffrevisionid' => $reqData['reservations'][0]['imagerevisionid'], 'platformid' => $imageData[$imageid]['platformid'], 'osid' => $imageData[$imageid]["osid"], 'ostype' => $imageData[$imageid]["ostype"], 'sethostname' => $imageData[$imageid]["sethostname"], 'reload' => 20, 'comments' => $comments, 'connectmethodids' => implode(',', array_keys($connectmethods)), 'autocaptured' => 1);
        $obj = new Image();
        $imageid = $obj->addResource($data);
        if ($imageid == 0) {
            return array('status' => 'error', 'errorcode' => 50, 'errormsg' => 'error encountered while attempting to create image');
        }
        $query = "UPDATE request rq, " . "reservation rs " . "SET rs.imageid = {$imageid}, " . "rs.imagerevisionid = {$obj->imagerevisionid}, " . "rq.stateid = 16  " . "WHERE rq.id = {$requestid} AND " . "rq.id = rs.requestid";
        doQuery($query);
    }
    return array('status' => 'success');
}