1
0
mirror of https://github.com/rancher/os.git synced 2025-09-01 14:48:55 +00:00

Simplify configuration

This commit is contained in:
Josh Curl
2016-05-31 14:34:04 -07:00
parent 00824cebca
commit 95d8ebe146
13 changed files with 193 additions and 605 deletions

View File

@@ -3,15 +3,12 @@ package util
import (
"bytes"
"io"
"io/ioutil"
"os"
"strings"
yaml "github.com/cloudfoundry-incubator/candiedyaml"
log "github.com/Sirupsen/logrus"
"reflect"
)
type AnyMap map[interface{}]interface{}
@@ -91,56 +88,7 @@ func Copy(d interface{}) interface{} {
}
}
func Replace(l, r interface{}) interface{} {
return r
}
func Equal(l, r interface{}) interface{} {
if reflect.DeepEqual(l, r) {
return l
}
return nil
}
func Filter(xs []interface{}, p func(x interface{}) bool) []interface{} {
return FlatMap(xs, func(x interface{}) []interface{} {
if p(x) {
return []interface{}{x}
}
return []interface{}{}
})
}
func FilterStrings(xs []string, p func(x string) bool) []string {
return FlatMapStrings(xs, func(x string) []string {
if p(x) {
return []string{x}
}
return []string{}
})
}
func Map(xs []interface{}, f func(x interface{}) interface{}) []interface{} {
return FlatMap(xs, func(x interface{}) []interface{} { return []interface{}{f(x)} })
}
func FlatMap(xs []interface{}, f func(x interface{}) []interface{}) []interface{} {
result := []interface{}{}
for _, x := range xs {
result = append(result, f(x)...)
}
return result
}
func FlatMapStrings(xs []string, f func(x string) []string) []string {
result := []string{}
for _, x := range xs {
result = append(result, f(x)...)
}
return result
}
func MapsUnion(left, right map[interface{}]interface{}) map[interface{}]interface{} {
func Merge(left, right map[interface{}]interface{}) map[interface{}]interface{} {
result := MapCopy(left)
for k, r := range right {
@@ -149,12 +97,12 @@ func MapsUnion(left, right map[interface{}]interface{}) map[interface{}]interfac
case map[interface{}]interface{}:
switch r := r.(type) {
case map[interface{}]interface{}:
result[k] = MapsUnion(l, r)
result[k] = Merge(l, r)
default:
result[k] = Replace(l, r)
result[k] = r
}
default:
result[k] = Replace(l, r)
result[k] = r
}
} else {
result[k] = Copy(r)
@@ -164,66 +112,6 @@ func MapsUnion(left, right map[interface{}]interface{}) map[interface{}]interfac
return result
}
func MapsDifference(left, right map[interface{}]interface{}) map[interface{}]interface{} {
result := map[interface{}]interface{}{}
for k, l := range left {
if r, ok := right[k]; ok {
switch l := l.(type) {
case map[interface{}]interface{}:
switch r := r.(type) {
case map[interface{}]interface{}:
if len(l) == 0 && len(r) == 0 {
continue
} else if len(l) == 0 {
result[k] = l
} else if v := MapsDifference(l, r); len(v) > 0 {
result[k] = v
}
default:
if v := Equal(l, r); v == nil {
result[k] = l
}
}
default:
if v := Equal(l, r); v == nil {
result[k] = l
}
}
} else {
result[k] = l
}
}
return result
}
func MapsIntersection(left, right map[interface{}]interface{}) map[interface{}]interface{} {
result := map[interface{}]interface{}{}
for k, l := range left {
if r, ok := right[k]; ok {
switch l := l.(type) {
case map[interface{}]interface{}:
switch r := r.(type) {
case map[interface{}]interface{}:
result[k] = MapsIntersection(l, r)
default:
if v := Equal(l, r); v != nil {
result[k] = v
}
}
default:
if v := Equal(l, r); v != nil {
result[k] = v
}
}
}
}
return result
}
func MapCopy(data map[interface{}]interface{}) map[interface{}]interface{} {
result := map[interface{}]interface{}{}
for k, v := range data {
@@ -240,6 +128,16 @@ func SliceCopy(data []interface{}) []interface{} {
return result
}
func RemoveString(slice []string, s string) []string {
result := []string{}
for _, elem := range slice {
if elem != s {
result = append(result, elem)
}
}
return result
}
func ToStrings(data []interface{}) []string {
result := make([]string, len(data), len(data))
for k, v := range data {
@@ -248,18 +146,6 @@ func ToStrings(data []interface{}) []string {
return result
}
func DirLs(dir string) ([]interface{}, error) {
result := []interface{}{}
files, err := ioutil.ReadDir(dir)
if err != nil {
return result, err
}
for _, f := range files {
result = append(result, f)
}
return result, nil
}
func Map2KVPairs(m map[string]string) []string {
r := make([]string, 0, len(m))
for k, v := range m {