summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2019-11-11 16:03:16 -0500
committerDave Henderson <dhenderson@gmail.com>2020-05-03 22:12:08 -0400
commit7ff174a86a935191a684f0c63f9e2a48058fabfb (patch)
tree00f59ab63d0e581d821307df57abd5cb6f2986c0 /data
parent8c8287777495dbb1e2b24e570db0bd504bf18372 (diff)
Support a config file to use instead of commandline arguments
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'data')
-rw-r--r--data/datasource.go24
-rw-r--r--data/datasource_test.go69
2 files changed, 93 insertions, 0 deletions
diff --git a/data/datasource.go b/data/datasource.go
index 1fcccf98..456b5a12 100644
--- a/data/datasource.go
+++ b/data/datasource.go
@@ -16,6 +16,7 @@ import (
"github.com/pkg/errors"
+ "github.com/hairyhenderson/gomplate/v3/internal/config"
"github.com/hairyhenderson/gomplate/v3/libkv"
"github.com/hairyhenderson/gomplate/v3/vault"
)
@@ -125,6 +126,29 @@ func NewData(datasourceArgs, headerArgs []string) (*Data, error) {
return data, nil
}
+// FromConfig - internal use only!
+func FromConfig(cfg *config.Config) *Data {
+ sources := map[string]*Source{}
+ for alias, d := range cfg.DataSources {
+ sources[alias] = &Source{
+ Alias: alias,
+ URL: d.URL,
+ header: d.Header,
+ }
+ }
+ for alias, d := range cfg.Context {
+ sources[alias] = &Source{
+ Alias: alias,
+ URL: d.URL,
+ header: d.Header,
+ }
+ }
+ return &Data{
+ Sources: sources,
+ extraHeaders: cfg.ExtraHeaders,
+ }
+}
+
// Source - a data source
type Source struct {
Alias string
diff --git a/data/datasource_test.go b/data/datasource_test.go
index cdef3945..6752d9e5 100644
--- a/data/datasource_test.go
+++ b/data/datasource_test.go
@@ -2,6 +2,7 @@ package data
import (
"fmt"
+ "net/http"
"net/url"
"os"
"path/filepath"
@@ -9,6 +10,7 @@ import (
"strings"
"testing"
+ "github.com/hairyhenderson/gomplate/v3/internal/config"
"github.com/spf13/afero"
"github.com/stretchr/testify/assert"
@@ -455,3 +457,70 @@ func TestAbsFileURL(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, expected, u)
}
+
+func TestFromConfig(t *testing.T) {
+ cfg := &config.Config{}
+ expected := &Data{
+ Sources: map[string]*Source{},
+ }
+ assert.EqualValues(t, expected, FromConfig(cfg))
+
+ cfg = &config.Config{
+ DataSources: map[string]config.DSConfig{
+ "foo": {
+ URL: mustParseURL("http://example.com"),
+ },
+ },
+ }
+ expected = &Data{
+ Sources: map[string]*Source{
+ "foo": {
+ Alias: "foo",
+ URL: mustParseURL("http://example.com"),
+ },
+ },
+ }
+ assert.EqualValues(t, expected, FromConfig(cfg))
+
+ cfg = &config.Config{
+ DataSources: map[string]config.DSConfig{
+ "foo": {
+ URL: mustParseURL("http://foo.com"),
+ },
+ },
+ Context: map[string]config.DSConfig{
+ "bar": {
+ URL: mustParseURL("http://bar.com"),
+ Header: http.Header{
+ "Foo": []string{"bar"},
+ },
+ },
+ },
+ ExtraHeaders: map[string]http.Header{
+ "baz": {
+ "Foo": []string{"bar"},
+ },
+ },
+ }
+ expected = &Data{
+ Sources: map[string]*Source{
+ "foo": {
+ Alias: "foo",
+ URL: mustParseURL("http://foo.com"),
+ },
+ "bar": {
+ Alias: "bar",
+ URL: mustParseURL("http://bar.com"),
+ header: http.Header{
+ "Foo": []string{"bar"},
+ },
+ },
+ },
+ extraHeaders: map[string]http.Header{
+ "baz": {
+ "Foo": []string{"bar"},
+ },
+ },
+ }
+ assert.EqualValues(t, expected, FromConfig(cfg))
+}