From f14ae58fcf6b9be85cde9f325dce5c77956b0753 Mon Sep 17 00:00:00 2001 From: Raul Sevilla Date: Thu, 21 Sep 2023 11:06:45 +0200 Subject: [PATCH] Discover HAProxy version Signed-off-by: Raul Sevilla --- pkg/runner/exec.go | 3 +-- pkg/runner/metadata.go | 52 +++++++++++++++++++++++++++++++++++++++ pkg/runner/runner.go | 7 +++++- pkg/runner/tools/types.go | 8 +++++- 4 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 pkg/runner/metadata.go diff --git a/pkg/runner/exec.go b/pkg/runner/exec.go index b6f7749..fb4bd4c 100644 --- a/pkg/runner/exec.go +++ b/pkg/runner/exec.go @@ -21,7 +21,6 @@ import ( "sync" "time" - ocpmetadata "github.com/cloud-bulldozer/go-commons/ocp-metadata" "github.com/cloud-bulldozer/go-commons/version" "github.com/cloud-bulldozer/ingress-perf/pkg/config" "github.com/cloud-bulldozer/ingress-perf/pkg/runner/tools" @@ -36,7 +35,7 @@ import ( var lock = &sync.Mutex{} -func runBenchmark(cfg config.Config, clusterMetadata ocpmetadata.ClusterMetadata) ([]tools.Result, error) { +func runBenchmark(cfg config.Config, clusterMetadata tools.ClusterMetadata) ([]tools.Result, error) { var aggAvgRps, aggAvgLatency, aggP99Latency float64 var timeouts, httpErrors int64 var benchmarkResult []tools.Result diff --git a/pkg/runner/metadata.go b/pkg/runner/metadata.go new file mode 100644 index 0000000..04cafad --- /dev/null +++ b/pkg/runner/metadata.go @@ -0,0 +1,52 @@ +package runner + +import ( + "bytes" + "context" + "strings" + + log "github.com/sirupsen/logrus" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/tools/remotecommand" +) + +func getHAProxyVersion() (string, error) { + var stdout, stderr bytes.Buffer + podList, err := clientSet.CoreV1().Pods("openshift-ingress").List(context.TODO(), + metav1.ListOptions{ + LabelSelector: "ingresscontroller.operator.openshift.io/deployment-ingresscontroller=default", + FieldSelector: "status.phase=Running"}, + ) + if err != nil { + return "", err + } + routerPod := podList.Items[0] + req := clientSet.CoreV1().RESTClient().Post(). + Resource("pods"). + Name(routerPod.Name). + Namespace(routerPod.Namespace). + SubResource("exec") + req.VersionedParams(&corev1.PodExecOptions{ + Container: "router", + Stdin: false, + Stdout: true, + Stderr: true, + Command: []string{"bash", "-c", "rpm -qa | grep haproxy"}, + TTY: false, + }, scheme.ParameterCodec) + exec, err := remotecommand.NewSPDYExecutor(restConfig, "POST", req.URL()) + if err != nil { + log.Error(err.Error()) + return "", err + } + err = exec.StreamWithContext(context.TODO(), remotecommand.StreamOptions{ + Stdout: &stdout, + Stderr: &stderr, + }) + if err != nil { + return "", err + } + return strings.TrimRight(stdout.String(), "\n"), err +} diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index 63cadd2..347ba27 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -53,6 +53,7 @@ func Start(uuid, baseUUID, baseIndex string, tolerancy int, indexer *indexers.In var kubeconfig string var benchmarkResult []tools.Result var comparator comparison.Comparator + var clusterMetadata tools.ClusterMetadata passed := true log.Info("Starting ingress-perf") if os.Getenv("KUBECONFIG") != "" { @@ -73,7 +74,11 @@ func Start(uuid, baseUUID, baseIndex string, tolerancy int, indexer *indexers.In if err != nil { return err } - clusterMetadata, err := ocpMetadata.GetClusterMetadata() + clusterMetadata.ClusterMetadata, err = ocpMetadata.GetClusterMetadata() + if err != nil { + return err + } + clusterMetadata.HAProxyVersion, err = getHAProxyVersion() if err != nil { return err } diff --git a/pkg/runner/tools/types.go b/pkg/runner/tools/types.go index dad6ee7..a2112f0 100644 --- a/pkg/runner/tools/types.go +++ b/pkg/runner/tools/types.go @@ -21,6 +21,12 @@ import ( "github.com/cloud-bulldozer/ingress-perf/pkg/config" ) +// We need to embed ClusterMetadata in order to add extra fields to it +type ClusterMetadata struct { + ocpmetadata.ClusterMetadata + HAProxyVersion string `json:"haproxyVersion,omitempty"` +} + type Tool interface { ParseResult(string, string) (PodResult, error) Cmd() []string @@ -65,5 +71,5 @@ type Result struct { Requests int64 `json:"requests"` Timeouts int64 `json:"timeouts"` Version string `json:"version"` - ocpmetadata.ClusterMetadata + ClusterMetadata }