All further kontemplate source code changes and releases will happen under the GPLv3. Previous releases are still available under the MIT license.
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (C) 2016-2017  Vincent Ambo <mail@tazj.in>
 | 
						|
//
 | 
						|
// 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 util
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"fmt"
 | 
						|
	"io/ioutil"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/ghodss/yaml"
 | 
						|
)
 | 
						|
 | 
						|
// Filenames excluded from templating for the purpose of containing default variable values inside a resource set.
 | 
						|
var DefaultFilenames []string = []string{"default.yml", "default.yaml", "default.json"}
 | 
						|
 | 
						|
// Merges two maps together. Values from the second map override values in the first map.
 | 
						|
// The returned map is new if anything was changed.
 | 
						|
func Merge(in1 *map[string]interface{}, in2 *map[string]interface{}) *map[string]interface{} {
 | 
						|
	if in1 == nil || len(*in1) == 0 {
 | 
						|
		return in2
 | 
						|
	}
 | 
						|
 | 
						|
	if in2 == nil || len(*in2) == 0 {
 | 
						|
		return in1
 | 
						|
	}
 | 
						|
 | 
						|
	new := make(map[string]interface{})
 | 
						|
	for k, v := range *in1 {
 | 
						|
		new[k] = v
 | 
						|
	}
 | 
						|
 | 
						|
	for k, v := range *in2 {
 | 
						|
		new[k] = v
 | 
						|
	}
 | 
						|
 | 
						|
	return &new
 | 
						|
}
 | 
						|
 | 
						|
// Loads either a YAML or JSON file from the specified path and deserialises it into the provided interface.
 | 
						|
func LoadJsonOrYaml(filename string, addr interface{}) error {
 | 
						|
	file, err := ioutil.ReadFile(filename)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	if strings.HasSuffix(filename, "json") {
 | 
						|
		err = json.Unmarshal(file, addr)
 | 
						|
	} else if strings.HasSuffix(filename, "yaml") || strings.HasSuffix(filename, "yml") {
 | 
						|
		err = yaml.Unmarshal(file, addr)
 | 
						|
	} else {
 | 
						|
		return fmt.Errorf("File format not supported. Must be JSON or YAML.")
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 |