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(®ions) 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 }