diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioMonitoringExporter.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioMonitoringExporter.java index 2cd712709b5..30a298a82f9 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioMonitoringExporter.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioMonitoringExporter.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2022, Oracle and/or its affiliates. +// Copyright (c) 2021, 2023, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -39,7 +39,6 @@ import static oracle.weblogic.kubernetes.utils.DeployUtil.deployToClusterUsingRest; import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify; import static oracle.weblogic.kubernetes.utils.FileUtils.generateFileFromTemplate; -import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify; import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret; import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry; @@ -48,6 +47,7 @@ import static oracle.weblogic.kubernetes.utils.IstioUtils.deployIstioDestinationRule; import static oracle.weblogic.kubernetes.utils.IstioUtils.deployIstioPrometheus; import static oracle.weblogic.kubernetes.utils.IstioUtils.getIstioHttpIngressPort; +import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cloneMonitoringExporter; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.downloadMonitoringExporterApp; @@ -180,7 +180,8 @@ void testIstioPrometheusWithSideCar() { String monitoringExporterSrcDir = Paths.get(RESULTS_ROOT, "monitoringexp", "srcdir").toString(); cloneMonitoringExporter(monitoringExporterSrcDir); - String exporterImage = assertDoesNotThrow(() -> createImageAndPushToRepo(monitoringExporterSrcDir, "exporter", + String exporterImage = assertDoesNotThrow(() -> + buildMonitoringExporterCreateImageAndPushToRepo(monitoringExporterSrcDir, "exporter", domain2Namespace, TEST_IMAGES_REPO_SECRET_NAME, getImageBuilderExtraArgs()), "Failed to create image for exporter"); String exporterConfig = RESOURCE_DIR + "/exporter/exporter-config.yaml"; diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java index d4d8afbc1f6..657e513d5ca 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2022, Oracle and/or its affiliates. +// Copyright (c) 2021, 2023, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -72,11 +72,11 @@ import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.scaleAndVerifyCluster; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil; -import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndVerify; import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry; import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.createIngressForDomainAndVerify; import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyNginx; +import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cleanupPromGrafanaClusterRoles; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.createAndVerifyDomain; @@ -488,7 +488,8 @@ public static boolean installAndVerifyPodFromCustomImage(String dockerFileDir, //build webhook image String imagePullPolicy = IMAGE_PULL_POLICY; logger.info("Creating and Installing {0} in namespace {1}", baseImageName, namespace); - String image = createImageAndPushToRepo(dockerFileDir,baseImageName, namespace, secretName, ""); + String image = buildMonitoringExporterCreateImageAndPushToRepo( + dockerFileDir,baseImageName, namespace, secretName, ""); if (baseImageName.equalsIgnoreCase(("webhook"))) { webhookImage = image; diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSideCar.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSideCar.java index a4fe01b04ff..6f9ee314d1f 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSideCar.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSideCar.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2022, Oracle and/or its affiliates. +// Copyright (c) 2021, 2023, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -48,10 +48,10 @@ import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.generateNewModelFileWithUpdatedDomainUid; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getImageBuilderExtraArgs; -import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify; import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry; import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyNginx; +import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cleanupPromGrafanaClusterRoles; import static oracle.weblogic.kubernetes.utils.MonitoringUtils.createAndVerifyDomain; @@ -176,7 +176,8 @@ public static void initAll(@Namespaces(6) List namespaces) { logger.info("install monitoring exporter"); installMonitoringExporter(monitoringExporterDir); - exporterImage = assertDoesNotThrow(() -> createImageAndPushToRepo(monitoringExporterSrcDir, "exporter", + exporterImage = assertDoesNotThrow(() -> + buildMonitoringExporterCreateImageAndPushToRepo(monitoringExporterSrcDir, "exporter", domain1Namespace, TEST_IMAGES_REPO_SECRET_NAME, getImageBuilderExtraArgs()), "Failed to create image for exporter"); if (!OKD) { diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java index e19ef1f86bd..a2374be8dec 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java @@ -21,7 +21,6 @@ import io.kubernetes.client.openapi.models.V1EnvVar; import io.kubernetes.client.openapi.models.V1LocalObjectReference; import io.kubernetes.client.openapi.models.V1ObjectMeta; -import io.kubernetes.client.openapi.models.V1Pod; import io.kubernetes.client.openapi.models.V1Secret; import io.kubernetes.client.openapi.models.V1SecretList; import oracle.weblogic.domain.AdminServer; @@ -57,7 +56,6 @@ import static oracle.weblogic.kubernetes.TestConstants.FAILURE_RETRY_LIMIT_MINUTES; import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_NAME; import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_URL; -import static oracle.weblogic.kubernetes.TestConstants.HTTPS_PROXY; import static oracle.weblogic.kubernetes.TestConstants.IMAGE_PULL_POLICY; import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST; import static oracle.weblogic.kubernetes.TestConstants.KUBERNETES_CLI; @@ -69,14 +67,11 @@ import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_REPO_NAME; import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_REPO_URL; import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO_SECRET_NAME; -import static oracle.weblogic.kubernetes.TestConstants.WLSIMG_BUILDER; import static oracle.weblogic.kubernetes.actions.ActionConstants.MONITORING_EXPORTER_DOWNLOAD_URL; import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR; import static oracle.weblogic.kubernetes.actions.TestActions.deleteSecret; -import static oracle.weblogic.kubernetes.actions.TestActions.getPod; import static oracle.weblogic.kubernetes.actions.TestActions.installGrafana; import static oracle.weblogic.kubernetes.actions.TestActions.installPrometheus; -import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.copyFileToPod; import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listSecrets; import static oracle.weblogic.kubernetes.assertions.TestAssertions.callTestWebAppAndCheckForServerNameInResponse; import static oracle.weblogic.kubernetes.assertions.TestAssertions.isGrafanaReady; @@ -94,10 +89,10 @@ import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify; import static oracle.weblogic.kubernetes.utils.FileUtils.checkFile; import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile; +import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo; import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify; import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret; import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry; -import static oracle.weblogic.kubernetes.utils.PodUtils.execInPod; import static oracle.weblogic.kubernetes.utils.PodUtils.getPodName; import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity; import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword; @@ -109,7 +104,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; /** - * A utility class for Monitoring Weblogic Domain via Weblogic MonitoringExporter and Prometheus. + * A utility class for Monitoring WebLogic Domain via WebLogic MonitoringExporter and Prometheus. */ public class MonitoringUtils { @@ -1000,52 +995,6 @@ public static void createAndVerifyDomain(String miiImage, } } - /** - * Install wls dashboard from endtoend sample and verify it is accessable. - * - * @param hostPort host:nodeport string for grafana - * @param monitoringExporterEndToEndDir endtoend sample directory - * - */ - //public static void installVerifyGrafanaDashBoard(int nodeportGrafana, String monitoringExporterEndToEndDir) { - public static void installVerifyGrafanaDashBoard(String hostPort, String monitoringExporterEndToEndDir) { - //wait until it starts dashboard - String curlCmd = String.format("curl -v -H 'Content-Type: application/json' " - + " -X GET http://admin:12345678@%s/api/dashboards", - hostPort); - testUntil( - assertDoesNotThrow(() -> searchForKey(curlCmd, "grafana"), "Check access to grafana dashboard"), - logger, - "Check access to grafana dashboard"); - logger.info("installing grafana dashboard"); - // url - String curlCmd0 = - String.format("curl -v -H 'Content-Type: application/json' -H \"Content-Type: application/json\"" - + " -X POST http://admin:12345678@%s/api/datasources/" - + " --data-binary @%s/grafana/datasource.json", - hostPort, monitoringExporterEndToEndDir); - - logger.info("Executing Curl cmd {0}", curlCmd); - assertDoesNotThrow(() -> ExecCommand.exec(curlCmd0)); - - String curlCmd1 = - String.format("curl -v -H 'Content-Type: application/json' -H \"Content-Type: application/json\"" - + " -X POST http://admin:12345678@%s/api/dashboards/db/" - + " --data-binary @%s/grafana/dashboard.json", - hostPort, monitoringExporterEndToEndDir); - logger.info("Executing Curl cmd {0}", curlCmd1); - assertDoesNotThrow(() -> ExecCommand.exec(curlCmd1)); - - String curlCmd2 = String.format("curl -v -H 'Content-Type: application/json' " - + " -X GET http://admin:12345678@%s/api/dashboards/db/weblogic-server-dashboard", - hostPort); - testUntil( - assertDoesNotThrow(() -> searchForKey(curlCmd2, "wls_jvm_uptime"), - String.format("Check grafana dashboard wls against expected %s", "wls_jvm_uptime")), - logger, - "Check grafana dashboard metric against expected wls_jvm_uptime"); - } - /** * Verify the monitoring exporter app can be accessed from all managed servers in the domain through NGINX. * @@ -1180,63 +1129,25 @@ public static boolean verifyMonExpAppAccessSideCar(String searchKey, return isFound; } - /** To build monitoring exporter sidecar image. + /** + * Build exporter, create image with unique name, create corresponding repo secret and push to registry. * - * @param imageName image nmae - * @param monitoringExporterSrcDir path to monitoring exporter src location + * @param srcDir directory where source is located + * @param baseImageName base image name + * @param namespace image namespace + * @param secretName repo secretname for image + * @param extraImageBuilderArgs user specified extra args + * @return image name */ - public static void buildMonitoringExporterImage(String imageName, String monitoringExporterSrcDir) { - String httpsproxy = HTTPS_PROXY; - logger.info(" httpsproxy : " + httpsproxy); - String proxyHost = ""; - String command; - if (httpsproxy != null) { - int firstIndex = httpsproxy.lastIndexOf("www"); - int lastIndex = httpsproxy.lastIndexOf(":"); - logger.info("Got indexes : " + firstIndex + " : " + lastIndex); - proxyHost = httpsproxy.substring(firstIndex,lastIndex); - logger.info(" proxyHost: " + proxyHost); - - command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true " - + " && " + WLSIMG_BUILDER + " build . -t " - + imageName - + " --build-arg MAVEN_OPTS=\"-Dhttps.proxyHost=%s -Dhttps.proxyPort=80\" --build-arg https_proxy=%s", - monitoringExporterSrcDir, proxyHost, httpsproxy); - } else { - command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true " - + " && " + WLSIMG_BUILDER + " build . -t " - + imageName - + monitoringExporterSrcDir); - } + public static String buildMonitoringExporterCreateImageAndPushToRepo(String srcDir, String baseImageName, + String namespace, String secretName, + String extraImageBuilderArgs) throws ApiException { + String command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true", srcDir); logger.info("Executing command " + command); assertTrue(Command .withParams(new CommandParams() .command(command)) - .execute(), "Failed to build monitoring exporter image"); - // login and push image to registry if necessary - imageRepoLoginAndPushImageToRegistry(imageName); + .execute(), "Failed to build monitoring exporter"); + return createImageAndPushToRepo(srcDir, baseImageName, namespace, secretName, extraImageBuilderArgs); } - - /** Change monitoring exporter webapp confiuration inside the pod. - * - * @param podName pod name - * @param namespace pod namespace - * @param configYaml monitorin exporter configuration - */ - public static void changeConfigInPod(String podName, String namespace, String configYaml) { - V1Pod exporterPod = assertDoesNotThrow(() -> getPod(namespace, "", podName), - " Can't retreive pod " + podName); - logger.info("Copying config file {0} to pod directory {1}", - Paths.get(RESOURCE_DIR,"/exporter/" + configYaml).toString(), "/tmp/" + configYaml); - assertDoesNotThrow(() -> copyFileToPod(namespace, podName, "monitoring-exporter", - Paths.get(RESOURCE_DIR,"/exporter/" + configYaml), Paths.get("/tmp/" + configYaml)), - "Copying file to pod failed"); - execInPod(exporterPod, "monitoring-exporter", true, - "curl -X PUT -H \"content-type: application/yaml\" --data-binary \"@/tmp/" - + configYaml + "\" -i -u weblogic:welcome1 http://localhost:8080/configuration"); - execInPod(exporterPod, "monitoring-exporter", true, "curl -X GET " - + " -i -u weblogic:welcome1 http://localhost:8080/metrics"); - - } - }