diff --git a/src/DhcpBundle/Controller/DhcpController.php b/src/DhcpBundle/Controller/DhcpController.php index 320c824..5e66345 100644 --- a/src/DhcpBundle/Controller/DhcpController.php +++ b/src/DhcpBundle/Controller/DhcpController.php @@ -707,11 +707,14 @@ public function modifyDhcpSubnet(Request $request): JsonResponse // Calcular el gateway añadiendo .1 al final de la subred $gateway = preg_replace('/\d+$/', '1', $address); + // Obtener la subred actual para mantener las reservas existentes + $existingSubnet = $response[0]['arguments']['Dhcp4']['subnet4'][$subnetIndex]; + // Modificar la subred existente $newSubnet = [ "id" => $subnetId, "subnet" => $subnetName, - "reservations" => [], + "reservations" => $existingSubnet['reservations'], // Mantener las reservas existentes "option-data" => [ [ "name" => "routers", @@ -721,16 +724,37 @@ public function modifyDhcpSubnet(Request $request): JsonResponse ] ]; - // Añadir next-server si está presente + // Añadir next-server si está presente, o eliminarlo de las reservas si no está if ($nextServer) { $newSubnet["next-server"] = $nextServer; + } else { + // Eliminar next-server de las reservas si no está presente + foreach ($newSubnet['reservations'] as &$reservation) { + unset($reservation['next-server']); + } } - // Añadir boot-file-name si está presente + // Añadir boot-file-name si está presente, o eliminarlo de las reservas si no está if ($bootFileName) { $newSubnet["boot-file-name"] = $bootFileName; + } else { + // Eliminar boot-file-name de las reservas si no está presente + foreach ($newSubnet['reservations'] as &$reservation) { + unset($reservation['boot-file-name']); + } } + // Actualizar las reservas con los nuevos valores de next-server y boot-file-name + foreach ($newSubnet['reservations'] as &$reservation) { + if ($nextServer) { + $reservation['next-server'] = $nextServer; // Actualizar el next-server del host + } + if ($bootFileName) { + $reservation['boot-file-name'] = $bootFileName; // Actualizar el boot-file-name del host + } + } + + // Reemplazar la subred en la configuración $response[0]['arguments']['Dhcp4']['subnet4'][$subnetIndex] = $newSubnet; // Eliminar el campo 'hash' si existe @@ -770,6 +794,8 @@ public function modifyDhcpSubnet(Request $request): JsonResponse return new JsonResponse(['error' => "Error al obtener la configuración de Kea DHCP: " . $e->getMessage()], 500); } } + + /** * @OA\Get( @@ -978,6 +1004,15 @@ public function addDhcpHost(Request $request, $subnetId): JsonResponse foreach ($response[0]['arguments']['Dhcp4']['subnet4'] as &$subnet) { if ($subnet['id'] == $subnetId) { $subnetFound = true; + + // Añadir boot-file-name y next-server de la subred si están definidos + if (isset($subnet['boot-file-name'])) { + $newHost['boot-file-name'] = $subnet['boot-file-name']; + } + if (isset($subnet['next-server'])) { + $newHost['next-server'] = $subnet['next-server']; + } + if (!isset($subnet['reservations'])) { $subnet['reservations'] = []; } @@ -1049,6 +1084,7 @@ public function addDhcpHost(Request $request, $subnetId): JsonResponse } + /** * @OA\Delete( * path="/ogdhcp/v1/subnets/{subnetId}/hosts", @@ -1309,9 +1345,24 @@ public function updateDhcpHost(Request $request, $subnetId): JsonResponse foreach ($subnet['reservations'] as &$reservation) { if ($reservation['hw-address'] == $oldMacAddress) { $hostFound = true; + + // Conservar boot-file-name y next-server si existen en el host original + $bootFileName = $reservation['boot-file-name'] ?? $subnet['boot-file-name'] ?? null; + $nextServer = $reservation['next-server'] ?? $subnet['next-server'] ?? null; + + // Actualizar los valores del host $reservation['hw-address'] = $macAddress; $reservation['ip-address'] = $address; $reservation['hostname'] = $host; + + // Restaurar boot-file-name y next-server si estaban definidos + if ($bootFileName !== null) { + $reservation['boot-file-name'] = $bootFileName; + } + if ($nextServer !== null) { + $reservation['next-server'] = $nextServer; + } + $updatedHost = $reservation; break; } @@ -1360,7 +1411,6 @@ public function updateDhcpHost(Request $request, $subnetId): JsonResponse } } - /** * @OA\Get( * path="/ogdhcp/v1/backup",