Created
May 5, 2018 22:29
-
-
Save alex-leonhardt/d29d708d556eb5d885ac61d443d2f66f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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