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  }