- Go Agent (FreeBSD/amd64) fuer OPNsense - Go Backend (Linux/amd64) mit REST API + SQLite - Collector: Hardware, CPU, Memory, Disks, Network, Services, WireGuard, DHCP (KEA/ISC/dnsmasq), Routes, Gateways, Certificates, Plugins, Updates - Persistente Agent-ID - TLS + API-Key Auth - WebSocket-Infrastruktur (WIP): bidirektionaler Command-Kanal, TCP-Tunnel fuer Remote-Zugriff auf Firewall-WebUI - Lastenheft und README
50 lines
905 B
Go
50 lines
905 B
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type Config struct {
|
|
ListenAddr string `yaml:"listen_addr"`
|
|
TLSCert string `yaml:"tls_cert"`
|
|
TLSKey string `yaml:"tls_key"`
|
|
APIKeys []string `yaml:"api_keys"`
|
|
DBPath string `yaml:"db_path"`
|
|
}
|
|
|
|
func Load(path string) (*Config, error) {
|
|
cfg := &Config{
|
|
ListenAddr: ":8443",
|
|
TLSCert: "certs/server.crt",
|
|
TLSKey: "certs/server.key",
|
|
DBPath: "rmm.db",
|
|
}
|
|
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Env overrides
|
|
if v := os.Getenv("RMM_LISTEN_ADDR"); v != "" {
|
|
cfg.ListenAddr = v
|
|
}
|
|
if v := os.Getenv("RMM_TLS_CERT"); v != "" {
|
|
cfg.TLSCert = v
|
|
}
|
|
if v := os.Getenv("RMM_TLS_KEY"); v != "" {
|
|
cfg.TLSKey = v
|
|
}
|
|
if v := os.Getenv("RMM_DB_PATH"); v != "" {
|
|
cfg.DBPath = v
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|