From 299ced8b27febcfad80cc3594cfa6304521f946c Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Mon, 20 Apr 2026 18:00:33 +0200 Subject: [PATCH] refs #2972. Integration remove leases ogDhcp --- .../execute-command.component.ts | 30 ++++++++++++++++++- .../ogdhcp/og-dhcp-subnets.component.html | 2 ++ .../ogdhcp/og-dhcp-subnets.component.ts | 20 +++++++++++++ .../show-clients/show-clients.component.html | 4 +++ .../show-clients/show-clients.component.ts | 20 +++++++++++++ ogWebconsole/src/locale/en.json | 3 +- ogWebconsole/src/locale/es.json | 3 +- 7 files changed, 79 insertions(+), 3 deletions(-) diff --git a/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts b/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts index 11505fd..98c76d3 100644 --- a/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts +++ b/ogWebconsole/src/app/components/commands/main-commands/execute-command/execute-command.component.ts @@ -38,6 +38,7 @@ export class ExecuteCommandComponent implements OnInit { { translationKey: 'executeCommands.hardwareInventory', slug: 'hardware-inventory', disabled: false }, { translationKey: 'executeCommands.runScript', slug: 'run-script', disabled: false }, { translationKey: 'executeCommands.refresh', slug: 'refresh', disabled: false }, + { translationKey: 'executeCommands.deleteLease', slug: 'delete-lease', disabled: false }, ]; client: any = {}; @@ -81,7 +82,8 @@ export class ExecuteCommandComponent implements OnInit { 'hardware-inventory', 'remove-cache-image', 'partition', - 'refresh' + 'refresh', + 'delete-lease' ], 'ou-minimal': [ 'power-on', @@ -184,6 +186,10 @@ export class ExecuteCommandComponent implements OnInit { if (action === 'refresh') { this.refreshClient(); } + + if (action === 'delete-lease') { + this.deleteClientLease(); + } } rebootClient(): void { @@ -395,4 +401,26 @@ export class ExecuteCommandComponent implements OnInit { } }) } + + deleteClientLease(): void { + if (this.clientData.length === 0) { + this.toastService.error('No hay clientes seleccionados'); + return; + } + + const requests = this.clientData.map((client: any) => + this.http.delete(`${this.baseUrl}/clients/${client.uuid}/delete-lease`).toPromise() + ); + + Promise.allSettled(requests).then(results => { + const errors = results.filter(r => r.status === 'rejected'); + if (errors.length === 0) { + this.toastService.success('Lease(s) DHCP eliminada(s) correctamente'); + } else if (errors.length < results.length) { + this.toastService.warning(`${results.length - errors.length} lease(s) eliminada(s), ${errors.length} con error`); + } else { + this.toastService.error('Error al eliminar las leases DHCP'); + } + }); + } } diff --git a/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.html b/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.html index 6cfe1b4..2e836ed 100644 --- a/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.html +++ b/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.html @@ -76,6 +76,8 @@ + diff --git a/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.ts b/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.ts index eb2c18c..8c7162a 100644 --- a/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.ts +++ b/ogWebconsole/src/app/components/ogdhcp/og-dhcp-subnets.component.ts @@ -296,6 +296,26 @@ export class OgDhcpSubnetsComponent implements OnInit { }); } + deleteSubnetLeases(subnet: Subnet) { + const dialogRef = this.dialog.open(DeleteModalComponent, { + width: '300px', + data: { name: `leases de ${subnet.name}` } + }); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.http.delete(`${this.baseUrl}/og-dhcp/server/${subnet.uuid}/delete-leases`, {}).subscribe({ + next: () => { + this.toastService.success('Leases de la subred eliminadas correctamente'); + }, + error: (error) => { + this.toastService.error(error.error?.['hydra:description'] || 'Error al eliminar leases de la subred'); + } + }); + } + }); + } + addClientsToSubnet(subnet: Subnet) { const dialogRef = this.dialog.open(AddClientsToSubnetComponent, { width: '800px', diff --git a/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.html b/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.html index 0267d11..cc83db3 100644 --- a/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.html +++ b/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.html @@ -78,6 +78,10 @@ Acciones + diff --git a/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.ts b/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.ts index 322c90a..82640b8 100644 --- a/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.ts +++ b/ogWebconsole/src/app/components/ogdhcp/show-clients/show-clients.component.ts @@ -75,6 +75,26 @@ export class ShowClientsComponent implements OnInit { ); } + deleteClientLease(client: any): void { + const dialogRef = this.dialog.open(DeleteModalComponent, { + width: '300px', + data: { name: `lease de ${client.name}` } + }); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.http.delete(`${this.baseUrl}/og-dhcp/server/${this.data.subnetUuid}/delete-lease/${client.uuid}`, {}).subscribe({ + next: () => { + this.toastService.success('Lease del cliente eliminada correctamente'); + }, + error: (error) => { + this.toastService.error(error.error?.['hydra:description'] || 'Error al eliminar lease del cliente'); + } + }); + } + }); + } + deleteClient(client: any): void { const dialogRef = this.dialog.open(DeleteModalComponent, { width: '300px', diff --git a/ogWebconsole/src/locale/en.json b/ogWebconsole/src/locale/en.json index ce89125..5c69b33 100644 --- a/ogWebconsole/src/locale/en.json +++ b/ogWebconsole/src/locale/en.json @@ -592,7 +592,8 @@ "softwareInventory": "Software Inventory", "hardwareInventory": "Hardware Inventory", "runScript": "Run Script", - "refresh": "Refresh" + "refresh": "Refresh", + "deleteLease": "Delete DHCP Lease" }, "changeOU": "Change Organizational Unit", "moveClientsTooltip": "Move clients to another organizational unit", diff --git a/ogWebconsole/src/locale/es.json b/ogWebconsole/src/locale/es.json index 689f3f3..57a7015 100644 --- a/ogWebconsole/src/locale/es.json +++ b/ogWebconsole/src/locale/es.json @@ -593,7 +593,8 @@ "softwareInventory": "Inventario Software", "hardwareInventory": "Inventario Hardware", "runScript": "Ejecutar script", - "refresh": "Refrescar" + "refresh": "Refrescar", + "deleteLease": "Borrar lease DHCP" }, "changeOU": "Mover", "moveClientsTooltip": "Mover clientes a otra unidad organizativa",