From 2b90e2618d5fda7b5870fee010a7c6119166dac0 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 4 Dec 2024 18:28:36 +0100 Subject: [PATCH] Auto. clients creation --- src/Controller/OgAgent/StatusAction.php | 2 + .../OgAgent/Webhook/AgentController.php | 3 + .../OgBoot/PxeBootFile/PostAction.php | 2 +- src/Dto/Input/DeployImageInput.php | 4 +- src/Dto/Input/NetworkSettingsInput.php | 12 ++++ src/Dto/Output/ImageRepositoryOutput.php | 2 +- src/Dto/Output/NetworkSettingsOutput.php | 7 +++ src/Dto/Output/OgLiveOutput.php | 2 +- src/EventSubscriber/ClientSubscriber.php | 58 +++++++++++++++++++ 9 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 src/EventSubscriber/ClientSubscriber.php diff --git a/src/Controller/OgAgent/StatusAction.php b/src/Controller/OgAgent/StatusAction.php index 13f9964..6ae7f5d 100644 --- a/src/Controller/OgAgent/StatusAction.php +++ b/src/Controller/OgAgent/StatusAction.php @@ -80,6 +80,8 @@ class StatusAction extends AbstractController } catch (TransportExceptionInterface $e) { $client->setStatus(ClientStatus::OFF); + $this->entityManager->persist($client); + $this->entityManager->flush(); return $e->getMessage(); } diff --git a/src/Controller/OgAgent/Webhook/AgentController.php b/src/Controller/OgAgent/Webhook/AgentController.php index 4ed9f5d..9668aa6 100644 --- a/src/Controller/OgAgent/Webhook/AgentController.php +++ b/src/Controller/OgAgent/Webhook/AgentController.php @@ -26,6 +26,9 @@ class AgentController extends AbstractController { } + /** + * @throws \Exception + */ #[Route('/opengnsys/rest/ogAdmClient/InclusionCliente', methods: ['POST'])] public function processClient(Request $request): JsonResponse { diff --git a/src/Controller/OgBoot/PxeBootFile/PostAction.php b/src/Controller/OgBoot/PxeBootFile/PostAction.php index 634713d..399aed7 100644 --- a/src/Controller/OgBoot/PxeBootFile/PostAction.php +++ b/src/Controller/OgBoot/PxeBootFile/PostAction.php @@ -40,7 +40,7 @@ class PostAction extends AbstractOgBootController 'computer_name' => $client->getName(), 'netiface' => $client->getNetiface(), 'group' => $client->getOrganizationalUnit()->getName(), - 'ogrepo' => $client->getRepository()?->getIp() , + 'ogrepo' => $client->getRepository() ? $client->getRepository()->getIp() : $client->getOrganizationalUnit()->getNetworkSettings()->getRepository()->getIp(), 'ogcore' => $this->ogCoreIP, 'oglive' => $this->ogBootApiUrl, 'oglog' => $client->getOrganizationalUnit()->getNetworkSettings()?->getOgLog(), diff --git a/src/Dto/Input/DeployImageInput.php b/src/Dto/Input/DeployImageInput.php index af79406..86f4e09 100644 --- a/src/Dto/Input/DeployImageInput.php +++ b/src/Dto/Input/DeployImageInput.php @@ -40,11 +40,11 @@ class DeployImageInput public ?string $mcastIp = null; #[Groups(['image:write'])] - public ?int $mcastSpeed = null; + public ?string $mcastSpeed = null; #[OrganizationalUnitMulticastPort] #[Groups(['image:write'])] - public ?int $mcastPort = null; + public ?string $mcastPort = null; #[OrganizationalUnitMulticastMode] #[Groups(['image:write'])] diff --git a/src/Dto/Input/NetworkSettingsInput.php b/src/Dto/Input/NetworkSettingsInput.php index 6f33126..5b11659 100644 --- a/src/Dto/Input/NetworkSettingsInput.php +++ b/src/Dto/Input/NetworkSettingsInput.php @@ -4,6 +4,7 @@ namespace App\Dto\Input; use ApiPlatform\Metadata\ApiProperty; use App\Dto\Output\HardwareProfileOutput; +use App\Dto\Output\ImageRepositoryOutput; use App\Dto\Output\MenuOutput; use App\Dto\Output\OgLiveOutput; use App\Entity\HardwareProfile; @@ -73,6 +74,9 @@ class NetworkSettingsInput #[Groups(['organizational-unit:write'])] public ?OgLiveOutput $ogLive = null; + #[Groups(['organizational-unit:write'])] + public ?ImageRepositoryOutput $repository = null; + #[Groups(['organizational-unit:write'])] public ?bool $validation = null; @@ -116,6 +120,10 @@ class NetworkSettingsInput $this->ogLive = new OgLiveOutput($networkSettings->getOgLive()); } + if ($networkSettings->getRepository()) { + $this->repository = new ImageRepositoryOutput($networkSettings->getRepository()); + } + $this->validation = $networkSettings->getValidation(); } @@ -153,6 +161,10 @@ class NetworkSettingsInput $networkSettings->setOgLive($this->ogLive->getEntity()); } + if ($this->repository) { + $networkSettings->setRepository($this->repository->getEntity()); + } + $networkSettings->setValidation($this->validation); return $networkSettings; diff --git a/src/Dto/Output/ImageRepositoryOutput.php b/src/Dto/Output/ImageRepositoryOutput.php index 5a7faa4..5ee94fa 100644 --- a/src/Dto/Output/ImageRepositoryOutput.php +++ b/src/Dto/Output/ImageRepositoryOutput.php @@ -9,7 +9,7 @@ use Symfony\Component\Serializer\Annotation\Groups; #[Get(shortName: 'ImageRepository')] class ImageRepositoryOutput extends AbstractOutput { - #[Groups(['repository:read', 'image:read', 'client:read'])] + #[Groups(['repository:read', 'image:read', 'client:read', "organizational-unit:read"])] public ?string $name = ''; #[Groups(['repository:read'])] diff --git a/src/Dto/Output/NetworkSettingsOutput.php b/src/Dto/Output/NetworkSettingsOutput.php index b13489e..d8391c3 100644 --- a/src/Dto/Output/NetworkSettingsOutput.php +++ b/src/Dto/Output/NetworkSettingsOutput.php @@ -57,6 +57,9 @@ final class NetworkSettingsOutput extends AbstractOutput #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] public ?OgLiveOutput $ogLive = null; + #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] + public ?ImageRepositoryOutput $repository = null; + #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] public ?string $oglog = null; @@ -104,6 +107,10 @@ final class NetworkSettingsOutput extends AbstractOutput $this->ogLive = new OgLiveOutput($networkSettings->getOgLive()); } + if ($networkSettings->getRepository()) { + $this->repository = new ImageRepositoryOutput($networkSettings->getRepository()); + } + $this->validation = $networkSettings->getValidation(); $this->createdAt = $networkSettings->getCreatedAt(); $this->createdBy = $networkSettings->getCreatedBy(); diff --git a/src/Dto/Output/OgLiveOutput.php b/src/Dto/Output/OgLiveOutput.php index 45a9a57..c6ccde9 100644 --- a/src/Dto/Output/OgLiveOutput.php +++ b/src/Dto/Output/OgLiveOutput.php @@ -10,7 +10,7 @@ use Symfony\Component\Serializer\Annotation\Groups; #[Get(shortName: 'OgLive')] final class OgLiveOutput extends AbstractOutput { - #[Groups(['og-live:read', 'client:read'])] + #[Groups(['og-live:read', 'client:read', "organizational-unit:read"])] public string $name; #[Groups(['og-live:read'])] diff --git a/src/EventSubscriber/ClientSubscriber.php b/src/EventSubscriber/ClientSubscriber.php new file mode 100644 index 0000000..591ba75 --- /dev/null +++ b/src/EventSubscriber/ClientSubscriber.php @@ -0,0 +1,58 @@ + ['sendMail', EventPriorities::POST_WRITE], + ]; + } + + /** + * @throws TransportExceptionInterface + * @throws ServerExceptionInterface + * @throws RedirectionExceptionInterface + * @throws ClientExceptionInterface + */ + public function sendMail(ViewEvent $event): void + { + $clientOutput = $event->getControllerResult(); + $method = $event->getRequest()->getMethod(); + + if (!$clientOutput instanceof ClientOutput || (Request::METHOD_POST !== $method && Request::METHOD_PUT !== $method)) { + return; + } + + /** @var Client $client */ + $client = $clientOutput->getEntity(); + + if ($client->getTemplate() === null) { + return; + } + + $this->postAction->__invoke($client, $client->getTemplate()); + } +} \ No newline at end of file