2727import java .util .ArrayList ;
2828import java .util .Arrays ;
2929import java .util .Collections ;
30+ import java .util .HashMap ;
3031import java .util .List ;
31- import java .util .Objects ;
32+ import java .util .Map ;
3233import java .util .Set ;
3334import java .util .concurrent .atomic .AtomicBoolean ;
3435import 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 ;
0 commit comments