Skip to content

Commit ab9a229

Browse files
committed
Restriction substitutions to predefined variables
1 parent 2ac679d commit ab9a229

File tree

3 files changed

+28
-41
lines changed

3 files changed

+28
-41
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ static class AdminPodStepContext extends PodStepContext {
4141
AdminPodStepContext(Step conflictStep, Packet packet) {
4242
super(conflictStep, packet);
4343

44-
setPodModel(createPodModel());
44+
init();
4545
}
4646

4747
@Override
@@ -183,7 +183,7 @@ static class ManagedPodStepContext extends PodStepContext {
183183
scan = (WlsServerConfig) packet.get(ProcessingConstants.SERVER_SCAN);
184184
cluster = (WlsClusterConfig) packet.get(ProcessingConstants.CLUSTER_SCAN);
185185

186-
setPodModel(createPodModel());
186+
init();
187187
}
188188

189189
@Override

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

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@
2727
import java.util.ArrayList;
2828
import java.util.Arrays;
2929
import java.util.Collections;
30+
import java.util.HashMap;
3031
import java.util.List;
31-
import java.util.Objects;
32+
import java.util.Map;
3233
import java.util.Set;
3334
import java.util.concurrent.atomic.AtomicBoolean;
3435
import oracle.kubernetes.operator.KubernetesConstants;
@@ -68,14 +69,24 @@ public abstract class PodStepContext {
6869
private final DomainPresenceInfo info;
6970
private final Step conflictStep;
7071
private V1Pod podModel;
72+
private Map<String, String> substitutionVariables = new HashMap<>();
7173

7274
PodStepContext(Step conflictStep, Packet packet) {
7375
this.conflictStep = conflictStep;
7476
info = packet.getSPI(DomainPresenceInfo.class);
7577
}
7678

77-
void setPodModel(V1Pod podModel) {
78-
this.podModel = podModel;
79+
void init() {
80+
createSubstitutionMap();
81+
podModel = createPodModel();
82+
}
83+
84+
private void createSubstitutionMap() {
85+
substitutionVariables.put("DOMAIN_NAME", getDomainName());
86+
substitutionVariables.put("DOMAIN_HOME", getDomainHome());
87+
substitutionVariables.put("SERVER_NAME", getServerName());
88+
substitutionVariables.put("ADMIN_NAME", getAsName());
89+
substitutionVariables.put("ADMIN_PORT", getAsPort().toString());
7990
}
8091

8192
private V1Pod getPodModel() {
@@ -435,7 +446,7 @@ public NextAction onSuccess(Packet packet, CallResponse<V1Pod> callResponse) {
435446

436447
// ---------------------- model methods ------------------------------
437448

438-
V1Pod createPodModel() {
449+
private V1Pod createPodModel() {
439450
return new V1Pod().metadata(createMetadata()).spec(createSpec(TuningParameters.getInstance()));
440451
}
441452

@@ -524,13 +535,17 @@ protected List<String> getContainerCommand() {
524535
void overrideContainerWeblogicEnvVars(List<V1EnvVar> vars) {
525536
// Override the domain name, domain directory, admin server name and admin server port.
526537
addEnvVar(vars, "DOMAIN_NAME", getDomainName());
527-
addEnvVar(vars, "DOMAIN_HOME", "/shared/domain/" + getDomainName());
538+
addEnvVar(vars, "DOMAIN_HOME", getDomainHome());
528539
addEnvVar(vars, "ADMIN_NAME", getAsName());
529540
addEnvVar(vars, "ADMIN_PORT", getAsPort().toString());
530541
addEnvVar(vars, "SERVER_NAME", getServerName());
531542
hideAdminUserCredentials(vars);
532543
}
533544

545+
private String getDomainHome() {
546+
return "/shared/domain/" + getDomainName();
547+
}
548+
534549
// Hide the admin account's user name and password.
535550
// Note: need to use null v.s. "" since if you upload a "" to kubectl then download it,
536551
// it comes back as a null and V1EnvVar.equals returns false even though it's supposed to
@@ -548,24 +563,16 @@ static void addEnvVar(List<V1EnvVar> vars, String name, String value) {
548563
}
549564

550565
void doSubstitution(List<V1EnvVar> vars) {
551-
boolean runAgain = true;
552-
while (runAgain) {
553-
runAgain = false;
554-
for (V1EnvVar var : vars) {
555-
String newValue = translate(var.getValue(), vars);
556-
if (!Objects.equals(var.getValue(), newValue)) {
557-
runAgain = true;
558-
var.setValue(newValue);
559-
}
560-
}
566+
for (V1EnvVar var : vars) {
567+
var.setValue(translate(var.getValue()));
561568
}
562569
}
563570

564-
private String translate(String rawValue, List<V1EnvVar> vars) {
571+
private String translate(String rawValue) {
565572
String result = rawValue;
566-
for (V1EnvVar var : vars) {
567-
if (result != null && var.getValue() != null) {
568-
result = result.replace(String.format("$(%s)", var.getName()), var.getValue());
573+
for (Map.Entry<String, String> entry : substitutionVariables.entrySet()) {
574+
if (result != null && entry.getValue() != null) {
575+
result = result.replace(String.format("$(%s)", entry.getKey()), entry.getValue());
569576
}
570577
}
571578
return result;

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -268,26 +268,6 @@ public void whenDomainPresenceHasEnvironmentItemsWithVariables_createAdminPodSta
268268
hasEnvVar("item2", "ADMIN_SERVER is ADMIN_SERVER:7001")));
269269
}
270270

271-
@Test
272-
public void whenDomainPresenceHasIterativeVariables_createAdminPodStartupWithThem() {
273-
domainPresenceInfo
274-
.getDomain()
275-
.getSpec()
276-
.setServerStartup(
277-
new ServerStartupListBuilder(ADMIN_SERVER)
278-
.withVar("item1", "from $(item3)")
279-
.withVar("item2", "<$(DOMAIN_NAME)>")
280-
.withVar("item3", "using $(item2)")
281-
.build());
282-
283-
assertThat(
284-
getCreatedPodSpecContainer().getEnv(),
285-
allOf(
286-
hasEnvVar("item1", "from using <domain1>"),
287-
hasEnvVar("item2", "<domain1>"),
288-
hasEnvVar("item3", "using <domain1>")));
289-
}
290-
291271
static class ServerStartupListBuilder {
292272
private String serverName;
293273
private List<V1EnvVar> vars = new ArrayList<>();

0 commit comments

Comments
 (0)