From 66f197063d2759fa8d20d23a4999cb2d0efa574d Mon Sep 17 00:00:00 2001 From: Gary Tully Date: Thu, 25 Apr 2024 17:10:20 +0100 Subject: [PATCH] [#907] ensure getlog utility is eventually safe --- ...artemis_controller_deploy_operator_test.go | 2 +- controllers/common_util_test.go | 65 +++++++++++-------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/controllers/activemqartemis_controller_deploy_operator_test.go b/controllers/activemqartemis_controller_deploy_operator_test.go index d600b557..7ac5bc8b 100644 --- a/controllers/activemqartemis_controller_deploy_operator_test.go +++ b/controllers/activemqartemis_controller_deploy_operator_test.go @@ -105,7 +105,7 @@ var _ = Describe("artemis controller", Label("do"), func() { }) }) - Context("operator logging config test", Label("do-operator-log"), func() { + Context("operator logging config", Label("do-operator-log"), func() { It("test operator with env var", func() { if os.Getenv("DEPLOY_OPERATOR") == "true" { // re-install a new operator to have a fresh log diff --git a/controllers/common_util_test.go b/controllers/common_util_test.go index 05f07cda..cfadb0aa 100644 --- a/controllers/common_util_test.go +++ b/controllers/common_util_test.go @@ -616,34 +616,45 @@ func DeployCustomAddress(targetNamespace string, customFunc func(candidate *brok } func GetOperatorLog(ns string) (*string, error) { - cfg, err := config.GetConfig() - Expect(err).To(BeNil()) - labelSelector, err := labels.Parse("control-plane=controller-manager,name=" + oprName) - Expect(err).To(BeNil()) - clientset, err := kubernetes.NewForConfig(cfg) - Expect(err).To(BeNil()) - listOpts := metav1.ListOptions{ - LabelSelector: labelSelector.String(), + var cfg *rest.Config + var err error + if cfg, err = config.GetConfig(); err == nil { + + var labelSelector labels.Selector + if labelSelector, err = labels.Parse("control-plane=controller-manager,name=" + oprName); err == nil { + + var clientset *kubernetes.Clientset + if clientset, err = kubernetes.NewForConfig(cfg); err == nil { + + listOpts := metav1.ListOptions{ + LabelSelector: labelSelector.String(), + } + var podList *corev1.PodList + if podList, err = clientset.CoreV1().Pods(ns).List(ctx, listOpts); err == nil { + + if len(podList.Items) != 1 { + err = fmt.Errorf("expect a single pod") + } else { + + operatorPod := podList.Items[0] + podLogOpts := corev1.PodLogOptions{} + req := clientset.CoreV1().Pods(ns).GetLogs(operatorPod.Name, &podLogOpts) + + var podLogs io.ReadCloser + if podLogs, err = req.Stream(context.Background()); err == nil { + defer podLogs.Close() + buf := new(bytes.Buffer) + if _, err = io.Copy(buf, podLogs); err == nil { + str := buf.String() + return &str, nil + } + } + } + } + } + } } - podList, err := clientset.CoreV1().Pods(ns).List(ctx, listOpts) - Expect(err).To(BeNil()) - Expect(len(podList.Items)).To(Equal(1)) - operatorPod := podList.Items[0] - - podLogOpts := corev1.PodLogOptions{} - req := clientset.CoreV1().Pods(ns).GetLogs(operatorPod.Name, &podLogOpts) - podLogs, err := req.Stream(context.Background()) - Expect(err).To(BeNil()) - defer podLogs.Close() - - Expect(err).To(BeNil()) - - buf := new(bytes.Buffer) - _, err = io.Copy(buf, podLogs) - Expect(err).To(BeNil()) - str := buf.String() - - return &str, nil + return nil, err } func NewPriveKey() (*rsa.PrivateKey, error) {