Example #1
0
function boot_vm()
{
    global $session, $ref, $href, $booted, $bootrecovery, $recovery;
    if ($ref === false || $href == false) {
        return;
    }
    if ($recovery) {
        /*
         * A recovery boot means using HVM, even if guest is PV, and
         * setting boot device order to CD/DVD drive and then network.
         * However, we must restore original settings immediately
         * after boot completes or fails.
         */
        if (!$bootrecovery) {
            return;
        }
        // insufficient rights
        $policy = xenapi_vm_get_hvm_boot_policy($session, $ref);
        $params = xenapi_vm_get_hvm_boot_params($session, $ref);
        if ($policy === false || $params === false) {
            return;
        }
        if (isset($params["order"])) {
            $order = $params["order"];
        } else {
            $order = "";
        }
        $params["order"] = "dn";
        if (!xenapi_vm_set_hvm_boot_params($session, $ref, $params)) {
            return;
        }
        if (!xenapi_vm_set_hvm_boot_policy($session, $ref, "BIOS order")) {
            $params["order"] = $order;
            xenapi_vm_set_hvm_boot_params($session, $ref, $params);
            return;
        }
    }
    $prio = xenapi_vm_get_restart_priority($session, $ref);
    $always = xenapi_vm_get_ha_always_run($session, $ref);
    if (xenapi_vm_start_on($session, $ref, $href)) {
        $booted = "true";
        if (strlen($prio) > 0 && $always === false) {
            // looks like HA disabled for VM on shutdown, so re-enable
            xenapi_vm_set_ha_always_run($session, $ref, true);
        }
    }
    if ($recovery) {
        /*
         * Restore original HVM/PV and boot order settings.
         */
        xenapi_vm_set_hvm_boot_policy($session, $ref, $policy);
        $params["order"] = $order;
        xenapi_vm_set_hvm_boot_params($session, $ref, $params);
    }
}
Example #2
0
File: boot.php Project: suzizi/xvp
function main()
{
    global $poolname, $vmname, $jsvmname, $booted, $recovery;
    xvp_global_init();
    xvp_config_init();
    xvp_db_init();
    if (!($pool = xvp_config_pool_by_name($poolname)) || !($vm = xvp_config_vm_by_name($pool, $vmname))) {
        return;
    }
    if (($session = xenapi_login($pool, $master_ref)) === false) {
        return;
    }
    if (xvp_is_uuid($vmname)) {
        if (($ref = xenapi_vm_by_uuid($session, $vmname)) === false || ($vmname = xenapi_vm_get_name_label($session, $ref)) === false) {
            return;
        }
        $vm->uuid = $vm->vmname;
        $vm->vmname = $vmname;
        $jsvmname = addslashes($vmname);
    } else {
        if (($ref = xenapi_vm_by_name($session, $vmname)) === false) {
            return;
        }
    }
    if (!xvp_db_user_may_perform($vm, null, "boot")) {
        return;
    }
    if ($recovery && !xvp_db_user_may_perform($vm, null, "bootrecovery")) {
        return;
    }
    if ($recovery) {
        /*
         * A recovery boot means using HVM, even if guest is PV, and
         * setting boot device order to CD/DVD drive and then network.
         * However, we must restore original settings immediately
         * after boot completes or fails.
         */
        $policy = xenapi_vm_get_hvm_boot_policy($session, $ref);
        $params = xenapi_vm_get_hvm_boot_params($session, $ref);
        if ($policy === false || $params === false) {
            return;
        }
        if (isset($params["order"])) {
            $order = $params["order"];
        } else {
            $order = "";
        }
        $params["order"] = "dn";
        if (!xenapi_vm_set_hvm_boot_params($session, $ref, $params)) {
            return;
        }
        if (!xenapi_vm_set_hvm_boot_policy($session, $ref, "BIOS order")) {
            $params["order"] = $order;
            xenapi_vm_set_hvm_boot_params($session, $ref, $params);
            return;
        }
    }
    $prio = xenapi_vm_get_restart_priority($session, $ref);
    $always = xenapi_vm_get_ha_always_run($session, $ref);
    if (xenapi_vm_start($session, $ref)) {
        $booted = "true";
        if (strlen($prio) > 0 && $always === false) {
            // looks like HA disabled for VM on shutdown, so re-enable
            xenapi_vm_set_ha_always_run($session, $ref, true);
        }
    }
    if ($recovery) {
        /*
         * Restore original HVM/PV and boot order settings.
         */
        xenapi_vm_set_hvm_boot_policy($session, $ref, $policy);
        $params["order"] = $order;
        xenapi_vm_set_hvm_boot_params($session, $ref, $params);
    }
}