diff --git a/cmd/kvm/main.go b/cmd/kvm/main.go index 1bca581..9aa12e9 100644 --- a/cmd/kvm/main.go +++ b/cmd/kvm/main.go @@ -12,8 +12,16 @@ import ( log "github.com/sirupsen/logrus" ) +const ConfigFile = "/etc/rkkvm/rkkvm.yml" + func main() { - config.Init() + if err := config.Load(ConfigFile); err != nil { + config.Init() + if err = config.Save(ConfigFile); err != nil { + log.Error(err) + } + } + cfg := config.Get() lvl, err := log.ParseLevel(cfg.LogLevel) if err == nil { diff --git a/config/config.go b/config/config.go index 49798e5..2195faf 100644 --- a/config/config.go +++ b/config/config.go @@ -2,7 +2,10 @@ package config import ( "fmt" + "os" "strings" + + "gopkg.in/yaml.v3" ) type Config struct { @@ -107,3 +110,34 @@ func Init() { NanoKVMUISupport: true, } } + +func Load(fname string) error { + yamlData, err := os.ReadFile(fname) + if err != nil { + return fmt.Errorf("config: couldn't read config file: %w", err) + } + + var cfg Config + err = yaml.Unmarshal(yamlData, &cfg) + if err != nil { + return fmt.Errorf("config: couldn't parse config file: %w", err) + } + + c = cfg + + return nil +} + +func Save(fname string) error { + data, err := yaml.Marshal(c) + if err != nil { + return fmt.Errorf("config: failed to marshal config: %w", err) + } + + err = os.WriteFile(fname, data, 0o660) + if err != nil { + return fmt.Errorf("config: failed to write config: %w", err) + } + + return nil +} diff --git a/docker-compose.yml b/docker-compose.yml index 1966cc0..03df46f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,7 @@ services: - /sys/kernel/config:/sys/kernel/config - ./test_data:/data - /dev:/dev # required, if you will use Mass-Storage-Device + - ./test_data/config:/etc/rkkvm #devices: #- /dev/hidg0 #- /dev/hidg1