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(
|
||||
* path="/poweroff",
|
||||
|
|
Loading…
Reference in New Issue