refs #1030 Adds to reservations bootfilename and next server when is modified the subnet to fix priority problem that allows to use global configuration when bootfilename and next server is defined in 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
aaacfe1286
commit
0b6e6f7893
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue