Skip to content

Commit 844e4b2

Browse files
authored
OWLS-90857 - Create copy of init container env variables for each sever pod to avoid the roll issue (#2458)
* OWLS-90857 - Create copy of init container env variables for each server to avoid the roll issue. * Added debug and javadoc. * Fix java doc and rename method to clarify the intent. * Changed the log level for pod dump message in case of roll and message for loading scripts in config map. * Changes as per PR review comments.
1 parent 469033c commit 844e4b2

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ void recordCurrentMap(Packet packet, V1ConfigMap configMap) {
203203

204204
static synchronized Map<String, String> loadScriptsFromClasspath(String domainNamespace) {
205205
Map<String, String> scripts = scriptReader.loadFilesFromClasspath();
206-
LOGGER.fine(MessageKeys.SCRIPT_LOADED, domainNamespace);
206+
LOGGER.finer(MessageKeys.SCRIPT_LOADED, domainNamespace);
207207
return scripts;
208208
}
209209

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import io.kubernetes.client.openapi.models.V1DeleteOptions;
1515
import io.kubernetes.client.openapi.models.V1EnvVar;
16+
import io.kubernetes.client.openapi.models.V1EnvVarBuilder;
1617
import io.kubernetes.client.openapi.models.V1ObjectMeta;
1718
import io.kubernetes.client.openapi.models.V1Pod;
1819
import io.kubernetes.client.openapi.models.V1PodCondition;
@@ -259,17 +260,20 @@ public static Step deletePodStep(String serverName, Step next) {
259260
return new DeletePodStep(serverName, next);
260261
}
261262

262-
static List<V1EnvVar> createCopy(List<V1EnvVar> envVars) {
263+
/**
264+
* Create a copy of the list of V1EnvVar environment variables.
265+
*
266+
* @param envVars list of environment variables to copy
267+
* @return List containing a copy of the original list.
268+
*/
269+
public static List<V1EnvVar> createCopy(List<V1EnvVar> envVars) {
263270
ArrayList<V1EnvVar> copy = new ArrayList<>();
264271
if (envVars != null) {
265272
for (V1EnvVar envVar : envVars) {
266273
// note that a deep copy of valueFrom is not needed here as, unlike with value, the
267274
// new V1EnvVarFrom objects would be created by the doDeepSubstitutions() method in
268275
// StepContextBase class.
269-
copy.add(new V1EnvVar()
270-
.name(envVar.getName())
271-
.value(envVar.getValue())
272-
.valueFrom(envVar.getValueFrom()));
276+
copy.add(new V1EnvVarBuilder(envVar).build());
273277
}
274278
}
275279
return copy;

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import io.kubernetes.client.openapi.models.V1SecretVolumeSource;
3838
import io.kubernetes.client.openapi.models.V1Volume;
3939
import io.kubernetes.client.openapi.models.V1VolumeMount;
40+
import io.kubernetes.client.util.Yaml;
4041
import jakarta.json.Json;
4142
import jakarta.json.JsonPatchBuilder;
4243
import oracle.kubernetes.operator.DomainSourceType;
@@ -545,11 +546,11 @@ private boolean canUseCurrentPod(V1Pod currentPod) {
545546

546547
boolean useCurrent = hasCorrectPodHash(currentPod) && canUseNewDomainZip(currentPod);
547548

548-
if (!useCurrent && AnnotationHelper.getDebugString(currentPod).length() > 0) {
549-
LOGGER.fine(
549+
if (!useCurrent) {
550+
LOGGER.finer(
550551
MessageKeys.POD_DUMP,
551-
AnnotationHelper.getDebugString(currentPod),
552-
AnnotationHelper.getDebugString(getPodModel()));
552+
Yaml.dump(currentPod),
553+
Yaml.dump(getPodModel()));
553554
}
554555

555556
return useCurrent;

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.kubernetes.client.openapi.models.V1Affinity;
1818
import io.kubernetes.client.openapi.models.V1Capabilities;
1919
import io.kubernetes.client.openapi.models.V1Container;
20+
import io.kubernetes.client.openapi.models.V1ContainerBuilder;
2021
import io.kubernetes.client.openapi.models.V1EnvVar;
2122
import io.kubernetes.client.openapi.models.V1HostPathVolumeSource;
2223
import io.kubernetes.client.openapi.models.V1NodeAffinity;
@@ -43,6 +44,7 @@
4344
import org.apache.commons.lang3.builder.ToStringBuilder;
4445

4546
import static java.util.Collections.emptyList;
47+
import static oracle.kubernetes.operator.helpers.PodHelper.createCopy;
4648

4749
class ServerPod extends KubernetesResource {
4850

@@ -443,7 +445,7 @@ void fillInFrom(ServerPod serverPod1) {
443445
addIfMissing(var);
444446
}
445447
for (V1Container c : serverPod1.getInitContainers()) {
446-
addInitContainerIfMissing(c);
448+
addInitContainerIfMissing(createWithEnvCopy(c));
447449
}
448450
for (V1Container c : serverPod1.getContainers()) {
449451
addContainerIfMissing(c);
@@ -492,6 +494,10 @@ private void addAuxiliaryImage(ServerPod serverPod1) {
492494
}
493495
}
494496

497+
private V1Container createWithEnvCopy(V1Container c) {
498+
return new V1ContainerBuilder(c).withEnv(createCopy(c.getEnv())).build();
499+
}
500+
495501
private void addIfMissing(V1Volume var) {
496502
if (!hasVolumeName(var.getName())) {
497503
addAdditionalVolume(var);

0 commit comments

Comments
 (0)