refs #311 adds pxe CRUD endpoints
parent
e595d248c7
commit
2fe1e64ef9
|
@ -561,6 +561,171 @@ Regenerar plantilla - PUT /ogboot/pxe-templates
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/ogboot/v1/pxes", name="config", methods={"GET"})
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/ogboot/v1/pxes",
|
||||||
|
* summary="Get ogboot configuration",
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Successful operation",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(
|
||||||
|
* property="config-file",
|
||||||
|
* type="string",
|
||||||
|
* description="Configuration file path"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="download-url",
|
||||||
|
* type="string",
|
||||||
|
* description="ogLive download URL"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="download-dir",
|
||||||
|
* type="string",
|
||||||
|
* description="ogLive download directory"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="install-dir",
|
||||||
|
* type="string",
|
||||||
|
* description="ogLive installation directory"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="default-name",
|
||||||
|
* type="string",
|
||||||
|
* description="Default ogLive name"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="min-release",
|
||||||
|
* type="string",
|
||||||
|
* description="Minimum compatibility release"
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=500,
|
||||||
|
* description="Failed to retrieve configuration"
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function getBootFiles(): JsonResponse
|
||||||
|
{
|
||||||
|
// Ruta donde están alojados los archivos de arranque
|
||||||
|
$directory = '/opt/ogboot/tftpboot/ipxe_scripts';
|
||||||
|
|
||||||
|
// Escanea el directorio y obtiene la lista de archivos de arranque
|
||||||
|
$files = scandir($directory);
|
||||||
|
|
||||||
|
// Filtra los archivos que no son directorios ni archivos ocultos
|
||||||
|
$bootFiles = array_filter($files, function ($file) {
|
||||||
|
return !in_array($file, ['.', '..', '.gitkeep']) && !is_dir($file);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Construye la respuesta JSON con la lista de archivos de arranque
|
||||||
|
$response = [
|
||||||
|
'boot_files' => array_values($bootFiles)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Devuelve la respuesta JSON
|
||||||
|
return new JsonResponse($response, Response::HTTP_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/ogboot/v1/pxes/{mac}", name="ogboot_boot_file", methods={"GET"})
|
||||||
|
*/
|
||||||
|
public function getBootFile(string $mac): Response
|
||||||
|
{
|
||||||
|
// Ruta donde están alojados los archivos de arranque
|
||||||
|
$directory = '/opt/ogboot/tftpboot/ipxe_scripts';
|
||||||
|
|
||||||
|
// Genera el nombre del archivo basado en la dirección MAC
|
||||||
|
$fileName = "01-" . $mac;
|
||||||
|
|
||||||
|
// Path completo del archivo
|
||||||
|
$filePath = "$directory/$fileName";
|
||||||
|
|
||||||
|
// Verifica si el archivo existe
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
// Devuelve una respuesta 404 si no se encuentra el archivo de arranque
|
||||||
|
return new Response(null, Response::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lee el contenido del archivo
|
||||||
|
$content = file_get_contents($filePath);
|
||||||
|
|
||||||
|
// Devuelve el contenido del archivo como texto plano
|
||||||
|
return new Response($content, Response::HTTP_OK, ['Content-Type' => 'text/plain']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/ogboot/v1/pxes", name="ogboot_create_boot_file", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function createBootFile(Request $request): Response
|
||||||
|
{
|
||||||
|
// Obtener los datos del cuerpo de la solicitud
|
||||||
|
$requestData = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
// Verificar si los datos necesarios están presentes en la solicitud
|
||||||
|
if (!isset($requestData['mac']) || !isset($requestData['config'])) {
|
||||||
|
return new JsonResponse(['error' => 'Los datos de la solicitud son incorrectos'], Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Directorio donde se almacenarán los archivos de arranque
|
||||||
|
$directory = '/opt/ogboot/tftpboot/ipxe_scripts';
|
||||||
|
|
||||||
|
// Generar el nombre del archivo basado en la dirección MAC
|
||||||
|
$fileName = "01-" . str_replace(':', '-', $requestData['mac']);
|
||||||
|
|
||||||
|
// Ruta completa del archivo
|
||||||
|
$filePath = "$directory/$fileName";
|
||||||
|
|
||||||
|
// Contenido del archivo de arranque
|
||||||
|
$fileContent = $requestData['config'];
|
||||||
|
|
||||||
|
// Intentar crear el archivo de arranque
|
||||||
|
if (file_put_contents($filePath, $fileContent) === false) {
|
||||||
|
// Devolver un error si no se puede crear el archivo
|
||||||
|
return new JsonResponse(['error' => 'Error al crear el archivo de arranque'], Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devolver una respuesta de éxito si el archivo se creó correctamente
|
||||||
|
return new JsonResponse(['message' => 'El archivo de arranque se creó exitosamente'], Response::HTTP_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/ogboot/v1/pxes/{mac}", name="ogboot_delete_boot_file", methods={"DELETE"})
|
||||||
|
*/
|
||||||
|
public function deleteBootFile(string $mac): Response
|
||||||
|
{
|
||||||
|
// Directorio donde están almacenados los archivos de arranque
|
||||||
|
$directory = '/opt/ogboot/tftpboot/ipxe_scripts';
|
||||||
|
|
||||||
|
// Generar el nombre del archivo basado en la dirección MAC
|
||||||
|
$fileName = "01-" . str_replace(':', '-', $mac);
|
||||||
|
|
||||||
|
// Ruta completa del archivo
|
||||||
|
$filePath = "$directory/$fileName";
|
||||||
|
|
||||||
|
// Verificar si el archivo existe
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
// Devolver un error 404 si el archivo no se encuentra
|
||||||
|
return new JsonResponse(['error' => 'No se encontró ningún archivo de arranque con la dirección MAC especificada'], Response::HTTP_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intentar eliminar el archivo de arranque
|
||||||
|
if (!unlink($filePath)) {
|
||||||
|
// Devolver un error 500 si no se puede eliminar el archivo
|
||||||
|
return new JsonResponse(['error' => 'Error al eliminar el archivo de arranque'], Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devolver una respuesta de éxito si el archivo se eliminó correctamente
|
||||||
|
return new JsonResponse(['message' => 'El archivo de arranque se eliminó correctamente'], Response::HTTP_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @OA\Post(
|
* @OA\Post(
|
||||||
* path="/poweroff",
|
* path="/poweroff",
|
||||||
|
|
Loading…
Reference in New Issue