From beeda955ef86506e65b1a2e2c805beb77a2810b0 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Mon, 7 Apr 2025 08:23:12 +0200 Subject: [PATCH] OgRepo createImage improvements. Agent Status fixed --- config/api_platform/Command.yaml | 2 ++ src/Controller/DeployImageAction.php | 2 +- src/Controller/OgAgent/CreateImageAction.php | 7 ++++--- src/Controller/OgAgent/StatusAction.php | 6 +++--- .../OgRepository/Image/CreateAuxFilesAction.php | 2 +- .../OgRepository/Image/DeletePermanentAction.php | 9 +++++++++ .../OgRepository/Image/DeployImageAction.php | 2 +- src/Repository/ImageImageRepositoryRepository.php | 15 +++++++++++++++ src/State/Processor/ImageProcessor.php | 5 +---- 9 files changed, 37 insertions(+), 13 deletions(-) diff --git a/config/api_platform/Command.yaml b/config/api_platform/Command.yaml index 0d26a19..c89428b 100644 --- a/config/api_platform/Command.yaml +++ b/config/api_platform/Command.yaml @@ -7,6 +7,8 @@ resources: groups: ['default', 'command:read'] denormalizationContext: groups: ['command:write'] + order: + id: 'DESC' operations: ApiPlatform\Metadata\GetCollection: provider: App\State\Provider\CommandProvider diff --git a/src/Controller/DeployImageAction.php b/src/Controller/DeployImageAction.php index ae59bc3..4912d29 100644 --- a/src/Controller/DeployImageAction.php +++ b/src/Controller/DeployImageAction.php @@ -87,7 +87,7 @@ class DeployImageAction extends AbstractController ]; try { - $this->deployImageOgRepositoryAction->__invoke($input, $image, $client->getEntity(), $this->httpClient); + $this->deployImageOgRepositoryAction->__invoke($input, $image, $client->getEntity()); } catch (\Exception $e) { continue; } diff --git a/src/Controller/OgAgent/CreateImageAction.php b/src/Controller/OgAgent/CreateImageAction.php index a98033b..2ef1cb0 100644 --- a/src/Controller/OgAgent/CreateImageAction.php +++ b/src/Controller/OgAgent/CreateImageAction.php @@ -8,6 +8,7 @@ use App\Entity\Client; use App\Entity\Command; use App\Entity\Image; use App\Entity\ImageImageRepository; +use App\Entity\ImageRepository; use App\Entity\Trace; use App\Model\ClientStatus; use App\Model\CommandTypes; @@ -56,7 +57,7 @@ class CreateImageAction extends AbstractController $repository = $image->getClient()->getRepository(); - $latestImageRepo = $this->entityManager->getRepository(ImageImageRepository::class)->findLatestVersion(); + $latestImageRepo = $this->entityManager->getRepository(ImageImageRepository::class)->findLatestVersionByImageAndRepository($image, $repository); $imageImageRepository = new ImageImageRepository(); $imageImageRepository->setImage($image); @@ -71,7 +72,7 @@ class CreateImageAction extends AbstractController 'par' => (string) $partitionInfo['numPartition'], 'cpt' => null, 'idi' => $imageImageRepository->getUuid(), - 'nci' => $image->getName(), + 'nci' => $image->getName().'_v'.$imageImageRepository->getVersion(), 'ipr' => $repository->getIp(), 'nfn' => 'CrearImagen', 'ids' => '0' @@ -93,7 +94,7 @@ class CreateImageAction extends AbstractController try { $this->logger->info('Creating image', ['image' => $image->getId()]); - $response = $this->httpClient->request('POST', 'https://'.$image->getClient()->getIp().':8000/CloningEngine/CrearImagen', [ + $response = $this->httpClient->request('POST', 'https://'.$image->getClient()->getIp().':8000/opengnsys/CrearImagen', [ 'verify_peer' => false, 'verify_host' => false, 'headers' => [ diff --git a/src/Controller/OgAgent/StatusAction.php b/src/Controller/OgAgent/StatusAction.php index d41b4b2..dde6331 100644 --- a/src/Controller/OgAgent/StatusAction.php +++ b/src/Controller/OgAgent/StatusAction.php @@ -71,14 +71,14 @@ class StatusAction extends AbstractController $this->logger->info('Checking client status', ['client' => $client->getId()]); $params = [ - 'full-config' => true, + 'full-config' => false, ]; try { - $response = $this->httpClient->request('POST', 'https://' . $client->getIp() . ':8000/ogAdmClient/status', [ + $response = $this->httpClient->request('POST', 'https://' . $client->getIp() . ':8000/opengnsys/status', [ 'verify_peer' => false, 'verify_host' => false, - 'timeout' => 30, + 'timeout' => 10, 'headers' => [ 'Content-Type' => 'application/json', ], diff --git a/src/Controller/OgRepository/Image/CreateAuxFilesAction.php b/src/Controller/OgRepository/Image/CreateAuxFilesAction.php index d5ebd1f..9da0161 100644 --- a/src/Controller/OgRepository/Image/CreateAuxFilesAction.php +++ b/src/Controller/OgRepository/Image/CreateAuxFilesAction.php @@ -39,7 +39,7 @@ class CreateAuxFilesAction extends AbstractOgRepositoryController $params = [ 'json' => [ - 'image' => $image->getName().'.img' + 'image' => $image->getName().'_v'.$data->getVersion().'.img' ] ]; diff --git a/src/Controller/OgRepository/Image/DeletePermanentAction.php b/src/Controller/OgRepository/Image/DeletePermanentAction.php index 7b14d90..892936a 100644 --- a/src/Controller/OgRepository/Image/DeletePermanentAction.php +++ b/src/Controller/OgRepository/Image/DeletePermanentAction.php @@ -5,6 +5,7 @@ namespace App\Controller\OgRepository\Image; use App\Controller\OgRepository\AbstractOgRepositoryController; use App\Entity\Image; use App\Entity\ImageImageRepository; +use App\Entity\ImageRepository; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Attribute\AsController; @@ -30,6 +31,7 @@ class DeletePermanentAction extends AbstractOgRepositoryController throw new ValidatorException('Fullsum is required'); } + /** @var ImageRepository $image */ $image = $data->getImage(); $this->logger->info('Deleting image', ['image' => $image->getName()]); @@ -43,6 +45,13 @@ class DeletePermanentAction extends AbstractOgRepositoryController $this->entityManager->remove($data); $this->entityManager->flush(); + $imageImageCollection = $image->getImageImageRepositories(); + + if ($imageImageCollection->isEmpty()) { + $this->entityManager->remove($image); + $this->entityManager->flush(); + } + return new JsonResponse(data: $content, status: Response::HTTP_OK); } } \ No newline at end of file diff --git a/src/Controller/OgRepository/Image/DeployImageAction.php b/src/Controller/OgRepository/Image/DeployImageAction.php index 64b0099..8b8eb8c 100644 --- a/src/Controller/OgRepository/Image/DeployImageAction.php +++ b/src/Controller/OgRepository/Image/DeployImageAction.php @@ -30,7 +30,7 @@ class DeployImageAction extends AbstractOgRepositoryController * @throws ClientExceptionInterface * @throws TransportExceptionInterface */ - public function __invoke(DeployImageInput $input, ImageImageRepository $data, Client $client, HttpClientInterface $httpClient): JsonResponse + public function __invoke(DeployImageInput $input, ImageImageRepository $data, Client $client): JsonResponse { $params = [ 'json' => [ diff --git a/src/Repository/ImageImageRepositoryRepository.php b/src/Repository/ImageImageRepositoryRepository.php index 65c57f4..c40e35d 100644 --- a/src/Repository/ImageImageRepositoryRepository.php +++ b/src/Repository/ImageImageRepositoryRepository.php @@ -2,7 +2,9 @@ namespace App\Repository; +use App\Entity\Image; use App\Entity\ImageImageRepository; +use App\Entity\ImageRepository as Repository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; @@ -16,6 +18,19 @@ class ImageImageRepositoryRepository extends AbstractRepository parent::__construct($registry, ImageImageRepository::class); } + public function findLatestVersionByImageAndRepository(Image $image, Repository $repository): ?ImageImageRepository + { + return $this->createQueryBuilder('i') + ->andWhere('i.image = :imageId') + ->setParameter('imageId', $image->getId()) + ->andWhere('i.repository = :repository') + ->setParameter('repository', $repository->getId()) + ->orderBy('i.version', 'DESC') + ->setMaxResults(1) + ->getQuery() + ->getOneOrNullResult(); + } + public function findLatestVersion(): ?ImageImageRepository { return $this->createQueryBuilder('i') diff --git a/src/State/Processor/ImageProcessor.php b/src/State/Processor/ImageProcessor.php index d4e2f18..12bcf5d 100644 --- a/src/State/Processor/ImageProcessor.php +++ b/src/State/Processor/ImageProcessor.php @@ -65,11 +65,8 @@ readonly class ImageProcessor implements ProcessorInterface if ($data->selectedImage){ - $content = $this->renameActionController->__invoke($data->selectedImage->getEntity()); + //$content = $this->renameActionController->__invoke($data->selectedImage->getEntity()); - if ($content->getStatusCode() !== 200){ - throw new \Exception('Error renaming image'); - } $response = $this->createImageActionController->__invoke($data->selectedImage->getEntity()); } else {