diff --git a/modules/kea/migrations/001_1.0.0_baseline.php b/modules/kea/migrations/001_1.0.0_baseline.php new file mode 100644 index 0000000..ec668a0 --- /dev/null +++ b/modules/kea/migrations/001_1.0.0_baseline.php @@ -0,0 +1,26 @@ +settings(); + $fallback = is_array($context->module['metadata_db_defaults'] ?? null) + ? $context->module['metadata_db_defaults'] + : []; + $config = is_array($settings['metadata_db'] ?? null) + ? array_replace($fallback, $settings['metadata_db']) + : $fallback; + + if (empty($config['driver']) || empty($config['dbname'])) { + return; + } + + $repo = new KeaHostMetadataRepository(Database::createFromArray($config)); + $repo->ensureSchema(); + } +}; diff --git a/modules/kea/module.json b/modules/kea/module.json index 31cf00e..f135b43 100644 --- a/modules/kea/module.json +++ b/modules/kea/module.json @@ -1,6 +1,7 @@ { "title": "KEA DHCP", "version": "1.0.0", + "schema_version": 1, "description": "Verwaltung von KEA DHCP Hosts und Reservierungen.", "menu": [ { "label": "Hosts", "href": "/module/kea" }, diff --git a/modules/kea/pages/edit.php b/modules/kea/pages/edit.php index 3dc3192..bb302a4 100644 --- a/modules/kea/pages/edit.php +++ b/modules/kea/pages/edit.php @@ -18,6 +18,7 @@ $error = null; $notice = null; $host = null; $metadataRepo = null; +$groups = []; try { $pdo = modules()->modulePdo('kea', $fallback); @@ -27,6 +28,7 @@ try { $metadataRepo = new KeaHostMetadataRepository(Database::createFromArray($metadataConfig)); $metadataRepo->ensureSchema(); + $groups = $metadataRepo->listGroups(); $repo = new KeaHostRepository($pdo, $metadataRepo); $host = $repo->findDisplayByKey($source, $id); if (!$host) { @@ -40,16 +42,26 @@ try { 'owner' => $_POST['owner'] ?? '', 'location' => $_POST['location'] ?? '', 'device_type' => $_POST['device_type'] ?? '', + 'group_name' => $_POST['group_name'] ?? '', + 'desired_ip' => $_POST['desired_ip'] ?? '', 'notes' => $_POST['notes'] ?? '', 'tags' => [], ]; - $metadataRepo->saveForHost( - $id, - (string)($host['dhcp_identifier'] ?? ''), - (string)($host['ipv4_address'] ?? ''), - $metadata - ); - $notice = 'Zusatzdaten gespeichert.'; + $desiredIp = trim((string)$metadata['desired_ip']); + if ($desiredIp !== '') { + $newHostId = $repo->reserveDisplayEntry($host, $desiredIp, $metadata); + $source = 'reservation'; + $id = $newHostId; + $notice = 'Zusatzdaten gespeichert und KEA-Reservierung gesetzt.'; + } else { + $metadataRepo->saveForHost( + $id, + (string)($host['dhcp_identifier'] ?? ''), + (string)($host['ipv4_address'] ?? ''), + $metadata + ); + $notice = 'Zusatzdaten gespeichert.'; + } $host = $repo->findDisplayByKey($source, $id) ?: $host; } } catch (Throwable $e) { @@ -114,6 +126,20 @@ $metadata = is_array($host['metadata'] ?? null) ? $host['metadata'] : []; Gerätetyp + +