diff --git a/config/api_platform/ImageRepository.yaml b/config/api_platform/ImageRepository.yaml index e57d0f9..165e425 100644 --- a/config/api_platform/ImageRepository.yaml +++ b/config/api_platform/ImageRepository.yaml @@ -57,14 +57,14 @@ resources: uriTemplate: /image-repositories/server/{uuid}/status controller: App\Controller\OgRepository\StatusAction - export_image_ogrepository: + import_image_ogrepository: shortName: OgRepository Server description: Export Image in OgRepository class: ApiPlatform\Metadata\Post method: POST - input: App\Dto\Input\ExportImportImageRepositoryInput - uriTemplate: /image-repositories/{uuid}/export-image - controller: App\Controller\OgRepository\Image\ExportAction + input: App\Dto\Input\ImportImageRepositoryInput + uriTemplate: /image-repositories/{uuid}/import-image + controller: App\Controller\OgRepository\Image\ImportAction properties: App\Entity\ImageRepository: diff --git a/src/Controller/OgRepository/Image/CancelTransmissionAction.php b/src/Controller/OgRepository/Image/CancelTransmissionAction.php index eec94f2..93aa4e0 100644 --- a/src/Controller/OgRepository/Image/CancelTransmissionAction.php +++ b/src/Controller/OgRepository/Image/CancelTransmissionAction.php @@ -54,7 +54,7 @@ class CancelTransmissionAction extends AbstractOgRepositoryController $content = $this->createRequest('DELETE', 'http://'.$image->getRepository()->getIp().':8006/ogrepository/v1/'.$method.'/images/'.$image->getImageFullsum()); - if (isset($content['error']) && $content['error'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { throw new ValidatorException('Error cancelling transmission'); } diff --git a/src/Controller/OgRepository/Image/ExportAction.php b/src/Controller/OgRepository/Image/ExportAction.php deleted file mode 100644 index ef449e3..0000000 --- a/src/Controller/OgRepository/Image/ExportAction.php +++ /dev/null @@ -1,69 +0,0 @@ -images; - - foreach ($images as $imageEntity) { - /** @var Image $image */ - $image = $imageEntity->getEntity(); - - if (!$image->getImageFullsum()) { - throw new ValidatorException('Fullsum is required'); - } - - $params = [ - 'json' => [ - 'ID_img' => $image->getImageFullsum(), - 'repo_ip' => $repository->getIp(), - 'user' => 'opengnsys', - ] - ]; - - $this->logger->info('Exporting image', ['image' => $image->getName(), 'repository' => $repository->getIp()]); - - $content = $this->createRequest('PUT', 'http://'.$image->getRepository()->getIp().':8006/ogrepository/v1/repo/images', $params); - - $inputData = [ - 'imageName' => $image->getName(), - 'imageUuid' => $image->getUuid(), - 'repositoryUuid' => $repository->getUuid(), - ]; - - $this->createService->__invoke($image->getClient(), CommandTypes::EXPORT_IMAGE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); - - $image->setStatus(ImageStatus::TRANSFERING); - $this->entityManager->persist($image); - $this->entityManager->flush(); - } - - return new JsonResponse(data: [], status: Response::HTTP_OK); - } -} \ No newline at end of file diff --git a/src/Controller/OgRepository/Image/ImportAction.php b/src/Controller/OgRepository/Image/ImportAction.php new file mode 100644 index 0000000..a12f9d0 --- /dev/null +++ b/src/Controller/OgRepository/Image/ImportAction.php @@ -0,0 +1,77 @@ +name; + + $params = [ + 'json' => [ + 'image' => $image.'.img' + ] + ]; + + $this->logger->info('Creating aux files', ['image' => $image]); + + $content = $this->createRequest('POST', 'http://'.$repository->getIp().':8006/ogrepository/v1/images/torrentsum', $params); + + if (isset($content['error']) && $content['code'] === Response::HTTP_INTERNAL_SERVER_ERROR ) { + throw new ValidatorException('Error importing image'); + } + + $inputData = [ + 'imageName' => $image + ]; + + $this->createService->__invoke(null, CommandTypes::CREATE_IMAGE_AUX_FILE, TraceStatus::IN_PROGRESS, $content['job_id'], $inputData); + + $imageEntity = $this->entityManager->getRepository(Image::class)->findOneBy(['name' => $image]); + + if (!$imageEntity){ + $imageEntity = new Image(); + $imageEntity->setName($image); + $imageEntity->setRemotePc(false); + $imageEntity->setIsGlobal(false); + + $this->entityManager->persist($imageEntity); + } + + $imageImageRepositoryEntity = new ImageImageRepository(); + $imageImageRepositoryEntity->setStatus(ImageStatus::AUX_FILES_PENDING); + $imageImageRepositoryEntity->setImage($imageEntity); + $imageImageRepositoryEntity->setRepository($repository); + + $this->entityManager->persist($imageImageRepositoryEntity); + $this->entityManager->flush(); + + return new JsonResponse(data: [], status: Response::HTTP_OK); + } +} \ No newline at end of file diff --git a/src/Dto/Input/ExportImportImageRepositoryInput.php b/src/Dto/Input/ExportImportImageRepositoryInput.php index b6111b2..690500b 100644 --- a/src/Dto/Input/ExportImportImageRepositoryInput.php +++ b/src/Dto/Input/ExportImportImageRepositoryInput.php @@ -13,6 +13,6 @@ class ExportImportImageRepositoryInput * @var ImageOutput[] */ #[Assert\NotNull] - #[Groups(['image-image-repository:write'])] - public array $repositories = []; + #[Groups(['repository:write'])] + public array $images = []; } \ No newline at end of file diff --git a/src/Dto/Input/ImportImageRepositoryInput.php b/src/Dto/Input/ImportImageRepositoryInput.php new file mode 100644 index 0000000..9a31c0a --- /dev/null +++ b/src/Dto/Input/ImportImageRepositoryInput.php @@ -0,0 +1,15 @@ +