Skip to content

Commit dffa7ca

Browse files
authored
Merge pull request #910 from oracle/owls-72421
OWLS-72421 envvar macro substitution got wrong value for managed server pods
2 parents db83adb + a201e19 commit dffa7ca

File tree

6 files changed

+89
-4
lines changed

6 files changed

+89
-4
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.kubernetes.client.models.V1PodList;
1212
import io.kubernetes.client.models.V1Volume;
1313
import io.kubernetes.client.models.V1VolumeMount;
14-
import java.util.ArrayList;
1514
import java.util.List;
1615
import java.util.Map;
1716
import java.util.concurrent.atomic.AtomicBoolean;
@@ -98,7 +97,7 @@ protected List<V1VolumeMount> getAdditionalVolumeMounts() {
9897
List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
9998
// Pod for introspector job would use same environment variables as for admin server
10099
List<V1EnvVar> vars =
101-
new ArrayList<>(getDomain().getAdminServerSpec().getEnvironmentVariables());
100+
PodHelper.createCopy(getDomain().getAdminServerSpec().getEnvironmentVariables());
102101

103102
addEnvVar(vars, "NAMESPACE", getNamespace());
104103
addEnvVar(vars, "DOMAIN_UID", getDomainUID());

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ protected V1PodSpec createSpec(TuningParameters tuningParameters) {
116116

117117
@Override
118118
List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
119-
List<V1EnvVar> vars = new ArrayList<>(getServerSpec().getEnvironmentVariables());
119+
List<V1EnvVar> vars = createCopy(getServerSpec().getEnvironmentVariables());
120120
overrideContainerWeblogicEnvVars(vars);
121121
return vars;
122122
}
@@ -288,7 +288,7 @@ protected List<String> getContainerCommand() {
288288
@Override
289289
@SuppressWarnings("unchecked")
290290
List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
291-
List<V1EnvVar> envVars = (List<V1EnvVar>) packet.get(ProcessingConstants.ENVVARS);
291+
List<V1EnvVar> envVars = createCopy((List<V1EnvVar>) packet.get(ProcessingConstants.ENVVARS));
292292

293293
List<V1EnvVar> vars = new ArrayList<>();
294294
if (envVars != null) {
@@ -355,4 +355,14 @@ private Step deletePod(String name, String namespace, Step next) {
355355
.deletePodAsync(name, namespace, deleteOptions, new DefaultResponseStep<>(next));
356356
}
357357
}
358+
359+
public static List<V1EnvVar> createCopy(List<V1EnvVar> envVars) {
360+
ArrayList<V1EnvVar> copy = new ArrayList<>();
361+
if (envVars != null) {
362+
for (V1EnvVar envVar : envVars) {
363+
copy.add(new V1EnvVar().name(envVar.getName()).value(envVar.getValue()));
364+
}
365+
}
366+
return copy;
367+
}
358368
}

operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.kubernetes.client.models.V1Pod;
2525
import io.kubernetes.client.models.V1PodSpec;
2626
import io.kubernetes.client.models.V1Status;
27+
import java.lang.reflect.InvocationTargetException;
2728
import java.util.Collections;
2829
import java.util.List;
2930
import java.util.Map;
@@ -247,6 +248,20 @@ public void whenDomainHasEnvironmentItemsWithVariables_createAdminPodStartupWith
247248
hasEnvVar("item2", "ADMIN_SERVER is ADMIN_SERVER:7001")));
248249
}
249250

251+
@Test
252+
public void whenDomainHasEnvironmentItemsWithVariable_createPodShouldNotChangeItsValue()
253+
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
254+
final String ITEM_RAW_VALUE = "find uid1 at $(DOMAIN_HOME)";
255+
configureAdminServer().withEnvironmentVariable("item1", ITEM_RAW_VALUE);
256+
257+
getCreatedPod();
258+
259+
getConfiguredDomainSpec().getAdminServer().getEnv();
260+
assertThat(
261+
getConfiguredDomainSpec().getAdminServer().getEnv(),
262+
allOf(hasEnvVar("item1", ITEM_RAW_VALUE)));
263+
}
264+
250265
@Test
251266
public void createAdminPodStartupWithNullAdminUsernamePasswordEnvVarsValues() {
252267
configureAdminServer();

operator/src/test/java/oracle/kubernetes/operator/helpers/JobHelperTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import io.kubernetes.client.models.V1JobSpec;
1616
import io.kubernetes.client.models.V1ObjectMeta;
1717
import io.kubernetes.client.models.V1SecretReference;
18+
import java.lang.reflect.InvocationTargetException;
19+
import java.lang.reflect.Method;
1820
import java.util.List;
1921
import oracle.kubernetes.operator.ProcessingConstants;
2022
import oracle.kubernetes.operator.TuningParameters;
@@ -298,6 +300,31 @@ public void introspectorPodStartupWithNullAdminUsernamePasswordEnvVarValues() {
298300
allOf(hasEnvVar("ADMIN_USERNAME", null), hasEnvVar("ADMIN_PASSWORD", null)));
299301
}
300302

303+
@Test
304+
public void
305+
whenDomainHasEnvironmentItemsWithVariable_createIntrospectorPodShouldNotChangeItsValue()
306+
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
307+
DomainPresenceInfo domainPresenceInfo = createDomainPresenceInfo();
308+
309+
DomainConfigurator domainConfigurator =
310+
configureDomain(domainPresenceInfo).withEnvironmentVariable("item1", RAW_VALUE_1);
311+
312+
Packet packet = new Packet();
313+
packet
314+
.getComponents()
315+
.put(ProcessingConstants.DOMAIN_COMPONENT_NAME, Component.createFor(domainPresenceInfo));
316+
DomainIntrospectorJobStepContext domainIntrospectorJobStepContext =
317+
new DomainIntrospectorJobStepContext(domainPresenceInfo, packet);
318+
V1JobSpec jobSpec =
319+
domainIntrospectorJobStepContext.createJobSpec(TuningParameters.getInstance());
320+
321+
getContainerFromJobSpec(jobSpec, domainPresenceInfo.getDomainUID());
322+
323+
MatcherAssert.assertThat(
324+
getConfiguredDomainSpec(domainConfigurator).getEnv(),
325+
allOf(hasEnvVar("item1", RAW_VALUE_1)));
326+
}
327+
301328
@Test
302329
public void verify_introspectorPodSpec_activeDeadlineSeconds_initial_values() {
303330
DomainPresenceInfo domainPresenceInfo = createDomainPresenceInfo();
@@ -385,4 +412,15 @@ private V1Container getContainerFromJobSpec(V1JobSpec jobSpec, String domainUID)
385412
static Matcher<Iterable<? super V1EnvVar>> hasEnvVar(String name, String value) {
386413
return hasItem(new V1EnvVar().name(name).value(value));
387414
}
415+
416+
Method getDomainSpec;
417+
418+
DomainSpec getConfiguredDomainSpec(DomainConfigurator domainConfigurator)
419+
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
420+
if (getDomainSpec == null) {
421+
getDomainSpec = DomainConfigurator.class.getDeclaredMethod("getDomainSpec");
422+
getDomainSpec.setAccessible(true);
423+
}
424+
return (DomainSpec) getDomainSpec.invoke(domainConfigurator);
425+
}
388426
}

operator/src/test/java/oracle/kubernetes/operator/helpers/ManagedPodHelperTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,16 @@ public void createManagedPodStartupWithNullAdminUsernamePasswordEnvVarsValues()
164164
allOf(hasEnvVar("ADMIN_USERNAME", null), hasEnvVar("ADMIN_PASSWORD", null)));
165165
}
166166

167+
@Test
168+
public void whenPacketHasEnvironmentItemsWithVariable_createManagedPodShouldNotChangeItsValue() {
169+
V1EnvVar ENVVAR = toEnvVar(ITEM1, RAW_VALUE_1);
170+
testSupport.addToPacket(ProcessingConstants.ENVVARS, Arrays.asList(ENVVAR));
171+
172+
getCreatedPodSpecContainer();
173+
174+
assertThat(ENVVAR.getValue(), is(RAW_VALUE_1));
175+
}
176+
167177
@Test
168178
public void whenPacketHasClusterConfig_managedPodHasClusterLabel() {
169179
testSupport.addToPacket(ProcessingConstants.CLUSTER_NAME, CLUSTER_NAME);

operator/src/test/java/oracle/kubernetes/operator/helpers/PodHelperTestBase.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
import io.kubernetes.client.models.V1SecurityContext;
6363
import io.kubernetes.client.models.V1Volume;
6464
import io.kubernetes.client.models.V1VolumeMount;
65+
import java.lang.reflect.InvocationTargetException;
66+
import java.lang.reflect.Method;
6567
import java.util.ArrayList;
6668
import java.util.Collections;
6769
import java.util.HashSet;
@@ -147,6 +149,17 @@ DomainConfigurator getConfigurator() {
147149
return configurator;
148150
}
149151

152+
Method getDomainSpec;
153+
154+
DomainSpec getConfiguredDomainSpec()
155+
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
156+
if (getDomainSpec == null) {
157+
getDomainSpec = DomainConfigurator.class.getDeclaredMethod("getDomainSpec");
158+
getDomainSpec.setAccessible(true);
159+
}
160+
return (DomainSpec) getDomainSpec.invoke(configurator);
161+
}
162+
150163
@Before
151164
public void setUp() throws Exception {
152165
mementos.add(

0 commit comments

Comments
 (0)