[ 'mode' => 'dhcp', 'modev6' => 'auto', 'network_primary_ip' => '', 'network_primary_gateway' => '', 'network_primary_vlan' => '', 'network_primary_dns1' => '', 'network_primary_dns2' => '', 'network_primary_ipv6' => '', 'network_primary_ipv6_prefix' => '', 'network_primary_ipv6_gateway' => '', 'network_primary_ipv6_vlan' => '', 'network_primary_ipv6_dns1' => '', 'network_primary_ipv6_dns2' => '', ], 'secondary' => [ 'mode' => 'disabled', 'modev6' => 'disabled', 'network_secondary_ip' => '', 'network_secondary_gateway' => '', 'network_secondary_vlan' => '', 'network_secondary_dns1' => '', 'network_secondary_dns2' => '', 'network_secondary_ipv6' => '', 'network_secondary_ipv6_prefix' => '', 'network_secondary_ipv6_gateway' => '', 'network_secondary_ipv6_vlan' => '', 'network_secondary_ipv6_dns1' => '', 'network_secondary_ipv6_dns2' => '', ], ]; if (file_exists($jsonFile)) { $raw = file_get_contents($jsonFile); $data = json_decode($raw, true); if (!is_array($data)) $data = $defaults; } else { $data = $defaults; } $errors = []; $success = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $get = function ($k) { return isset($_POST[$k]) ? trim((string)$_POST[$k]) : ''; }; $primary_mode = in_array($get('primary_mode'), ['dhcp', 'static', 'disabled']) ? $get('primary_mode') : 'dhcp'; $primary_modev6 = in_array($get('primary_mode'), ['auto', 'dhcpv6', 'static', 'disabled']) ? $get('primary_mode') : 'auto'; $secondary_mode = in_array($get('secondary_mode'), ['dhcp', 'static', 'disabled']) ? $get('secondary_mode') : 'dhcp'; $secondary_modev6 = in_array($get('secondary_mode'), ['auto', 'dhcpv6', 'static', 'disabled']) ? $get('secondary_mode') : 'auto'; $network_primary_ip = $get('network_primary_ip'); $network_primary_gateway = $get('network_primary_gateway'); $network_primary_vlan = $get('network_primary_vlan'); $network_primary_dns1 = $get('network_primary_dns1'); $network_primary_dns2 = $get('network_primary_dns2'); $network_primary_ipv6 = $get('network_primary_ipv6'); $network_primary_ipv6_prefix = $get('network_primary_ipv6_prefix'); $network_primary_ipv6_gateway = $get('network_primary_ipv6_gateway'); $network_primary_ipv6_vlan = $get('network_primary_ipv6_vlan'); $network_primary_ipv6_dns1 = $get('network_primary_ipv6_dns1'); $network_primary_ipv6_dns2 = $get('network_primary_ipv6_dns2'); $network_secondary_ip = $get('network_secondary_ip'); $network_secondary_subnet = $get('network_secondary_subnet'); $network_secondary_gateway = $get('network_secondary_gateway'); $network_secondary_vlan = $get('network_secondary_vlan'); $network_secondary_dns1 = $get('network_secondary_dns1'); $network_secondary_dns2 = $get('network_secondary_dns2'); $network_secondary_ipv6 = $get('network_secondary_ipv6'); $network_secondary_ipv6_prefix = $get('network_secondary_ipv6_prefix'); $network_secondary_ipv6_gateway = $get('network_secondary_ipv6_gateway'); $network_secondary_ipv6_vlan = $get('network_secondary_ipv6_vlan'); $network_secondary_ipv6_dns1 = $get('network_secondary_ipv6_dns1'); $network_secondary_ipv6_dns2 = $get('network_secondary_ipv6_dns2'); $new = [ 'primary' => [ 'mode' => 'dhcp', 'modev6' => 'auto', 'network_primary_ip' => $network_primary_ip, 'network_primary_gateway' => $network_primary_gateway, 'network_primary_vlan' => $network_primary_vlan, 'network_primary_dns1' => $network_primary_dns1, 'network_primary_dns2' => $network_primary_dns2, 'network_primary_ipv6' => $network_primary_ipv6, 'network_primary_ipv6_prefix' => $network_primary_ipv6_prefix, 'network_primary_ipv6_gateway' => $network_primary_ipv6_gateway, 'network_primary_ipv6_vlan' => $network_primary_ipv6_vlan, 'network_primary_ipv6_dns1' => $network_primary_ipv6_dns1, 'network_primary_ipv6_dns2' => $network_primary_ipv6_dns2 ], 'secondary' => [ 'mode' => 'disabled', 'modev6' => 'disabled', 'network_secondary_ip' => $network_secondary_ip, 'network_secondary_gateway' => $network_secondary_gateway, 'network_secondary_vlan' => $network_secondary_vlan, 'network_secondary_dns1' => $network_secondary_dns1, 'network_secondary_dns2' => $network_secondary_dns2, 'network_secondary_ipv6' => $network_secondary_ipv6, 'network_secondary_ipv6_prefix' => $network_secondary_ipv6_prefix, 'network_secondary_ipv6_gateway' => $network_secondary_ipv6_gateway, 'network_secondary_ipv6_vlan' => $network_secondary_ipv6_vlan, 'network_secondary_ipv6_dns1' => $network_secondary_ipv6_dns1, 'network_secondary_ipv6_dns2' => $network_secondary_ipv6_dns2 ], ]; $json = json_encode($new, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); if (file_put_contents($jsonFile, $json, LOCK_EX) === false) { $errors[] = "Failed to write {$jsonFile}. Check permissions."; } else { $data = $new; $success = 'Saved.'; $netplan = [ 'network' => [ 'version' => 2, 'renderer' => 'networkd', 'ethernets' => [], 'vlans' => [] ] ]; $primary_vlan = trim($data['primary']['network_primary_vlan'] ?? ''); $secondary_vlan = trim($data['secondary']['network_secondary_vlan'] ?? ''); $uses_vlan = ($primary_vlan !== '' || $secondary_vlan !== ''); if (!$uses_vlan) { $netplan['network']['ethernets'][$iface] = build_interface($data['primary'], 'primary'); } else { $netplan['network']['ethernets'][$iface] = new stdClass(); if ($primary_vlan !== '') { $netplan['network']['vlans']["{$iface}.{$primary_vlan}"] = array_merge( ['id' => (int)$primary_vlan, 'link' => $iface], build_interface($data['primary'], 'primary') ); } if ($secondary_vlan !== '') { $netplan['network']['vlans']["{$iface}.{$secondary_vlan}"] = array_merge( ['id' => (int)$secondary_vlan, 'link' => $iface], build_interface($data['secondary'], 'secondary') ); } } file_put_contents('/var/www/50-cloud-init.yaml', netplan_yaml($netplan)); } } ?>
'; foreach ($errors as $e) echo '