Skip to content

Commit b2d14a5

Browse files
committed
Merge branch 'backportmon34' into 'release/3.4'
Backport changes for monitoring exporter image paths and naming See merge request weblogic-cloud/weblogic-kubernetes-operator!4357
2 parents 0310144 + cc61db3 commit b2d14a5

File tree

7 files changed

+281
-74
lines changed

7 files changed

+281
-74
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class ItMonitoringExporterSamples {
154154
private static Map<String, Integer> clusterNameMsPortMap;
155155
private static LoggingFacade logger = null;
156156
private static List<String> clusterNames = new ArrayList<>();
157-
private static String releaseSuffix = "test3";
157+
private static String releaseSuffix = "testsamples";
158158
private static String prometheusReleaseName = "prometheus" + releaseSuffix;
159159
private static String grafanaReleaseName = "grafana" + releaseSuffix;
160160
private static String monitoringExporterDir;
@@ -211,8 +211,6 @@ public static void initAll(@Namespaces(6) List<String> namespaces) {
211211

212212
logger.info("install monitoring exporter");
213213
installMonitoringExporter(monitoringExporterDir);
214-
assertDoesNotThrow(() -> replaceStringInFile(monitoringExporterEndToEndDir + "/grafana/values.yaml",
215-
"pvc-grafana", "pvc-" + grafanaReleaseName));
216214

217215
logger.info("create and verify WebLogic domain image using model in image with model files");
218216
miiImage = createAndVerifyMiiImage(monitoringExporterAppDir, MODEL_DIR + "/" + MONEXP_MODEL_FILE,
@@ -267,7 +265,7 @@ void testEndToEndViaChart() throws Exception {
267265
if (!OKD) {
268266
ingressHost2List
269267
= createIngressForDomainAndVerify(domain2Uid, domain2Namespace, 0, clusterNameMsPortMap,
270-
false, nginxHelmParams.getIngressClassName(), false, 0);
268+
true, nginxHelmParams.getIngressClassName(), false, 0);
271269
logger.info("verify access to Monitoring Exporter");
272270
verifyMonExpAppAccessThroughNginx(ingressHost2List.get(0), managedServersCount, nodeportshttp);
273271
} else {
@@ -417,7 +415,8 @@ private void installPrometheusGrafana(String promChartVersion,
417415
if (grafanaHelmParams == null) {
418416
grafanaHelmParams = installAndVerifyGrafana(grafanaReleaseName,
419417
monitoringNS,
420-
monitoringExporterEndToEndDir + "/grafana/values.yaml",
418+
Paths.get(RESULTS_ROOT, this.getClass().getSimpleName(),
419+
grafanaReleaseName).toString(),
421420
grafanaChartVersion);
422421
assertNotNull(grafanaHelmParams, "Grafana failed to install");
423422
String hostPortGrafana = K8S_NODEPORT_HOST + ":" + grafanaHelmParams.getNodePort();

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class ItMonitoringExporterSideCar {
119119
private static Map<String, Integer> clusterNameMsPortMap;
120120
private static LoggingFacade logger = null;
121121
private static List<String> clusterNames = new ArrayList<>();
122-
private static String releaseSuffix = "test1";
122+
private static String releaseSuffix = "testsidecar";
123123
private static String prometheusReleaseName = "prometheus" + releaseSuffix;
124124
private static String grafanaReleaseName = "grafana" + releaseSuffix;
125125
private static String monitoringExporterDir;
@@ -429,7 +429,8 @@ private void installPrometheusGrafana(String promChartVersion,
429429
//logger.info("Node Port for Grafana is " + nodeportgrafana);
430430
grafanaHelmParams = installAndVerifyGrafana(grafanaReleaseName,
431431
monitoringNS,
432-
monitoringExporterEndToEndDir + "/grafana/values.yaml",
432+
Paths.get(RESULTS_ROOT, this.getClass().getSimpleName(),
433+
grafanaReleaseName).toString(),
433434
grafanaChartVersion);
434435
assertNotNull(grafanaHelmParams, "Grafana failed to install");
435436
String hostPortGrafana = K8S_NODEPORT_HOST + ":" + grafanaHelmParams.getNodePort();

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.junit.jupiter.api.AfterAll;
3636
import org.junit.jupiter.api.BeforeAll;
3737
import org.junit.jupiter.api.DisplayName;
38+
import org.junit.jupiter.api.Tag;
3839
import org.junit.jupiter.api.Test;
3940
import org.yaml.snakeyaml.Yaml;
4041

@@ -57,7 +58,6 @@
5758
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.copyFileToPod;
5859
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteNamespace;
5960
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.exec;
60-
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
6161
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.createIngressForDomainAndVerify;
6262
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyNginx;
6363
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus;
@@ -90,6 +90,7 @@
9090
*/
9191
@DisplayName("Verify WebLogic Metric is processed as expected by MonitoringExporter WebApp via Prometheus and Grafana")
9292
@IntegrationTest
93+
@Tag("kind-sequential")
9394
class ItMonitoringExporterWebApp {
9495

9596
// domain constants
@@ -126,7 +127,7 @@ class ItMonitoringExporterWebApp {
126127
private static Map<String, Integer> clusterNameMsPortMap;
127128
private static LoggingFacade logger = null;
128129
private static List<String> clusterNames = new ArrayList<>();
129-
private static String releaseSuffix = "test2";
130+
private static String releaseSuffix = "testwebapp";
130131
private static String prometheusReleaseName = "prometheus" + releaseSuffix;
131132
private static String grafanaReleaseName = "grafana" + releaseSuffix;
132133
private static String monitoringExporterDir;
@@ -180,8 +181,6 @@ public static void initAll(@Namespaces(6) List<String> namespaces) {
180181

181182
logger.info("install monitoring exporter");
182183
installMonitoringExporter(monitoringExporterDir);
183-
assertDoesNotThrow(() -> replaceStringInFile(monitoringExporterEndToEndDir + "/grafana/values.yaml",
184-
"pvc-grafana", "pvc-" + grafanaReleaseName));
185184

186185
logger.info("create and verify WebLogic domain image using model in image with model files");
187186
miiImage = MonitoringUtils.createAndVerifyMiiImage(monitoringExporterAppDir, MODEL_DIR + "/" + MONEXP_MODEL_FILE,
@@ -428,7 +427,8 @@ private void installPrometheusGrafana(String promChartVersion,
428427
//logger.info("Node Port for Grafana is " + nodeportgrafana);
429428
grafanaHelmParams = installAndVerifyGrafana(grafanaReleaseName,
430429
monitoringNS,
431-
monitoringExporterEndToEndDir + "/grafana/values.yaml",
430+
Paths.get(RESULTS_ROOT, this.getClass().getSimpleName(),
431+
grafanaReleaseName).toString(),
432432
grafanaChartVersion);
433433
assertNotNull(grafanaHelmParams, "Grafana failed to install");
434434
String hostPortGrafana = K8S_NODEPORT_HOST + ":" + grafanaHelmParams.getNodePort();

integration-tests/src/test/java/oracle/weblogic/kubernetes/assertions/TestAssertions.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.io.IOException;
77
import java.time.OffsetDateTime;
8+
import java.util.List;
89
import java.util.Map;
910
import java.util.concurrent.Callable;
1011

@@ -35,6 +36,7 @@
3536
import oracle.weblogic.kubernetes.logging.LoggingFacade;
3637

3738
import static oracle.weblogic.kubernetes.actions.TestActions.listSecrets;
39+
import static oracle.weblogic.kubernetes.utils.ApplicationUtils.callWebAppAndCheckForServerNameInResponse;
3840
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
3941

4042
/**
@@ -815,4 +817,19 @@ public static Callable<Boolean> searchPodLogForKey(V1Pod pod, String searchKey)
815817
return () -> oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.getPodLog(pod.getMetadata().getName(),
816818
pod.getMetadata().getNamespace()).contains(searchKey);
817819
}
820+
821+
/**
822+
* Verify the web app can be accessed from all managed servers in the domain through Load Balancer.
823+
* @param curlCmd curl command to call the sample app
824+
* @param managedServerNames managed server names that the sample app response should return
825+
* @param maxIterations max iterations to call the curl command
826+
* @return true if the web app can hit all managed servers, false otherwise
827+
*/
828+
public static Callable<Boolean> callTestWebAppAndCheckForServerNameInResponse(String curlCmd,
829+
List<String> managedServerNames,
830+
int maxIterations) {
831+
return () ->
832+
callWebAppAndCheckForServerNameInResponse(curlCmd, managedServerNames, maxIterations);
833+
}
834+
818835
}

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

Lines changed: 99 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,37 @@
4040
import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams;
4141
import oracle.weblogic.kubernetes.actions.impl.primitive.HelmParams;
4242
import oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes;
43+
import oracle.weblogic.kubernetes.assertions.TestAssertions;
4344
import oracle.weblogic.kubernetes.assertions.impl.ClusterRole;
4445
import oracle.weblogic.kubernetes.assertions.impl.ClusterRoleBinding;
4546
import oracle.weblogic.kubernetes.logging.LoggingFacade;
4647
import org.apache.commons.io.FileUtils;
4748

4849
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_PASSWORD_DEFAULT;
4950
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_USERNAME_DEFAULT;
51+
import static oracle.weblogic.kubernetes.TestConstants.BUSYBOX_IMAGE;
52+
import static oracle.weblogic.kubernetes.TestConstants.BUSYBOX_TAG;
5053
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_API_VERSION;
54+
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_IMAGE_NAME;
55+
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_IMAGE_TAG;
5156
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_NAME;
5257
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_URL;
5358
import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST;
5459
import static oracle.weblogic.kubernetes.TestConstants.MANAGED_SERVER_NAME_BASE;
5560
import static oracle.weblogic.kubernetes.TestConstants.MONITORING_EXPORTER_BRANCH;
5661
import static oracle.weblogic.kubernetes.TestConstants.MONITORING_EXPORTER_WEBAPP_VERSION;
5762
import static oracle.weblogic.kubernetes.TestConstants.OKD;
63+
import static oracle.weblogic.kubernetes.TestConstants.OKE_CLUSTER;
64+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_ALERT_MANAGER_IMAGE_NAME;
65+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_ALERT_MANAGER_IMAGE_TAG;
66+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_CONFIG_MAP_RELOAD_IMAGE_NAME;
67+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_CONFIG_MAP_RELOAD_IMAGE_TAG;
68+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_IMAGE_NAME;
69+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_IMAGE_TAG;
70+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_NODE_EXPORTER_IMAGE_NAME;
71+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_NODE_EXPORTER_IMAGE_TAG;
72+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_PUSHGATEWAY_IMAGE_NAME;
73+
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_PUSHGATEWAY_IMAGE_TAG;
5874
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_REPO_NAME;
5975
import static oracle.weblogic.kubernetes.TestConstants.PROMETHEUS_REPO_URL;
6076
import static oracle.weblogic.kubernetes.TestConstants.RESULTS_ROOT;
@@ -73,6 +89,7 @@
7389
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
7490
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort;
7591
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
92+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.withLongRetryPolicy;
7693
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
7794
import static oracle.weblogic.kubernetes.utils.FileUtils.checkFile;
7895
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
@@ -315,15 +332,48 @@ public static PrometheusParams installAndVerifyPrometheus(String promReleaseSuff
315332
assertDoesNotThrow(() -> Files.copy(srcPromFile, targetPromFile,
316333
StandardCopyOption.REPLACE_EXISTING)," Failed to copy files");
317334
String oldValue = "regex: default;domain1";
318-
assertDoesNotThrow(() -> replaceStringInFile(targetPromFile.toString(),
319-
oldValue,
320-
prometheusRegexValue), "Failed to replace String ");
321-
assertDoesNotThrow(() -> replaceStringInFile(targetPromFile.toString(),
322-
"pvc-alertmanager",
323-
"pvc-alertmanager" + promReleaseSuffix), "Failed to replace String ");;
324-
assertDoesNotThrow(() -> replaceStringInFile(targetPromFile.toString(),
325-
"pvc-prometheus",
326-
"pvc-" + prometheusReleaseName),"Failed to replace String ");
335+
logger.info("copy the promvalues.yaml to staging location");
336+
assertDoesNotThrow(() -> {
337+
replaceStringInFile(targetPromFile.toString(),
338+
oldValue,
339+
prometheusRegexValue);
340+
replaceStringInFile(targetPromFile.toString(),
341+
"pvc-alertmanager",
342+
"pvc-alertmanager" + promReleaseSuffix);
343+
replaceStringInFile(targetPromFile.toString(),
344+
"pvc-prometheus",
345+
"pvc-" + prometheusReleaseName);
346+
replaceStringInFile(targetPromFile.toString(),
347+
"pushgateway_image",
348+
PROMETHEUS_PUSHGATEWAY_IMAGE_NAME);
349+
replaceStringInFile(targetPromFile.toString(),
350+
"pushgateway_tag",
351+
PROMETHEUS_PUSHGATEWAY_IMAGE_TAG);
352+
replaceStringInFile(targetPromFile.toString(),
353+
"prometheus_image",
354+
PROMETHEUS_IMAGE_NAME);
355+
replaceStringInFile(targetPromFile.toString(),
356+
"prometheus_tag",
357+
PROMETHEUS_IMAGE_TAG);
358+
replaceStringInFile(targetPromFile.toString(),
359+
"prometheus_alertmanager_image",
360+
PROMETHEUS_ALERT_MANAGER_IMAGE_NAME);
361+
replaceStringInFile(targetPromFile.toString(),
362+
"prometheus_alertmanager_tag",
363+
PROMETHEUS_ALERT_MANAGER_IMAGE_TAG);
364+
replaceStringInFile(targetPromFile.toString(),
365+
"prometheus_configmap_reload_image",
366+
PROMETHEUS_CONFIG_MAP_RELOAD_IMAGE_NAME);
367+
replaceStringInFile(targetPromFile.toString(),
368+
"prometheus_configmap_reload_tag",
369+
PROMETHEUS_CONFIG_MAP_RELOAD_IMAGE_TAG);
370+
replaceStringInFile(targetPromFile.toString(),
371+
"prometheus_node_exporter_image",
372+
PROMETHEUS_NODE_EXPORTER_IMAGE_NAME);
373+
replaceStringInFile(targetPromFile.toString(),
374+
"prometheus_node_exporter_tag",
375+
PROMETHEUS_NODE_EXPORTER_IMAGE_TAG);
376+
}, "Failed to create " + targetPromFile);
327377
if (OKD) {
328378
assertDoesNotThrow(() -> replaceStringInFile(targetPromFile.toString(),
329379
"65534",
@@ -389,23 +439,53 @@ public static PrometheusParams installAndVerifyPrometheus(String promReleaseSuff
389439
*
390440
* @param grafanaReleaseName the grafana release name
391441
* @param grafanaNamespace the grafana namespace in which the operator will be installed
392-
* @param grafanaValueFile the grafana value.yaml file path
442+
* @param grafanaHelmValuesFileDir the grafana helm values.yaml file directory
393443
* @param grafanaVersion the version of the grafana helm chart
394444
* @return the grafana Helm installation parameters
395445
*/
396446
public static GrafanaParams installAndVerifyGrafana(String grafanaReleaseName,
397447
String grafanaNamespace,
398-
String grafanaValueFile,
448+
String grafanaHelmValuesFileDir,
399449
String grafanaVersion) {
400450
LoggingFacade logger = getLogger();
451+
logger.info("create a staging location for grafana scripts");
452+
Path fileTemp = Paths.get(grafanaHelmValuesFileDir);
453+
assertDoesNotThrow(() -> FileUtils.deleteDirectory(fileTemp.toFile()),"Failed to delete temp dir for grafana");
454+
455+
assertDoesNotThrow(() -> Files.createDirectories(fileTemp), "Failed to create temp dir for grafana");
456+
457+
logger.info("copy the grafanavalues.yaml to staging location");
458+
Path srcGrafanaFile = Paths.get(RESOURCE_DIR, "exporter", "grafanavalues.yaml");
459+
Path targetGrafanaFile = Paths.get(fileTemp.toString(), "grafanavalues.yaml");
460+
assertDoesNotThrow(() -> Files.copy(srcGrafanaFile, targetGrafanaFile,
461+
StandardCopyOption.REPLACE_EXISTING)," Failed to copy files");
462+
assertDoesNotThrow(() -> replaceStringInFile(targetGrafanaFile.toString(),
463+
"pvc-grafana", "pvc-" + grafanaReleaseName));
464+
assertDoesNotThrow(() -> replaceStringInFile(targetGrafanaFile.toString(),
465+
"grafana_image",
466+
GRAFANA_IMAGE_NAME),"Failed to replace String ");
467+
assertDoesNotThrow(() -> replaceStringInFile(targetGrafanaFile.toString(),
468+
"grafana_tag",
469+
GRAFANA_IMAGE_TAG),"Failed to replace String ");
470+
assertDoesNotThrow(() -> replaceStringInFile(targetGrafanaFile.toString(),
471+
"busybox_image",
472+
BUSYBOX_IMAGE), "Failed to replace String ");
473+
assertDoesNotThrow(() -> replaceStringInFile(targetGrafanaFile.toString(),
474+
"busybox_tag",
475+
BUSYBOX_TAG), "Failed to replace String ");
476+
477+
if (!OKE_CLUSTER) {
478+
assertDoesNotThrow(() -> replaceStringInFile(targetGrafanaFile.toString(),
479+
"enabled: false", "enabled: true"));
480+
}
401481
// Helm install parameters
402482
HelmParams grafanaHelmParams = new HelmParams()
403483
.releaseName(grafanaReleaseName)
404484
.namespace(grafanaNamespace)
405485
.repoUrl(GRAFANA_REPO_URL)
406486
.repoName(GRAFANA_REPO_NAME)
407487
.chartName("grafana")
408-
.chartValuesFile(grafanaValueFile);
488+
.chartValuesFile(targetGrafanaFile.toString());
409489

410490
if (grafanaVersion != null) {
411491
grafanaHelmParams.chartVersion(grafanaVersion);
@@ -429,6 +509,7 @@ public static GrafanaParams installAndVerifyGrafana(String grafanaReleaseName,
429509
logger.info("Installing grafana in namespace {0}", grafanaNamespace);
430510
int grafanaNodePort = getNextFreePort();
431511
logger.info("Installing grafana with node port {0}", grafanaNodePort);
512+
assertDoesNotThrow(() -> logger.info(Files.readString(targetGrafanaFile)));
432513
// grafana chart values to override
433514
GrafanaParams grafanaParams = new GrafanaParams()
434515
.helmParams(grafanaHelmParams)
@@ -454,7 +535,7 @@ public static GrafanaParams installAndVerifyGrafana(String grafanaReleaseName,
454535
logger.info("Wait for the grafana pod is ready in namespace {0}", grafanaNamespace);
455536
testUntil(
456537
assertDoesNotThrow(() -> isGrafanaReady(grafanaNamespace),
457-
"grafanaIsReady failed with ApiException"),
538+
"grafanaIsReady failed with ApiException"),
458539
logger,
459540
"grafana to be running in namespace {0}",
460541
grafanaNamespace);
@@ -789,12 +870,11 @@ public static void verifyMonExpAppAccessThroughNginx(String nginxHost, int repli
789870
ADMIN_PASSWORD_DEFAULT,
790871
K8S_NODEPORT_HOST,
791872
nodeport);
792-
assertThat(callWebAppAndCheckForServerNameInResponse(curlCmd, managedServerNames, 50))
793-
.as("Verify NGINX can access the monitoring exporter metrics "
794-
+ "from all managed servers in the domain via http")
795-
.withFailMessage("NGINX can not access the monitoring exporter metrics "
796-
+ "from one or more of the managed servers via http")
797-
.isTrue();
873+
testUntil(withLongRetryPolicy,
874+
TestAssertions.callTestWebAppAndCheckForServerNameInResponse(curlCmd, managedServerNames, 200),
875+
logger,
876+
"Verify NGINX can access the monitoring exporter metrics \n"
877+
+ "from all managed servers in the domain via http");
798878
}
799879

800880
/**
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright (c) 2022, 2023, Oracle and/or its affiliates.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
3+
4+
image:
5+
repository: grafana_image
6+
# Overrides the Grafana image tag whose default is the chart appVersion
7+
tag: "grafana_tag"
8+
sha: ""
9+
pullPolicy: IfNotPresent
10+
11+
persistence:
12+
enabled: true
13+
existingClaim: pvc-grafana
14+
service:
15+
type: NodePort
16+
port: 80
17+
targetPort: 3000
18+
nodePort: 31000
19+
20+
admin:
21+
existingSecret: "grafana-secret"
22+
userKey: username
23+
passwordKey: password
24+
25+
initChownData:
26+
enabled: false
27+
image:
28+
repository: busybox_image
29+
tag: "busybox_tag"
30+
sha: ""
31+
pullPolicy: IfNotPresent
32+
33+
securityContext:
34+
fsGroup: 1000
35+
runAsGroup: 1000
36+
runAsUser: 1000

0 commit comments

Comments
 (0)