diff --git a/config/api_platform/ImageImageRepository.yaml b/config/api_platform/ImageImageRepository.yaml index 1d77384..3e13b96 100644 --- a/config/api_platform/ImageImageRepository.yaml +++ b/config/api_platform/ImageImageRepository.yaml @@ -48,6 +48,14 @@ resources: uriTemplate: /image-image-repositories/{uuid}/deploy-image controller: App\Controller\DeployImageAction + backup_image_ogrepository: + shortName: OgRepository Server + class: ApiPlatform\Metadata\Post + method: POST + input: App\Dto\Input\BackupImageInput + uriTemplate: /image-image-repositories/{uuid}/backup-image + controller: App\Controller\OgRepository\Image\BackupImageAction + trash_delete_image_ogrepository: shortName: OgRepository Server description: Delete Image in OgRepository diff --git a/src/Controller/OgRepository/Image/BackupImageAction.php b/src/Controller/OgRepository/Image/BackupImageAction.php new file mode 100644 index 0000000..cb742fc --- /dev/null +++ b/src/Controller/OgRepository/Image/BackupImageAction.php @@ -0,0 +1,67 @@ +getImage(); + + if (!$image->getName()) { + throw new ValidatorException('Name is required'); + } + + $params = [ + 'json' => [ + 'ID_img' => $imageImageRepository->getImageFullsum(), + 'repo_ip' => $input->repoIp, + 'remote_path' => $input->remotePath, + 'user' => 'opengnsys' + ] + ]; + + $this->logger->info('Create backup image', ['image' => $image->getName()]); + + $repository = $imageImageRepository->getRepository(); + + $content = $this->createRequest('PUT', 'http://'.$repository->getIp().':8006/ogrepository/v1/repo/images', $params); + + $inputData = [ + 'imageName' => $image->getName(), + 'imageUuid' => $imageImageRepository->getUuid(), + 'ID_img' => $imageImageRepository->getImageFullsum(), + 'repo_ip' => $imageImageRepository->getRepository()->getIp(), + 'remote_path' => '/var/lib/ogrepository/images', + ]; + + $this->createService->__invoke($image->getClient(), CommandTypes::BACKUP_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + + return new JsonResponse(data: $content, status: Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/src/Controller/OgRepository/Image/CreateAuxFilesAction.php b/src/Controller/OgRepository/Image/CreateAuxFilesAction.php index 7a28bc2..06c09dd 100644 --- a/src/Controller/OgRepository/Image/CreateAuxFilesAction.php +++ b/src/Controller/OgRepository/Image/CreateAuxFilesAction.php @@ -56,8 +56,6 @@ class CreateAuxFilesAction extends AbstractOgRepositoryController $this->createService->__invoke($image->getClient(), CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - $this->logger->info('Aux files created successfully', ['image' => $image->getName()]); - $data->setStatus(ImageStatus::AUX_FILES_PENDING); $this->entityManager->persist($data); $this->entityManager->flush(); diff --git a/src/Controller/OgRepository/Webhook/ResponseController.php b/src/Controller/OgRepository/Webhook/ResponseController.php index c0487b5..4dc729c 100644 --- a/src/Controller/OgRepository/Webhook/ResponseController.php +++ b/src/Controller/OgRepository/Webhook/ResponseController.php @@ -49,6 +49,8 @@ class ResponseController extends AbstractOgRepositoryController $this->processImageAction($data, 'transfer'); } elseif (str_starts_with($action, "ExportImage_")) { $this->processImageAction($data, 'export'); + } elseif (str_starts_with($action, "BackupImage_")) { + $this->processImageAction($data, 'backup'); } else { return new JsonResponse(['message' => 'Invalid action'], Response::HTTP_BAD_REQUEST); } @@ -84,6 +86,8 @@ class ResponseController extends AbstractOgRepositoryController */ private function processImageAction(array $data, string $actionType): void { + $imageImageRepository = null; + $trace = $this->entityManager->getRepository(Trace::class)->findOneBy(['jobId' => $data['job_id']]); $imageUuid = $trace->getInput()['imageUuid']; $repositoryUuid = $trace->getInput()['repositoryUuid']; @@ -118,13 +122,15 @@ class ResponseController extends AbstractOgRepositoryController $this->logger->info("Image $actionType successful", ['image' => $image->getName()]); - // Creamos un objeto imagen nuevo, en el repositorio destino $newImageImageRepository = new ImageImageRepository(); $newImageImageRepository->setImage($image); $newImageImageRepository->setRepository($repository); $newImageImageRepository->setStatus(ImageStatus::SUCCESS); - // Cambiamos el estado de la imagen anterior a SUCCESS + if ($imageImageRepository){ + $newImageImageRepository->setImageFullsum($imageImageRepository->getImageFullsum()); + } + $this->entityManager->persist($newImageImageRepository); $this->entityManager->persist($image); diff --git a/src/Dto/Input/BackupImageInput.php b/src/Dto/Input/BackupImageInput.php new file mode 100644 index 0000000..32542ee --- /dev/null +++ b/src/Dto/Input/BackupImageInput.php @@ -0,0 +1,24 @@ + 'Update Cache', self::CREATE_IMAGE => 'Create Image', self::CREATE_IMAGE_AUX_FILE => 'Crear fichero auxiliar en repositorio', + self::BACKUP_IMAGE => 'Crear backup de imagen', self::IMPORT_IMAGE => 'Importar imagen', self::EXPORT_IMAGE => 'Exportar imagen', self::POWER_ON => 'Encender',