refs #311 adds pxe CRUD endpoints

pull/3/head
Luis Gerardo Romero Garcia 2024-05-15 14:58:47 +02:00
parent e595d248c7
commit 2fe1e64ef9
1 changed files with 165 additions and 0 deletions

View File

@ -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(
* path="/poweroff",