partitions; if (empty($partitions)) { throw new ValidatorException('Partitions is required'); } /** @var Client $client */ $client = $input->partitions[0]->client->getEntity(); $disks = []; foreach ($partitions as $partition) { $diskNumber = $partition->diskNumber; if (!isset($disks[$diskNumber])) { $disks[$diskNumber] = [ 'diskData' => [], 'partitionData' => [] ]; } if ($partition->filesystem === 'CACHE') { $disks[$diskNumber]['diskData'] = [ 'dis' => (string) $diskNumber, 'che' => "0", '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, "ids" => "0" ]; try { $response = $this->httpClient->request('POST', 'https://' . $client->getIp() . ':8000/CloningEngine/Configurar', [ 'verify_peer' => false, 'verify_host' => false, 'headers' => [ 'Content-Type' => 'application/json', ], 'json' => $result, ]); } catch (TransportExceptionInterface $e) { return new JsonResponse( data: ['error' => "Error en disco $diskNumber: " . $e->getMessage()], status: Response::HTTP_INTERNAL_SERVER_ERROR ); } $jobId = json_decode($response->getContent(), true)['job_id']; $client->setStatus(ClientStatus::BUSY); $this->entityManager->persist($client); $this->entityManager->flush(); $this->createService->__invoke($client, CommandTypes::PARTITION_AND_FORMAT, TraceStatus::IN_PROGRESS, $jobId, []); } return new JsonResponse(data: $client, status: Response::HTTP_OK); } }