Skip to content

Commit 26fc896

Browse files
jshum2479rjeberhard
authored andcommitted
Support init container for introspector pod
1 parent 71e21e5 commit 26fc896

File tree

8 files changed

+601
-1
lines changed

8 files changed

+601
-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: 540 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
@@ -189,6 +189,11 @@ private List<V1EnvVar> getIntrospectorEnvVariables() {
189189
.map(EffectiveIntrospectorJobPodSpec::getEnv).orElse(new ArrayList<>());
190190
}
191191

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

475485
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) {
@@ -133,6 +144,12 @@ void fillInFrom(IntrospectorJobPod serverPod1) {
133144
}
134145
envFrom.addAll(serverPod1.envFrom);
135146
}
147+
if (serverPod1.initContainers != null) {
148+
if (initContainers == null) {
149+
initContainers = new ArrayList<>();
150+
}
151+
initContainers.addAll(serverPod1.initContainers);
152+
}
136153
copyValues(resources, serverPod1.resources);
137154
copyValues(serverPod1.podSecurityContext);
138155
}
@@ -147,6 +164,14 @@ private List<V1EnvVar> getV1EnvVars() {
147164
return Optional.ofNullable(getEnv()).orElse(emptyList());
148165
}
149166

167+
List<V1Container> getInitContainers() {
168+
return Optional.ofNullable(initContainers).orElse(emptyList());
169+
}
170+
171+
void setInitContainers(@Nullable List<V1Container> initContainers) {
172+
this.initContainers = initContainers;
173+
}
174+
150175
private boolean hasEnvVar(String name) {
151176
if (env == null) {
152177
return false;
@@ -210,6 +235,7 @@ public String toString() {
210235
.append("resources", resources)
211236
.append("envFrom", envFrom)
212237
.append("podSecurityContext", podSecurityContext)
238+
.append("initContainers", initContainers)
213239
.toString();
214240
}
215241

@@ -232,6 +258,7 @@ public boolean equals(Object o) {
232258
.append(resources, that.resources)
233259
.append(envFrom, that.envFrom)
234260
.append(podSecurityContext, that.podSecurityContext)
261+
.append(initContainers, that.initContainers)
235262
.isEquals();
236263
}
237264

@@ -243,6 +270,7 @@ public int hashCode() {
243270
.append(resources)
244271
.append(envFrom)
245272
.append(podSecurityContext)
273+
.append(initContainers)
246274
.toHashCode();
247275
}
248276
}

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)