Skip to content

Commit 9804d21

Browse files
committed
support init containers for introspector pod, ported from 4.2
1 parent 35d36fe commit 9804d21

File tree

8 files changed

+630
-1
lines changed

8 files changed

+630
-1
lines changed

documentation/domains/Domain.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,13 @@
782782
"items": {
783783
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.28.2/_definitions.json#/definitions/io.k8s.api.core.v1.EnvFromSource"
784784
}
785+
},
786+
"initContainers": {
787+
"description": "List of init containers for the introspector Job Pod. These containers run after the auxiliary image init container. See `kubectl explain pods.spec.initContainers`.",
788+
"type": "array",
789+
"items": {
790+
"$ref": "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.28.2/_definitions.json#/definitions/io.k8s.api.core.v1.Container"
791+
}
785792
}
786793
}
787794
},

documentation/domains/Domain.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ The current status of the operation of the WebLogic domain. Updated automaticall
278278
| --- | --- | --- |
279279
| `env` | Array of [Env Var](k8s1.28.2.md#env-var) | A list of environment variables to set in the Introspector Job Pod container. More info: https://oracle.github.io/weblogic-kubernetes-operator/userguide/managing-domains/domain-resource/#jvm-memory-and-java-option-environment-variables. See `kubectl explain pods.spec.containers.env`. |
280280
| `envFrom` | Array of [Env From Source](k8s1.28.2.md#env-from-source) | List of sources to populate environment variables in the Introspector Job Pod container. The sources include either a config map or a secret. The operator will not expand the dependent variables in the 'envFrom' source. More details: https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container. Also see: https://oracle.github.io/weblogic-kubernetes-operator/userguide/managing-domains/domain-resource/#jvm-memory-and-java-option-environment-variables. |
281+
| `initContainers` | Array of [Container](k8s1.28.2.md#container) | List of init containers for the introspector Job Pod. These containers run after the auxiliary image init container. See `kubectl explain pods.spec.initContainers`. |
281282
| `podSecurityContext` | [Pod Security Context](k8s1.28.2.md#pod-security-context) | Pod-level security attributes. See `kubectl explain pods.spec.securityContext`. If no value is specified for this field, the operator will use default content for the pod-level `securityContext`. More info: https://oracle.github.io/weblogic-kubernetes-operator/security/domain-security/pod-and-container/. |
282283
| `resources` | [Resource Requirements](k8s1.28.2.md#resource-requirements) | Memory and CPU minimum requirements and limits for the Introspector Job Pod. See `kubectl explain pods.spec.containers.resources`. |
283284

kubernetes/crd/domain-crd.yaml

Lines changed: 569 additions & 1 deletion
Large diffs are not rendered by default.

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,11 @@ private List<V1EnvVar> getIntrospectorEnvVariables() {
190190
.map(EffectiveIntrospectorJobPodSpec::getEnv).orElse(new ArrayList<>());
191191
}
192192

193+
private List<V1Container> getIntrospectorInitContainers() {
194+
return Optional.ofNullable(getDomain().getIntrospectorSpec())
195+
.map(EffectiveIntrospectorJobPodSpec::getInitContainers).orElse(new ArrayList<>());
196+
}
197+
193198
private List<V1EnvVar> getAdminServerEnvVariables() {
194199
return Optional.ofNullable(getDomain().getAdminServerSpec()).map(EffectiveServerSpec::getEnvironmentVariables)
195200
.orElse(new ArrayList<>());
@@ -471,6 +476,11 @@ private void addInitContainers(List<V1Container> initContainers, List<? extends
471476
IntStream.range(0, auxiliaryImages.size()).forEach(idx ->
472477
initContainers.add(createInitContainerForAuxiliaryImage(auxiliaryImages.get(idx), idx,
473478
isInitializeDomainOnPV())));
479+
List<V1Container> introspectorInitContainers = getIntrospectorInitContainers();
480+
for (V1Container initContainer : introspectorInitContainers) {
481+
initContainer.securityContext(getInitContainerSecurityContext());
482+
initContainers.add(initContainer);
483+
}
474484
}
475485

476486
private Optional<InitializeDomainOnPV> getInitializeDomainOnPV() {

operator/src/main/java/oracle/kubernetes/operator/processing/EffectiveIntrospectorJobPodSpec.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.List;
77

8+
import io.kubernetes.client.openapi.models.V1Container;
89
import io.kubernetes.client.openapi.models.V1EnvFromSource;
910
import io.kubernetes.client.openapi.models.V1EnvVar;
1011
import io.kubernetes.client.openapi.models.V1PodSecurityContext;
@@ -28,4 +29,6 @@ public interface EffectiveIntrospectorJobPodSpec {
2829
V1ResourceRequirements getResources();
2930

3031
V1PodSecurityContext getPodSecurityContext();
32+
33+
List<V1Container> getInitContainers();
3134
}

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/EffectiveIntrospectorJobPodSpecCommonImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.List;
77

8+
import io.kubernetes.client.openapi.models.V1Container;
89
import io.kubernetes.client.openapi.models.V1EnvFromSource;
910
import io.kubernetes.client.openapi.models.V1EnvVar;
1011
import io.kubernetes.client.openapi.models.V1PodSecurityContext;
@@ -48,4 +49,10 @@ public V1ResourceRequirements getResources() {
4849
public V1PodSecurityContext getPodSecurityContext() {
4950
return introspector.getPodSecurityContext();
5051
}
52+
53+
@Override
54+
public List<V1Container> getInitContainers() {
55+
return introspector.getInitContainers();
56+
}
57+
5158
}

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/IntrospectorJobPod.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import javax.annotation.Nullable;
1212

1313
import io.kubernetes.client.custom.Quantity;
14+
import io.kubernetes.client.openapi.models.V1Container;
1415
import io.kubernetes.client.openapi.models.V1EnvFromSource;
1516
import io.kubernetes.client.openapi.models.V1EnvVar;
1617
import io.kubernetes.client.openapi.models.V1PodSecurityContext;
@@ -74,6 +75,16 @@ class IntrospectorJobPod {
7475
+ "More info: https://oracle.github.io/weblogic-kubernetes-operator/security/domain-security/pod-and-container/.")
7576
private V1PodSecurityContext podSecurityContext = null;
7677

78+
/**
79+
* InitContainers holds a list of initialization containers that run after the auxiliary image init
80+
* container for the introspector job pod.
81+
*
82+
*/
83+
@Valid
84+
@Description("List of init containers for the introspector Job Pod. These containers run after the auxiliary image "
85+
+ "init container. See `kubectl explain pods.spec.initContainers`.")
86+
private List<V1Container> initContainers = null;
87+
7788
private static void copyValues(V1ResourceRequirements to, V1ResourceRequirements from) {
7889
if (from != null) {
7990
if (from.getRequests() != null) {
@@ -142,6 +153,12 @@ void fillInFrom(IntrospectorJobPod serverPod1) {
142153
}
143154
envFrom.addAll(serverPod1.envFrom);
144155
}
156+
if (serverPod1.initContainers != null) {
157+
if (initContainers == null) {
158+
initContainers = new ArrayList<>();
159+
}
160+
initContainers.addAll(serverPod1.initContainers);
161+
}
145162
copyValues(resources, serverPod1.resources);
146163
copyValues(serverPod1.podSecurityContext);
147164
}
@@ -156,6 +173,14 @@ private List<V1EnvVar> getV1EnvVars() {
156173
return Optional.ofNullable(getEnv()).orElse(emptyList());
157174
}
158175

176+
List<V1Container> getInitContainers() {
177+
return Optional.ofNullable(initContainers).orElse(emptyList());
178+
}
179+
180+
void setInitContainers(@Nullable List<V1Container> initContainers) {
181+
this.initContainers = initContainers;
182+
}
183+
159184
private boolean hasEnvVar(String name) {
160185
if (env == null) {
161186
return false;
@@ -219,6 +244,7 @@ public String toString() {
219244
.append("resources", resources)
220245
.append("envFrom", envFrom)
221246
.append("podSecurityContext", podSecurityContext)
247+
.append("initContainers", initContainers)
222248
.toString();
223249
}
224250

@@ -241,6 +267,7 @@ public boolean equals(Object o) {
241267
.append(resources, that.resources)
242268
.append(envFrom, that.envFrom)
243269
.append(podSecurityContext, that.podSecurityContext)
270+
.append(initContainers, that.initContainers)
244271
.isEquals();
245272
}
246273

@@ -252,6 +279,7 @@ public int hashCode() {
252279
.append(resources)
253280
.append(envFrom)
254281
.append(podSecurityContext)
282+
.append(initContainers)
255283
.toHashCode();
256284
}
257285
}

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/IntrospectorJobPodConfiguration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.List;
77
import javax.annotation.Nullable;
88

9+
import io.kubernetes.client.openapi.models.V1Container;
910
import io.kubernetes.client.openapi.models.V1EnvFromSource;
1011
import io.kubernetes.client.openapi.models.V1EnvVar;
1112
import io.kubernetes.client.openapi.models.V1PodSecurityContext;
@@ -48,6 +49,10 @@ public void setEnv(@Nullable List<V1EnvVar> env) {
4849
serverPod.setEnv(env);
4950
}
5051

52+
public List<V1Container> getInitContainers() {
53+
return serverPod.getInitContainers();
54+
}
55+
5156
void addEnvironmentVariable(String name, String value) {
5257
serverPod.addEnvVar(new V1EnvVar().name(name).value(value));
5358
}

0 commit comments

Comments
 (0)