Skip to content

Commit fbd189d

Browse files
committed
Merge branch 'allowreadonly' into 'main'
support readOnlyRootFileSystem when specified See merge request weblogic-cloud/weblogic-kubernetes-operator!4942
2 parents 43658d3 + 7ddce5a commit fbd189d

File tree

11 files changed

+169
-37
lines changed

11 files changed

+169
-37
lines changed

common/src/main/java/oracle/kubernetes/common/CommonConstants.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2025, 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.kubernetes.common;
@@ -18,7 +18,8 @@ private CommonConstants() {
1818

1919
public static final String SCRIPTS_VOLUME = "weblogic-scripts-cm-volume";
2020
public static final String SCRIPTS_MOUNTS_PATH = "/weblogic-operator/scripts";
21-
21+
public static final String TMPDIR_VOLUME = "weblogic-tmpdir-volume";
22+
public static final String TMPDIR_MOUNTS_PATH = "/tmp";
2223
public static final String SECRETS_WEBHOOK_CERT = "/secrets/webhookCert";
2324
public static final String SECRETS_WEBHOOK_KEY = "/secrets/webhookKey";
2425

operator/src/main/java/oracle/kubernetes/operator/helpers/BasePodStepContext.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package oracle.kubernetes.operator.helpers;
55

66
import java.util.ArrayList;
7-
import java.util.Arrays;
87
import java.util.Collection;
98
import java.util.Collections;
109
import java.util.HashMap;
@@ -44,6 +43,8 @@
4443
import static oracle.kubernetes.common.CommonConstants.COMPATIBILITY_MODE;
4544
import static oracle.kubernetes.common.CommonConstants.SCRIPTS_MOUNTS_PATH;
4645
import static oracle.kubernetes.common.CommonConstants.SCRIPTS_VOLUME;
46+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_MOUNTS_PATH;
47+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_VOLUME;
4748
import static oracle.kubernetes.common.CommonConstants.WLS_SHARED;
4849
import static oracle.kubernetes.common.helpers.AuxiliaryImageEnvVars.AUXILIARY_IMAGE_PATHS;
4950
import static oracle.kubernetes.weblogic.domain.model.AuxiliaryImage.AUXILIARY_IMAGE_INTERNAL_VOLUME_NAME;
@@ -74,6 +75,13 @@ String getSizeLimit() {
7475
return info.getDomain().getAuxiliaryImageVolumeSizeLimit();
7576
}
7677

78+
boolean isReadOnlyRootFileSystem() {
79+
return Optional.ofNullable(getServerSpec())
80+
.map(EffectiveServerSpec::getContainerSecurityContext)
81+
.map(V1SecurityContext::getReadOnlyRootFilesystem)
82+
.orElse(false);
83+
}
84+
7785
String getMedium() {
7886
return info.getDomain().getAuxiliaryImageVolumeMedium();
7987
}
@@ -106,7 +114,7 @@ private boolean hasMatchingVolumeName(V1VolumeMount volumeMount) {
106114
abstract List<V1Volume> getFluentbitVolumes();
107115

108116
protected V1Container createPrimaryContainer() {
109-
return new V1Container()
117+
V1Container container = new V1Container()
110118
.name(getContainerName())
111119
.image(getServerSpec().getImage())
112120
.imagePullPolicy(getServerSpec().getImagePullPolicy())
@@ -115,6 +123,17 @@ protected V1Container createPrimaryContainer() {
115123
.envFrom(getEnvFrom())
116124
.resources(getResources())
117125
.securityContext(getServerSpec().getContainerSecurityContext());
126+
127+
if (isReadOnlyRootFileSystem()) {
128+
List<V1VolumeMount> mounts = container.getVolumeMounts();
129+
if (mounts == null) {
130+
mounts = new ArrayList<>();
131+
}
132+
mounts.add(new V1VolumeMount().name(TMPDIR_VOLUME).mountPath(TMPDIR_MOUNTS_PATH));
133+
container.volumeMounts(mounts);
134+
}
135+
136+
return container;
118137
}
119138

120139
protected abstract List<V1EnvFromSource> getEnvFrom();
@@ -160,11 +179,19 @@ protected V1Container createInitContainerForAuxiliaryImage(DeploymentImage auxil
160179
.imagePullPolicy(auxiliaryImage.getImagePullPolicy())
161180
.command(Collections.singletonList(AUXILIARY_IMAGE_INIT_CONTAINER_WRAPPER_SCRIPT))
162181
.env(createEnv(auxiliaryImage, getName(index)))
163-
.resources(createResources())
164-
.volumeMounts(Arrays.asList(
165-
new V1VolumeMount().name(AUXILIARY_IMAGE_INTERNAL_VOLUME_NAME)
166-
.mountPath(AUXILIARY_IMAGE_TARGET_PATH),
167-
new V1VolumeMount().name(SCRIPTS_VOLUME).mountPath(SCRIPTS_MOUNTS_PATH)));
182+
.resources(createResources());
183+
184+
List<V1VolumeMount> mounts = new ArrayList<>();
185+
186+
if (isReadOnlyRootFileSystem()) {
187+
mounts.add(new V1VolumeMount().name(TMPDIR_VOLUME).mountPath(TMPDIR_MOUNTS_PATH));
188+
}
189+
190+
mounts.add(new V1VolumeMount().name(AUXILIARY_IMAGE_INTERNAL_VOLUME_NAME)
191+
.mountPath(AUXILIARY_IMAGE_TARGET_PATH));
192+
mounts.add(new V1VolumeMount().name(SCRIPTS_VOLUME).mountPath(SCRIPTS_MOUNTS_PATH));
193+
194+
container.volumeMounts(mounts);
168195

169196
if (isInitializeDomainOnPV) {
170197
container.securityContext(PodSecurityHelper.getDefaultContainerSecurityContext());
@@ -247,6 +274,7 @@ protected V1PodSpec createPodSpec() {
247274
podSpec.addVolumesItem(additionalVolume);
248275
}
249276

277+
250278
return podSpec;
251279
}
252280

@@ -423,3 +451,4 @@ protected String getKubernetesPlatform() {
423451
return kubernetesPlatform;
424452
}
425453
}
454+

operator/src/main/java/oracle/kubernetes/operator/helpers/FluentbitHelper.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import oracle.kubernetes.weblogic.domain.model.DomainResource;
2222
import oracle.kubernetes.weblogic.domain.model.FluentbitSpecification;
2323

24+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_MOUNTS_PATH;
25+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_VOLUME;
2426
import static oracle.kubernetes.operator.helpers.StepContextConstants.FLUENTBIT_CONFIGMAP_NAME_SUFFIX;
2527
import static oracle.kubernetes.operator.helpers.StepContextConstants.FLUENTBIT_CONFIGMAP_VOLUME;
2628
import static oracle.kubernetes.operator.helpers.StepContextConstants.FLUENTBIT_CONFIG_DATA_NAME;
@@ -39,7 +41,7 @@ private FluentbitHelper() {
3941
* @param domain Domain.
4042
*/
4143
public static void addFluentbitContainer(FluentbitSpecification fluentbitSpecification, List<V1Container> containers,
42-
DomainResource domain, boolean isJobPod) {
44+
DomainResource domain, boolean isJobPod, boolean isReadOnlyRootFileSystem) {
4345
V1Container fluentbitContainer = new V1Container();
4446

4547
fluentbitContainer.name(FLUENTBIT_CONTAINER_NAME);
@@ -66,6 +68,11 @@ public static void addFluentbitContainer(FluentbitSpecification fluentbitSpecifi
6668
fluentbitSpecification.getVolumeMounts().forEach(fluentbitContainer::addVolumeMountsItem);
6769

6870
fluentbitContainer.addVolumeMountsItem(createFluentbitConfigmapVolumeMount());
71+
72+
if (isReadOnlyRootFileSystem) {
73+
fluentbitContainer.addVolumeMountsItem(new V1VolumeMount().name(TMPDIR_VOLUME).mountPath(TMPDIR_MOUNTS_PATH));
74+
}
75+
6976
containers.add(fluentbitContainer);
7077
}
7178

operator/src/main/java/oracle/kubernetes/operator/helpers/FluentdHelper.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import oracle.kubernetes.weblogic.domain.model.DomainResource;
2222
import oracle.kubernetes.weblogic.domain.model.FluentdSpecification;
2323

24+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_MOUNTS_PATH;
25+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_VOLUME;
2426
import static oracle.kubernetes.operator.helpers.StepContextConstants.FLUENTD_CONFIGMAP_NAME_SUFFIX;
2527
import static oracle.kubernetes.operator.helpers.StepContextConstants.FLUENTD_CONFIGMAP_VOLUME;
2628
import static oracle.kubernetes.operator.helpers.StepContextConstants.FLUENTD_CONFIG_DATA_NAME;
@@ -39,7 +41,7 @@ private FluentdHelper() {
3941
* @param domain Domain.
4042
*/
4143
public static void addFluentdContainer(FluentdSpecification fluentdSpecification, List<V1Container> containers,
42-
DomainResource domain, boolean isJobPod) {
44+
DomainResource domain, boolean isJobPod, boolean isReadOnlyRootFileSystem) {
4345

4446
V1Container fluentdContainer = new V1Container();
4547

@@ -69,6 +71,11 @@ public static void addFluentdContainer(FluentdSpecification fluentdSpecification
6971
.forEach(fluentdContainer::addVolumeMountsItem);
7072

7173
fluentdContainer.addVolumeMountsItem(createFluentdConfigmapVolumeMount());
74+
75+
if (isReadOnlyRootFileSystem) {
76+
fluentdContainer.addVolumeMountsItem(new V1VolumeMount().name(TMPDIR_VOLUME).mountPath(TMPDIR_MOUNTS_PATH));
77+
}
78+
7279
containers.add(fluentdContainer);
7380
}
7481

operator/src/main/java/oracle/kubernetes/operator/helpers/JobStepContext.java

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.kubernetes.client.extended.controller.reconciler.Result;
1818
import io.kubernetes.client.openapi.models.V1ConfigMapVolumeSource;
1919
import io.kubernetes.client.openapi.models.V1Container;
20+
import io.kubernetes.client.openapi.models.V1EmptyDirVolumeSource;
2021
import io.kubernetes.client.openapi.models.V1EnvFromSource;
2122
import io.kubernetes.client.openapi.models.V1EnvVar;
2223
import io.kubernetes.client.openapi.models.V1Job;
@@ -70,6 +71,8 @@
7071
import static oracle.kubernetes.common.CommonConstants.COMPATIBILITY_MODE;
7172
import static oracle.kubernetes.common.CommonConstants.SCRIPTS_MOUNTS_PATH;
7273
import static oracle.kubernetes.common.CommonConstants.SCRIPTS_VOLUME;
74+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_MOUNTS_PATH;
75+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_VOLUME;
7376
import static oracle.kubernetes.common.CommonConstants.WLS_SHARED;
7477
import static oracle.kubernetes.common.utils.CommonUtils.MAX_ALLOWED_VOLUME_NAME_LENGTH;
7578
import static oracle.kubernetes.common.utils.CommonUtils.VOLUME_NAME_SUFFIX;
@@ -301,6 +304,9 @@ String getJobCreatedMessageKey() {
301304
}
302305

303306
String getNodeManagerHome() {
307+
if (isReadOnlyRootFileSystem()) {
308+
return NODEMGR_HOME_READONLY_ROOT;
309+
}
304310
return NODEMGR_HOME;
305311
}
306312

@@ -493,23 +499,29 @@ private Optional<InitializeDomainOnPV> getInitializeDomainOnPV() {
493499
}
494500

495501
private void addInitDomainOnPVInitContainer(List<V1Container> initContainers) {
496-
initContainers.add(new V1Container()
497-
.name(INIT_DOMAIN_ON_PV_CONTAINER)
498-
.image(getDomain().getSpec().getImage())
499-
.volumeMounts(getDomain().getAdminServerSpec().getAdditionalVolumeMounts())
500-
.addVolumeMountsItem(new V1VolumeMount().name(SCRIPTS_VOLUME).mountPath(SCRIPTS_MOUNTS_PATH))
501-
.addVolumeMountsItem(new V1VolumeMount().name(AUXILIARY_IMAGE_INTERNAL_VOLUME_NAME)
502-
.mountPath(AUXILIARY_IMAGE_TARGET_PATH))
503-
.env(getDomain().getAdminServerSpec().getEnvironmentVariables())
504-
.addEnvItem(new V1EnvVar().name(DOMAIN_HOME).value(getDomainHome()))
505-
.addEnvItem(new V1EnvVar().name(ServerEnvVars.LOG_HOME).value(getEffectiveLogHome()))
506-
.addEnvItem(new V1EnvVar().name(ServerEnvVars.DOMAIN_HOME_ON_PV_DEFAULT_UGID)
507-
.value(getDomainHomeOnPVHomeOwnership()))
508-
.addEnvItem(new V1EnvVar().name(AuxiliaryImageEnvVars.AUXILIARY_IMAGE_TARGET_PATH)
509-
.value(AuxiliaryImageConstants.AUXILIARY_IMAGE_TARGET_PATH))
510-
.securityContext(getInitContainerSecurityContext())
511-
.command(List.of(INIT_DOMAIN_ON_PV_SCRIPT))
512-
);
502+
V1Container container = new V1Container()
503+
.name(INIT_DOMAIN_ON_PV_CONTAINER)
504+
.image(getDomain().getSpec().getImage())
505+
.volumeMounts(getDomain().getAdminServerSpec().getAdditionalVolumeMounts())
506+
.addVolumeMountsItem(new V1VolumeMount().name(SCRIPTS_VOLUME).mountPath(SCRIPTS_MOUNTS_PATH))
507+
.addVolumeMountsItem(new V1VolumeMount().name(AUXILIARY_IMAGE_INTERNAL_VOLUME_NAME)
508+
.mountPath(AUXILIARY_IMAGE_TARGET_PATH))
509+
.env(getDomain().getAdminServerSpec().getEnvironmentVariables())
510+
.addEnvItem(new V1EnvVar().name(DOMAIN_HOME).value(getDomainHome()))
511+
.addEnvItem(new V1EnvVar().name(ServerEnvVars.LOG_HOME).value(getEffectiveLogHome()))
512+
.addEnvItem(new V1EnvVar().name(ServerEnvVars.DOMAIN_HOME_ON_PV_DEFAULT_UGID)
513+
.value(getDomainHomeOnPVHomeOwnership()))
514+
.addEnvItem(new V1EnvVar().name(AuxiliaryImageEnvVars.AUXILIARY_IMAGE_TARGET_PATH)
515+
.value(AuxiliaryImageConstants.AUXILIARY_IMAGE_TARGET_PATH))
516+
.securityContext(getInitContainerSecurityContext())
517+
.command(List.of(INIT_DOMAIN_ON_PV_SCRIPT));
518+
519+
if (isReadOnlyRootFileSystem()) {
520+
container.addVolumeMountsItem(volumeMount(TMPDIR_VOLUME, TMPDIR_MOUNTS_PATH));
521+
}
522+
523+
initContainers.add(container);
524+
513525
}
514526

515527
@Override
@@ -633,6 +645,14 @@ protected V1PodSpec createPodSpec() {
633645
}
634646
}
635647

648+
if (isReadOnlyRootFileSystem()) {
649+
List<V1Volume> volumes = podSpec.getVolumes();
650+
if (volumes == null) {
651+
volumes = new ArrayList<>();
652+
}
653+
volumes.add(new V1Volume().name(TMPDIR_VOLUME).emptyDir(new V1EmptyDirVolumeSource().medium("Memory")));
654+
}
655+
636656
getConfigOverrideSecrets().forEach(secretName -> addConfigOverrideSecretVolume(podSpec, secretName));
637657
Optional.ofNullable(getConfigOverrides()).ifPresent(overrides -> addConfigOverrideVolume(podSpec, overrides));
638658

@@ -822,15 +842,15 @@ protected List<V1Container> getContainers() {
822842
.ifPresent(fluentd -> {
823843
if (Boolean.TRUE.equals(fluentd.getWatchIntrospectorLogs())) {
824844
FluentdHelper.addFluentdContainer(fluentd,
825-
containers, getDomain(), true);
845+
containers, getDomain(), true, isReadOnlyRootFileSystem());
826846
}
827847
});
828848

829849
Optional.ofNullable(getDomain().getFluentbitSpecification())
830850
.ifPresent(fluentbit -> {
831851
if (Boolean.TRUE.equals(fluentbit.getWatchIntrospectorLogs())) {
832852
FluentbitHelper.addFluentbitContainer(fluentbit,
833-
containers, getDomain(), true);
853+
containers, getDomain(), true, isReadOnlyRootFileSystem());
834854
}
835855
});
836856

operator/src/main/java/oracle/kubernetes/operator/helpers/PodStepContext.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.kubernetes.client.openapi.models.V1Container;
2929
import io.kubernetes.client.openapi.models.V1ContainerBuilder;
3030
import io.kubernetes.client.openapi.models.V1ContainerPort;
31+
import io.kubernetes.client.openapi.models.V1EmptyDirVolumeSource;
3132
import io.kubernetes.client.openapi.models.V1EnvFromSource;
3233
import io.kubernetes.client.openapi.models.V1EnvVar;
3334
import io.kubernetes.client.openapi.models.V1ExecAction;
@@ -89,6 +90,8 @@
8990
import static oracle.kubernetes.common.AuxiliaryImageConstants.AUXILIARY_IMAGE_VOLUME_NAME_OLD_PREFIX;
9091
import static oracle.kubernetes.common.AuxiliaryImageConstants.AUXILIARY_IMAGE_VOLUME_NAME_PREFIX;
9192
import static oracle.kubernetes.common.CommonConstants.COMPATIBILITY_MODE;
93+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_MOUNTS_PATH;
94+
import static oracle.kubernetes.common.CommonConstants.TMPDIR_VOLUME;
9295
import static oracle.kubernetes.common.helpers.AuxiliaryImageEnvVars.AUXILIARY_IMAGE_MOUNT_PATH;
9396
import static oracle.kubernetes.common.logging.MessageKeys.CYCLING_POD_EVICTED;
9497
import static oracle.kubernetes.common.logging.MessageKeys.CYCLING_POD_SPEC_CHANGED;
@@ -730,6 +733,9 @@ private List<V1Volume> getVolumes(String domainUid) {
730733
}
731734
volumes.addAll(getServerSpec().getAdditionalVolumes());
732735

736+
if (isReadOnlyRootFileSystem()) {
737+
volumes.add(new V1Volume().name(TMPDIR_VOLUME).emptyDir(new V1EmptyDirVolumeSource().medium("Memory")));
738+
}
733739
return volumes;
734740
}
735741

@@ -769,10 +775,13 @@ protected List<String> getContainerCommand() {
769775
protected List<V1Container> getContainers() {
770776
List<V1Container> containers = new ArrayList<>(getServerSpec().getContainers());
771777
exporterContext.addContainer(containers);
778+
boolean isReadOnlyRootFileSystem = isReadOnlyRootFileSystem();
772779
Optional.ofNullable(getDomain().getFluentdSpecification())
773-
.ifPresent(fluentd -> addFluentdContainer(fluentd, containers, getDomain(), false));
780+
.ifPresent(fluentd -> addFluentdContainer(fluentd, containers, getDomain(), false,
781+
isReadOnlyRootFileSystem));
774782
Optional.ofNullable(getDomain().getFluentbitSpecification())
775-
.ifPresent(fluentbit -> addFluentbitContainer(fluentbit, containers, getDomain(), false));
783+
.ifPresent(fluentbit -> addFluentbitContainer(fluentbit, containers, getDomain(),
784+
false, isReadOnlyRootFileSystem));
776785
return containers;
777786
}
778787

@@ -831,7 +840,7 @@ void addStartupEnvVars(List<V1EnvVar> vars) {
831840
addEnvVarIfTrue(isAdminServerProtocolChannelSecure(), vars, ServerEnvVars.ADMIN_SERVER_PORT_SECURE);
832841
addEnvVar(vars, ServerEnvVars.SERVER_NAME, getServerName());
833842
addEnvVar(vars, ServerEnvVars.DOMAIN_UID, getDomainUid());
834-
addEnvVar(vars, ServerEnvVars.NODEMGR_HOME, NODEMGR_HOME);
843+
addEnvVar(vars, ServerEnvVars.NODEMGR_HOME, getNodeManagerHome());
835844
addEnvVar(vars, ServerEnvVars.LOG_HOME, getEffectiveLogHome());
836845
if (getLogHomeLayout() == LogHomeLayoutType.FLAT) {
837846
addEnvVar(vars, ServerEnvVars.LOG_HOME_LAYOUT, getLogHomeLayout().toString());
@@ -862,6 +871,12 @@ protected void addAuxiliaryImageEnv(List<AuxiliaryImage> auxiliaryImageList, Lis
862871
});
863872
}
864873

874+
String getNodeManagerHome() {
875+
if (isReadOnlyRootFileSystem()) {
876+
return NODEMGR_HOME_READONLY_ROOT;
877+
}
878+
return NODEMGR_HOME;
879+
}
865880

866881
private String getDomainHome() {
867882
return getDomain().getDomainHome();
@@ -1590,7 +1605,7 @@ void addContainer(List<V1Container> containers) {
15901605
}
15911606

15921607
private V1Container createMonitoringExporterContainer() {
1593-
return new V1Container()
1608+
V1Container container = new V1Container()
15941609
.name(EXPORTER_CONTAINER_NAME)
15951610
.image(getDomain().getMonitoringExporterImage())
15961611
.imagePullPolicy(getDomain().getMonitoringExporterImagePullPolicy())
@@ -1599,6 +1614,12 @@ private V1Container createMonitoringExporterContainer() {
15991614
.addEnvItem(new V1EnvVar().name("JAVA_OPTS").value(createJavaOptions()))
16001615
.addPortsItem(new V1ContainerPort()
16011616
.name("metrics").protocol("TCP").containerPort(getPort()));
1617+
1618+
if (isReadOnlyRootFileSystem()) {
1619+
container.addVolumeMountsItem(new V1VolumeMount().name(TMPDIR_VOLUME).mountPath(TMPDIR_MOUNTS_PATH));
1620+
}
1621+
1622+
return container;
16021623
}
16031624

16041625
private String createJavaOptions() {

operator/src/main/java/oracle/kubernetes/operator/helpers/StepContextConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public interface StepContextConstants {
3232
String OPSS_WALLETFILE_MOUNT_PATH = "/weblogic-operator/opss-walletfile-secret";
3333
String DEBUG_CM_MOUNTS_PATH = "/weblogic-operator/debug";
3434
String NODEMGR_HOME = "/u01/nodemanager";
35+
String NODEMGR_HOME_READONLY_ROOT = "/tmp/nodemanager";
3536

3637
String INIT_DOMAIN_ON_PV_CONTAINER = "create-dh-dir";
3738
String INIT_DOMAIN_ON_PV_SCRIPT = "/weblogic-operator/scripts/initializeDomainHomeOnPV.sh";

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/DomainSpec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1221,7 +1221,7 @@ public boolean equals(Object other) {
12211221
.append(getMaxClusterConcurrentShutdown(), rhs.getMaxClusterConcurrentShutdown())
12221222
.append(getMaxClusterUnavailable(), rhs.getMaxClusterUnavailable())
12231223
.append(fluentdSpecification, rhs.getFluentdSpecification())
1224-
.append(fluentbitSpecification, rhs.getFluentbitSpecification())
1224+
.append(fluentbitSpecification, rhs.getFluentbitSpecification())
12251225
.append(replaceVariablesInJavaOptions, rhs.replaceVariablesInJavaOptions);
12261226
return builder.isEquals();
12271227
}

0 commit comments

Comments
 (0)