Skip to content

Commit d83fc43

Browse files
authored
Build monitoring exporter project before creating image (#3994)
1 parent e59a9ed commit d83fc43

File tree

4 files changed

+28
-114
lines changed

4 files changed

+28
-114
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioMonitoringExporter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2021, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2021, 2023, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
package oracle.weblogic.kubernetes;
@@ -39,7 +39,6 @@
3939
import static oracle.weblogic.kubernetes.utils.DeployUtil.deployToClusterUsingRest;
4040
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
4141
import static oracle.weblogic.kubernetes.utils.FileUtils.generateFileFromTemplate;
42-
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
4342
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
4443
import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
4544
import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry;
@@ -48,6 +47,7 @@
4847
import static oracle.weblogic.kubernetes.utils.IstioUtils.deployIstioDestinationRule;
4948
import static oracle.weblogic.kubernetes.utils.IstioUtils.deployIstioPrometheus;
5049
import static oracle.weblogic.kubernetes.utils.IstioUtils.getIstioHttpIngressPort;
50+
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo;
5151
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus;
5252
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cloneMonitoringExporter;
5353
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.downloadMonitoringExporterApp;
@@ -180,7 +180,8 @@ void testIstioPrometheusWithSideCar() {
180180

181181
String monitoringExporterSrcDir = Paths.get(RESULTS_ROOT, "monitoringexp", "srcdir").toString();
182182
cloneMonitoringExporter(monitoringExporterSrcDir);
183-
String exporterImage = assertDoesNotThrow(() -> createImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
183+
String exporterImage = assertDoesNotThrow(() ->
184+
buildMonitoringExporterCreateImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
184185
domain2Namespace, TEST_IMAGES_REPO_SECRET_NAME, getImageBuilderExtraArgs()),
185186
"Failed to create image for exporter");
186187
String exporterConfig = RESOURCE_DIR + "/exporter/exporter-config.yaml";

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2021, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2021, 2023, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
package oracle.weblogic.kubernetes;
@@ -72,11 +72,11 @@
7272
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort;
7373
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.scaleAndVerifyCluster;
7474
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
75-
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
7675
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndVerify;
7776
import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry;
7877
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.createIngressForDomainAndVerify;
7978
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyNginx;
79+
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo;
8080
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus;
8181
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cleanupPromGrafanaClusterRoles;
8282
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.createAndVerifyDomain;
@@ -488,7 +488,8 @@ public static boolean installAndVerifyPodFromCustomImage(String dockerFileDir,
488488
//build webhook image
489489
String imagePullPolicy = IMAGE_PULL_POLICY;
490490
logger.info("Creating and Installing {0} in namespace {1}", baseImageName, namespace);
491-
String image = createImageAndPushToRepo(dockerFileDir,baseImageName, namespace, secretName, "");
491+
String image = buildMonitoringExporterCreateImageAndPushToRepo(
492+
dockerFileDir,baseImageName, namespace, secretName, "");
492493

493494
if (baseImageName.equalsIgnoreCase(("webhook"))) {
494495
webhookImage = image;

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSideCar.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2021, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2021, 2023, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
package oracle.weblogic.kubernetes;
@@ -48,10 +48,10 @@
4848
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
4949
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.generateNewModelFileWithUpdatedDomainUid;
5050
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getImageBuilderExtraArgs;
51-
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
5251
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
5352
import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry;
5453
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyNginx;
54+
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo;
5555
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus;
5656
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cleanupPromGrafanaClusterRoles;
5757
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.createAndVerifyDomain;
@@ -176,7 +176,8 @@ public static void initAll(@Namespaces(6) List<String> namespaces) {
176176

177177
logger.info("install monitoring exporter");
178178
installMonitoringExporter(monitoringExporterDir);
179-
exporterImage = assertDoesNotThrow(() -> createImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
179+
exporterImage = assertDoesNotThrow(() ->
180+
buildMonitoringExporterCreateImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
180181
domain1Namespace, TEST_IMAGES_REPO_SECRET_NAME, getImageBuilderExtraArgs()),
181182
"Failed to create image for exporter");
182183
if (!OKD) {

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java

Lines changed: 16 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import io.kubernetes.client.openapi.models.V1EnvVar;
2222
import io.kubernetes.client.openapi.models.V1LocalObjectReference;
2323
import io.kubernetes.client.openapi.models.V1ObjectMeta;
24-
import io.kubernetes.client.openapi.models.V1Pod;
2524
import io.kubernetes.client.openapi.models.V1Secret;
2625
import io.kubernetes.client.openapi.models.V1SecretList;
2726
import oracle.weblogic.domain.AdminServer;
@@ -57,7 +56,6 @@
5756
import static oracle.weblogic.kubernetes.TestConstants.FAILURE_RETRY_LIMIT_MINUTES;
5857
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_NAME;
5958
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_URL;
60-
import static oracle.weblogic.kubernetes.TestConstants.HTTPS_PROXY;
6159
import static oracle.weblogic.kubernetes.TestConstants.IMAGE_PULL_POLICY;
6260
import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST;
6361
import static oracle.weblogic.kubernetes.TestConstants.KUBERNETES_CLI;
@@ -69,14 +67,11 @@
6967
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_REPO_NAME;
7068
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_REPO_URL;
7169
import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO_SECRET_NAME;
72-
import static oracle.weblogic.kubernetes.TestConstants.WLSIMG_BUILDER;
7370
import static oracle.weblogic.kubernetes.actions.ActionConstants.MONITORING_EXPORTER_DOWNLOAD_URL;
7471
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
7572
import static oracle.weblogic.kubernetes.actions.TestActions.deleteSecret;
76-
import static oracle.weblogic.kubernetes.actions.TestActions.getPod;
7773
import static oracle.weblogic.kubernetes.actions.TestActions.installGrafana;
7874
import static oracle.weblogic.kubernetes.actions.TestActions.installPrometheus;
79-
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.copyFileToPod;
8075
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listSecrets;
8176
import static oracle.weblogic.kubernetes.assertions.TestAssertions.callTestWebAppAndCheckForServerNameInResponse;
8277
import static oracle.weblogic.kubernetes.assertions.TestAssertions.isGrafanaReady;
@@ -94,10 +89,10 @@
9489
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
9590
import static oracle.weblogic.kubernetes.utils.FileUtils.checkFile;
9691
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
92+
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
9793
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
9894
import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
9995
import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry;
100-
import static oracle.weblogic.kubernetes.utils.PodUtils.execInPod;
10196
import static oracle.weblogic.kubernetes.utils.PodUtils.getPodName;
10297
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
10398
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
@@ -109,7 +104,7 @@
109104
import static org.junit.jupiter.api.Assertions.assertTrue;
110105

111106
/**
112-
* A utility class for Monitoring Weblogic Domain via Weblogic MonitoringExporter and Prometheus.
107+
* A utility class for Monitoring WebLogic Domain via WebLogic MonitoringExporter and Prometheus.
113108
*/
114109
public class MonitoringUtils {
115110

@@ -1000,52 +995,6 @@ public static void createAndVerifyDomain(String miiImage,
1000995
}
1001996
}
1002997

1003-
/**
1004-
* Install wls dashboard from endtoend sample and verify it is accessable.
1005-
*
1006-
* @param hostPort host:nodeport string for grafana
1007-
* @param monitoringExporterEndToEndDir endtoend sample directory
1008-
*
1009-
*/
1010-
//public static void installVerifyGrafanaDashBoard(int nodeportGrafana, String monitoringExporterEndToEndDir) {
1011-
public static void installVerifyGrafanaDashBoard(String hostPort, String monitoringExporterEndToEndDir) {
1012-
//wait until it starts dashboard
1013-
String curlCmd = String.format("curl -v -H 'Content-Type: application/json' "
1014-
+ " -X GET http://admin:12345678@%s/api/dashboards",
1015-
hostPort);
1016-
testUntil(
1017-
assertDoesNotThrow(() -> searchForKey(curlCmd, "grafana"), "Check access to grafana dashboard"),
1018-
logger,
1019-
"Check access to grafana dashboard");
1020-
logger.info("installing grafana dashboard");
1021-
// url
1022-
String curlCmd0 =
1023-
String.format("curl -v -H 'Content-Type: application/json' -H \"Content-Type: application/json\""
1024-
+ " -X POST http://admin:12345678@%s/api/datasources/"
1025-
+ " --data-binary @%s/grafana/datasource.json",
1026-
hostPort, monitoringExporterEndToEndDir);
1027-
1028-
logger.info("Executing Curl cmd {0}", curlCmd);
1029-
assertDoesNotThrow(() -> ExecCommand.exec(curlCmd0));
1030-
1031-
String curlCmd1 =
1032-
String.format("curl -v -H 'Content-Type: application/json' -H \"Content-Type: application/json\""
1033-
+ " -X POST http://admin:12345678@%s/api/dashboards/db/"
1034-
+ " --data-binary @%s/grafana/dashboard.json",
1035-
hostPort, monitoringExporterEndToEndDir);
1036-
logger.info("Executing Curl cmd {0}", curlCmd1);
1037-
assertDoesNotThrow(() -> ExecCommand.exec(curlCmd1));
1038-
1039-
String curlCmd2 = String.format("curl -v -H 'Content-Type: application/json' "
1040-
+ " -X GET http://admin:12345678@%s/api/dashboards/db/weblogic-server-dashboard",
1041-
hostPort);
1042-
testUntil(
1043-
assertDoesNotThrow(() -> searchForKey(curlCmd2, "wls_jvm_uptime"),
1044-
String.format("Check grafana dashboard wls against expected %s", "wls_jvm_uptime")),
1045-
logger,
1046-
"Check grafana dashboard metric against expected wls_jvm_uptime");
1047-
}
1048-
1049998
/**
1050999
* Verify the monitoring exporter app can be accessed from all managed servers in the domain through NGINX.
10511000
*
@@ -1180,63 +1129,25 @@ public static boolean verifyMonExpAppAccessSideCar(String searchKey,
11801129
return isFound;
11811130
}
11821131

1183-
/** To build monitoring exporter sidecar image.
1132+
/**
1133+
* Build exporter, create image with unique name, create corresponding repo secret and push to registry.
11841134
*
1185-
* @param imageName image nmae
1186-
* @param monitoringExporterSrcDir path to monitoring exporter src location
1135+
* @param srcDir directory where source is located
1136+
* @param baseImageName base image name
1137+
* @param namespace image namespace
1138+
* @param secretName repo secretname for image
1139+
* @param extraImageBuilderArgs user specified extra args
1140+
* @return image name
11871141
*/
1188-
public static void buildMonitoringExporterImage(String imageName, String monitoringExporterSrcDir) {
1189-
String httpsproxy = HTTPS_PROXY;
1190-
logger.info(" httpsproxy : " + httpsproxy);
1191-
String proxyHost = "";
1192-
String command;
1193-
if (httpsproxy != null) {
1194-
int firstIndex = httpsproxy.lastIndexOf("www");
1195-
int lastIndex = httpsproxy.lastIndexOf(":");
1196-
logger.info("Got indexes : " + firstIndex + " : " + lastIndex);
1197-
proxyHost = httpsproxy.substring(firstIndex,lastIndex);
1198-
logger.info(" proxyHost: " + proxyHost);
1199-
1200-
command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true "
1201-
+ " && " + WLSIMG_BUILDER + " build . -t "
1202-
+ imageName
1203-
+ " --build-arg MAVEN_OPTS=\"-Dhttps.proxyHost=%s -Dhttps.proxyPort=80\" --build-arg https_proxy=%s",
1204-
monitoringExporterSrcDir, proxyHost, httpsproxy);
1205-
} else {
1206-
command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true "
1207-
+ " && " + WLSIMG_BUILDER + " build . -t "
1208-
+ imageName
1209-
+ monitoringExporterSrcDir);
1210-
}
1142+
public static String buildMonitoringExporterCreateImageAndPushToRepo(String srcDir, String baseImageName,
1143+
String namespace, String secretName,
1144+
String extraImageBuilderArgs) throws ApiException {
1145+
String command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true", srcDir);
12111146
logger.info("Executing command " + command);
12121147
assertTrue(Command
12131148
.withParams(new CommandParams()
12141149
.command(command))
1215-
.execute(), "Failed to build monitoring exporter image");
1216-
// login and push image to registry if necessary
1217-
imageRepoLoginAndPushImageToRegistry(imageName);
1150+
.execute(), "Failed to build monitoring exporter");
1151+
return createImageAndPushToRepo(srcDir, baseImageName, namespace, secretName, extraImageBuilderArgs);
12181152
}
1219-
1220-
/** Change monitoring exporter webapp confiuration inside the pod.
1221-
*
1222-
* @param podName pod name
1223-
* @param namespace pod namespace
1224-
* @param configYaml monitorin exporter configuration
1225-
*/
1226-
public static void changeConfigInPod(String podName, String namespace, String configYaml) {
1227-
V1Pod exporterPod = assertDoesNotThrow(() -> getPod(namespace, "", podName),
1228-
" Can't retreive pod " + podName);
1229-
logger.info("Copying config file {0} to pod directory {1}",
1230-
Paths.get(RESOURCE_DIR,"/exporter/" + configYaml).toString(), "/tmp/" + configYaml);
1231-
assertDoesNotThrow(() -> copyFileToPod(namespace, podName, "monitoring-exporter",
1232-
Paths.get(RESOURCE_DIR,"/exporter/" + configYaml), Paths.get("/tmp/" + configYaml)),
1233-
"Copying file to pod failed");
1234-
execInPod(exporterPod, "monitoring-exporter", true,
1235-
"curl -X PUT -H \"content-type: application/yaml\" --data-binary \"@/tmp/"
1236-
+ configYaml + "\" -i -u weblogic:welcome1 http://localhost:8080/configuration");
1237-
execInPod(exporterPod, "monitoring-exporter", true, "curl -X GET "
1238-
+ " -i -u weblogic:welcome1 http://localhost:8080/metrics");
1239-
1240-
}
1241-
12421153
}

0 commit comments

Comments
 (0)