about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@gmail.com>2018-03-09T13·49+0100
committerVincent Ambo <github@tazj.in>2018-03-09T13·54+0100
commitb8722ce83bce727d88a61cecff3343d3046e75f7 (patch)
treed3ebcea70f8944d70093bf4201dc0f15468909ba
parentbafb792339b5898a0e6b6219ad54b5f501d727c2 (diff)
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
-rw-r--r--docs/templates.md7
-rw-r--r--example/some-api/some-api.yaml15
-rw-r--r--templater/fromfile.go24
-rw-r--r--templater/templater.go13
4 files changed, 26 insertions, 33 deletions
diff --git a/docs/templates.md b/docs/templates.md
index d9ff0fd126e3..11488f573a59 100644
--- a/docs/templates.md
+++ b/docs/templates.md
@@ -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
 available in kontemplate, as well as three custom functions:
 
-`json`: Encodes any supplied data structure as JSON.
-`passLookup`: Looks up the supplied key in [pass][].
-`fromFile`: Insert the contents of the given file from the resource set folder.
+* `json`: Encodes any supplied data structure as JSON.
+* `passLookup`: Looks up the supplied key in [pass][].
+* `insertFile`: Insert the contents of the given file in the resource
+  set folder as a string.
 
 ## Examples:
 
diff --git a/example/some-api/some-api.yaml b/example/some-api/some-api.yaml
index 44b61541744c..887eb69a99cc 100644
--- a/example/some-api/some-api.yaml
+++ b/example/some-api/some-api.yaml
@@ -4,7 +4,18 @@ kind: Secret
 metadata:
   name: secret-certificate
 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
 kind: Deployment
@@ -25,8 +36,6 @@ spec:
               value: {{ .importantFeature }}
             - name: SOME_GLOBAL_VAR
               value: {{ .globalVar }}
-            - name: FILE_VAR
-              value: {{ fileContent "some-api/filevar.txt" }}
 ---
 apiVersion: v1
 kind: Service
diff --git a/templater/fromfile.go b/templater/fromfile.go
deleted file mode 100644
index f4f1e79cbfba..000000000000
--- a/templater/fromfile.go
+++ /dev/null
@@ -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
-}
diff --git a/templater/templater.go b/templater/templater.go
index 5bdb2f2e3bb1..fd514a5ac06f 100644
--- a/templater/templater.go
+++ b/templater/templater.go
@@ -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) {
-	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 {
 		return "", meep.New(
@@ -185,7 +185,7 @@ func matchesResourceSet(s *[]string, rs *context.ResourceSet) bool {
 	return false
 }
 
-func templateFuncs() template.FuncMap {
+func templateFuncs(rs *context.ResourceSet) template.FuncMap {
 	m := sprig.TxtFuncMap()
 	m["json"] = func(data interface{}) string {
 		b, _ := json.Marshal(data)
@@ -193,7 +193,14 @@ func templateFuncs() template.FuncMap {
 	}
 	m["passLookup"] = GetFromPass
 	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
 }