feat: load config file from url (#1207)

Signed-off-by: DiniFarb <andreas.vogt89@bluewin.ch>
This commit is contained in:
DiniFarb
2023-07-10 20:58:19 +02:00
committed by Ben Reedy
parent 10e42d3583
commit 19794ad2e0

View File

@@ -15,6 +15,9 @@ package config
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"github.com/alecthomas/kingpin/v2"
@@ -35,17 +38,35 @@ type Resolver struct {
// NewResolver returns a Resolver structure.
func NewResolver(file string, logger log.Logger) (*Resolver, error) {
flags := map[string]string{}
_ = level.Info(logger).Log("msg", fmt.Sprintf("Loading configuration file: %v", file))
if _, err := os.Stat(file); err != nil {
return nil, err
}
b, err := os.ReadFile(file)
var fileBytes []byte
url, err := url.ParseRequestURI(file)
if err != nil {
return nil, err
}
if url.Scheme == "http" || url.Scheme == "https" {
_ = level.Info(logger).Log("msg", fmt.Sprintf("Loading configuration file from URL: %v", file))
resp, err := http.Get(file)
if err != nil {
return nil, err
}
defer resp.Body.Close()
fileBytes, err = io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
} else {
_ = level.Info(logger).Log("msg", fmt.Sprintf("Loading configuration file: %v", file))
if _, err := os.Stat(file); err != nil {
return nil, err
}
fileBytes, err = os.ReadFile(file)
if err != nil {
return nil, err
}
}
var rawValues map[string]interface{}
err = yaml.Unmarshal(b, &rawValues)
err = yaml.Unmarshal(fileBytes, &rawValues)
if err != nil {
return nil, err
}