refs #1204 Fix missing comprobations in update subnet
testing/og-dhcp-API/pipeline/head There was a failure building this commit Details

ogdhcp-log
Luis Gerardo Romero Garcia 2025-01-13 11:32:31 +01:00
parent 24ddbead96
commit 394a71134c
1 changed files with 48 additions and 15 deletions

View File

@ -904,14 +904,15 @@ public function addDhcpSubnet(Request $request): JsonResponse
* ) * )
* ) * )
*/ */
public function modifyDhcpSubnet(Request $request): JsonResponse public function modifyDhcpSubnet(Request $request): JsonResponse
{ {
$subnetId = (int) $request->get('subnetId');
$operation = 'modifyDhcpSubnet'; $operation = 'modifyDhcpSubnet';
$component = 'ogdhcp'; $component = 'ogdhcp';
$subnetId = (int) $request->get('subnetId');
try { try {
$input = json_decode($request->getContent(), false); $input = json_decode($request->getContent());
$mask = htmlspecialchars($input->mask); $mask = htmlspecialchars($input->mask);
$address = htmlspecialchars($input->address); $address = htmlspecialchars($input->address);
@ -935,7 +936,6 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['error' => "Falta un parámetro requerido: $paramFaltante"], Response::HTTP_BAD_REQUEST); return new JsonResponse(['error' => "Falta un parámetro requerido: $paramFaltante"], Response::HTTP_BAD_REQUEST);
} }
$this->logger->error(json_encode([ $this->logger->error(json_encode([
'severity' => 'ERROR', 'severity' => 'ERROR',
'operation' => $operation, 'operation' => $operation,
@ -983,7 +983,7 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
$newSubnet = [ $newSubnet = [
"id" => $subnetId, "id" => $subnetId,
"subnet" => $subnetName, "subnet" => $subnetName,
"reservations" => $existingSubnet['reservations'], "reservations" => $existingSubnet['reservations'], // Mantener las reservas existentes
"option-data" => [ "option-data" => [
[ [
"name" => "routers", "name" => "routers",
@ -993,15 +993,38 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
] ]
]; ];
// Añadir next-server si está presente, o eliminarlo de las reservas si no está
if ($nextServer) { if ($nextServer) {
$newSubnet["next-server"] = $nextServer; $newSubnet["next-server"] = $nextServer;
} else {
foreach ($newSubnet['reservations'] as &$reservation) {
unset($reservation['next-server']);
}
} }
// Añadir boot-file-name si está presente, o eliminarlo de las reservas si no está
if ($bootFileName) { if ($bootFileName) {
$newSubnet["boot-file-name"] = $bootFileName; $newSubnet["boot-file-name"] = $bootFileName;
} else {
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;
}
if ($bootFileName) {
$reservation['boot-file-name'] = $bootFileName;
}
}
// Reemplazar la subred en la configuración
$response[0]['arguments']['Dhcp4']['subnet4'][$subnetIndex] = $newSubnet; $response[0]['arguments']['Dhcp4']['subnet4'][$subnetIndex] = $newSubnet;
// Eliminar el campo 'hash' si existe
if (isset($response[0]['arguments']['hash'])) { if (isset($response[0]['arguments']['hash'])) {
unset($response[0]['arguments']['hash']); unset($response[0]['arguments']['hash']);
} }
@ -1025,16 +1048,27 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['error' => $errorText], Response::HTTP_BAD_REQUEST); return new JsonResponse(['error' => $errorText], Response::HTTP_BAD_REQUEST);
} else { } else {
$responseSuccess = "Subred modificada correctamente"; $responseWrite = $this->curlKeaService->executeCurlCommand('config-write', $configuration);
$this->logger->info(json_encode([ if ($responseWrite == false || $responseWrite[0]["result"] != 0) {
'severity' => 'INFO', return new JsonResponse(['error' => "Error al escribir en la configuración en Kea DHCP: " . $responseWrite[0]["text"]], 400);
'operation' => $operation, } else {
'component' => $component, // Volvemos a consultar la configuración para devolver la subred modificada
'http_code' => Response::HTTP_OK, $updatedResponse = $this->curlKeaService->executeCurlCommand('config-get');
'desc' => $responseSuccess, $updatedSubnet = array_filter($updatedResponse[0]['arguments']['Dhcp4']['subnet4'], function ($subnet) use ($subnetId) {
'params' => ['subnet_id' => $subnetId] return $subnet['id'] == $subnetId;
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); });
return new JsonResponse(['success' => $responseSuccess], Response::HTTP_OK);
$responseSuccess = "Subred modificada correctamente";
$this->logger->info(json_encode([
'severity' => 'INFO',
'operation' => $operation,
'component' => $component,
'http_code' => Response::HTTP_OK,
'desc' => $responseSuccess,
'params' => ['subnet_id' => $subnetId]
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['success' => $responseSuccess], Response::HTTP_OK);
}
} }
} else { } else {
$errorText = "Error configuración de Kea inválida: " . $responseTest[0]["text"]; $errorText = "Error configuración de Kea inválida: " . $responseTest[0]["text"];
@ -1062,7 +1096,6 @@ public function modifyDhcpSubnet(Request $request): JsonResponse
/** /**
* @OA\Get( * @OA\Get(