Files
nixpkgs/pkgs/servers/monitoring/prometheus/idrac-exporter/config-from-environment.patch
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

101 lines
2.6 KiB
Diff

diff --git a/internal/config/config.go b/internal/config/config.go
index ba8f066..1c801cd 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -2,8 +2,11 @@ package config
import (
"encoding/base64"
+ "fmt"
"os"
+ "strconv"
"sync"
+
"github.com/mrlhansen/idrac_exporter/internal/logging"
"gopkg.in/yaml.v2"
)
@@ -17,9 +20,9 @@ type HostConfig struct {
type RootConfig struct {
mutex sync.Mutex
- Address string `yaml:"address"`
- Port uint `yaml:"port"`
- MetricsPrefix string `yaml:"metrics_prefix"`
+ Address string `yaml:"address"`
+ Port uint `yaml:"port"`
+ MetricsPrefix string `yaml:"metrics_prefix"`
Collect struct {
System bool `yaml:"system"`
Sensors bool `yaml:"sensors"`
@@ -28,9 +31,29 @@ type RootConfig struct {
Storage bool `yaml:"storage"`
Memory bool `yaml:"memory"`
} `yaml:"metrics"`
- Timeout uint `yaml:"timeout"`
- Retries uint `yaml:"retries"`
- Hosts map[string]*HostConfig `yaml:"hosts"`
+ Timeout uint `yaml:"timeout"`
+ Retries uint `yaml:"retries"`
+ Hosts map[string]*HostConfig `yaml:"hosts"`
+}
+
+func getEnv(envvar string, defvalue string) string {
+ value := os.Getenv(envvar)
+ if len(value) == 0 {
+ return defvalue
+ }
+ return value
+}
+
+func getEnvUint(envvar string, defvalue uint) uint {
+ value, err := strconv.Atoi(getEnv(envvar, fmt.Sprint(defvalue)))
+ if err != nil {
+ logging.Fatalf("Failed parse integer value: %s", err)
+ }
+ if value == 0 {
+ return defvalue
+ }
+
+ return uint(value)
}
func (config *RootConfig) GetHostCfg(target string) *HostConfig {
@@ -70,29 +93,29 @@ func ReadConfigFile(fileName string) {
}
if Config.Address == "" {
- Config.Address = "0.0.0.0"
+ Config.Address = getEnv("IDRAC_EXPORTER_LISTEN_ADDRESS", "0.0.0.0")
}
if Config.Port == 0 {
- Config.Port = 9348
+ Config.Port = getEnvUint("IDRAC_EXPORTER_LISTEN_PORT", 9348)
}
if Config.Timeout == 0 {
- Config.Timeout = 10
+ Config.Timeout = getEnvUint("IDRAC_EXPORTER_TIMEOUT", 10)
}
if Config.Retries == 0 {
- Config.Retries = 1
+ Config.Retries = getEnvUint("IDRAC_EXPORTER_RETRIES", 1)
+ }
+
+ if Config.MetricsPrefix == "" {
+ Config.MetricsPrefix = getEnv("IDRAC_EXPORTER_PREFIX", "idrac")
}
if len(Config.Hosts) == 0 {
parseError("missing section", "hosts")
}
- if Config.MetricsPrefix == "" {
- Config.MetricsPrefix = "idrac"
- }
-
for k, v := range Config.Hosts {
if v.Username == "" {
parseError("missing username for host", k)