refs #1204 Fix missing comprobations in update subnet
testing/og-dhcp-API/pipeline/head There was a failure building this commit
Details
testing/og-dhcp-API/pipeline/head There was a failure building this commit
Details
parent
24ddbead96
commit
394a71134c
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue