From 4713568a04534a0ddf8693740f7d22e6c7256359 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Thu, 28 Aug 2025 16:26:50 +0200 Subject: [PATCH] refs #2689. Integration get-script data in partition assistant --- config/api_platform/Client.yaml | 7 + .../OgAgent/GetPartitionScriptDataAction.php | 126 ++++++++++++++++++ src/Dto/Input/GetPartitionScriptDataInput.php | 17 +++ 3 files changed, 150 insertions(+) create mode 100644 src/Controller/OgAgent/GetPartitionScriptDataAction.php create mode 100644 src/Dto/Input/GetPartitionScriptDataInput.php diff --git a/config/api_platform/Client.yaml b/config/api_platform/Client.yaml index ea0a64a..59f385f 100644 --- a/config/api_platform/Client.yaml +++ b/config/api_platform/Client.yaml @@ -99,6 +99,13 @@ resources: uriTemplate: /clients/{uuid}/check-partition-sizes controller: App\Controller\OgAgent\CheckPartitionSizesAction + get_partition_script_data: + class: ApiPlatform\Metadata\Post + method: POST + input: App\Dto\Input\GetPartitionScriptDataInput + uriTemplate: /clients/{uuid}/get-partition-script-data + controller: App\Controller\OgAgent\GetPartitionScriptDataAction + properties: App\Entity\Client: diff --git a/src/Controller/OgAgent/GetPartitionScriptDataAction.php b/src/Controller/OgAgent/GetPartitionScriptDataAction.php new file mode 100644 index 0000000..4505624 --- /dev/null +++ b/src/Controller/OgAgent/GetPartitionScriptDataAction.php @@ -0,0 +1,126 @@ +partitions; + + if (empty($partitions)) { + throw new BadRequestHttpException('Partitions is required'); + } + + $this->logger->info('Input received', [ + 'partitions_count' => count($partitions), + 'input_type' => gettype($input), + 'partitions_type' => gettype($partitions) + ]); + + $disks = []; + foreach ($partitions as $index => $partition) { + $diskNumber = $partition->diskNumber; + + $partitionEntity = $this->entityManager->getRepository(Partition::class)->findOneBy([ + 'client' => $client, + 'partitionNumber' => $partition->partitionNumber, + 'diskNumber' => $partition->diskNumber, + ]); + + if ($partitionEntity) { + $partitionEntity->setClient($client); + $this->entityManager->persist($partitionEntity); + } + + if (!isset($disks[$diskNumber])) { + $disks[$diskNumber] = [ + 'diskData' => [], + 'partitionData' => [] + ]; + } + + $disks[$diskNumber]['diskData'] = [ + 'dis' => (string) $diskNumber, + 'tch' => (string) ($partition->size * 1024), + ]; + + $disks[$diskNumber]['partitionData'][] = [ + 'par' => (string) $partition->partitionNumber, + 'cpt' => $partition->partitionCode, + 'sfi' => $partition->filesystem, + 'tam' => (string) (integer) ($partition->size * 1024), + 'ope' => $partition->format ? "1" : "0", + ]; + } + + foreach ($disks as $diskNumber => $diskInfo) { + $data = []; + if (!empty($diskInfo['diskData'])) { + $data[] = $diskInfo['diskData']; + } + $data = array_merge($data, $diskInfo['partitionData']); + + $result = [ + "nfn" => "Configurar", + "dsk" => (string) $diskNumber, + "cfg" => $data, + "check-sizes" => "false", + "gen-script" => "true", + "ids" => "0" + ]; + + $response = $this->createRequest( + method: 'POST', + url: 'https://'.$client->getIp().':8000/opengnsys/Configurar', + params: [ + 'json' => $result, + ], + token: $client->getToken(), + ); + + if (isset($response['script'])) { + $decodedScript = base64_decode((string) $response['script'], true); + if ($decodedScript !== false) { + $response['script'] = $decodedScript; + } + } + + } + + return new JsonResponse(data: $response, status: Response::HTTP_OK); + } +} diff --git a/src/Dto/Input/GetPartitionScriptDataInput.php b/src/Dto/Input/GetPartitionScriptDataInput.php new file mode 100644 index 0000000..14347bc --- /dev/null +++ b/src/Dto/Input/GetPartitionScriptDataInput.php @@ -0,0 +1,17 @@ +