mirror of
https://github.com/rancher/os.git
synced 2025-09-01 14:48:55 +00:00
Simplify configuration
This commit is contained in:
142
util/util.go
142
util/util.go
@@ -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 {
|
||||
|
Reference in New Issue
Block a user