From e95da7d81f833825baa82b62c1ff6faab5c64470 Mon Sep 17 00:00:00 2001 From: Russell Gold Date: Wed, 31 Mar 2021 14:36:09 -0400 Subject: [PATCH] Don't roll on upgrades from 3.0 (#2292) * Don't roll pods when upgrading from 3.0.* * Take downtime for operator while updating image Co-authored-by: Ryan Eberhard --- documentation/charts/index.yaml | 46 +- .../charts/weblogic-operator-3.2.0.tgz | Bin 11439 -> 11439 bytes .../templates/_operator-dep.tpl | 2 + .../operator/helpers/PodHelper.java | 10 + .../operator/helpers/PodStepContext.java | 31 +- .../operator/helpers/AdminPodHelperTest.java | 14 +- .../helpers/ManagedPodHelperTest.java | 14 +- .../operator/helpers/PodHelperTestBase.java | 41 +- .../operator/helpers/ReferenceObjects.java | 527 +++++++++++++++++- 9 files changed, 641 insertions(+), 44 deletions(-) diff --git a/documentation/charts/index.yaml b/documentation/charts/index.yaml index 7884d7e0d1c..9be7c121367 100644 --- a/documentation/charts/index.yaml +++ b/documentation/charts/index.yaml @@ -3,9 +3,9 @@ entries: weblogic-operator: - apiVersion: v1 appVersion: 3.2.0 - created: "2021-03-01T11:49:25.929734-05:00" + created: "2021-03-30T11:24:31.829893-04:00" description: Helm chart for configuring the WebLogic operator. - digest: d6862418f747e8d2d4d184242fb2518abfd5853be99d42bc5b9579878ead54a6 + digest: e1c9192b3590d10b8426b7e7bcae27213d9f2296ef4f2cf547e198fd2d89ab1b name: weblogic-operator type: application urls: @@ -13,7 +13,7 @@ entries: version: 3.2.0 - apiVersion: v1 appVersion: 3.1.4 - created: "2021-03-01T11:49:25.928315-05:00" + created: "2021-03-30T11:24:31.829174-04:00" description: Helm chart for configuring the WebLogic operator. digest: 9695fd3c29cd4f006f8e75ae0053683c9aa7213440525002f4f3d36eb8d86633 name: weblogic-operator @@ -23,7 +23,7 @@ entries: version: 3.1.4 - apiVersion: v1 appVersion: 3.1.3 - created: "2021-03-01T11:49:25.927245-05:00" + created: "2021-03-30T11:24:31.827653-04:00" description: Helm chart for configuring the WebLogic operator. digest: e306bd590dbe84400c6b5bb7a64325330e597223dff63792bb5811c9cfae10ac name: weblogic-operator @@ -33,7 +33,7 @@ entries: version: 3.1.3 - apiVersion: v1 appVersion: 3.1.2 - created: "2021-03-01T11:49:25.926206-05:00" + created: "2021-03-30T11:24:31.826574-04:00" description: Helm chart for configuring the WebLogic operator. digest: 2d8b77038ba870cc66ddd45e07a593a5ac3159c8b9531b5309688028b5268a5f name: weblogic-operator @@ -43,7 +43,7 @@ entries: version: 3.1.2 - apiVersion: v1 appVersion: 3.1.1 - created: "2021-03-01T11:49:25.925384-05:00" + created: "2021-03-30T11:24:31.825577-04:00" description: Helm chart for configuring the WebLogic operator. digest: d839cb7bbce4421a59cd9c3df64b1df8649eeebcb6c6b7be34fec25ad00aa141 name: weblogic-operator @@ -53,7 +53,7 @@ entries: version: 3.1.1 - apiVersion: v1 appVersion: 3.1.0 - created: "2021-03-01T11:49:25.92447-05:00" + created: "2021-03-30T11:24:31.824381-04:00" description: Helm chart for configuring the WebLogic operator. digest: 9e105bec11bab249973370a4d5e653f9104cd9fbaaa0c2090fb173805fb3a692 name: weblogic-operator @@ -62,7 +62,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.1.0.tgz version: 3.1.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.923639-05:00" + created: "2021-03-30T11:24:31.823554-04:00" description: Helm chart for configuring the WebLogic operator. digest: 557d0df9958bbdd2f456134d8aff9edf33900bb65774fb0baf2054abd49fdc97 name: weblogic-operator @@ -70,7 +70,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.4.tgz version: 3.0.4 - apiVersion: v1 - created: "2021-03-01T11:49:25.922991-05:00" + created: "2021-03-30T11:24:31.822787-04:00" description: Helm chart for configuring the WebLogic operator. digest: 83a0ac84a033ddd9939d4bc5884cc60b22225d7326c43ce8e54a6f403b453814 name: weblogic-operator @@ -78,7 +78,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.3.tgz version: 3.0.3 - apiVersion: v1 - created: "2021-03-01T11:49:25.922324-05:00" + created: "2021-03-30T11:24:31.822027-04:00" description: Helm chart for configuring the WebLogic operator. digest: fa3af5d21f858ff93cc7d58664a6eb0a920207af09e4c669a7ffb12e9e15b88d name: weblogic-operator @@ -86,7 +86,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.2.tgz version: 3.0.2 - apiVersion: v1 - created: "2021-03-01T11:49:25.921607-05:00" + created: "2021-03-30T11:24:31.821251-04:00" description: Helm chart for configuring the WebLogic operator. digest: aa2b2afe75305bd69f6b07d61e64a37d3bfd249074c81f6a999cef6b4a217fd0 name: weblogic-operator @@ -94,7 +94,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.1.tgz version: 3.0.1 - apiVersion: v1 - created: "2021-03-01T11:49:25.920811-05:00" + created: "2021-03-30T11:24:31.820527-04:00" description: Helm chart for configuring the WebLogic operator. digest: 6540a3a7c6a1c34fcf2ff66679947a1964a35e61232b2a8dea3da087a2d5411d name: weblogic-operator @@ -102,7 +102,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.0.tgz version: 3.0.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.92013-05:00" + created: "2021-03-30T11:24:31.819655-04:00" description: Helm chart for configuring the WebLogic operator. digest: 5f4cd8f4f3282b52b5e90a1169f26986e8272671845053606ade9c855fb04151 name: weblogic-operator @@ -110,7 +110,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.0-rc1.tgz version: 3.0.0-rc1 - apiVersion: v1 - created: "2021-03-01T11:49:25.919169-05:00" + created: "2021-03-30T11:24:31.818845-04:00" description: Helm chart for configuring the WebLogic operator. digest: e3596b2380b264a0a70ba438858ca9af102a79689bf2e21e237eb63ea2997d66 name: weblogic-operator @@ -118,7 +118,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.6.0.tgz version: 2.6.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.918096-05:00" + created: "2021-03-30T11:24:31.817876-04:00" description: Helm chart for configuring the WebLogic operator. digest: fe41421b7dc45dc8a3b2888d3a626a37f5d3c8e1fa292fb6699deedc5e1db33d name: weblogic-operator @@ -126,7 +126,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.5.0.tgz version: 2.5.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.917329-05:00" + created: "2021-03-30T11:24:31.81703-04:00" description: Helm chart for configuring the WebLogic operator. digest: b36bd32083f67453a62d089a2c09ce38e6655d88ac8a7b38691230c55c40e672 name: weblogic-operator @@ -134,7 +134,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.4.0.tgz version: 2.4.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.916001-05:00" + created: "2021-03-30T11:24:31.81567-04:00" description: Helm chart for configuring the WebLogic operator. digest: a3eafe4c2c6ff49384e56421201e59a3737d651af8d5b605b87a19eb1f6f1dc3 name: weblogic-operator @@ -142,7 +142,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.3.1.tgz version: 2.3.1 - apiVersion: v1 - created: "2021-03-01T11:49:25.913214-05:00" + created: "2021-03-30T11:24:31.813773-04:00" description: Helm chart for configuring the WebLogic operator. digest: cbc6caaa6eb28e3c7e906ede14b2ae511a0b35fc12a8e3ab629155b09993e8b2 name: weblogic-operator @@ -150,7 +150,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.3.0.tgz version: 2.3.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.912405-05:00" + created: "2021-03-30T11:24:31.812932-04:00" description: Helm chart for configuring the WebLogic operator. digest: 23d5a1c554fa8211cc1e86b7ade09460917cb2069e68fb4bfdddafc8db44fdcd name: weblogic-operator @@ -158,7 +158,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.2.1.tgz version: 2.2.1 - apiVersion: v1 - created: "2021-03-01T11:49:25.911396-05:00" + created: "2021-03-30T11:24:31.812192-04:00" description: Helm chart for configuring the WebLogic operator. digest: bba303686cb55d84fe8c0d693a2436e7e686b028085b56e012f6381699a3911f name: weblogic-operator @@ -166,7 +166,7 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.2.0.tgz version: 2.2.0 - apiVersion: v1 - created: "2021-03-01T11:49:25.909964-05:00" + created: "2021-03-30T11:24:31.810952-04:00" description: Helm chart for configuring the WebLogic operator. digest: 391e23c0969ada5f0cd2a088ddc6f11f237f57521801ed3925db2149a8437a0d name: weblogic-operator @@ -174,11 +174,11 @@ entries: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.1.tgz version: "2.1" - apiVersion: v1 - created: "2021-03-01T11:49:25.909117-05:00" + created: "2021-03-30T11:24:31.810083-04:00" description: Helm chart for configuring the WebLogic operator. digest: 298acda78ab73db6b7ba6f2752311bfa40c65874e03fb196b70976192211c1a5 name: weblogic-operator urls: - https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.0.1.tgz version: 2.0.1 -generated: "2021-03-01T11:49:25.907565-05:00" +generated: "2021-03-30T11:24:31.808922-04:00" diff --git a/documentation/charts/weblogic-operator-3.2.0.tgz b/documentation/charts/weblogic-operator-3.2.0.tgz index 722ea3ee2d680651268cfeb900b35a0fafd05a8e..0fcdcca3bef3108037a1a75696eb2ed50c0bb1cc 100644 GIT binary patch delta 10916 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 GOaTDfomoo& delta 10887 zcmV;2DtOheS+7};PXW7;P*i_6uV1Tw`~80P-~Q3@;4g#M{lVL#!O82RH-G65UcVU} z{{{7*3V~Hu#sy}7=|6g`>f~O?g;Vk?FivPPM2kTOr)mD@aqp>Hfr!)Yo_5bMP&D*N}pY-4MxBCAa*A65`G@OrX7RA071v-yWc& z{?Xt7T`?TSfN&BWQih1&2u~&?CRhOPb#~AN2_fMSp)84jDGTsRLZlw!7+nLK6VAy3 zY&*0-gI*tDj`)n;B?x~DG!r7_!^1<$d5@~mdLf-3#<~MP%+k2m>Fgj5Y(YYJ7lt%T z1mY=#WI}+eF{Oz?bfSKb$_+`P?poR2<*G4HaR^Avu#itXJNa{TN8%V|9FU-Bj&A`m z_#*=@xV#}D{gjP?B_M#Kch~0%FJO`uA7+5Uj0-vkh6qOtcuId0PR224Q^^1eYbX6! zaygFzKP+cQxVE_rV!#~aNaquj(1Hfhf$Ho|)0xH$O8pD)yBzICFu_?Yb}RVwI%RSX zQD9mIk{1!3W0G82KqH7Dlm>hx7#1*HI^3DjI}c)9_0UrWAvu?0#XCEiFGT3JbDZEQ z^w0%Nag4NSLYRNS5M2;14$uW2L#$Dt>;T=s^z1%8kRprTLnK`bL_J9|Ig+4gS9aSy zP{TmtK~4|oM-Ih=3y9Eosh;mvD8Y9%f`&=?h%Sn|2M-!JB0QuEV0v(@5Rr0QYLsy+ zUkZ&vLS&yRvSqBKuwfL-dxkxfRi>dy`^DgI(9wu9m}Y-5W(e+623$rFXpTiVgQ&BE z@D!7Ti`-Ob?NYxgQ_LmC&eA)>Jji*kFye?N@zSruogH*H16I*aA~?hoX(S>@W4e?o zd^aQEOx`MEX{=h=1guj)ts5O>ln6J()T1#l8gZ@7fwU1-%6i}xgpm}B>|c(ilZiG~ zkEIwQi6VcRq{bSe^^nUu!7^}#vq?G87-D+Y*^!XQG@(oaD$~i_mUCK5n_bz#;D8MX zDrUg6Axn(GDUof6COGEcv8CLhs8kWj{|fP3g)tt?CA+3Lcc)aEYx_w_A7hZ;$hmPj zV1Z=M@2^%^keaj@L2+Df;kojGdYzrl4m!KX^E7{kAv)K6Y=WXP49)t3=829n?iZ(JQFjI0~w|%7>lqN^e>+%au5%Y@Us<*(k>2{O=^0r5KT9TH=YM zC=r(0Jrlyvv; zwp0eLq+lvHP_xow%AnOUbjoldJ)@3gF!Fzl%CH#8%7eO=~hq8-!|APYBlQd5Czj&$a;hx>Wu6#SC8A=0_U1CRK=PgANo3r<7*m| za9Ke@51nRlj8gr)O4nUp#nfO_z#O9U$t4xn3^*jBH0TII1|kQ+5tiYblvEt&zSMtl zA*TJosuc0SW+RvZN&q5=l%Ef!XlPl1DdB=Gn`r8r)5f`?L^MzQEaD0$nVk}ryHq+S zMzd2UF%Zj&GGfzP>8zTMPL*buqcK2&xX?jDf_CT2oXK6TdhIG;Rf=mbsLOmoy^|6R zxEH_@9Nz#JXG(~p2IZ>|@8)du0g-=10Gp`bkV{KSxw1|)6P!eOjO_3>)Ea`QW^GED zC?^vtKy;D%QHYdZQzqwFAzl$<$`I2DUUCl3GcIJOg~Ud&Y;=J_V1i6kz^6!@GP01r zZ$U}EPC(tMT6C&&9$QUXT8YRpzcRf~fr(u?N@u73@F!UA+9?s4@_3lx7!ZFiRjLIS z8X2l8?cg(-#gVjrIF6~#46JhJv&yZfn%<8eK3tEAN%m~6l46GEAgo$w=~jNogSB!! zk}0zLl@y^n!r=fB;Rg2|?~I1%c+l?;Iz}7IB_yRH8Q0pbR6;X+1xp20A=g8uosTHB zP*6!nWdO7udQv2Vr>EHdI4Xaxpy3XBCnZ#w5ot22(i%Y`h*+W!CocX)Mn9o(Oz)J_ zRX~tlROsxW!l@kUNBmGfz?40h? z>v%yqL&bDD5}41T~d!LwEz%TaH|Ehihd{CYNSSxmb)iMluu zq-*c2;9WjFX{}0~dYv4i;^D8_Bs%g zff&rGfcJkA_$7@%I+a%8Q<;Z0C&JnWX`mWqC&AHKn$Ejq^GG?+ocX&v<0&N3Rie-t z3Cu*6<|)mxE)Lb@M%^F5J%pLsX|jW|M35MjQJMl%AvhKSOJ3XPd{?2G;8=|>GYFL^ z76?eWV>GTif0A&U5*F&w*~#-$>n!uIeB%*J4s3tyQ9T9jb(%R@#E@PJHzeqO+R{Xq z?y^)Xx`*RRNZr8JJE~jC@{xT-sO6=0PHRuKNurp`dQ~i2BvZ|#ZJC*RXE;R1{lER~ zZ*DHWiUJ$t;>FZEJF7JEIi~KNnltq%;e)}^@%IGch$FfH#zX~sg( zt79dcOcp$$SrWNo8OE4%y_G@Lsg;mxZ1vt3$N%J}dabvY!32wa3IZm3|K~t zLJbV6&`mR89g49+E7;Ska(0Moztgd5Bk{hJnvxI5fM>D5iOAcyZgvdX(W`$N z|H-#%$0QDgWMh;;5kNY2Dptvc!Per16?Ew)oR)fG98JhVML0wkxuu{N!&CriTN#yl@;sbL~R#_n-%(Cf=yfzzw2$=v;&j)P7k*N3G( zl$DCeX0y_#lo9Kg^Aa15=4!!>Er5R^ttM4D(%V@IIJ>;uE3cTD0@5m(S}9L&jvpaU z&frZfhI`STvvyWNVbW{-8R~Y5iN+nvy!KkkZZcKLenXjzOdJ76G?9i9i96~LKqi+a zs2wX3N^09>8kHAI_ZQPdhIe*N&0!=*V+gS{Uy?pj|D|r|6$TqS$Yj4tkvxAD(Y~(5 zyoRc2M@il-BsZ`iaQ7~g`HL`npbzAXOREj-S4q@%L@hFz+Jk}6pyx`28Wk}$tZFR@ zgPrk{sqD%4fmupG=%@sMXXD=?6n6c~1Bo*7FTL(50qxoqW|`;gO+g$epKzc+BZN|! zbsiuP;l4_P3YV%{9QV*KX@q|TxP@8U#3?O1gh&}#kQk=g)0ATvm$oX#JScCI46(F* zyHXx7lXO<(QZq}IC{vhdtKmb3(|q3|;V6=#T40!iuHxqrCsWhgX_OHgAwSXn-}?S< z0rOPmm;CTIW2~LsJR*I-rtsDKzXvCSlauoP@1w!s_4fUbXSrU&{_lT3|LjUdAqk)$ zkBh52s{-_&|EXG%3EHC!?ZF>t&#G5&LAVG|wNq_3%RUP7y^g^?+LM7muh{SSP?)Oa z{{Fs25usO@O*tBVC;d&FMSy}#keK(vm?rREmzOYG2B?QVq6wq(|Apr<>K6TPVJW-! zZp^OGe0;Z&PPb$`Y50Him_Y^KK*K6}(gJi*DDD`w?VmO&X zPAmnjCOA&>hm!2EL_+zbr5FlIyV9PFa);k^w2vO8u?!=D&AIf^D&f@oz3e)H zTBS}ggG6oq34_Up@@V61q@`+0#ShWWc0C*0yP`+r(Y&YM0K>5Op5(Q z!9mcXGje4sR19G-g?mlcmN2>lv_eGfj034TW{z!|69Mx81%cbx=u4=yCFJfSHG63f z_X-m11?W|{kM@5gZ=Bov>h^xQ_gYN$Qbv;Ec2C|_;7eevcBmoYk4p0(Xg{hVm&pKg zC|vmQP@MA2sU#6<-qjWxasZW$fivmH&Z|z!@-US@8{r%EaY6gc7(%a{Evdur(4N%V zEJeX$5TL-Zg@OEUU(wl-I3tQeiJ~1#8zL7=c}F%8jLd&!>$)(LB!c?`2O9;^!L4fZ zkbbME*lC?&AyZqPKR^2;!!Z%d?pS7uL-gGN`tG{}^w;n579$Y$p-P+g@Btd{AE0|F zxcT1&z&xec7lPL6ah1;N6>pz!4U>r?x=zb@EZ~hyvX+Kzq_uu9gmk z!3^_j1`~gBkAlAjhW2%Zm|^}CELWkrC%ILHRMV{$GUyofs-)XT-tpzF+Bkl7D{1y$ zziXK8E3OQA#jF?2k7^xEERs+yi+dBoq;e`aKJ&7knhIo%b|wakaSk1Qw4?5;bbK95 z4?~`dB_5`<;?sAV@#(uK3Ohi6s` zJu!TFq;kBjFB6RDI-d+c3^0$0HJ017eF~%fd}iBgxF2fG(Z<61q>{Rc{rGHJ@5u~a zysm#Vl1{Ct2f6_Ma#YMxG z!meCzEGVcu)@E6m%tH&Ck1uUDlWDU`r+%aJ>5Ic&9&K2xPz+Iq?q@8*nZKxK-Vbi% zZ<$}4NW&M(-rCR4z1X$AYS+s3-~3%pv%P#hY`KBawN1uQ*$0=9O7Qn{p{uD%TfC4#b`R|gROw;;=iLoHU2w3 zK6$f^|DNOen&Q77v}A5$zppv=Gv?=WhkX`}XOH*{3sv>+3ufcmNUJD@8(N)XOA~4#Z0F&_jd41Jot}t6^2grAnL9`vQ%`QEwRNmpCdT zH-))A6XOf>XkB-oD+&f6sA!P4SWjHm!ht%Glrz-f;Yk*^eV+Gjnbo|^j*5~Vb z=M@poGIc8MIE$w3$o?qQw&C3uemx-mqe=dvcDo30P5d|LSHJ&u^!jKU|2@z3RmFca zxiONNM}WR4>Vcutqr-(lahd~$Cyf!3f*`-#TqqNNXg;%d_)XpPZ_R)8f4ysS`=8%z zy#r{C{XaVCzpdK;H*dD~|5>iD$^P3T@3%XEzWN$K*$92^LO=zZFRvOeGSpl#{Pe-cZ7GPrRhqpPn9`d6$Y&H|HnuDivNEz*yexFbG=yqAJ#sD^)3^$ z_f{Zt_rHOUd;xyZi4=d#tk(q$zHrK|i75PL?K1}!4M??#FJ$){ zm`J`_XSYiJ%sote$silz5=k${~x`5Q}O>N$Aj(pkI!;_MgIT2mB_8{e3yzx}?Eg2|2DWbh*X!e2{{LqC{fFndz9Rqc z+y1pd46wq1KE0Fp6(WD$RM&r{SJ>MB=eS<1{m=J*sjV$P*kQPi6zo5XH})l zQ)1Hw;(ELqzt*Umt@xOu#G$!&)5tbL&n@*QOHushej8DLEmynvKZ5iT3Bc<3e=ryf zs`a1#;A9*BKg;#vOx}Z})%I&E4k90Z(CmrDqLN@Na_2=r|kZtncc14-3Lh*%cS?43sqU_Z0T za`JaqimHD()P0VphE(dOj|u9*br#3h>bwA_b#c?zPkjSas?xs)W6brD2WG--s^2lq zeMzpZrFM`k3Yz58xw<~PdH3P!=C{jtKc9`R-<_Tn^FjIp+21odA38S?n#gF`ls9Yl zud$d7QBXQJKR-C6Y4q!>_X>kgG5ET1e>s2u)Wd&fBw978C{=UmL%3<$}^rq5?v(<=15>BveX4th}p8*zbJrJnEAQroHiGV4q*Gw#SrJ-UvErBdVF_74O(ZI$WvWF34FLrB`mOjt-SZGRDi1`sx`U zqNBdkA_Ychls`M^xRfEE9{chztN>*0MG1Q+K8>mL4}5ms6sMY~ z5(V8!a9||z(1Pqq{<;L#@2eYGmdE#c0m?DH)hENer>ECPo5nPcs2R~BYw=+j)X)|- zhjr7_RFGUVN~7`KY%B}L3>#hBN zj_bwS|MR47{~v0>b20yNEx6f~eSZB=6W%S1u}%L=2Kz-=t?l(xS3CR9Xx#pDAGK?p z{XeRm|J*-5-k$&UEZ2*-|LXM=R6gzb366Pgc+2qf_<;5weaOGCy3u!ETO5h_JYS30 zI-lph+S~v9owKL@{?pOxe}2{eAHO-;#{bW9eHHfKz5v?v{ihzN%0T_qPSoPyg!1_c zO$RGH?kMJ!2tM80qAkByR5{9E&9MoqKF3sfW8xE^hTQ7)(Wif3wDL--^TO@dcgRAC z+0Svz!lvKYYWI%wHqNlu#{T~SY2e!Y@1$D)8*IP-_)OQ=ehSocw9HdGIT z&@r`dJ==2zggqYMCs+pimD3-bXZ}MPB&^kM62H=FRzH!!;NCKPwpBpinG9wG^Y7Zz z7$nZcVGK^E`bi9uIwol4K@1X@_Z$XGvgRI5r!YL@ThGp3JI7tF2Wi&ru2TF*249{# zYi0i*bNEk-@4xq}=l=}ezV2_6tsSO+O?zJcoqE-nqU%}hP`UL8X@XLxz6|uVU)m~JAK2`e89m4ca(j=gIy4RK%6nXnqMNG$(uO{b56l1=D^o_KCHtZEg(yDQc zmUzkP2Xw8Js0K&r)_wzBZy=;BLbzt5(H;@#PFm$D2xG1xLNan=XuL$4n)?2)74x{? zM0}=3t2AG2-|}Y)tDpI_Y~S+7sWDJ~%T#JM5=^yJUF@!pUVuI#!N|OVO?2jryQf@o z@PCq^fRrP)k3OQ1&QlzJiX18m9_W3f5vr0^Vi01{=#;7mJJ8mNjzz#bY}ZZn)}#2z z(P;F!Hy|>WaCA2V8G)$SLkApah8KXw07)*&O)@H5R>$^nvDd^v{nCqiRev?Q??K2Q zHh}_R;-06$`WNt4TeERKJbT^%)3Uf8c? zNiBkKW-bFYyKJR_sP_A4Pt~Om{DJnwGKH&2ZiSpy`zZKt35oxEfcEz{Bh;_J$YhDc z3=3_kGC*{KusX|+Oh~Bq1}K6l7Mt4;HAamK1+hvO27hFPLG+V^=BH21LJgW}cjTCE zeq&&}4US#n8m$(842LBxbM2ng{@}ySyVJA43|Ge49mlJ76@T1dkF}XIb9L;SPXk}2 zSUF^$=^d3EI+;|5Um>do1q0lOnKLCV1Vu3GHgwzJP-Hl^43%PXHL<;mW@I8|w?a#& zYu7nYC6`xJHHaQ&X?%it#swM!!a-$_U>MW}vcR5(SE#IiS7nUVGOABxd{Ze?r#!J- z_&U-dxhDQ*Ye>CgGy%61Uo!d)nv;a zZFLH~N?OSU78%bIy^^3=ztNzn2)$C{tyO7+7*3|(n1ENM`iZ_;Dn8P#TZZ-7MoC-jLk@{5W0~MUgf0zHVB+LWc67>Bi zQC*C>Qoa)H$nW9He zk!>wbNq$z;21s3*E{{M?oyfPIVq;2Uz)4#U{#`eJ-<*YVoJ|>goIKb+oQE6W zWtsRW{MxZGQ5&qLz}oWhTsPmGkCT{U@#gg=tZaqaq7_=62|S#Y4?)oK^ihbmR81%E zY{}L4d5_H*JICoJOl^zYqAguVTt>b0%r1@(5jMc`1V$4-dqyrA@fa z#=sH~!1I$B)Xw7#?S$RLb&2PBN__ZDzVcpwjM5|YFrpzp3~3TVD)=E?09z2aJG`Up zmL${e9TBrG)vp~Ls$I~?jDPrzIY)>Ob#fKcJ76fp91c*D&Bws_0g9+NKoRD%12o6? z=;-9w>Hm0)^bYXD9llHizVG5B>V`ASa43LvWmZ+f*0i=~C~?$9S(*Yv|KD2V)qV$m z9#RH+B5#g!&<{7o642HJw===7Vo1~u3`l%-&z8bt&@Clx_t74MDct{zML0vjfBZY{ z{;S{pTd(`i|NoUWp8G8gcz4qpgCkKW1|gI{6_SPd47fr$qJkf&UkZjy+AWAVWq`y? zW&}!Bf?T%w5PeSb@6u%xU+^dcw`eqfZYwNtxp~!JtU=uI7f*n>^&w9*gTkjY&%nNr zWWTCpP}bjG+`uO{eZTP&qwjvP68%oc4@CdG>BEgoiw|lS5aTdwkEfQ$W_#&fxIP*75Y}iU&WUsg33oEna1E$D|(&IhZ!L4ne#Y{Ym_&aR07bwBNw6BvLGVBV zNe~ghuyltqKv!@}sCDG+7%%02$YKV>RM$A7iEgZcS77%#o%2b)pMY?bWO1Aih#1W2 z0=Ql>yoF`4zibsav!zc1#4!ULEm6vV%RrN?LPv*X@;Qwo`MYEGj>?H(253yhtilpW zN6B`sH_|FLS4L>u0--v-cfh$DM1YIhDxO((<18#MBRVT+ij}g(zHh;Q?iQ8@?y{YP zR0((+cPf;zEiX}ObS3ywoV{6P!F+H;!}5Dtt6_$}TBlqA_%I_}@;xTEdL#2LN4pC1 zT{OuO)$jnpy-YT>ToHk0IEiA=(uW`sN?`@1Eg4ta#A12p$qsMb*R9J-&}zR`*0cwAla=z-6CN|JF-!sKvsL;o^SzCp&z+k6iTa= zHP;^fG^bxhw6a7kf%>ql@93a$RH2Nwqi$JUZq7TG8YXa8ZCInGNi)?udTM3bLN_jV z&k)nOw_hTrrKhqQjun~XlpkoTp^Zj~N(jADkD|3Is0@bDzkHg1`8@W~M`bUSPBrRy zg$;J-lJXV|apuJ!jd57zckXngfY1bLQ)?dCOaGQRX?X`hMZhae*&+GM5tyTd7TEj6 zJJ}UR!ZQw)r%mGBVs7oqt3TsgY3}YA5qKN}3Te93`|e6c@9*zX7ey4fes?2fbU`B7 zF^nY><{)M?LU(|FLY$~+kc11s(f?>NaH?O6#gRsV?5)X_++9F)Vzpxr?iKibg{Wlc z7z}2SF8NTkNmEmQ?-rK(u9LSd8_jkm;J#|CSJm>Gt+he4!B~rB8RQe~7HZnu03qjE2Ori))=Cp1f<%TfKz9_LN$AaLO9J8ymGy^G?zx?^WngQ_ugkTO;D zs;8@fas5z#O+gEgC{UeMU&)eU70$+H2+e-^Tkumn3N>9{eWw z>i53~{kOjJ-v-6%;-RY=w8dxb>7ndARqGTKI;4TG9Ne%m(FH@omjbbff_to^hE!UL|S( zb*@X6w$_oA>gWBW=hJ}pegHIRlf$&N+D$gC;bgF&WF_@6woQkKefdYymGaWy!wgX4 zWOPMoj+eFyqDnS*Ge{5+RRbvyBwRnG46Q>;wk_uB>cx}4ldIQSs)RGj*Oq)633X|I z6GKV7YNx+7qP&qK_I-lB$rXD)SHJn}syM_{8W%o0uY_(7hX^s|f`lW$ES&vF`BRw| z7wmJHmB>-+O+os?z;$AqhbdYJg9|){cw{!;1~LJfp53QG$=>WgoyL?$E2#T0L8y#a zhW=@E-qPoZQ8!>4&JK8-h|Otu`;Uu%(FOvxVsl>2(Kj_bI@utfY2M4|_x_%SgZ}0U z)IczE3hRjc3$Ae_ot@)mYBscau*#Wh4F@-=`p>HRpA?kd63-ub{NwuXe;>WBp8xpz z?a8+O_Z-(tssC+I)-&%!H5d1)=No-bVs+}R`gdL9(-~$m%2ofaYiz4}c|mGLU59tq z=jQ7b5}{L^;xUPdAi#UhBfG@rIn1|O7BzsYt9qVe)Qgs%TPC;H^IdiO- 0) { LOGGER.fine( @@ -480,11 +480,11 @@ private boolean canUseCurrentPod(V1Pod currentPod) { return useCurrent; } - private String getRequiredHash(V1Pod currentPod) { - if (isLegacyPod(currentPod)) { - return adjustedHash(currentPod); + private boolean hasCorrectPodHash(V1Pod currentPod) { + if (!isLegacyPod(currentPod)) { + return AnnotationHelper.getHash(getPodModel()).equals(AnnotationHelper.getHash(currentPod)); } else { - return AnnotationHelper.getHash(getPodModel()); + return canAdjustHashToMatch(currentPod, AnnotationHelper.getHash(currentPod)); } } @@ -492,13 +492,18 @@ private boolean isLegacyPod(V1Pod currentPod) { return !hasLabel(currentPod, OPERATOR_VERSION); } + private boolean canAdjustHashToMatch(V1Pod currentPod, String requiredHash) { + return requiredHash.equals(adjustedHash(currentPod, this::addLegacyPrometheusAnnotationsFrom_3_0)) + || requiredHash.equals(adjustedHash(currentPod, this::addLegacyPrometheusAnnotationsFrom_3_1)); + } + private boolean hasLabel(V1Pod pod, String key) { return pod.getMetadata().getLabels().containsKey(key); } - private String adjustedHash(V1Pod currentPod) { + private String adjustedHash(V1Pod currentPod, Consumer prometheusAdjustment) { V1Pod recipe = createPodRecipe(); - addLegacyPrometheusAnnotations(recipe); + prometheusAdjustment.accept(recipe); if (isLegacyMiiPod(currentPod)) { copyLabel(currentPod, recipe, MODEL_IN_IMAGE_DOMAINZIP_HASH); @@ -507,7 +512,11 @@ private String adjustedHash(V1Pod currentPod) { return AnnotationHelper.createHash(recipe); } - private void addLegacyPrometheusAnnotations(V1Pod pod) { + private void addLegacyPrometheusAnnotationsFrom_3_0(V1Pod pod) { + AnnotationHelper.annotateForPrometheus(pod.getMetadata(), "/wls-exporter", getOldMetricsPort()); + } + + private void addLegacyPrometheusAnnotationsFrom_3_1(V1Pod pod) { AnnotationHelper.annotateForPrometheus(pod.getMetadata(), "/wls-exporter", getMetricsPort()); } diff --git a/operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java b/operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java index 3aa44cb720d..37d83840d55 100644 --- a/operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java +++ b/operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java @@ -102,12 +102,22 @@ void setServerPort(int port) { } @Override - String getReferencePlainPortPodYaml() { + String getReferencePlainPortPodYaml_3_0() { + return ReferenceObjects.ADMIN_PLAINPORT_POD_3_0; + } + + @Override + String getReferencePlainPortPodYaml_3_1() { return ReferenceObjects.ADMIN_PLAINPORT_POD_3_1; } @Override - String getReferenceSslPortPodYaml() { + String getReferenceSslPortPodYaml_3_0() { + return ReferenceObjects.ADMIN_SSLPORT_POD_3_0; + } + + @Override + String getReferenceSslPortPodYaml_3_1() { return ReferenceObjects.ADMIN_SSLPORT_POD_3_1; } diff --git a/operator/src/test/java/oracle/kubernetes/operator/helpers/ManagedPodHelperTest.java b/operator/src/test/java/oracle/kubernetes/operator/helpers/ManagedPodHelperTest.java index 668f60a8540..f9db21ae67d 100644 --- a/operator/src/test/java/oracle/kubernetes/operator/helpers/ManagedPodHelperTest.java +++ b/operator/src/test/java/oracle/kubernetes/operator/helpers/ManagedPodHelperTest.java @@ -1289,12 +1289,22 @@ void setServerPort(int port) { } @Override - String getReferencePlainPortPodYaml() { + String getReferencePlainPortPodYaml_3_0() { + return ReferenceObjects.MANAGED_PLAINPORT_POD_3_0; + } + + @Override + String getReferencePlainPortPodYaml_3_1() { return ReferenceObjects.MANAGED_PLAINPORT_POD_3_1; } @Override - String getReferenceSslPortPodYaml() { + String getReferenceSslPortPodYaml_3_0() { + return ReferenceObjects.MANAGED_SSLPORT_POD_3_0; + } + + @Override + String getReferenceSslPortPodYaml_3_1() { return ReferenceObjects.MANAGED_SSLPORT_POD_3_1; } diff --git a/operator/src/test/java/oracle/kubernetes/operator/helpers/PodHelperTestBase.java b/operator/src/test/java/oracle/kubernetes/operator/helpers/PodHelperTestBase.java index fef20d8c646..274bad26310 100644 --- a/operator/src/test/java/oracle/kubernetes/operator/helpers/PodHelperTestBase.java +++ b/operator/src/test/java/oracle/kubernetes/operator/helpers/PodHelperTestBase.java @@ -358,19 +358,50 @@ public void whenPodCreated_hasSha256HashAnnotationForRecipe() { assertThat(getCreatedPod().getMetadata().getAnnotations(), hasKey(SHA256_ANNOTATION)); } - // Returns the YAML for a 3.1 domain-in-image pod with only theplain port enabled. - abstract String getReferencePlainPortPodYaml(); + // Returns the YAML for a 3.0 domain-in-image pod with only the plain port enabled. + abstract String getReferencePlainPortPodYaml_3_0(); + + // Returns the YAML for a 3.1 domain-in-image pod with only the plain port enabled. + abstract String getReferencePlainPortPodYaml_3_1(); + + // Returns the YAML for a 3.0 domain-in-image pod with the SSL port enabled. + abstract String getReferenceSslPortPodYaml_3_0(); // Returns the YAML for a 3.1 domain-in-image pod with the SSL port enabled. - abstract String getReferenceSslPortPodYaml(); + abstract String getReferenceSslPortPodYaml_3_1(); // Returns the YAML for a 3.1 Mii Pod. abstract String getReferenceMiiPodYaml(); + @Test + public void afterUpgradingPlainPortPodFrom30_patchIt() { + useProductionHash(); + initializeExistingPod(loadPodModel(getReferencePlainPortPodYaml_3_0())); + + verifyPodPatched(); + + V1Pod patchedPod = domainPresenceInfo.getServerPod(getServerName()); + assertThat(patchedPod.getMetadata().getLabels().get(OPERATOR_VERSION), equalTo(TEST_PRODUCT_VERSION)); + assertThat(AnnotationHelper.getHash(patchedPod), equalTo(AnnotationHelper.getHash(createPodModel()))); + } + @Test public void afterUpgradingPlainPortPodFrom31_patchIt() { useProductionHash(); - initializeExistingPod(loadPodModel(getReferencePlainPortPodYaml())); + initializeExistingPod(loadPodModel(getReferencePlainPortPodYaml_3_1())); + + verifyPodPatched(); + + V1Pod patchedPod = domainPresenceInfo.getServerPod(getServerName()); + assertThat(patchedPod.getMetadata().getLabels().get(OPERATOR_VERSION), equalTo(TEST_PRODUCT_VERSION)); + assertThat(AnnotationHelper.getHash(patchedPod), equalTo(AnnotationHelper.getHash(createPodModel()))); + } + + @Test + public void afterUpgradingSslPortPodFrom30_patchIt() { + useProductionHash(); + getServerTopology().setSslListenPort(7002); + initializeExistingPod(loadPodModel(getReferenceSslPortPodYaml_3_0())); verifyPodPatched(); @@ -383,7 +414,7 @@ public void afterUpgradingPlainPortPodFrom31_patchIt() { public void afterUpgradingSslPortPodFrom31_patchIt() { useProductionHash(); getServerTopology().setSslListenPort(7002); - initializeExistingPod(loadPodModel(getReferenceSslPortPodYaml())); + initializeExistingPod(loadPodModel(getReferenceSslPortPodYaml_3_1())); verifyPodPatched(); diff --git a/operator/src/test/java/oracle/kubernetes/operator/helpers/ReferenceObjects.java b/operator/src/test/java/oracle/kubernetes/operator/helpers/ReferenceObjects.java index 47e00d9596c..1667a3ba45d 100644 --- a/operator/src/test/java/oracle/kubernetes/operator/helpers/ReferenceObjects.java +++ b/operator/src/test/java/oracle/kubernetes/operator/helpers/ReferenceObjects.java @@ -7,9 +7,135 @@ * To present pods from rolling when a customer upgrades the operator, we must test against the YAML that would * be generated in old operator versions for the settings in the PodHelper test. * - * The settings here are taken from 3.1.0. + * The settings here are taken from 3.0.0 and 3.1.0. */ class ReferenceObjects { + static final String MANAGED_PLAINPORT_POD_3_0 = + "metadata:\n" + + " annotations:\n" + + " prometheus.io/path: /wls-exporter/metrics\n" + + " prometheus.io/port: '8001'\n" + + " prometheus.io/scrape: 'true'\n" + + " weblogic.sha256: '6e1c6a716a9e0078a56c2df86ffe1cd2f0f9bdbe271f169dc1d548d026aa52b7'\n" + + " labels:\n" + + " weblogic.domainName: domain1\n" + + " weblogic.serverName: ess_server1\n" + + " weblogic.domainRestartVersion: null\n" + + " weblogic.domainUID: uid1\n" + + " weblogic.createdByOperator: 'true'\n" + + " weblogic.clusterRestartVersion: null\n" + + " weblogic.serverRestartVersion: null\n" + + " name: uid1-ess-server1\n" + + " namespace: namespace\n" + + " ownerReferences:\n" + + " - apiVersion: weblogic.oracle/v8\n" + + " kind: Domain\n" + + " controller: true\n" + + " name: domain1\n" + + " uid: '12345'\n" + + "spec:\n" + + " containers:\n" + + " - command:\n" + + " - /weblogic-operator/scripts/startServer.sh\n" + + " env:\n" + + " - name: DOMAIN_NAME\n" + + " value: domain1\n" + + " - name: DOMAIN_HOME\n" + + " value: /u01/oracle/user_projects/domains\n" + + " - name: ADMIN_NAME\n" + + " value: ADMIN_SERVER\n" + + " - name: ADMIN_PORT\n" + + " value: '7001'\n" + + " - name: SERVER_NAME\n" + + " value: ess_server1\n" + + " - name: DOMAIN_UID\n" + + " value: uid1\n" + + " - name: NODEMGR_HOME\n" + + " value: /u01/nodemanager\n" + + " - name: LOG_HOME\n" + + " - name: SERVER_OUT_IN_POD_LOG\n" + + " value: 'true'\n" + + " - name: SERVICE_NAME\n" + + " value: uid1-ess-server1\n" + + " - name: AS_SERVICE_NAME\n" + + " value: uid1-admin-server\n" + + " - name: USER_MEM_ARGS\n" + + " value: -Djava.security.egd=file:/dev/./urandom\n" + + " - name: ADMIN_USERNAME\n" + + " - name: ADMIN_PASSWORD\n" + + " - name: LOCAL_ADMIN_PORT\n" + + " value: '8001'\n" + + " - name: LOCAL_ADMIN_PROTOCOL\n" + + " value: t3\n" + + " - name: SHUTDOWN_TYPE\n" + + " value: Graceful\n" + + " - name: SHUTDOWN_TIMEOUT\n" + + " value: '30'\n" + + " - name: SHUTDOWN_IGNORE_SESSIONS\n" + + " value: 'false'\n" + + " - name: DYNAMIC_CONFIG_OVERRIDE\n" + + " value: 'true'\n" + + " image: image:latest\n" + + " imagePullPolicy: Always\n" + + " lifecycle:\n" + + " preStop:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/stopServer.sh\n" + + " livenessProbe:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/livenessProbe.sh\n" + + " failureThreshold: 1\n" + + " initialDelaySeconds: 4\n" + + " periodSeconds: 6\n" + + " timeoutSeconds: 5\n" + + " name: weblogic-server\n" + + " ports:\n" + + " - containerPort: 8001\n" + + " name: default\n" + + " protocol: TCP\n" + + " readinessProbe:\n" + + " failureThreshold: 1\n" + + " httpGet:\n" + + " path: /weblogic/ready\n" + + " port: 8001\n" + + " initialDelaySeconds: 1\n" + + " periodSeconds: 3\n" + + " timeoutSeconds: 2\n" + + " resources:\n" + + " limits: {}\n" + + " requests: {}\n" + + " securityContext: {}\n" + + " volumeMounts:\n" + + " - mountPath: /weblogic-operator/scripts\n" + + " name: weblogic-scripts-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/debug\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/introspector\n" + + " name: weblogic-domain-introspect-cm-volume\n" + + " imagePullSecrets: []\n" + + " initContainers: []\n" + + " nodeSelector: {}\n" + + " securityContext: {}\n" + + " terminationGracePeriodSeconds: 40\n" + + " volumes:\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: weblogic-scripts-cm\n" + + " name: weblogic-scripts-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-debug-cm\n" + + " optional: true\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-introspect-cm\n" + + " name: weblogic-domain-introspect-cm-volume\n"; + static final String MANAGED_PLAINPORT_POD_3_1 = "metadata:\n" + " annotations:\n" @@ -117,6 +243,136 @@ class ReferenceObjects { + " name: uid1-weblogic-domain-introspect-cm\n" + " name: weblogic-domain-introspect-cm-volume\n"; + static final String ADMIN_PLAINPORT_POD_3_0 = + "metadata:\n" + + " annotations:\n" + + " prometheus.io/path: /wls-exporter/metrics\n" + + " prometheus.io/port: '7001'\n" + + " prometheus.io/scrape: 'true'\n" + + " weblogic.sha256: 'fc735cf7c34bc1492a237149c4e27c9bb27575de463dbc55e953588862098df4'\n" + + " labels:\n" + + " weblogic.domainName: domain1\n" + + " weblogic.serverName: ADMIN_SERVER\n" + + " weblogic.domainRestartVersion: null\n" + + " weblogic.domainUID: uid1\n" + + " weblogic.createdByOperator: 'true'\n" + + " weblogic.clusterRestartVersion: null\n" + + " weblogic.serverRestartVersion: null\n" + + " name: uid1-admin-server\n" + + " namespace: namespace\n" + + " ownerReferences:\n" + + " - apiVersion: weblogic.oracle/v8\n" + + " kind: Domain\n" + + " controller: true\n" + + " name: domain1\n" + + " uid: '12345'\n" + + "spec:\n" + + " containers:\n" + + " - command:\n" + + " - /weblogic-operator/scripts/startServer.sh\n" + + " env:\n" + + " - name: DOMAIN_NAME\n" + + " value: domain1\n" + + " - name: DOMAIN_HOME\n" + + " value: /u01/oracle/user_projects/domains\n" + + " - name: ADMIN_NAME\n" + + " value: ADMIN_SERVER\n" + + " - name: ADMIN_PORT\n" + + " value: '7001'\n" + + " - name: SERVER_NAME\n" + + " value: ADMIN_SERVER\n" + + " - name: DOMAIN_UID\n" + + " value: uid1\n" + + " - name: NODEMGR_HOME\n" + + " value: /u01/nodemanager\n" + + " - name: LOG_HOME\n" + + " - name: SERVER_OUT_IN_POD_LOG\n" + + " value: 'true'\n" + + " - name: SERVICE_NAME\n" + + " value: uid1-admin-server\n" + + " - name: AS_SERVICE_NAME\n" + + " value: uid1-admin-server\n" + + " - name: USER_MEM_ARGS\n" + + " value: -Djava.security.egd=file:/dev/./urandom\n" + + " - name: ADMIN_USERNAME\n" + + " - name: ADMIN_PASSWORD\n" + + " - name: LOCAL_ADMIN_PORT\n" + + " value: '7001'\n" + + " - name: LOCAL_ADMIN_PROTOCOL\n" + + " value: t3\n" + + " - name: SHUTDOWN_TYPE\n" + + " value: Graceful\n" + + " - name: SHUTDOWN_TIMEOUT\n" + + " value: '30'\n" + + " - name: SHUTDOWN_IGNORE_SESSIONS\n" + + " value: 'false'\n" + + " - name: DYNAMIC_CONFIG_OVERRIDE\n" + + " value: 'true'\n" + + " - name: INTERNAL_OPERATOR_CERT\n" + + " value: encoded-cert-data\n" + + " image: image:latest\n" + + " imagePullPolicy: Always\n" + + " lifecycle:\n" + + " preStop:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/stopServer.sh\n" + + " livenessProbe:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/livenessProbe.sh\n" + + " failureThreshold: 1\n" + + " initialDelaySeconds: 4\n" + + " periodSeconds: 6\n" + + " timeoutSeconds: 5\n" + + " name: weblogic-server\n" + + " ports:\n" + + " - containerPort: 7001\n" + + " name: default\n" + + " protocol: TCP\n" + + " readinessProbe:\n" + + " failureThreshold: 1\n" + + " httpGet:\n" + + " path: /weblogic/ready\n" + + " port: 7001\n" + + " initialDelaySeconds: 1\n" + + " periodSeconds: 3\n" + + " timeoutSeconds: 2\n" + + " resources:\n" + + " limits: {}\n" + + " requests: {}\n" + + " securityContext: {}\n" + + " volumeMounts:\n" + + " - mountPath: /weblogic-operator/scripts\n" + + " name: weblogic-scripts-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/debug\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/introspector\n" + + " name: weblogic-domain-introspect-cm-volume\n" + + " hostname: uid1-admin-server\n" + + " imagePullSecrets: []\n" + + " initContainers: []\n" + + " nodeSelector: {}\n" + + " securityContext: {}\n" + + " terminationGracePeriodSeconds: 40\n" + + " volumes:\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: weblogic-scripts-cm\n" + + " name: weblogic-scripts-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-debug-cm\n" + + " optional: true\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-introspect-cm\n" + + " name: weblogic-domain-introspect-cm-volume\n"; + + static final String ADMIN_PLAINPORT_POD_3_1 = "metadata:\n" + " annotations:\n" @@ -225,6 +481,138 @@ class ReferenceObjects { + " name: uid1-weblogic-domain-introspect-cm\n" + " name: weblogic-domain-introspect-cm-volume\n"; + static final String MANAGED_SSLPORT_POD_3_0 = + "metadata:\n" + + " annotations:\n" + + " prometheus.io/path: /wls-exporter/metrics\n" + + " prometheus.io/port: '8001'\n" + + " prometheus.io/scrape: 'true'\n" + + " weblogic.sha256: '368b26eaf1645f966d4c350906b59a0afcc0fbdf9ed30779b71a6d044eb480dd'\n" + + " labels:\n" + + " weblogic.domainName: domain1\n" + + " weblogic.serverName: ess_server1\n" + + " weblogic.domainRestartVersion: null\n" + + " weblogic.domainUID: uid1\n" + + " weblogic.createdByOperator: 'true'\n" + + " weblogic.clusterRestartVersion: null\n" + + " weblogic.serverRestartVersion: null\n" + + " name: uid1-ess-server1\n" + + " namespace: namespace\n" + + " ownerReferences:\n" + + " - apiVersion: weblogic.oracle/v8\n" + + " kind: Domain\n" + + " controller: true\n" + + " name: domain1\n" + + " uid: '12345'\n" + + "spec:\n" + + " containers:\n" + + " - command:\n" + + " - /weblogic-operator/scripts/startServer.sh\n" + + " env:\n" + + " - name: DOMAIN_NAME\n" + + " value: domain1\n" + + " - name: DOMAIN_HOME\n" + + " value: /u01/oracle/user_projects/domains\n" + + " - name: ADMIN_NAME\n" + + " value: ADMIN_SERVER\n" + + " - name: ADMIN_PORT\n" + + " value: '7001'\n" + + " - name: ADMIN_PORT_SECURE\n" + + " value: 'true'\n" + + " - name: SERVER_NAME\n" + + " value: ess_server1\n" + + " - name: DOMAIN_UID\n" + + " value: uid1\n" + + " - name: NODEMGR_HOME\n" + + " value: /u01/nodemanager\n" + + " - name: LOG_HOME\n" + + " - name: SERVER_OUT_IN_POD_LOG\n" + + " value: 'true'\n" + + " - name: SERVICE_NAME\n" + + " value: uid1-ess-server1\n" + + " - name: AS_SERVICE_NAME\n" + + " value: uid1-admin-server\n" + + " - name: USER_MEM_ARGS\n" + + " value: -Djava.security.egd=file:/dev/./urandom\n" + + " - name: ADMIN_USERNAME\n" + + " - name: ADMIN_PASSWORD\n" + + " - name: LOCAL_ADMIN_PORT\n" + + " value: '7002'\n" + + " - name: LOCAL_ADMIN_PROTOCOL\n" + + " value: t3s\n" + + " - name: SHUTDOWN_TYPE\n" + + " value: Graceful\n" + + " - name: SHUTDOWN_TIMEOUT\n" + + " value: '30'\n" + + " - name: SHUTDOWN_IGNORE_SESSIONS\n" + + " value: 'false'\n" + + " - name: DYNAMIC_CONFIG_OVERRIDE\n" + + " value: 'true'\n" + + " image: image:latest\n" + + " imagePullPolicy: Always\n" + + " lifecycle:\n" + + " preStop:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/stopServer.sh\n" + + " livenessProbe:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/livenessProbe.sh\n" + + " failureThreshold: 1\n" + + " initialDelaySeconds: 4\n" + + " periodSeconds: 6\n" + + " timeoutSeconds: 5\n" + + " name: weblogic-server\n" + + " ports:\n" + + " - containerPort: 8001\n" + + " name: default\n" + + " protocol: TCP\n" + + " - containerPort: 7002\n" + + " name: default-secure\n" + + " protocol: TCP\n" + + " readinessProbe:\n" + + " failureThreshold: 1\n" + + " httpGet:\n" + + " path: /weblogic/ready\n" + + " port: 7002\n" + + " scheme: HTTPS\n" + + " initialDelaySeconds: 1\n" + + " periodSeconds: 3\n" + + " timeoutSeconds: 2\n" + + " resources:\n" + + " limits: {}\n" + + " requests: {}\n" + + " securityContext: {}\n" + + " volumeMounts:\n" + + " - mountPath: /weblogic-operator/scripts\n" + + " name: weblogic-scripts-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/debug\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/introspector\n" + + " name: weblogic-domain-introspect-cm-volume\n" + + " imagePullSecrets: []\n" + + " initContainers: []\n" + + " nodeSelector: {}\n" + + " securityContext: {}\n" + + " terminationGracePeriodSeconds: 40\n" + + " volumes:\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: weblogic-scripts-cm\n" + + " name: weblogic-scripts-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-debug-cm\n" + + " optional: true\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-introspect-cm\n" + + " name: weblogic-domain-introspect-cm-volume\n"; + static final String MANAGED_SSLPORT_POD_3_1 = "metadata:\n" + " annotations:\n" @@ -338,6 +726,143 @@ class ReferenceObjects { + " name: uid1-weblogic-domain-introspect-cm\n" + " name: weblogic-domain-introspect-cm-volume\n"; + static final String ADMIN_SSLPORT_POD_3_0 = + "metadata:\n" + + " annotations:\n" + + " prometheus.io/path: /wls-exporter/metrics\n" + + " prometheus.io/port: '7002'\n" + + " prometheus.io/scrape: 'true'\n" + + " weblogic.sha256: '25dad014916d4e459419f1a38c67f3f3e44d4f2256f0e9edeb89a6c86ca22428'\n" + + " labels:\n" + + " weblogic.domainName: domain1\n" + + " weblogic.serverName: ADMIN_SERVER\n" + + " weblogic.domainRestartVersion: null\n" + + " weblogic.domainUID: uid1\n" + + " weblogic.createdByOperator: 'true'\n" + + " weblogic.clusterRestartVersion: null\n" + + " weblogic.serverRestartVersion: null\n" + + " name: uid1-admin-server\n" + + " namespace: namespace\n" + + " ownerReferences:\n" + + " - apiVersion: weblogic.oracle/v8\n" + + " kind: Domain\n" + + " controller: true\n" + + " name: domain1\n" + + " uid: '12345'\n" + + "spec:\n" + + " containers:\n" + + " - command:\n" + + " - /weblogic-operator/scripts/startServer.sh\n" + + " env:\n" + + " - name: DOMAIN_NAME\n" + + " value: domain1\n" + + " - name: DOMAIN_HOME\n" + + " value: /u01/oracle/user_projects/domains\n" + + " - name: ADMIN_NAME\n" + + " value: ADMIN_SERVER\n" + + " - name: ADMIN_PORT\n" + + " value: '7002'\n" + + " - name: ADMIN_PORT_SECURE\n" + + " value: 'true'\n" + + " - name: ADMIN_SERVER_PORT_SECURE\n" + + " value: 'true'\n" + + " - name: SERVER_NAME\n" + + " value: ADMIN_SERVER\n" + + " - name: DOMAIN_UID\n" + + " value: uid1\n" + + " - name: NODEMGR_HOME\n" + + " value: /u01/nodemanager\n" + + " - name: LOG_HOME\n" + + " - name: SERVER_OUT_IN_POD_LOG\n" + + " value: 'true'\n" + + " - name: SERVICE_NAME\n" + + " value: uid1-admin-server\n" + + " - name: AS_SERVICE_NAME\n" + + " value: uid1-admin-server\n" + + " - name: USER_MEM_ARGS\n" + + " value: -Djava.security.egd=file:/dev/./urandom\n" + + " - name: ADMIN_USERNAME\n" + + " - name: ADMIN_PASSWORD\n" + + " - name: LOCAL_ADMIN_PORT\n" + + " value: '7002'\n" + + " - name: LOCAL_ADMIN_PROTOCOL\n" + + " value: t3s\n" + + " - name: SHUTDOWN_TYPE\n" + + " value: Graceful\n" + + " - name: SHUTDOWN_TIMEOUT\n" + + " value: '30'\n" + + " - name: SHUTDOWN_IGNORE_SESSIONS\n" + + " value: 'false'\n" + + " - name: DYNAMIC_CONFIG_OVERRIDE\n" + + " value: 'true'\n" + + " - name: INTERNAL_OPERATOR_CERT\n" + + " value: encoded-cert-data\n" + + " image: image:latest\n" + + " imagePullPolicy: Always\n" + + " lifecycle:\n" + + " preStop:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/stopServer.sh\n" + + " livenessProbe:\n" + + " exec:\n" + + " command:\n" + + " - /weblogic-operator/scripts/livenessProbe.sh\n" + + " failureThreshold: 1\n" + + " initialDelaySeconds: 4\n" + + " periodSeconds: 6\n" + + " timeoutSeconds: 5\n" + + " name: weblogic-server\n" + + " ports:\n" + + " - containerPort: 7001\n" + + " name: default\n" + + " protocol: TCP\n" + + " - containerPort: 7002\n" + + " name: default-secure\n" + + " protocol: TCP\n" + + " readinessProbe:\n" + + " failureThreshold: 1\n" + + " httpGet:\n" + + " path: /weblogic/ready\n" + + " port: 7002\n" + + " scheme: HTTPS\n" + + " initialDelaySeconds: 1\n" + + " periodSeconds: 3\n" + + " timeoutSeconds: 2\n" + + " resources:\n" + + " limits: {}\n" + + " requests: {}\n" + + " securityContext: {}\n" + + " volumeMounts:\n" + + " - mountPath: /weblogic-operator/scripts\n" + + " name: weblogic-scripts-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/debug\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " readOnly: true\n" + + " - mountPath: /weblogic-operator/introspector\n" + + " name: weblogic-domain-introspect-cm-volume\n" + + " hostname: uid1-admin-server\n" + + " imagePullSecrets: []\n" + + " initContainers: []\n" + + " nodeSelector: {}\n" + + " securityContext: {}\n" + + " terminationGracePeriodSeconds: 40\n" + + " volumes:\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: weblogic-scripts-cm\n" + + " name: weblogic-scripts-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-debug-cm\n" + + " optional: true\n" + + " name: weblogic-domain-debug-cm-volume\n" + + " - configMap:\n" + + " defaultMode: 365\n" + + " name: uid1-weblogic-domain-introspect-cm\n" + + " name: weblogic-domain-introspect-cm-volume\n"; + static final String ADMIN_SSLPORT_POD_3_1 = "metadata:\n" + " annotations:\n"