Skip to content

Commit a8a6a32

Browse files
committed
Merge branch 'dpv-dci-main' into 'main'
using domain creation images for domain in pv cases See merge request weblogic-cloud/weblogic-kubernetes-operator!4746
2 parents 8bb0421 + 3392e47 commit a8a6a32

File tree

9 files changed

+573
-694
lines changed

9 files changed

+573
-694
lines changed

Jenkinsfile.podman

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ CRON_SETTINGS = '''H 1 * * * % MAVEN_PROFILE_NAME=kind-parallel
2626
H 4 * * * % MAVEN_PROFILE_NAME=kind-upgrade;KUBE_VERSION=1.24.17'''
2727

2828
pipeline {
29-
agent { label 'large-ol9' }
29+
agent { label 'large-ol9u4' }
3030
options {
3131
timeout(time: 800, unit: 'MINUTES')
3232
}

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

Lines changed: 85 additions & 227 deletions
Large diffs are not rendered by default.

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

Lines changed: 85 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,26 @@
2020
import java.util.Map;
2121
import java.util.Properties;
2222

23+
import io.kubernetes.client.custom.Quantity;
2324
import io.kubernetes.client.custom.V1Patch;
2425
import io.kubernetes.client.openapi.ApiException;
2526
import io.kubernetes.client.openapi.models.V1Container;
2627
import io.kubernetes.client.openapi.models.V1EnvVar;
2728
import io.kubernetes.client.openapi.models.V1Ingress;
2829
import io.kubernetes.client.openapi.models.V1LocalObjectReference;
2930
import io.kubernetes.client.openapi.models.V1ObjectMeta;
30-
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimVolumeSource;
3131
import io.kubernetes.client.openapi.models.V1Pod;
3232
import io.kubernetes.client.openapi.models.V1ServiceBackendPort;
33-
import io.kubernetes.client.openapi.models.V1Volume;
34-
import io.kubernetes.client.openapi.models.V1VolumeMount;
3533
import oracle.weblogic.domain.AdminServer;
3634
import oracle.weblogic.domain.AdminService;
3735
import oracle.weblogic.domain.Channel;
3836
import oracle.weblogic.domain.ClusterResource;
3937
import oracle.weblogic.domain.ClusterStatus;
4038
import oracle.weblogic.domain.Configuration;
39+
import oracle.weblogic.domain.CreateIfNotExists;
40+
import oracle.weblogic.domain.DomainCreationImage;
41+
import oracle.weblogic.domain.DomainOnPV;
42+
import oracle.weblogic.domain.DomainOnPVType;
4143
import oracle.weblogic.domain.DomainResource;
4244
import oracle.weblogic.domain.DomainSpec;
4345
import oracle.weblogic.domain.Model;
@@ -46,6 +48,7 @@
4648
import oracle.weblogic.kubernetes.actions.impl.Ingress;
4749
import oracle.weblogic.kubernetes.actions.impl.primitive.Command;
4850
import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams;
51+
import oracle.weblogic.kubernetes.actions.impl.primitive.WitParams;
4952
import oracle.weblogic.kubernetes.annotations.IntegrationTest;
5053
import oracle.weblogic.kubernetes.annotations.Namespaces;
5154
import oracle.weblogic.kubernetes.logging.LoggingFacade;
@@ -65,6 +68,7 @@
6568
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_PASSWORD_PATCH;
6669
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_USERNAME_DEFAULT;
6770
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_USERNAME_PATCH;
71+
import static oracle.weblogic.kubernetes.TestConstants.BASE_IMAGES_REPO_SECRET_NAME;
6872
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_API_VERSION;
6973
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_IMAGES_PREFIX;
7074
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_IMAGES_REPO;
@@ -87,6 +91,7 @@
8791
import static oracle.weblogic.kubernetes.TestConstants.WEBLOGIC_IMAGE_TO_USE_IN_SPEC;
8892
import static oracle.weblogic.kubernetes.actions.ActionConstants.APP_DIR;
8993
import static oracle.weblogic.kubernetes.actions.ActionConstants.ITTESTS_DIR;
94+
import static oracle.weblogic.kubernetes.actions.ActionConstants.MODEL_DIR;
9095
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
9196
import static oracle.weblogic.kubernetes.actions.ActionConstants.WORK_DIR;
9297
import static oracle.weblogic.kubernetes.actions.TestActions.deleteSecret;
@@ -107,6 +112,7 @@
107112
import static oracle.weblogic.kubernetes.assertions.TestAssertions.podStateNotChanged;
108113
import static oracle.weblogic.kubernetes.assertions.TestAssertions.verifyRollingRestartOccurred;
109114
import static oracle.weblogic.kubernetes.utils.ApplicationUtils.verifyAdminServerRESTAccess;
115+
import static oracle.weblogic.kubernetes.utils.AuxiliaryImageUtils.createAndPushAuxiliaryImage;
110116
import static oracle.weblogic.kubernetes.utils.ClusterUtils.createClusterAndVerify;
111117
import static oracle.weblogic.kubernetes.utils.ClusterUtils.createClusterResource;
112118
import static oracle.weblogic.kubernetes.utils.CommonMiiTestUtils.verifyPodsNotRolled;
@@ -128,7 +134,9 @@
128134
import static oracle.weblogic.kubernetes.utils.DomainUtils.checkDomainStatusConditionTypeExists;
129135
import static oracle.weblogic.kubernetes.utils.DomainUtils.checkDomainStatusConditionTypeHasExpectedStatus;
130136
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
137+
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainResourceOnPv;
131138
import static oracle.weblogic.kubernetes.utils.DomainUtils.verifyDomainStatusConditionTypeDoesNotExist;
139+
import static oracle.weblogic.kubernetes.utils.FmwUtils.getConfiguration;
132140
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
133141
import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
134142
import static oracle.weblogic.kubernetes.utils.ImageUtils.imageRepoLoginAndPushImageToRegistry;
@@ -141,8 +149,6 @@
141149
import static oracle.weblogic.kubernetes.utils.OKDUtils.createRouteForOKD;
142150
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
143151
import static oracle.weblogic.kubernetes.utils.PatchDomainUtils.patchDomainResource;
144-
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPV;
145-
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVC;
146152
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodDoesNotExist;
147153
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodExists;
148154
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodReady;
@@ -151,7 +157,6 @@
151157
import static oracle.weblogic.kubernetes.utils.PodUtils.getPodsWithTimeStamps;
152158
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
153159
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
154-
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretsForImageRepos;
155160
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
156161
import static oracle.weblogic.kubernetes.utils.WLSTUtils.executeWLSTScript;
157162
import static org.apache.commons.io.FileUtils.copyDirectory;
@@ -202,6 +207,7 @@ class ItIntrospectVersion {
202207

203208
private static final String pvName = getUniqueName(domainUid + "-pv-");
204209
private static final String pvcName = getUniqueName(domainUid + "-pvc-");
210+
private static final String storageClassName = "weblogic-domain-storage-class";
205211

206212
private static final String wlSecretName = "weblogic-credentials";
207213
private static String wlsUserName = ADMIN_USERNAME_DEFAULT;
@@ -1136,98 +1142,59 @@ void testIntrospectorMakeright() {
11361142
}
11371143

11381144
private static void createDomain() {
1139-
String uniquePath = "/shared/" + introDomainNamespace + "/domains";
1145+
String uniqueDomainHome = "/shared/" + introDomainNamespace + "/domains/";
11401146

11411147
// create WebLogic domain credential secret
11421148
createSecretWithUsernamePassword(wlSecretName, introDomainNamespace,
11431149
wlsUserName, wlsPassword);
1144-
createPV(pvName, domainUid, ItIntrospectVersion.class.getSimpleName());
1145-
createPVC(pvName, pvcName, domainUid, introDomainNamespace);
1146-
1147-
// create a temporary WebLogic domain property file
1148-
File domainPropertiesFile = assertDoesNotThrow(() ->
1149-
File.createTempFile("domain", ".properties", new File(RESULTS_TEMPFILE)),
1150-
"Failed to create domain properties file");
1151-
Properties p = new Properties();
1152-
p.setProperty("domain_path", uniquePath);
1153-
p.setProperty("domain_name", domainUid);
1154-
p.setProperty("cluster_name", cluster1Name);
1155-
p.setProperty("admin_server_name", adminServerName);
1156-
p.setProperty("managed_server_port", Integer.toString(managedServerPort));
1157-
p.setProperty("admin_server_port", "7001");
1158-
p.setProperty("admin_username", wlsUserName);
1159-
p.setProperty("admin_password", wlsPassword);
1160-
p.setProperty("admin_t3_public_address", K8S_NODEPORT_HOST);
1161-
p.setProperty("admin_t3_channel_port", Integer.toString(t3ChannelPort));
1162-
p.setProperty("number_of_ms", "2"); // maximum number of servers in cluster
1163-
p.setProperty("managed_server_name_base", cluster1ManagedServerNameBase);
1164-
p.setProperty("domain_logs", uniquePath + "/logs/" + domainUid);
1165-
p.setProperty("production_mode_enabled", "true");
1166-
assertDoesNotThrow(() ->
1167-
p.store(new FileOutputStream(domainPropertiesFile), "domain properties file"),
1168-
"Failed to write domain properties file");
1169-
1170-
// WLST script for creating domain
1171-
Path wlstScript = Paths.get(RESOURCE_DIR, "python-scripts", "wlst-create-domain-onpv.py");
1172-
1173-
// create configmap and domain on persistent volume using the WLST script and property file
1174-
createDomainOnPVUsingWlst(wlstScript, domainPropertiesFile.toPath(),
1175-
pvName, pvcName, introDomainNamespace);
1176-
1177-
// create cluster object
1178-
String clusterResName = domainUid + "-" + cluster1Name;
1179-
ClusterResource cluster = createClusterResource(clusterResName,
1180-
cluster1Name, introDomainNamespace, cluster1ReplicaCount);
1181-
1182-
logger.info("Creating cluster resource {0} in namespace {1}",clusterResName, introDomainNamespace);
1183-
createClusterAndVerify(cluster);
1184-
1185-
// create a domain custom resource configuration object
1150+
final String wlsModelFilePrefix = "model-dci-introspect";
1151+
final String wlsModelFile = wlsModelFilePrefix + ".yaml";
1152+
File wlsModelPropFile = createWdtPropertyFile(wlsModelFilePrefix, K8S_NODEPORT_HOST, t3ChannelPort);
1153+
1154+
// create domainCreationImage
1155+
String domainCreationImageName = DOMAIN_IMAGES_PREFIX + "introspect-domain-on-pv-image";
1156+
// create image with model and wdt installation files
1157+
WitParams witParams
1158+
= new WitParams()
1159+
.modelImageName(domainCreationImageName)
1160+
.modelImageTag(MII_BASIC_IMAGE_TAG)
1161+
.modelFiles(Collections.singletonList(MODEL_DIR + "/" + wlsModelFile))
1162+
.modelVariableFiles(Collections.singletonList(wlsModelPropFile.getAbsolutePath()));
1163+
createAndPushAuxiliaryImage(domainCreationImageName, MII_BASIC_IMAGE_TAG, witParams);
1164+
1165+
DomainCreationImage domainCreationImage
1166+
= new DomainCreationImage().image(domainCreationImageName + ":" + MII_BASIC_IMAGE_TAG);
1167+
1168+
// create a domain resource
11861169
logger.info("Creating domain custom resource");
1187-
DomainResource domain = new DomainResource()
1188-
.apiVersion(DOMAIN_API_VERSION)
1189-
.kind("Domain")
1190-
.metadata(new V1ObjectMeta()
1191-
.name(domainUid)
1192-
.namespace(introDomainNamespace))
1193-
.spec(new DomainSpec()
1194-
.domainUid(domainUid)
1195-
.domainHome(uniquePath + "/" + domainUid) // point to domain home in pv
1196-
.domainHomeSourceType("PersistentVolume") // set the domain home source type as pv
1197-
.image(WEBLOGIC_IMAGE_TO_USE_IN_SPEC)
1198-
.imagePullPolicy(IMAGE_PULL_POLICY)
1199-
.webLogicCredentialsSecret(new V1LocalObjectReference()
1200-
.name(wlSecretName))
1201-
.includeServerOutInPodLog(true)
1202-
.logHomeEnabled(Boolean.TRUE)
1203-
.logHome(uniquePath + "/logs/" + domainUid)
1204-
.dataHome("")
1205-
.serverStartPolicy("IfNeeded")
1206-
.serverPod(new ServerPod() //serverpod
1207-
.addEnvItem(new V1EnvVar()
1208-
.name("USER_MEM_ARGS")
1209-
.value("-Djava.security.egd=file:/dev/./urandom "))
1210-
.addVolumesItem(new V1Volume()
1211-
.name(pvName)
1212-
.persistentVolumeClaim(new V1PersistentVolumeClaimVolumeSource()
1213-
.claimName(pvcName)))
1214-
.addVolumeMountsItem(new V1VolumeMount()
1215-
.mountPath("/shared")
1216-
.name(pvName)))
1217-
.adminServer(new AdminServer() //admin server
1218-
.adminService(new AdminService()
1219-
.addChannelsItem(new Channel()
1220-
.channelName("default")
1221-
.nodePort(getNextFreePort())))));
1222-
1223-
// create secrets
1224-
List<V1LocalObjectReference> secrets = new ArrayList<>();
1225-
for (String secret : createSecretsForImageRepos(introDomainNamespace)) {
1226-
secrets.add(new V1LocalObjectReference().name(secret));
1170+
Map<String, Quantity> pvCapacity = new HashMap<>();
1171+
pvCapacity.put("storage", new Quantity("2Gi"));
1172+
1173+
Map<String, Quantity> pvcRequest = new HashMap<>();
1174+
pvcRequest.put("storage", new Quantity("2Gi"));
1175+
Configuration configuration = null;
1176+
if (OKE_CLUSTER) {
1177+
configuration = getConfiguration(pvcName, pvcRequest, "oci-fss");
1178+
} else {
1179+
configuration = getConfiguration(pvName, pvcName, pvCapacity, pvcRequest, storageClassName,
1180+
ItIntrospectVersion.class.getSimpleName());
12271181
}
1228-
domain.spec().setImagePullSecrets(secrets);
1229-
// set cluster references
1230-
domain.getSpec().withCluster(new V1LocalObjectReference().name(clusterResName));
1182+
configuration.getInitializeDomainOnPV().domain(new DomainOnPV()
1183+
.createMode(CreateIfNotExists.DOMAIN)
1184+
.domainCreationImages(Collections.singletonList(domainCreationImage))
1185+
.domainType(DomainOnPVType.WLS));
1186+
1187+
DomainResource domain = createDomainResourceOnPv(domainUid,
1188+
introDomainNamespace,
1189+
wlSecretName,
1190+
cluster1Name,
1191+
pvName,
1192+
pvcName,
1193+
new String[]{BASE_IMAGES_REPO_SECRET_NAME},
1194+
uniqueDomainHome,
1195+
cluster1ReplicaCount,
1196+
t3ChannelPort,
1197+
configuration);
12311198

12321199
setPodAntiAffinity(domain);
12331200
// verify the domain custom resource is created
@@ -1392,7 +1359,7 @@ private static void verifyMemberHealth(String adminServerPodName, List<String> m
13921359
headers = new HashMap<>();
13931360
headers.put("host", hostHeader);
13941361
}
1395-
1362+
13961363
String url = "http://" + hostAndPort
13971364
+ "/clusterview/ClusterViewServlet?user=" + user + "&password=" + code + "&ipv6=" + ipv6;
13981365
HttpResponse<String> response;
@@ -1575,7 +1542,10 @@ private DomainResource createDomainResourceWithConfigMap(String domainUid, Strin
15751542
private void updateIngressBackendServicePort(int newAdminPort) throws ApiException {
15761543
String ingressName = introDomainNamespace + "-" + domainUid + "-" + adminServerName + "-7001";
15771544
V1Ingress ingress = Ingress.getIngress(introDomainNamespace, ingressName).orElse(null);
1578-
if (ingress != null && ingress.getSpec() != null && ingress.getSpec().getRules() != null) {
1545+
if (ingress != null
1546+
&& ingress.getSpec() != null
1547+
&& ingress.getSpec().getRules() != null
1548+
&& !ingress.getSpec().getRules().isEmpty()) {
15791549
logger.info("Updating ingress {0} with new admin port {1}", ingressName, newAdminPort);
15801550
ingress.getSpec().getRules().getFirst().getHttp()
15811551
.getPaths().getFirst().getBackend().getService()
@@ -1586,4 +1556,25 @@ private void updateIngressBackendServicePort(int newAdminPort) throws ApiExcepti
15861556
}
15871557
}
15881558

1559+
public static File createWdtPropertyFile(String wlsModelFilePrefix, String nodePortHost, int t3Port) {
1560+
1561+
// create property file used with domain model file
1562+
Properties p = new Properties();
1563+
p.setProperty("WebLogicAdminUserName", ADMIN_USERNAME_DEFAULT);
1564+
p.setProperty("WebLogicAdminPassword", ADMIN_PASSWORD_DEFAULT);
1565+
p.setProperty("K8S_NODEPORT_HOST", nodePortHost);
1566+
p.setProperty("T3_CHANNEL_PORT", Integer.toString(t3Port));
1567+
1568+
// create a model property file
1569+
File domainPropertiesFile = assertDoesNotThrow(() ->
1570+
File.createTempFile(wlsModelFilePrefix, ".properties", new File(RESULTS_TEMPFILE)),
1571+
"Failed to create WLS model properties file");
1572+
1573+
// create the property file
1574+
assertDoesNotThrow(() ->
1575+
p.store(new FileOutputStream(domainPropertiesFile), "WLS properties file"),
1576+
"Failed to write WLS properties file");
1577+
1578+
return domainPropertiesFile;
1579+
}
15891580
}

0 commit comments

Comments
 (0)