Skip to content

Commit bf70ca0

Browse files
authored
Remove WebLogic Logging Exporter integration test from WKO main (#4037)
* Remove WebLogic Logging Exporter integration test from WKO main
1 parent e55ca82 commit bf70ca0

File tree

7 files changed

+17
-198
lines changed

7 files changed

+17
-198
lines changed

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

Lines changed: 9 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2020, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2020, 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;
@@ -28,9 +28,7 @@
2828
import org.junit.jupiter.api.DisplayName;
2929
import org.junit.jupiter.api.Tag;
3030
import org.junit.jupiter.api.Test;
31-
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
3231

33-
import static oracle.weblogic.kubernetes.TestConstants.COPY_WLS_LOGGING_EXPORTER_FILE_NAME;
3432
import static oracle.weblogic.kubernetes.TestConstants.ELASTICSEARCH_HTTPS_PORT;
3533
import static oracle.weblogic.kubernetes.TestConstants.ELASTICSEARCH_HTTP_PORT;
3634
import static oracle.weblogic.kubernetes.TestConstants.ELASTICSEARCH_IMAGE;
@@ -47,14 +45,9 @@
4745
import static oracle.weblogic.kubernetes.TestConstants.OPERATOR_CHART_DIR;
4846
import static oracle.weblogic.kubernetes.TestConstants.OPERATOR_RELEASE_NAME;
4947
import static oracle.weblogic.kubernetes.TestConstants.SKIP_CLEANUP;
50-
import static oracle.weblogic.kubernetes.TestConstants.WEBLOGIC_INDEX_KEY;
51-
import static oracle.weblogic.kubernetes.TestConstants.WLS_LOGGING_EXPORTER_YAML_FILE_NAME;
52-
import static oracle.weblogic.kubernetes.actions.ActionConstants.DOWNLOAD_DIR;
5348
import static oracle.weblogic.kubernetes.actions.ActionConstants.ITTESTS_DIR;
5449
import static oracle.weblogic.kubernetes.actions.ActionConstants.MODEL_DIR;
5550
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
56-
import static oracle.weblogic.kubernetes.actions.ActionConstants.SNAKE_DOWNLOADED_FILENAME;
57-
import static oracle.weblogic.kubernetes.actions.ActionConstants.WLE_DOWNLOAD_FILENAME_DEFAULT;
5851
import static oracle.weblogic.kubernetes.actions.ActionConstants.WORK_DIR;
5952
import static oracle.weblogic.kubernetes.actions.TestActions.execCommand;
6053
import static oracle.weblogic.kubernetes.actions.TestActions.getOperatorPodName;
@@ -75,7 +68,6 @@
7568
import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry;
7669
import static oracle.weblogic.kubernetes.utils.LoggingExporterUtils.installAndVerifyElasticsearch;
7770
import static oracle.weblogic.kubernetes.utils.LoggingExporterUtils.installAndVerifyKibana;
78-
import static oracle.weblogic.kubernetes.utils.LoggingExporterUtils.installAndVerifyWlsLoggingExporter;
7971
import static oracle.weblogic.kubernetes.utils.LoggingExporterUtils.uninstallAndVerifyElasticsearch;
8072
import static oracle.weblogic.kubernetes.utils.LoggingExporterUtils.uninstallAndVerifyKibana;
8173
import static oracle.weblogic.kubernetes.utils.LoggingExporterUtils.verifyLoggingExporterReady;
@@ -97,17 +89,11 @@
9789
* test createLogStashConfigMap = false.
9890
* 3. Verify that ELK Stack is ready to use by checking the index status of
9991
* Kibana and Logstash created in the Operator pod successfully.
100-
* 4. Install WebLogic Logging Exporter in all WebLogic server pods by
101-
* adding WebLogic Logging Exporter binary to the image builder process
102-
* so that it will be available in the domain image via
103-
* --additionalBuildCommands and --additionalBuildFiles.
104-
* 5. Create and start the WebLogic domain.
105-
* 6. Verify that
92+
* 4. Create and start the WebLogic domain.
93+
* 5. Verify that
10694
* 1) Elasticsearch collects data from WebLogic logs and
10795
* stores them in its repository correctly.
108-
* 2) Using WebLogic Logging Exporter, WebLogic server Logs can be integrated to
109-
* ELK Stack in the same pod that the domain is running on.
110-
* 3) Users can update logstash configuration by updating the configmap
96+
* 2) Users can update logstash configuration by updating the configmap
11197
* weblogic-operator-logstash-cm instead of rebuilding operator image
11298
*/
11399
@DisplayName("Test to use Elasticsearch API to query WebLogic logs")
@@ -119,8 +105,8 @@
119105
class ItElasticLogging {
120106

121107
// constants for creating domain image using model in image
122-
private static final String WLS_LOGGING_MODEL_FILE = "model.wlslogging.yaml";
123-
private static final String WLS_LOGGING_IMAGE_NAME = "wls-logging-image";
108+
private static final String WLS_ELK_LOGGING_MODEL_FILE = "model.wlslogging.yaml";
109+
private static final String WLS_ELK_LOGGING_IMAGE_NAME = "wls-logging-image";
124110

125111
// constants for testing WebLogic Logging Exporter
126112
private static final String wlsLoggingExporterYamlFileLoc = RESOURCE_DIR + "/loggingexporter";
@@ -226,11 +212,6 @@ public static void init(@Namespaces(4) List<String> namespaces) {
226212
"operator to be running in namespace {0}",
227213
opNamespace);
228214

229-
// install WebLogic Logging Exporter if in non-OKD env
230-
if (!OKD) {
231-
installAndVerifyWlsLoggingExporter(managedServerFilter, wlsLoggingExporterYamlFileLoc, elasticSearchNs);
232-
}
233-
234215
// create and verify WebLogic domain image using model in image with model files
235216
String imageName = createAndVerifyDomainImage();
236217

@@ -338,46 +319,6 @@ void testWebLogicLogSearch() {
338319
logger.info("Query Operator log for WebLogic server status info succeeded");
339320
}
340321

341-
/**
342-
* Use Elasticsearch Search APIs to query WebLogic log info pushed to Elasticsearch repository
343-
* by WebLogic Logging Exporter. Verify that log occurrence for WebLogic servers are not empty.
344-
*/
345-
@Test
346-
@DisplayName("Use Elasticsearch Search APIs to query WebLogic log info in WLS server pod and verify")
347-
@DisabledIfEnvironmentVariable(named = "OKD", matches = "true")
348-
void testWlsLoggingExporter() throws Exception {
349-
Map<String, String> wlsMap = verifyLoggingExporterReady(opNamespace, elasticSearchNs, null, WEBLOGIC_INDEX_KEY);
350-
// merge testVarMap and wlsMap
351-
testVarMap.putAll(wlsMap);
352-
353-
// Verify that occurrence of log level = Notice are not empty
354-
String regex = ".*took\":(\\d+),.*hits\":\\{(.+)\\}";
355-
String queryCriteria = "/_search?q=level:Notice";
356-
verifyCountsHitsInSearchResults(queryCriteria, regex, WEBLOGIC_INDEX_KEY, false);
357-
358-
// Verify that occurrence of loggerName = WebLogicServer are not empty
359-
queryCriteria = "/_search?q=loggerName:WebLogicServer";
360-
verifyCountsHitsInSearchResults(queryCriteria, regex, WEBLOGIC_INDEX_KEY, false);
361-
362-
// Verify that occurrence of _type:doc are not empty
363-
queryCriteria = "/_search?q=_type:doc";
364-
verifyCountsHitsInSearchResults(queryCriteria, regex, WEBLOGIC_INDEX_KEY, false);
365-
366-
// Verify that serverName:managed-server1 is filtered out
367-
// by checking the count of logs from serverName:managed-server1 is zero and no failures
368-
regex = "(?m).*\\s*.*count\"\\s*:\\s*(\\d+),.*failed\"\\s*:\\s*(\\d+)";
369-
StringBuffer queryCriteriaBuff = new StringBuffer("/doc/_count?pretty")
370-
.append(" -H 'Content-Type: application/json'")
371-
.append(" -d'{\"query\":{\"query_string\":{\"query\":\"")
372-
.append(managedServerFilter)
373-
.append("\",\"fields\":[\"serverName\"],\"default_operator\": \"AND\"}}}'");
374-
375-
queryCriteria = queryCriteriaBuff.toString();
376-
verifyCountsHitsInSearchResults(queryCriteria, regex, WEBLOGIC_INDEX_KEY, true, "notExist");
377-
378-
logger.info("Query WebLogic log info succeeded");
379-
}
380-
381322
/**
382323
* Test when variable createLogStashConfigMap sets to true, a configMap named weblogic-operator-logstash-cm
383324
* is created and users can update logstash configuration by updating the configmap
@@ -447,33 +388,18 @@ private static String createAndVerifyDomainImage() {
447388

448389
// create image with model files
449390
if (!OKD) {
450-
String additionalBuildCommands = WORK_DIR + "/" + COPY_WLS_LOGGING_EXPORTER_FILE_NAME;
451-
StringBuffer additionalBuildFilesVarargsBuff = new StringBuffer()
452-
.append(WORK_DIR)
453-
.append("/")
454-
.append(WLS_LOGGING_EXPORTER_YAML_FILE_NAME)
455-
.append(",")
456-
.append(DOWNLOAD_DIR)
457-
.append("/")
458-
.append(WLE_DOWNLOAD_FILENAME_DEFAULT)
459-
.append(",")
460-
.append(DOWNLOAD_DIR)
461-
.append("/")
462-
.append(SNAKE_DOWNLOADED_FILENAME);
463-
464391
logger.info("Create image with model file and verify");
465-
miiImage = createMiiImageAndVerify(WLS_LOGGING_IMAGE_NAME, WLS_LOGGING_MODEL_FILE,
466-
MII_BASIC_APP_NAME, additionalBuildCommands, additionalBuildFilesVarargsBuff.toString());
392+
miiImage = createMiiImageAndVerify(WLS_ELK_LOGGING_IMAGE_NAME, WLS_ELK_LOGGING_MODEL_FILE,MII_BASIC_APP_NAME);
467393
} else {
468394
List<String> appList = new ArrayList<>();
469395
appList.add(MII_BASIC_APP_NAME);
470396

471397
// build the model file list
472-
final List<String> modelList = Collections.singletonList(MODEL_DIR + "/" + WLS_LOGGING_MODEL_FILE);
398+
final List<String> modelList = Collections.singletonList(MODEL_DIR + "/" + WLS_ELK_LOGGING_MODEL_FILE);
473399

474400
// create image with model files
475401
logger.info("Create image with model file and verify");
476-
miiImage = createMiiImageAndVerify(WLS_LOGGING_IMAGE_NAME, modelList, appList);
402+
miiImage = createMiiImageAndVerify(WLS_ELK_LOGGING_IMAGE_NAME, modelList, appList);
477403
}
478404

479405
// repo login and push image to registry if necessary

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@
117117
class ItElasticLoggingFluentd {
118118

119119
// constants for creating domain image using model in image
120-
private static final String WLS_LOGGING_MODEL_FILE = WORK_DIR + "/" + "new.model.wlslogging.yaml";
121-
private static final String WLS_LOGGING_IMAGE_NAME = "wls-logging-image";
120+
private static final String WLS_ELK_LOGGING_MODEL_FILE = WORK_DIR + "/" + "new.model.wlslogging.yaml";
121+
private static final String WLS_ELK_LOGGING_IMAGE_NAME = "wls-logging-image";
122122
private static final String FLUENTD_CONFIGMAP_YAML = "fluentd.configmap.elk.yaml";
123123

124124
// constants for Domain
@@ -315,7 +315,7 @@ private static String createAndVerifyDomainImage() {
315315
// create image with model files
316316
logger.info("Create image with model file and verify");
317317
String miiImage =
318-
createMiiImageAndVerify(WLS_LOGGING_IMAGE_NAME, WLS_LOGGING_MODEL_FILE, MII_BASIC_APP_NAME);
318+
createMiiImageAndVerify(WLS_ELK_LOGGING_IMAGE_NAME, WLS_ELK_LOGGING_MODEL_FILE, MII_BASIC_APP_NAME);
319319

320320
// repo login and push image to registry if necessary
321321
imageRepoLoginAndPushImageToRegistry(miiImage);
@@ -493,12 +493,12 @@ private String execSearchQuery(String queryCriteria, String index) {
493493
private static void modifyModelConfigfile() {
494494
final String sourceConfigFile = MODEL_DIR + "/model.wlslogging.yaml";
495495

496-
assertDoesNotThrow(() -> copy(Paths.get(sourceConfigFile), Paths.get(WLS_LOGGING_MODEL_FILE)),
496+
assertDoesNotThrow(() -> copy(Paths.get(sourceConfigFile), Paths.get(WLS_ELK_LOGGING_MODEL_FILE)),
497497
"copy model.wlslogging.yaml failed");
498498

499499
String[] deleteLineKeys
500500
= new String[]{"resources", "StartupClass", "LoggingExporterStartupClass", "ClassName", "Target"};
501-
try (RandomAccessFile file = new RandomAccessFile(WLS_LOGGING_MODEL_FILE, "rw")) {
501+
try (RandomAccessFile file = new RandomAccessFile(WLS_ELK_LOGGING_MODEL_FILE, "rw")) {
502502
String lineToKeep = "";
503503
String allLines = "";
504504
boolean fountit = false;
@@ -515,7 +515,7 @@ private static void modifyModelConfigfile() {
515515
allLines += lineToKeep + "\n";
516516
}
517517

518-
try (BufferedWriter writer = new BufferedWriter(new FileWriter(WLS_LOGGING_MODEL_FILE))) {
518+
try (BufferedWriter writer = new BufferedWriter(new FileWriter(WLS_ELK_LOGGING_MODEL_FILE))) {
519519
writer.write(allLines);
520520
} catch (Exception ex) {
521521
ex.printStackTrace();

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,6 @@ public interface TestConstants {
239239
+ FLUENTD_IMAGE_VERSION;
240240
public static final String JAVA_LOGGING_LEVEL_VALUE = "INFO";
241241

242-
public static final String WLS_LOGGING_EXPORTER_YAML_FILE_NAME = "WebLogicLoggingExporter.yaml";
243-
public static final String COPY_WLS_LOGGING_EXPORTER_FILE_NAME = "copy-logging-files-cmds.txt";
244-
245242
// MII image constants
246243
public static final String MII_BASIC_WDT_MODEL_FILE = "model-singleclusterdomain-sampleapp-wls.yaml";
247244
public static final String MII_BASIC_IMAGE_NAME = DOMAIN_IMAGES_REPO + "mii-basic-image";

integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/TestActions.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1821,21 +1821,6 @@ public static Map<String, String> verifyLoggingExporterReady(String opNamespace,
18211821
return LoggingExporter.verifyLoggingExporterReady(opNamespace, esNamespace, labelSelector, index);
18221822
}
18231823

1824-
// --------------------------- WebLogic Logging Exporter---------------------------------
1825-
/**
1826-
* Install WebLogic Logging Exporter.
1827-
*
1828-
* @param filter the value of weblogicLoggingExporterFilters to be added to WebLogic Logging Exporter YAML file
1829-
* @param wlsLoggingExporterYamlFileLoc the directory where WebLogic Logging Exporter YAML file stores
1830-
* @param namespace logging exporter publish host namespace
1831-
* @return true if WebLogic Logging Exporter is successfully installed, false otherwise.
1832-
*/
1833-
public static boolean installWlsLoggingExporter(String filter,
1834-
String wlsLoggingExporterYamlFileLoc, String namespace) {
1835-
return LoggingExporter.installWlsLoggingExporter(filter,
1836-
wlsLoggingExporterYamlFileLoc, namespace);
1837-
}
1838-
18391824
/**
18401825
* Patch the domain resource with a new restartVersion.
18411826
*

integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/LoggingExporter.java

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
// Copyright (c) 2020, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2020, 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.actions.impl;
55

6-
import java.nio.file.Files;
7-
import java.nio.file.Path;
8-
import java.nio.file.Paths;
9-
import java.nio.file.StandardOpenOption;
106
import java.util.Arrays;
117
import java.util.HashMap;
128
import java.util.List;
@@ -34,17 +30,13 @@
3430
import oracle.weblogic.kubernetes.assertions.impl.Deployment;
3531
import oracle.weblogic.kubernetes.logging.LoggingFacade;
3632
import oracle.weblogic.kubernetes.utils.ExecResult;
37-
import oracle.weblogic.kubernetes.utils.FileUtils;
3833

3934
import static oracle.weblogic.kubernetes.TestConstants.BUSYBOX_IMAGE;
4035
import static oracle.weblogic.kubernetes.TestConstants.BUSYBOX_TAG;
41-
import static oracle.weblogic.kubernetes.TestConstants.COPY_WLS_LOGGING_EXPORTER_FILE_NAME;
4236
import static oracle.weblogic.kubernetes.TestConstants.ELASTICSEARCH_HTTP_PORT;
4337
import static oracle.weblogic.kubernetes.TestConstants.IMAGE_PULL_POLICY;
4438
import static oracle.weblogic.kubernetes.TestConstants.KIBANA_INDEX_KEY;
4539
import static oracle.weblogic.kubernetes.TestConstants.OPERATOR_RELEASE_NAME;
46-
import static oracle.weblogic.kubernetes.TestConstants.WLS_LOGGING_EXPORTER_YAML_FILE_NAME;
47-
import static oracle.weblogic.kubernetes.actions.ActionConstants.WORK_DIR;
4840
import static oracle.weblogic.kubernetes.actions.TestActions.execCommand;
4941
import static oracle.weblogic.kubernetes.actions.TestActions.getOperatorPodName;
5042
import static oracle.weblogic.kubernetes.actions.impl.primitive.Installer.defaultInstallSnakeParams;
@@ -333,47 +325,6 @@ private static boolean downloadSnake() {
333325
.download();
334326
}
335327

336-
/**
337-
* Install WebLogic Logging Exporter.
338-
*
339-
* @param filter the value of weblogicLoggingExporterFilters to be added to WebLogic Logging Exporter YAML file
340-
* @param wlsLoggingExporterYamlFileLoc the directory where WebLogic Logging Exporter YAML file stores
341-
* @param namespace logging exporter publish host namespace
342-
* @return true if WebLogic Logging Exporter is successfully installed, false otherwise.
343-
*/
344-
public static boolean installWlsLoggingExporter(String filter,
345-
String wlsLoggingExporterYamlFileLoc, String namespace) {
346-
// Copy WebLogic Logging Exporter files to WORK_DIR
347-
String[] loggingExporterFiles =
348-
{WLS_LOGGING_EXPORTER_YAML_FILE_NAME, COPY_WLS_LOGGING_EXPORTER_FILE_NAME};
349-
350-
for (String loggingFile : loggingExporterFiles) {
351-
Path srcPath = Paths.get(wlsLoggingExporterYamlFileLoc, loggingFile);
352-
Path destPath = Paths.get(WORK_DIR, loggingFile);
353-
assertDoesNotThrow(() -> FileUtils.copy(srcPath, destPath),
354-
String.format("Failed to copy %s to %s", srcPath, destPath));
355-
assertDoesNotThrow(() -> FileUtils.replaceStringInFile(destPath.toString(), "default", namespace),
356-
String.format("Failed to replace namespace default to %s", namespace));
357-
logger.info("Copied {0} to {1}}", srcPath, destPath);
358-
}
359-
360-
// Add filter to weblogicLoggingExporterFilters in WebLogic Logging Exporter YAML file
361-
assertDoesNotThrow(() -> addFilterToElkFile(filter),
362-
"Failed to add WebLogic Logging Exporter filter");
363-
364-
// Download WebLogic Logging Exporter jar file
365-
if (!downloadWle()) {
366-
return false;
367-
}
368-
369-
// Download the YAML parser, SnakeYAML
370-
if (!downloadSnake()) {
371-
return false;
372-
}
373-
374-
return true;
375-
}
376-
377328
private static V1Deployment createElasticsearchDeploymentCr(LoggingExporterParams params) {
378329

379330
String elasticsearchName = params.getElasticsearchName();
@@ -562,19 +513,4 @@ private static String execLoggingExpStatusCheck(String opNamespace, String esNam
562513

563514
return statusLine.stdout();
564515
}
565-
566-
private static void addFilterToElkFile(String filter) throws Exception {
567-
String filterStr = new StringBuffer()
568-
.append(System.lineSeparator())
569-
.append("weblogicLoggingExporterFilters:")
570-
.append(System.lineSeparator())
571-
.append("- FilterExpression: NOT(SERVER = '")
572-
.append(filter)
573-
.append("')")
574-
.toString();
575-
logger.info("Command to add filter {0}", filterStr);
576-
577-
Files.write(Paths.get(WORK_DIR, WLS_LOGGING_EXPORTER_YAML_FILE_NAME),
578-
filterStr.getBytes(), StandardOpenOption.APPEND);
579-
}
580516
}

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -135,26 +135,6 @@ public static LoggingExporterParams installAndVerifyKibana(String namespace) {
135135
return kibanaParams;
136136
}
137137

138-
/**
139-
* Install WebLogic Logging Exporter.
140-
*
141-
* @param filter the value of weblogicLoggingExporterFilters to be added to WebLogic Logging Exporter YAML file
142-
* @param wlsLoggingExporterYamlFileLoc the directory where WebLogic Logging Exporter YAML file stores
143-
* @param namespace logging exporter publish host namespace
144-
* @return true if WebLogic Logging Exporter is successfully installed, false otherwise.
145-
*/
146-
public static boolean installAndVerifyWlsLoggingExporter(String filter,
147-
String wlsLoggingExporterYamlFileLoc, String namespace) {
148-
// Install WebLogic Logging Exporter
149-
assertThat(TestActions.installWlsLoggingExporter(filter,
150-
wlsLoggingExporterYamlFileLoc, namespace))
151-
.as("WebLogic Logging Exporter installation succeeds")
152-
.withFailMessage("WebLogic Logging Exporter installation failed")
153-
.isTrue();
154-
155-
return true;
156-
}
157-
158138
/**
159139
* Verify that the logging exporter is ready to use in Operator pod or WebLogic server pod.
160140
*

integration-tests/src/test/resources/wdt-models/model.wlslogging.yaml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2020, 2021, Oracle and/or its affiliates.
1+
# Copyright (c) 2020, 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
domainInfo:
@@ -24,8 +24,3 @@ topology:
2424
"cluster-1-template":
2525
Cluster: "cluster-1"
2626
ListenPort : 8001
27-
resources:
28-
StartupClass:
29-
LoggingExporterStartupClass:
30-
ClassName: weblogic.logging.exporter.Startup
31-
Target: 'cluster-1'

0 commit comments

Comments
 (0)