diff options
| author | jeevansai <jeevansai502@gmail.com> | 2022-02-05 19:52:00 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-05 09:22:00 -0500 |
| commit | 0ca223237a0714eebe4e8f3da10e09031999537f (patch) | |
| tree | 0d0d45c2905558545e866939b72b41b12992dcca | |
| parent | d3a425a554342986cf20dd70e6327e0598dcfd91 (diff) | |
Add function to list datasources (#1287)
* Add function to list datasources
* Sort datasources in ascending order and return in listDatasources
* Fix lint error
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Co-authored-by: Dave Henderson <dhenderson@gmail.com>
| -rw-r--r-- | data/datasource.go | 11 | ||||
| -rw-r--r-- | data/datasource_test.go | 10 | ||||
| -rw-r--r-- | docs-src/content/functions/data.yml | 9 | ||||
| -rw-r--r-- | docs/content/functions/data.md | 18 | ||||
| -rw-r--r-- | funcs/data.go | 1 |
5 files changed, 49 insertions, 0 deletions
diff --git a/data/datasource.go b/data/datasource.go index 5f684a4c..79c29e5f 100644 --- a/data/datasource.go +++ b/data/datasource.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "path/filepath" + "sort" "strings" "github.com/spf13/afero" @@ -382,3 +383,13 @@ func (d *Data) readSource(ctx context.Context, source *Source, args ...string) ( d.cache[cacheKey] = data return data, nil } + +// Show all datasources - +func (d *Data) ListDatasources() []string { + datasources := make([]string, 0, len(d.Sources)) + for source := range d.Sources { + datasources = append(datasources, source) + } + sort.Strings(datasources) + return datasources +} diff --git a/data/datasource_test.go b/data/datasource_test.go index 4cffc763..aadcef0e 100644 --- a/data/datasource_test.go +++ b/data/datasource_test.go @@ -412,3 +412,13 @@ func TestFromConfig(t *testing.T) { } assert.EqualValues(t, expected, FromConfig(ctx, cfg)) } + +func TestListDatasources(t *testing.T) { + sources := map[string]*Source{ + "foo": {Alias: "foo"}, + "bar": {Alias: "bar"}, + } + data := &Data{Sources: sources} + + assert.Equal(t, []string{"bar", "foo"}, data.ListDatasources()) +} diff --git a/docs-src/content/functions/data.yml b/docs-src/content/functions/data.yml index 15106372..8fa47736 100644 --- a/docs-src/content/functions/data.yml +++ b/docs-src/content/functions/data.yml @@ -62,6 +62,15 @@ funcs: - | $ gomplate -i '{{if (datasourceReachable "test")}}{{datasource "test"}}{{else}}no worries{{end}}' -d test=https://bogus.example.com/wontwork.json no worries + - name: listDatasources + description: | + Lists all the datasources defined, list returned will be sorted in ascending order. + pipeline: false + examples: + - | + $ gomplate -d person=env:///FOO -d bar=env:///BAR -i '{{range (listDatasources)}} Datasource-{{.}} {{end}}' + Datasource-bar + Datasource-person - name: defineDatasource description: | Define a datasource alias with target URL inside the template. Overridden by the [`--datasource/-d`](../../usage/#datasource-d) flag. diff --git a/docs/content/functions/data.md b/docs/content/functions/data.md index 4845de60..31d2b27c 100644 --- a/docs/content/functions/data.md +++ b/docs/content/functions/data.md @@ -97,6 +97,24 @@ $ gomplate -i '{{if (datasourceReachable "test")}}{{datasource "test"}}{{else}}n no worries ``` +## `listDatasources` + +Lists all the datasources defined, list returned will be sorted in ascending order. + +### Usage + +```go +listDatasources +``` + +### Examples + +```console +$ gomplate -d person=env:///FOO -d bar=env:///BAR -i '{{range (listDatasources)}} Datasource-{{.}} {{end}}' +Datasource-bar +Datasource-person +``` + ## `defineDatasource` Define a datasource alias with target URL inside the template. Overridden by the [`--datasource/-d`](../../usage/#datasource-d) flag. diff --git a/funcs/data.go b/funcs/data.go index a6e48ba3..f4ae7b32 100644 --- a/funcs/data.go +++ b/funcs/data.go @@ -30,6 +30,7 @@ func CreateDataFuncs(ctx context.Context, d *data.Data) map[string]interface{} { f["datasourceReachable"] = d.DatasourceReachable f["defineDatasource"] = d.DefineDatasource f["include"] = d.Include + f["listDatasources"] = d.ListDatasources ns := &DataFuncs{ctx} |
