mirror of https://github.com/jetkvm/kvm.git
revert to default config if config is invalid
This commit is contained in:
parent
f452e6b4c4
commit
abb8c4f0b5
14
config.go
14
config.go
|
|
@ -246,17 +246,25 @@ func LoadConfig() {
|
|||
}
|
||||
|
||||
func SaveConfig() error {
|
||||
return saveConfig(configPath)
|
||||
}
|
||||
|
||||
func SaveBackupConfig() error {
|
||||
return saveConfig(configPath + ".bak")
|
||||
}
|
||||
|
||||
func saveConfig(path string) error {
|
||||
configLock.Lock()
|
||||
defer configLock.Unlock()
|
||||
|
||||
logger.Trace().Str("path", configPath).Msg("Saving config")
|
||||
logger.Trace().Str("path", path).Msg("Saving config")
|
||||
|
||||
// fixup old keyboard layout value
|
||||
if config.KeyboardLayout == "en_US" {
|
||||
config.KeyboardLayout = "en-US"
|
||||
}
|
||||
|
||||
file, err := os.Create(configPath)
|
||||
file, err := os.Create(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create config file: %w", err)
|
||||
}
|
||||
|
|
@ -272,7 +280,7 @@ func SaveConfig() error {
|
|||
return fmt.Errorf("failed to wite config: %w", err)
|
||||
}
|
||||
|
||||
logger.Info().Str("path", configPath).Msg("config saved")
|
||||
logger.Info().Str("path", path).Msg("config saved")
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
31
network.go
31
network.go
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/jetkvm/kvm/internal/confparser"
|
||||
"github.com/jetkvm/kvm/internal/mdns"
|
||||
"github.com/jetkvm/kvm/internal/network/types"
|
||||
"github.com/jetkvm/kvm/pkg/nmlite"
|
||||
|
|
@ -73,9 +74,27 @@ func networkStateChanged(iface string, state *types.InterfaceState) {
|
|||
}
|
||||
}
|
||||
|
||||
func validateNetworkConfig() {
|
||||
err := confparser.SetDefaultsAndValidate(config.NetworkConfig)
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
networkLogger.Error().Err(err).Msg("failed to validate config, reverting to default config")
|
||||
SaveBackupConfig()
|
||||
|
||||
// do not use a pointer to the default config
|
||||
// it has been already changed during LoadConfig
|
||||
config.NetworkConfig = &(types.NetworkConfig{})
|
||||
SaveConfig()
|
||||
}
|
||||
|
||||
func initNetwork() error {
|
||||
ensureConfigLoaded()
|
||||
|
||||
// validate the config, if it's invalid, revert to the default config and save the backup
|
||||
validateNetworkConfig()
|
||||
|
||||
networkManager = nmlite.NewNetworkManager(context.Background(), networkLogger)
|
||||
networkManager.SetOnInterfaceStateChange(networkStateChanged)
|
||||
if err := networkManager.AddInterface(NetIfName, config.NetworkConfig); err != nil {
|
||||
|
|
@ -97,13 +116,18 @@ func rpcGetNetworkSettings() *RpcNetworkSettings {
|
|||
func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, error) {
|
||||
netConfig := settings.ToNetworkConfig()
|
||||
|
||||
networkLogger.Debug().Interface("newConfig", netConfig).Interface("config", settings).Msg("setting new config")
|
||||
l := networkLogger.With().
|
||||
Str("interface", NetIfName).
|
||||
Interface("newConfig", netConfig).
|
||||
Logger()
|
||||
|
||||
l.Debug().Msg("setting new config")
|
||||
|
||||
s := networkManager.SetInterfaceConfig(NetIfName, netConfig)
|
||||
if s != nil {
|
||||
return nil, s
|
||||
}
|
||||
networkLogger.Debug().Interface("newConfig", netConfig).Interface("config", settings).Msg("new config")
|
||||
l.Debug().Msg("new config applied")
|
||||
|
||||
newConfig, err := networkManager.GetInterfaceConfig(NetIfName)
|
||||
if err != nil {
|
||||
|
|
@ -111,8 +135,7 @@ func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, er
|
|||
}
|
||||
config.NetworkConfig = newConfig
|
||||
|
||||
networkLogger.Debug().Interface("newConfig", newConfig).Interface("config", settings).Msg("saving config")
|
||||
|
||||
l.Debug().Msg("saving new config")
|
||||
if err := SaveConfig(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue