file); }; $fun(); } // TODO: Modularize (hooks) // Tasks: fire away $mountStatus = false; $mountId = Trigger::mount(); $ipxeId = Trigger::ipxe(); // Check status of all tasks // Mount vm store if ($mountId === false) { EventLog::info('No VM store type defined.'); $everythingFine = false; } else { $mountStatus = Taskmanager::waitComplete($mountId, 5000); } // Primary IP address if (!$autoIp) { EventLog::failure("The server's IP address could not be determined automatically, and there is no valid address configured."); $everythingFine = false; } // iPXE generation if ($ipxeId === false) { EventLog::failure('Cannot generate PXE menu: Taskmanager unreachable!'); $everythingFine = false; } else { $res = Taskmanager::waitComplete($ipxeId, 5000); if (Taskmanager::isFailed($res)) { EventLog::failure('Update PXE Menu failed', $res['data']['error'] ?? $res['data']['error'] ?? ''); $everythingFine = false; } } if ($mountStatus !== false && !Taskmanager::isFinished($mountStatus)) { $mountStatus = Taskmanager::waitComplete($mountStatus, 5000); } if (Taskmanager::isFailed($mountStatus)) { // One more time, network could've been down before sleep(10); $mountId = Trigger::mount(); $mountStatus = Taskmanager::waitComplete($mountId, 10000); } if ($mountId !== false && Taskmanager::isFailed($mountStatus)) { EventLog::failure('Mounting VM store failed', $mountStatus['data']['messages'] ?? ''); $everythingFine = false; } elseif ($mountId !== false && !Taskmanager::isFinished($mountStatus)) { // TODO: Still running - create callback } // Just so we know booting is done (and we don't expect any more errors from booting up) if ($everythingFine) { EventLog::info('Bootup finished without errors.'); } else { EventLog::warning('There were errors during bootup. Maybe the server is not fully configured yet.'); } } /** * Server's primary IP address changed. */ public static function serverIpChanged() { Trigger::ipxe(); if (Module::isAvailable('sysconfig')) { // TODO: Modularize events ConfigModule::serverIpChanged(); } } }