Skip to content

Commit 6b56b25

Browse files
committed
Merge branch 'xc-109433' into 'main'
JRF Domain on PV: User updates the base image (spec.image) for the existing domain See merge request weblogic-cloud/weblogic-kubernetes-operator!4292
2 parents ec48d84 + 65b37da commit 6b56b25

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItFmwDomainInPVSimplified.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@
66
import java.io.File;
77
import java.io.FileOutputStream;
88
import java.nio.file.Path;
9+
import java.time.OffsetDateTime;
910
import java.util.ArrayList;
1011
import java.util.Collections;
1112
import java.util.HashMap;
1213
import java.util.List;
1314
import java.util.Map;
1415
import java.util.Properties;
16+
import java.util.concurrent.Callable;
1517

1618
import io.kubernetes.client.custom.Quantity;
19+
import io.kubernetes.client.custom.V1Patch;
1720
import io.kubernetes.client.openapi.ApiException;
1821
import io.kubernetes.client.openapi.models.V1EnvVar;
1922
import io.kubernetes.client.openapi.models.V1HostPathVolumeSource;
@@ -68,9 +71,17 @@
6871
import static oracle.weblogic.kubernetes.TestConstants.OKD;
6972
import static oracle.weblogic.kubernetes.TestConstants.OPERATOR_CHART_DIR;
7073
import static oracle.weblogic.kubernetes.TestConstants.OPERATOR_RELEASE_NAME;
74+
import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO;
75+
import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO_PASSWORD;
76+
import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO_USERNAME;
7177
import static oracle.weblogic.kubernetes.actions.ActionConstants.MODEL_DIR;
7278
import static oracle.weblogic.kubernetes.actions.TestActions.deletePod;
79+
import static oracle.weblogic.kubernetes.actions.TestActions.imagePush;
80+
import static oracle.weblogic.kubernetes.actions.TestActions.imageRepoLogin;
81+
import static oracle.weblogic.kubernetes.actions.TestActions.imageTag;
82+
import static oracle.weblogic.kubernetes.actions.impl.Domain.patchDomainCustomResource;
7383
import static oracle.weblogic.kubernetes.assertions.TestAssertions.pvcExists;
84+
import static oracle.weblogic.kubernetes.assertions.TestAssertions.verifyRollingRestartOccurred;
7485
import static oracle.weblogic.kubernetes.utils.AuxiliaryImageUtils.createAndPushAuxiliaryImage;
7586
import static oracle.weblogic.kubernetes.utils.ClusterUtils.createClusterAndVerify;
7687
import static oracle.weblogic.kubernetes.utils.ClusterUtils.createClusterResource;
@@ -91,12 +102,14 @@
91102
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVC;
92103
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVHostPathDir;
93104
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodDoesNotExist;
105+
import static oracle.weblogic.kubernetes.utils.PodUtils.getPodsWithTimeStamps;
94106
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
95107
import static oracle.weblogic.kubernetes.utils.SecretUtils.createOpsswalletpasswordSecret;
96108
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
97109
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
98110
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
99111
import static org.junit.jupiter.api.Assertions.assertNotNull;
112+
import static org.junit.jupiter.api.Assertions.assertTrue;
100113

101114
/**
102115
* Test to create a FMW domain in persistent volume with new simplified feature.
@@ -177,6 +190,7 @@ public static void initAll(@Namespaces(3) List<String> namespaces) {
177190
* Create a basic FMW domain on PV.
178191
* Operator will create PV/PVC/RCU/Domain.
179192
* Verify Pod is ready and service exists for both admin server and managed servers.
193+
* Update the base image in the domain spec, verify the domain is rolling-restarted.
180194
*/
181195
@Test
182196
@DisplayName("Create a FMW domain on PV using simplified feature, Operator creates PV/PVC/RCU/Domain")
@@ -272,6 +286,38 @@ void testOperatorCreatesPvPvcRcuDomain() {
272286
// verify that all servers are ready
273287
verifyDomainReady(domainNamespace, domainUid, replicaCount, "nosuffix");
274288

289+
// get the map with server pods and their original creation timestamps
290+
String adminServerPodName = domainUid + "-admin-server";
291+
String managedServerPodNamePrefix = domainUid + "-managed-server";
292+
Map<String, OffsetDateTime> podsWithTimeStamps = getPodsWithTimeStamps(domainNamespace,
293+
adminServerPodName, managedServerPodNamePrefix, replicaCount);
294+
295+
// update the domain with new base image
296+
int index = FMWINFRA_IMAGE_TO_USE_IN_SPEC.lastIndexOf(":");
297+
String newImage = FMWINFRA_IMAGE_TO_USE_IN_SPEC.substring(0, index) + ":newtag";
298+
testUntil(
299+
tagImageAndPushIfNeeded(FMWINFRA_IMAGE_TO_USE_IN_SPEC, newImage),
300+
logger,
301+
"tagImageAndPushIfNeeded for image {0} to be successful",
302+
newImage);
303+
304+
logger.info("patch the domain resource with new image {0}", newImage);
305+
String patchStr
306+
= "["
307+
+ "{\"op\": \"replace\", \"path\": \"/spec/image\", "
308+
+ "\"value\": \"" + newImage + "\"}"
309+
+ "]";
310+
logger.info("Updating domain configuration using patch string: {0}\n", patchStr);
311+
V1Patch patch = new V1Patch(patchStr);
312+
assertTrue(patchDomainCustomResource(domainUid, domainNamespace, patch, V1Patch.PATCH_FORMAT_JSON_PATCH),
313+
"Failed to patch domain");
314+
315+
// verify the server pods are rolling restarted and back to ready state
316+
logger.info("Verifying rolling restart occurred for domain {0} in namespace {1}",
317+
domainUid, domainNamespace);
318+
assertTrue(verifyRollingRestartOccurred(podsWithTimeStamps, 1, domainNamespace),
319+
String.format("Rolling restart failed for domain %s in namespace %s", domainUid, domainNamespace));
320+
275321
// delete the domain
276322
deleteDomainResource(domainNamespace, domainUid);
277323
// delete the cluster
@@ -984,4 +1030,22 @@ private String getHostPath(String pvName, String className) {
9841030
Path hostPVPath = createPVHostPathDir(pvName, className);
9851031
return hostPVPath.toString();
9861032
}
1033+
1034+
private Callable<Boolean> tagImageAndPushIfNeeded(String originalImage, String taggedImage) {
1035+
return (() -> {
1036+
boolean result = true;
1037+
result = result && imageTag(originalImage, taggedImage);
1038+
// push the image to a registry to make the test work in multi node cluster
1039+
logger.info("image repo login to registry {0}", TEST_IMAGES_REPO);
1040+
result = result && imageRepoLogin(TEST_IMAGES_REPO, TEST_IMAGES_REPO_USERNAME,
1041+
TEST_IMAGES_REPO_PASSWORD);
1042+
// push image
1043+
if (!DOMAIN_IMAGES_REPO.isEmpty()) {
1044+
logger.info("push image {0} to registry", taggedImage);
1045+
result = result && imagePush(taggedImage);
1046+
}
1047+
return result;
1048+
});
1049+
}
1050+
9871051
}

integration-tests/src/test/java/oracle/weblogic/kubernetes/TestConstants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public interface TestConstants {
9696
public static final String WEBLOGIC_IMAGE_TAG_DEFAULT = "12.2.1.4";
9797
public static final String FMWINFRA_IMAGE_NAME_DEFAULT = "test-images/fmw-infrastructure";
9898
public static final String FMWINFRA_IMAGE_TAG_DEFAULT = "12.2.1.4";
99+
public static final String FMWINFRA_IMAGE_TAG_12213 = "12.2.1.3";
99100
public static final String DB_IMAGE_NAME_DEFAULT = "test-images/database/enterprise";
100101
public static final String DB_PREBUILT_IMAGE_NAME_DEFAULT = "test-images/database/express";
101102
public static final String DB_IMAGE_TAG_DEFAULT = "12.2.0.1-slim";
@@ -151,6 +152,8 @@ public interface TestConstants {
151152
getKindRepoImageForSpec(KIND_REPO, WEBLOGIC_IMAGE_NAME, WEBLOGIC_IMAGE_TAG, BASE_IMAGES_REPO_PREFIX_LENGTH);
152153
public static final String FMWINFRA_IMAGE_TO_USE_IN_SPEC =
153154
getKindRepoImageForSpec(KIND_REPO, FMWINFRA_IMAGE_NAME, FMWINFRA_IMAGE_TAG, BASE_IMAGES_REPO_PREFIX_LENGTH);
155+
public static final String FMWINFRA_IMAGE_TO_USE_IN_SPEC_12213 =
156+
getKindRepoImageForSpec(KIND_REPO, FMWINFRA_IMAGE_NAME, FMWINFRA_IMAGE_TAG_12213, BASE_IMAGES_REPO_PREFIX_LENGTH);
154157
public static final String DB_IMAGE_TO_USE_IN_SPEC =
155158
getKindRepoImageForSpec(KIND_REPO, DB_IMAGE_NAME, DB_IMAGE_TAG, BASE_IMAGES_REPO_PREFIX_LENGTH);
156159

0 commit comments

Comments
 (0)