github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/pkg/thanos.go (about) 1 // Copyright (c) 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package pkg 5 6 import ( 7 "context" 8 "encoding/json" 9 "fmt" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 "net/http" 12 ) 13 14 // GetRulesFromThanosRuler returns the rule data from the Thanos Ruler API given a kubeconfig 15 func GetRulesFromThanosRuler(kubeconfigPath string) (interface{}, error) { 16 retryableClient, err := GetVerrazzanoHTTPClient(kubeconfigPath) 17 if err != nil { 18 Log(Error, fmt.Sprintf("Failed get an HTTP client: %v", err)) 19 return nil, err 20 } 21 22 password, err := GetVerrazzanoPasswordInCluster(kubeconfigPath) 23 if err != nil { 24 Log(Error, fmt.Sprintf("Failed to get the Verrazzano password from the cluster %v", err)) 25 return nil, err 26 } 27 28 url := fmt.Sprintf("%s/api/v1/rules", GetSystemThanosRulerURL(kubeconfigPath)) 29 resp, err := doReq(url, "GET", "", "", "verrazzano", password, nil, retryableClient) 30 if err != nil { 31 Log(Error, fmt.Sprintf("Failed to make a request to the Thanos Ruler ingress %v", err)) 32 return nil, err 33 } 34 35 if resp.StatusCode != http.StatusOK { 36 Log(Error, fmt.Sprintf("Failed to get an OK response from %s, response: %d", url, resp.StatusCode)) 37 return nil, err 38 } 39 40 type ruleData struct { 41 Data interface{} `json:"data"` 42 } 43 var data ruleData 44 err = json.Unmarshal(resp.Body, &data) 45 if err != nil { 46 Log(Error, fmt.Sprintf("Failed to unmarshal the response data %s: %v", data, err)) 47 return nil, err 48 } 49 Log(Debug, fmt.Sprintf("response body: %v", data.Data)) 50 51 return data.Data, err 52 } 53 54 // GetSystemThanosRulerURL gets the system Thanos Ingress host in the given cluster 55 func GetSystemThanosRulerURL(kubeconfigPath string) string { 56 clientset, err := GetKubernetesClientsetForCluster(kubeconfigPath) 57 if err != nil { 58 Log(Error, fmt.Sprintf("Failed to get clientset for cluster %v", err)) 59 return "" 60 } 61 ingress, err := clientset.NetworkingV1().Ingresses(VerrazzanoNamespace).Get(context.TODO(), "thanos-ruler", metav1.GetOptions{}) 62 if err != nil { 63 Log(Error, fmt.Sprintf("Failed to find Thanos Ruler Ingress %v", err)) 64 return "" 65 } 66 67 Log(Info, fmt.Sprintf("Found Thanos Ruler Ingress %v, host %s", ingress.Name, ingress.Spec.Rules[0].Host)) 68 return fmt.Sprintf("https://%s", ingress.Spec.Rules[0].Host) 69 }