refactor(templater): Pass resource set path to insertFile function
This is actually several refactors in one: * rename "fileContent" function to "insertFile" * pass the resource set path to the "insetFile" function * update docs and example with a pipeline including indentation adjustments for the inserted file
This commit is contained in:
parent
bafb792339
commit
b8722ce83b
4 changed files with 26 additions and 33 deletions
|
@ -74,9 +74,10 @@ Some template functions come from Go's standard library and are listed in the
|
||||||
[Go documentation][]. In addition the functions declared by [sprig][] are
|
[Go documentation][]. In addition the functions declared by [sprig][] are
|
||||||
available in kontemplate, as well as three custom functions:
|
available in kontemplate, as well as three custom functions:
|
||||||
|
|
||||||
`json`: Encodes any supplied data structure as JSON.
|
* `json`: Encodes any supplied data structure as JSON.
|
||||||
`passLookup`: Looks up the supplied key in [pass][].
|
* `passLookup`: Looks up the supplied key in [pass][].
|
||||||
`fromFile`: Insert the contents of the given file from the resource set folder.
|
* `insertFile`: Insert the contents of the given file in the resource
|
||||||
|
set folder as a string.
|
||||||
|
|
||||||
## Examples:
|
## Examples:
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,18 @@ kind: Secret
|
||||||
metadata:
|
metadata:
|
||||||
name: secret-certificate
|
name: secret-certificate
|
||||||
data:
|
data:
|
||||||
cert.pem: {{ passLookup "my/secret/certificate" | b64enc }}
|
cert.pem: { passLookup "my/secret/certificate" | b64enc }}
|
||||||
|
---
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: some-config
|
||||||
|
data:
|
||||||
|
# The content of the example configuration file is templated in here
|
||||||
|
# by the 'insertFile' function and indented for YAML-compatibility
|
||||||
|
# with the 'indent' function:
|
||||||
|
some.cfg: |
|
||||||
|
{{ insertFile "some.cfg" | indent 4 }}
|
||||||
---
|
---
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
|
@ -25,8 +36,6 @@ spec:
|
||||||
value: {{ .importantFeature }}
|
value: {{ .importantFeature }}
|
||||||
- name: SOME_GLOBAL_VAR
|
- name: SOME_GLOBAL_VAR
|
||||||
value: {{ .globalVar }}
|
value: {{ .globalVar }}
|
||||||
- name: FILE_VAR
|
|
||||||
value: {{ fileContent "some-api/filevar.txt" }}
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
// Copyright (C) 2017 Niklas Wik <niklas.wik@nokia.com>
|
|
||||||
//
|
|
||||||
// This file is part of Kontemplate.
|
|
||||||
//
|
|
||||||
// Kontemplate is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
package templater
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io/ioutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
//GetFromFile returns file content as string
|
|
||||||
func GetFromFile(file string) (string, error) {
|
|
||||||
|
|
||||||
data, err := ioutil.ReadFile(file)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return string(data), nil
|
|
||||||
}
|
|
|
@ -119,7 +119,7 @@ func processFiles(c *context.Context, rs *context.ResourceSet, rp string, files
|
||||||
}
|
}
|
||||||
|
|
||||||
func templateFile(c *context.Context, rs *context.ResourceSet, filename string) (string, error) {
|
func templateFile(c *context.Context, rs *context.ResourceSet, filename string) (string, error) {
|
||||||
tpl, err := template.New(path.Base(filename)).Funcs(templateFuncs()).Option(failOnMissingKeys).ParseFiles(filename)
|
tpl, err := template.New(path.Base(filename)).Funcs(templateFuncs(rs)).Option(failOnMissingKeys).ParseFiles(filename)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", meep.New(
|
return "", meep.New(
|
||||||
|
@ -185,7 +185,7 @@ func matchesResourceSet(s *[]string, rs *context.ResourceSet) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func templateFuncs() template.FuncMap {
|
func templateFuncs(rs *context.ResourceSet) template.FuncMap {
|
||||||
m := sprig.TxtFuncMap()
|
m := sprig.TxtFuncMap()
|
||||||
m["json"] = func(data interface{}) string {
|
m["json"] = func(data interface{}) string {
|
||||||
b, _ := json.Marshal(data)
|
b, _ := json.Marshal(data)
|
||||||
|
@ -193,7 +193,14 @@ func templateFuncs() template.FuncMap {
|
||||||
}
|
}
|
||||||
m["passLookup"] = GetFromPass
|
m["passLookup"] = GetFromPass
|
||||||
m["lookupIPAddr"] = GetIPsFromDNS
|
m["lookupIPAddr"] = GetIPsFromDNS
|
||||||
m["fileContent"] = GetFromFile
|
m["insertFile"] = func(file string) (string, error) {
|
||||||
|
data, err := ioutil.ReadFile(path.Join(rs.Path, file))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(data), nil
|
||||||
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue