Skip to content

Instantly share code, notes, and snippets.

@alex-leonhardt
Created May 5, 2018 22:29
Show Gist options
  • Save alex-leonhardt/d29d708d556eb5d885ac61d443d2f66f to your computer and use it in GitHub Desktop.
Save alex-leonhardt/d29d708d556eb5d885ac61d443d2f66f to your computer and use it in GitHub Desktop.
func renderFile(d *schema.ResourceData) (string, error) {
var err error
tf := template.FuncMap{
"isInt": func(i interface{}) bool {
v := reflect.ValueOf(i)
switch v.Kind() {
case reflect.Int, reflect.Int8, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64:
return true
default:
return false
}
},
"isString": func(i interface{}) bool {
v := reflect.ValueOf(i)
switch v.Kind() {
case reflect.String:
return true
default:
return false
}
},
"isSlice": func(i interface{}) bool {
v := reflect.ValueOf(i)
switch v.Kind() {
case reflect.Slice:
return true
default:
return false
}
},
"isArray": func(i interface{}) bool {
v := reflect.ValueOf(i)
switch v.Kind() {
case reflect.Array:
return true
default:
return false
}
},
"isMap": func(i interface{}) bool {
v := reflect.ValueOf(i)
switch v.Kind() {
case reflect.Map:
return true
default:
return false
}
},
}
var data string // data from tf
data = d.Get("data").(string)
// unmarshal json from data into m
var m = make(map[string]interface{}) // unmarshal data into m
if err = json.Unmarshal([]byte(data), &m); err != nil {
panic(err)
}
templateFile := d.Get("template").(string)
t, err := template.ParseFiles(templateFile)
if err != nil {
panic(err)
}
var contents bytes.Buffer // io.writer for template.Execute
tt := t.Funcs(tf)
if tt != nil {
err = tt.Execute(&contents, m)
if err != nil {
return "", templateRenderError(fmt.Errorf("failed to render %v", err))
}
} else {
return "", templateRenderError(fmt.Errorf("error: %v", err))
}
return contents.String(), nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment