refs #649 adds webhook sender to notify when is installed oglive to the ogcore
parent
ad7a91ce05
commit
a11051c05f
|
@ -9,6 +9,10 @@ use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use App\OgBootBundle\Message\InstallOgliveMessage;
|
||||||
|
use Symfony\Component\Messenger\MessageBusInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,11 +24,14 @@ class OgBootController
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private $curlRequestService;
|
private $curlRequestService;
|
||||||
|
private $httpClient;
|
||||||
public function __construct(CurlRequestService $curlRequestService, LoggerInterface $logger)
|
private $params;
|
||||||
|
public function __construct(CurlRequestService $curlRequestService, LoggerInterface $logger, HttpClientInterface $httpClient, ParameterBagInterface $params)
|
||||||
{
|
{
|
||||||
$this->curlRequestService = $curlRequestService;
|
$this->curlRequestService = $curlRequestService;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
|
$this->httpClient = $httpClient;
|
||||||
|
$this->params = $params; // Accedemos a las variables de entorno a través de ParameterBagInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Tabla de Contenido
|
/*Tabla de Contenido
|
||||||
|
@ -384,11 +391,6 @@ public function setOgliveDefault(Request $request): Response
|
||||||
return new JsonResponse(['message' => 'ogLive client set as default successfully'], Response::HTTP_OK);
|
return new JsonResponse(['message' => 'ogLive client set as default successfully'], Response::HTTP_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/ogboot/v1/oglives/install", name="installOglive", methods={"POST"})
|
* @Route("/ogboot/v1/oglives/install", name="installOglive", methods={"POST"})
|
||||||
* @OA\Post(
|
* @OA\Post(
|
||||||
|
@ -399,16 +401,22 @@ public function setOgliveDefault(Request $request): Response
|
||||||
* @OA\JsonContent(
|
* @OA\JsonContent(
|
||||||
* type="object",
|
* type="object",
|
||||||
* @OA\Property(
|
* @OA\Property(
|
||||||
* property="iso_url",
|
* property="url",
|
||||||
* type="string",
|
* type="string",
|
||||||
* example="https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso",
|
* example="https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso",
|
||||||
* description="Full URL of the ogLive ISO to install"
|
* description="URL of the ogLive ISO to download and install"
|
||||||
|
* ),
|
||||||
|
* @OA\Property(
|
||||||
|
* property="id",
|
||||||
|
* type="string",
|
||||||
|
* example="12345",
|
||||||
|
* description="Unique transaction ID to track the ogLive installation process"
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
* ),
|
* ),
|
||||||
* @OA\Response(
|
* @OA\Response(
|
||||||
* response=200,
|
* response=200,
|
||||||
* description="ogLive client installed successfully",
|
* description="ogLive client installation initiated",
|
||||||
* @OA\JsonContent(
|
* @OA\JsonContent(
|
||||||
* type="object",
|
* type="object",
|
||||||
* @OA\Property(property="message", type="string"),
|
* @OA\Property(property="message", type="string"),
|
||||||
|
@ -417,11 +425,16 @@ public function setOgliveDefault(Request $request): Response
|
||||||
* ),
|
* ),
|
||||||
* @OA\Response(
|
* @OA\Response(
|
||||||
* response=400,
|
* response=400,
|
||||||
* description="Invalid input data"
|
* description="Invalid input data",
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="error", type="string"),
|
||||||
|
* @OA\Property(property="details", type="string")
|
||||||
|
* )
|
||||||
* ),
|
* ),
|
||||||
* @OA\Response(
|
* @OA\Response(
|
||||||
* response=500,
|
* response=500,
|
||||||
* description="Failed to install ogLive client",
|
* description="Failed to initiate ogLive installation",
|
||||||
* @OA\JsonContent(
|
* @OA\JsonContent(
|
||||||
* type="object",
|
* type="object",
|
||||||
* @OA\Property(property="error", type="string"),
|
* @OA\Property(property="error", type="string"),
|
||||||
|
@ -430,24 +443,88 @@ public function setOgliveDefault(Request $request): Response
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
public function installOglive(Request $request): Response
|
|
||||||
{
|
|
||||||
$data = json_decode($request->getContent(), true);
|
|
||||||
|
|
||||||
if (!isset($data['iso_url'])) {
|
|
||||||
return new JsonResponse(['error' => 'Invalid input data'], Response::HTTP_BAD_REQUEST);
|
|
||||||
}
|
|
||||||
$isoUrl = $data['iso_url'];
|
|
||||||
|
|
||||||
// No usar escapeshellarg, sino simplemente agregar las comillas simples para que el comando se interprete correctamente
|
public function installOglive(Request $request): JsonResponse
|
||||||
$result = $this->curlRequestService->callOgLive("download " . escapeshellarg($isoUrl));
|
{
|
||||||
if (is_array($result) && isset($result['success']) && $result['success'] === false) {
|
// Obtener los datos del cuerpo de la petición
|
||||||
return new JsonResponse(['error' => 'Failed to install ogLive client', 'details' => $result['error']], Response::HTTP_INTERNAL_SERVER_ERROR);
|
$data = json_decode($request->getContent(), true);
|
||||||
|
|
||||||
|
if (!isset($data['url']) || !isset($data['id'])) {
|
||||||
|
return new JsonResponse(['error' => 'Invalid input data'], JsonResponse::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtener la URL del ISO y el ID de la transacción
|
||||||
|
$isoUrl = $data['url'];
|
||||||
|
$transactionId = $data['id'];
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Llamar al servicio para iniciar la instalación
|
||||||
|
$installResult = $this->curlRequestService->callOgLive("download " . escapeshellarg($isoUrl));
|
||||||
|
|
||||||
|
// Verificar el resultado de la instalación
|
||||||
|
$status = 'success';
|
||||||
|
$messageText = 'ogLive client installed successfully';
|
||||||
|
|
||||||
|
if (is_array($installResult) && isset($installResult['success']) && $installResult['success'] === false) {
|
||||||
|
$status = 'failure';
|
||||||
|
$messageText = $installResult['error'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preparar los datos para el webhook
|
||||||
|
$webhookData = [
|
||||||
|
'ogCoreId' => $transactionId,
|
||||||
|
'status' => $status,
|
||||||
|
'message' => $messageText,
|
||||||
|
'details' => $installResult
|
||||||
|
];
|
||||||
|
|
||||||
|
// Obtener la URL del webhook desde el archivo .env
|
||||||
|
$webhookUrl = $this->params->get('OGCORE_API_URL');
|
||||||
|
// Llamar al webhook para notificar el resultado
|
||||||
|
$this->notifyWebhook($webhookUrl, $webhookData);
|
||||||
|
|
||||||
|
// Responder que la instalación se ha completado
|
||||||
|
return new JsonResponse([
|
||||||
|
'message' => 'ogLive client installation completed',
|
||||||
|
'details' => $installResult
|
||||||
|
], JsonResponse::HTTP_OK);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Si ocurre algún error durante el proceso
|
||||||
|
return new JsonResponse([
|
||||||
|
'error' => 'Failed to complete ogLive installation',
|
||||||
|
'details' => $e->getMessage()
|
||||||
|
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new JsonResponse(['message' => 'ogLive client installed successfully', 'details' => $result], Response::HTTP_OK);
|
/**
|
||||||
}
|
* Enviar el resultado al webhook
|
||||||
|
*
|
||||||
|
* @param string $webhookUrl
|
||||||
|
* @param array $data Datos para enviar al webhook
|
||||||
|
*/
|
||||||
|
private function notifyWebhook(string $webhookUrl, array $data): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
error_log('Webhook URL: ' . $webhookUrl);
|
||||||
|
$this->logger->info('Webhook URL: ' . $webhookUrl);
|
||||||
|
error_log('Data being sent to webhook: ' . json_encode($data));
|
||||||
|
$this->logger->info('Data being sent to webhook: ' . json_encode($data));
|
||||||
|
$this->httpClient->request('POST', $webhookUrl, [
|
||||||
|
'headers' => [
|
||||||
|
'accept' => 'application/json',
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
],
|
||||||
|
'body' => json_encode($data),
|
||||||
|
]);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// Manejo de errores en la notificación del webhook
|
||||||
|
error_log('Error sending webhook notification: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/ogboot/v1/oglives/{checksum}", name="uninstallOglive", methods={"DELETE"})
|
* @Route("/ogboot/v1/oglives/{checksum}", name="uninstallOglive", methods={"DELETE"})
|
||||||
|
@ -576,7 +653,8 @@ public function getBootFiles(): JsonResponse
|
||||||
* response=200,
|
* response=200,
|
||||||
* description="Successful operation",
|
* description="Successful operation",
|
||||||
* @OA\JsonContent(
|
* @OA\JsonContent(
|
||||||
* type="object",
|
* type="obj/opt/ogboot/var/log
|
||||||
|
* ect",
|
||||||
* @OA\Property(property="template_name", type="string", description="Template name", example="pxe"),
|
* @OA\Property(property="template_name", type="string", description="Template name", example="pxe"),
|
||||||
* @OA\Property(property="mac", type="string", description="MAC address", example="00:50:56:22:11:12"),
|
* @OA\Property(property="mac", type="string", description="MAC address", example="00:50:56:22:11:12"),
|
||||||
* @OA\Property(property="lang", type="string", description="Language", example="es_ES.UTF-8"),
|
* @OA\Property(property="lang", type="string", description="Language", example="es_ES.UTF-8"),
|
||||||
|
|
Loading…
Reference in New Issue