From e47a3907692b468432b9e9343d0492cea55dd34b Mon Sep 17 00:00:00 2001 From: devdatt Date: Tue, 23 Dec 2025 15:15:57 +0530 Subject: [PATCH] generate_netplan --- encoder/static.php | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/encoder/static.php b/encoder/static.php index 747d29f..97234b5 100755 --- a/encoder/static.php +++ b/encoder/static.php @@ -148,14 +148,11 @@ function build_interface(array $cfg, string $type): array function generate_netplan(array $data, string $iface): array { - $netplan = [ 'network' => [ 'version' => 2, 'renderer' => 'networkd', - 'ethernets' => [ - $iface => new stdClass() // base NIC only - ], + 'ethernets' => [], 'vlans' => [] ] ]; @@ -168,31 +165,47 @@ function generate_netplan(array $data, string $iface): array $vlan = trim($data['primary']['network_primary_vlan'] ?? ''); if ($vlan !== '') { + /* VLAN configuration */ + $netplan['network']['ethernets'][$iface] = new stdClass(); + $netplan['network']['vlans']["{$iface}.{$vlan}"] = array_merge( ['id' => (int)$vlan, 'link' => $iface], build_interface($data['primary'], 'primary') ); + } else { + /* NO VLAN → configure base NIC */ + $netplan['network']['ethernets'][$iface] = + build_interface($data['primary'], 'primary'); } } - /* ---------- SECONDARY ---------- */ + /* ---------- SECONDARY (only if primary not configured on base) ---------- */ if ( - $data['secondary']['mode'] !== 'disabled' || - $data['secondary']['modev6'] !== 'disabled' + !isset($netplan['network']['ethernets'][$iface]) && + ( + $data['secondary']['mode'] !== 'disabled' || + $data['secondary']['modev6'] !== 'disabled' + ) ) { $vlan = trim($data['secondary']['network_secondary_vlan'] ?? ''); if ($vlan !== '') { + $netplan['network']['ethernets'][$iface] = new stdClass(); + $netplan['network']['vlans']["{$iface}.{$vlan}"] = array_merge( ['id' => (int)$vlan, 'link' => $iface], build_interface($data['secondary'], 'secondary') ); + } else { + /* NO VLAN → configure base NIC */ + $netplan['network']['ethernets'][$iface] = + build_interface($data['secondary'], 'secondary'); } } - /* Ensure vlans is a mapping */ + /* Normalize vlans */ if (empty($netplan['network']['vlans'])) { $netplan['network']['vlans'] = new stdClass(); }