github.com/openshift-online/ocm-sdk-go@v0.1.473/rh_region.go (about)

     1  package sdk
     2  
     3  import (
     4  	json2 "encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  	"net/url"
     8  	"strings"
     9  )
    10  
    11  type Region struct {
    12  	URL string
    13  	AWS []string
    14  	GCP []string
    15  }
    16  
    17  func GetRhRegions(ocmServiceUrl string) (map[string]Region, error) {
    18  	var regions map[string]Region
    19  	url, err := DetermineRegionDiscoveryUrl(ocmServiceUrl)
    20  	if err != nil {
    21  		return regions, fmt.Errorf("can't determine region discovery URL: %s", err)
    22  	}
    23  	// Adding nolint here in order to prevent linter from failing due to variable http get
    24  	resp, err := http.Get(url) //nolint
    25  	if err != nil {
    26  		return regions, fmt.Errorf("can't retrieve shards: %s", err)
    27  	}
    28  	err = json2.NewDecoder(resp.Body).Decode(&regions)
    29  	if err != nil {
    30  		return regions, fmt.Errorf("can't decode shards: %s", err)
    31  	}
    32  	return regions, nil
    33  }
    34  
    35  func GetRhRegion(ocmServiceUrl string, regionName string) (Region, error) {
    36  	regions, err := GetRhRegions(ocmServiceUrl)
    37  	if err != nil {
    38  		return Region{}, err
    39  	}
    40  	for regName, regValue := range regions {
    41  		if regName == regionName {
    42  			return regValue, nil
    43  		}
    44  	}
    45  	return Region{}, fmt.Errorf("can't find region %s", regionName)
    46  }
    47  
    48  func DetermineRegionDiscoveryUrl(ocmServiceUrl string) (string, error) {
    49  	baseUrl, err := url.Parse(ocmServiceUrl)
    50  	if err != nil {
    51  		return "", err
    52  	}
    53  	regionDiscoveryHost := "api.openshift.com"
    54  	if strings.HasSuffix(baseUrl.Hostname(), "integration.openshift.com") {
    55  		regionDiscoveryHost = "api.integration.openshift.com"
    56  	} else if strings.HasSuffix(baseUrl.Hostname(), "stage.openshift.com") {
    57  		regionDiscoveryHost = "api.stage.openshift.com"
    58  	}
    59  	return fmt.Sprintf("https://%s/static/ocm-shards.json", regionDiscoveryHost), nil
    60  }