diff options
author | Vincent Ambo <tazjin@gmail.com> | 2017-06-22T15·01+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2017-07-03T12·27+0200 |
commit | 9d26c17f13240479ef3e12e9182aca3ac2e61901 (patch) | |
tree | 9ead86ab4028e81b4413a63d65908b355ba53e42 /context/context.go | |
parent | 68e1e484594aa86a874c6eb2ad328274c5f48dd7 (diff) |
feat context: Add ability to import extra variables from files
Kontemplate context specifications can now load extra variables from YAML or JSON files by specifying a list of files (relative to the context file) under the `import` key.
Diffstat (limited to 'context/context.go')
-rw-r--r-- | context/context.go | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/context/context.go b/context/context.go index 0dde5905561d..c812af8b26f7 100644 --- a/context/context.go +++ b/context/context.go @@ -17,10 +17,11 @@ type ResourceSet struct { } type Context struct { - Name string `json:"context"` - Global map[string]interface{} `json:"global"` - ResourceSets []ResourceSet `json:"include"` - BaseDir string + Name string `json:"context"` + Global map[string]interface{} `json:"global"` + ResourceSets []ResourceSet `json:"include"` + VariableImports []string `json:"import"` + BaseDir string } type ContextLoadingError struct { @@ -44,9 +45,34 @@ func LoadContextFromFile(filename string) (*Context, error) { c.BaseDir = path.Dir(filename) c.ResourceSets = loadAllDefaultValues(&c) + err = c.loadImportedVariables() + if err != nil { + return nil, meep.New( + &ContextLoadingError{Filename: filename}, + meep.Cause(err), + ) + } + return &c, nil } +// Kontemplate supports specifying additional variable files with the `import` keyword. This function loads those +// variable files and merges them together with the context's other global variables. +func (ctx *Context) loadImportedVariables() error { + for _, file := range ctx.VariableImports { + var importedVars map[string]interface{} + err := util.LoadJsonOrYaml(path.Join(ctx.BaseDir, file), &importedVars) + + if err != nil { + return err + } + + ctx.Global = *util.Merge(&ctx.Global, &importedVars) + } + + return nil +} + // Flattens resource set collections, i.e. resource sets that themselves have an additional 'include' field set. // Those will be regarded as a short-hand for including multiple resource sets from a subfolder. // See https://github.com/tazjin/kontemplate/issues/9 for more information. |