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 {
|
func SaveConfig() error {
|
||||||
|
return saveConfig(configPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveBackupConfig() error {
|
||||||
|
return saveConfig(configPath + ".bak")
|
||||||
|
}
|
||||||
|
|
||||||
|
func saveConfig(path string) error {
|
||||||
configLock.Lock()
|
configLock.Lock()
|
||||||
defer configLock.Unlock()
|
defer configLock.Unlock()
|
||||||
|
|
||||||
logger.Trace().Str("path", configPath).Msg("Saving config")
|
logger.Trace().Str("path", path).Msg("Saving config")
|
||||||
|
|
||||||
// fixup old keyboard layout value
|
// fixup old keyboard layout value
|
||||||
if config.KeyboardLayout == "en_US" {
|
if config.KeyboardLayout == "en_US" {
|
||||||
config.KeyboardLayout = "en-US"
|
config.KeyboardLayout = "en-US"
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := os.Create(configPath)
|
file, err := os.Create(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to create config file: %w", err)
|
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)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
31
network.go
31
network.go
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/jetkvm/kvm/internal/confparser"
|
||||||
"github.com/jetkvm/kvm/internal/mdns"
|
"github.com/jetkvm/kvm/internal/mdns"
|
||||||
"github.com/jetkvm/kvm/internal/network/types"
|
"github.com/jetkvm/kvm/internal/network/types"
|
||||||
"github.com/jetkvm/kvm/pkg/nmlite"
|
"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 {
|
func initNetwork() error {
|
||||||
ensureConfigLoaded()
|
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 = nmlite.NewNetworkManager(context.Background(), networkLogger)
|
||||||
networkManager.SetOnInterfaceStateChange(networkStateChanged)
|
networkManager.SetOnInterfaceStateChange(networkStateChanged)
|
||||||
if err := networkManager.AddInterface(NetIfName, config.NetworkConfig); err != nil {
|
if err := networkManager.AddInterface(NetIfName, config.NetworkConfig); err != nil {
|
||||||
|
|
@ -97,13 +116,18 @@ func rpcGetNetworkSettings() *RpcNetworkSettings {
|
||||||
func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, error) {
|
func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, error) {
|
||||||
netConfig := settings.ToNetworkConfig()
|
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)
|
s := networkManager.SetInterfaceConfig(NetIfName, netConfig)
|
||||||
if s != nil {
|
if s != nil {
|
||||||
return nil, s
|
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)
|
newConfig, err := networkManager.GetInterfaceConfig(NetIfName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -111,8 +135,7 @@ func rpcSetNetworkSettings(settings RpcNetworkSettings) (*RpcNetworkSettings, er
|
||||||
}
|
}
|
||||||
config.NetworkConfig = newConfig
|
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 {
|
if err := SaveConfig(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue