From 53e2e1f48c1c8b930334cb6444ad140e4f59615f Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Sun, 2 Apr 2023 02:44:21 +0200 Subject: [PATCH] Write Config Changes to Disk --- internal/config/apply.go | 11 +++++++++++ internal/config/discard.go | 10 ++++++++++ internal/config/save.go | 23 +++++++++++++++++++++++ internal/config/transaction.go | 5 +++++ 4 files changed, 49 insertions(+) create mode 100644 internal/config/save.go diff --git a/internal/config/apply.go b/internal/config/apply.go index fa2f81e..6e49265 100644 --- a/internal/config/apply.go +++ b/internal/config/apply.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "os" "golang.org/x/exp/slog" "nfsense.net/nfsense/internal/definitions" @@ -23,6 +24,16 @@ func (m *ConfigManager) ApplyPendingChanges() error { return err } } + m.currentConfig = m.pendingConfig.Clone() + + err := m.saveConfig(m.currentConfigFilePath, m.pendingConfig) + if err != nil { + return fmt.Errorf("Save Current Config: %w", err) + } + err = os.Remove(m.pendingConfigFilePath) + if err != nil { + return fmt.Errorf("Delete Pending Config: %w", err) + } return nil } diff --git a/internal/config/discard.go b/internal/config/discard.go index 2d4f230..f4163ae 100644 --- a/internal/config/discard.go +++ b/internal/config/discard.go @@ -1,6 +1,16 @@ package config +import ( + "errors" + "os" +) + func (m *ConfigManager) DiscardPendingConfig() error { m.pendingConfig = m.currentConfig.Clone() + + err := os.Remove(m.pendingConfigFilePath) + if !errors.Is(err, os.ErrNotExist) { + return err + } return nil } diff --git a/internal/config/save.go b/internal/config/save.go new file mode 100644 index 0000000..2e526c0 --- /dev/null +++ b/internal/config/save.go @@ -0,0 +1,23 @@ +package config + +import ( + "encoding/json" + "fmt" + "io/ioutil" + + "nfsense.net/nfsense/internal/definitions" +) + +func (m *ConfigManager) saveConfig(path string, conf *definitions.Config) error { + data, err := json.MarshalIndent(conf, "", " ") + if err != nil { + return fmt.Errorf("Marshal Config: %w", err) + } + + err = ioutil.WriteFile(path, data, 0644) + if err != nil { + return fmt.Errorf("Write Config: %w", err) + } + + return nil +} diff --git a/internal/config/transaction.go b/internal/config/transaction.go index 9d3e2eb..f9c8fdb 100644 --- a/internal/config/transaction.go +++ b/internal/config/transaction.go @@ -39,6 +39,11 @@ func (t *ConfigTransaction) Commit() error { return fmt.Errorf("validating Config before Apply: %w", err) } + err = t.configManager.saveConfig(t.configManager.pendingConfigFilePath, t.changes) + if err != nil { + return fmt.Errorf("Save Current Config: %w", err) + } + t.configManager.pendingConfig = t.changes.Clone() return nil