github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/utils/utils.go (about) 1 package utils 2 3 import ( 4 "os" 5 "reflect" 6 "strings" 7 8 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 9 ) 10 11 func DeleteNotPassParams(params *map[string]interface{}, notPassParams []string) { 12 for _, i := range notPassParams { 13 delete(*params, i) 14 } 15 } 16 17 // merges two interfaces. In cases where a value is defined for both 'overridingInterface' and 18 // 'inferiorInterface' the value in 'overridingInterface' will take precedence. 19 func MergeInterfaces(overridingInterface, inferiorInterface interface{}) interface{} { 20 switch overriding := overridingInterface.(type) { 21 case map[string]interface{}: 22 interfaceMap, ok := inferiorInterface.(map[string]interface{}) 23 if !ok { 24 return overriding 25 } 26 for k, v := range interfaceMap { 27 if overridingValue, ok := overriding[k]; ok { 28 overriding[k] = MergeInterfaces(overridingValue, v) 29 } else { 30 overriding[k] = v 31 } 32 } 33 case []interface{}: 34 list, ok := inferiorInterface.([]interface{}) 35 if !ok { 36 return overriding 37 } 38 overriding = append(overriding, list...) 39 return overriding 40 case nil: 41 // mergeClouds(nil, map[string]interface{...}) -> map[string]interface{...} 42 v, ok := inferiorInterface.(map[string]interface{}) 43 if ok { 44 return v 45 } 46 } 47 // We don't want to override with empty values 48 if reflect.DeepEqual(overridingInterface, nil) || reflect.DeepEqual(reflect.Zero(reflect.TypeOf(overridingInterface)).Interface(), overridingInterface) { 49 return inferiorInterface 50 } else { 51 return overridingInterface 52 } 53 } 54 55 func PrependString(item string, slice []string) []string { 56 result := make([]string, len(slice)+1) 57 result[0] = item 58 for i, v := range slice { 59 result[i+1] = v 60 } 61 return result 62 } 63 64 func In(item interface{}, slice interface{}) bool { 65 for _, it := range slice.([]interface{}) { 66 if reflect.DeepEqual(item, it) { 67 return true 68 } 69 } 70 return false 71 } 72 73 // GetRegion returns the region that was specified in the auth options. If a 74 // region was not set it returns value from env OS_REGION_NAME 75 func GetRegion(authOpts golangsdk.AuthOptions) string { 76 name := authOpts.TenantName 77 if name == "" { 78 name = authOpts.DelegatedProject 79 } 80 region := strings.Split(name, "_")[0] 81 return getenv("OS_REGION_NAME", region) 82 } 83 84 // GetRegionFromAKSK returns the region that was specified in the auth options. 85 // If a region was not set it returns value from env OS_REGION_NAME 86 func GetRegionFromAKSK(authOpts golangsdk.AKSKAuthOptions) string { 87 name := authOpts.ProjectName 88 if name == "" { 89 name = authOpts.DelegatedProject 90 } 91 region := strings.Split(name, "_")[0] 92 return getenv("OS_REGION_NAME", region) 93 } 94 95 // getenv returns value from env is present or default value 96 func getenv(key, fallback string) string { 97 value := os.Getenv(key) 98 if value == "" { 99 return fallback 100 } 101 return value 102 }