Skip to content

Commit 0bb14f0

Browse files
authored
fix: fixed persistence of subnet data in DHCP service (#788)
1 parent a520999 commit 0bb14f0

File tree

8 files changed

+26
-9
lines changed

8 files changed

+26
-9
lines changed

.docker/kea.Dockerfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,10 @@ FROM jonasal/kea-dhcp4:3.1.2-alpine AS runtime
22

33
COPY --from=jonasal/kea-hooks:3.1.2-alpine /hooks /usr/lib/kea/hooks
44

5+
RUN touch /kea/config/kea-dhcp4.conf
6+
7+
COPY ./kea-dhcp4.conf /kea/config/kea-dhcp4.conf
8+
9+
RUN chmod 750 /kea/config/kea-dhcp4.conf
10+
511
RUN ldconfig /usr/local/lib/kea/hooks

.package/docker-compose.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,7 @@ services:
327327
restart: unless-stopped
328328
command: -c /kea/config/kea-dhcp4.conf
329329
volumes:
330-
- kea_data:/var/lib/kea
331-
- ./.dhcp:/kea/config
330+
- dhcp:/kea/config
332331
- sockets:/kea/sockets
333332
- leases:/kea/leases
334333

@@ -342,7 +341,7 @@ services:
342341
kea_dhcp4:
343342
condition: service_started
344343
volumes:
345-
- ./.dhcp:/kea/config
344+
- ./kea-ctrl-agent.conf:/kea/config/kea-ctrl-agent.conf
346345
- sockets:/kea/sockets
347346
- leases:/kea/leases
348347

@@ -421,6 +420,6 @@ volumes:
421420
dns_server_config:
422421
dragonflydata:
423422
ldap_keytab:
424-
kea_data:
425423
leases:
426424
sockets:
425+
dhcp:

app/ldap_protocol/dhcp/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ async def delete_reservation(self, reservation: DHCPReservation) -> None:
9797
async def list_reservations(self, subnet_id: int) -> list[DHCPReservation]:
9898
"""List all reservations for a subnet."""
9999

100+
@abstractmethod
101+
async def write_config(self) -> None:
102+
"""Write the DHCP server configuration to apply changes."""
103+
100104

101105
class AbstractDHCPManager(AbstractService):
102106
"""Abstract DHCP manager class."""

app/ldap_protocol/dhcp/kea_dhcp_manager.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ async def create_subnet(
2828
subnet_dto.id = await self._get_new_subnet_id()
2929
try:
3030
await self._api_repository.create_subnet(subnet_dto)
31+
await self._api_repository.write_config()
3132
except DHCPAPIError as e:
3233
raise DHCPEntryAddError(f"Failed to create subnet: {e}")
3334

3435
async def delete_subnet(self, subnet_id: int) -> None:
3536
"""Delete a subnet."""
3637
try:
3738
await self._api_repository.delete_subnet(subnet_id)
39+
await self._api_repository.write_config()
3840
except DHCPAPIError as e:
3941
raise DHCPEntryDeleteError(f"Failed to delete subnet: {e}")
4042

@@ -62,6 +64,7 @@ async def update_subnet(
6264
"""Update an existing subnet."""
6365
try:
6466
await self._api_repository.update_subnet(subnet_dto)
67+
await self._api_repository.write_config()
6568
except DHCPAPIError as e:
6669
raise DHCPEntryUpdateError(
6770
f"Failed to update subnet: {e}",
@@ -124,6 +127,7 @@ async def add_reservation(
124127
"""Add a reservation for a MAC address."""
125128
try:
126129
await self._api_repository.create_reservation(reservation)
130+
await self._api_repository.write_config()
127131
except DHCPAPIError as e:
128132
raise DHCPEntryAddError(
129133
f"Failed to add reservation: {e}",
@@ -143,6 +147,7 @@ async def delete_reservation(
143147
)
144148
try:
145149
await self._api_repository.delete_reservation(reservation)
150+
await self._api_repository.write_config()
146151
except DHCPAPIError as e:
147152
raise DHCPEntryDeleteError(
148153
f"Failed to delete reservation: {e}",

app/ldap_protocol/dhcp/stub.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ async def list_reservations(
8383
) -> NoReturn:
8484
raise DHCPAPIError
8585

86+
@logger_wraps(is_stub=True)
87+
async def write_config(self) -> None:
88+
"""Write the DHCP server configuration to apply changes."""
89+
8690

8791
class StubDHCPManager(AbstractDHCPManager):
8892
"""Stub DHCP manager class."""

docker-compose.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,7 @@ services:
265265
restart: unless-stopped
266266
command: -c /kea/config/kea-dhcp4.conf
267267
volumes:
268-
- kea_data:/var/lib/kea
269-
- ./.dhcp:/kea/config
268+
- dhcp:/kea/config
270269
- sockets:/kea/sockets
271270
- leases:/kea/leases
272271

@@ -280,7 +279,7 @@ services:
280279
kea_dhcp4:
281280
condition: service_started
282281
volumes:
283-
- ./.dhcp:/kea/config
282+
- ./.package/kea-ctrl-agent.conf:/kea/config/kea-ctrl-agent.conf
284283
- sockets:/kea/sockets
285284
- leases:/kea/leases
286285

@@ -486,6 +485,6 @@ volumes:
486485
dns_server_config:
487486
ldap_keytab:
488487
dragonflydata:
489-
kea_data:
490488
leases:
491489
sockets:
490+
dhcp:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
},
2929
{
3030
"library": "libdhcp_lease_cmds.so"
31-
},
31+
}
3232
],
3333
"parked-packet-limit": 128,
3434
"valid-lifetime": 6000,

0 commit comments

Comments
 (0)