This commit is contained in:
Devdatt Bhatt 2026-06-08 07:36:54 +00:00
parent c4ca0328e6
commit 9b74e8c22f
1 changed files with 23 additions and 33 deletions

View File

@ -38,7 +38,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$network_config[$interface] = $config; $network_config[$interface] = $config;
file_put_contents($config_file, json_encode($network_config, JSON_PRETTY_PRINT)); file_put_contents($config_file, json_encode($network_config, JSON_PRETTY_PRINT));
// Generate netplan configuration // Generate netplan configuration
generate_netplan_config($network_config); generate_netplan_config($network_config);
} elseif ($action === 'toggle') { } elseif ($action === 'toggle') {
@ -54,36 +54,32 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
} }
// Generate netplan configuration file // Generate netplan configuration file
function generate_netplan_config($config) { function generate_netplan_config($config)
{
// Create backup of cloud-init configuration // Create backup of cloud-init configuration
$cloud_init_file = '/etc/netplan/50-cloud-init.yaml'; $cloud_init_file = '/etc/netplan/50-cloud-init.yaml';
$backup_file = '/var/www/50-cloud-init.yaml_backup'; $backup_file = '/var/www/50-cloud-init.yaml_backup';
$source_file = '/var/www/50-cloud-init.yaml'; $source_file = '/var/www/50-cloud-init.yaml';
// Create backup if it doesn't exist exec('sudo cp /etc/netplan/50-cloud-init.yaml /var/www/50-cloud-init.yaml_backup');
if (file_exists($cloud_init_file)) {
if (!file_exists($backup_file)) {
copy($cloud_init_file, $backup_file);
}
// Copy current cloud-init config to source file
copy($cloud_init_file, $source_file);
}
$netplan_content = "network:\n version: 2\n ethernets:\n"; $netplan_content = "network:\n version: 2\n ethernets:\n";
foreach ($config as $interface => $settings) { foreach ($config as $interface => $settings) {
// Skip virtual interfaces and loopback // Skip virtual interfaces and loopback
if (strpos($interface, 'enx') === 0 || if (
strpos($interface, 'docker') === 0 || strpos($interface, 'enx') === 0 ||
strpos($interface, 'br-') === 0 || strpos($interface, 'docker') === 0 ||
strpos($interface, 'veth') === 0 || strpos($interface, 'br-') === 0 ||
$interface === 'lo') { strpos($interface, 'veth') === 0 ||
$interface === 'lo'
) {
continue; continue;
} }
$netplan_content .= " $interface:\n"; $netplan_content .= " $interface:\n";
switch ($settings['method']) { switch ($settings['method']) {
case 'dhcp': case 'dhcp':
$netplan_content .= " dhcp4: true\n"; $netplan_content .= " dhcp4: true\n";
@ -105,25 +101,19 @@ function generate_netplan_config($config) {
} }
// Write to netplan file // Write to netplan file
file_put_contents('/etc/netplan/50-cloud-init.yaml', $netplan_content); file_put_contents('/var/www/50-cloud-init.yaml', $netplan_content);
// Apply netplan configuration with validation // Apply netplan configuration with validation
$output = []; $output = [];
$return_code = 0; $return_code = 0;
// Run netplan try to validate configuration // Run netplan try to validate configuration
exec('sudo cp /var/www/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml', $output, $return_code);
exec('sudo netplan try', $output, $return_code); exec('sudo netplan try', $output, $return_code);
if ($return_code === 0) { if ($return_code !== 0) {
// Configuration is valid, copy to cloud-init file
if (file_exists($source_file)) {
copy($source_file, $cloud_init_file);
}
} else {
// Configuration failed, restore backup
if (file_exists($backup_file)) { if (file_exists($backup_file)) {
copy($backup_file, $cloud_init_file); exec('sudo cp /var/www/50-cloud-init.yaml_backup /etc/netplan/50-cloud-init.yaml', $output, $return_code);
// Re-apply the backup configuration
exec('sudo netplan apply', $output, $return_code); exec('sudo netplan apply', $output, $return_code);
} }
} }