Skip to content

Commit 6da7f42

Browse files
committed
Implement kubernetes-additional-manifests
Allows to add extra manifests which should be created when the proxy is started. The created resources are deleted when the proxy is deleted.
1 parent 0e53e9a commit 6da7f42

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/backend/kubernetes/KubernetesBackend.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
*/
2121
package eu.openanalytics.containerproxy.backend.kubernetes;
2222

23+
import java.io.ByteArrayInputStream;
24+
import java.io.File;
25+
import java.io.FileWriter;
2326
import java.io.IOException;
2427
import java.io.OutputStream;
2528
import java.net.URI;
@@ -36,6 +39,7 @@
3639
import java.util.stream.Collectors;
3740

3841
import javax.inject.Inject;
42+
import javax.json.JsonValue;
3943

4044
import org.apache.commons.io.IOUtils;
4145

@@ -52,6 +56,7 @@
5256
import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
5357
import io.fabric8.kubernetes.api.model.EnvVar;
5458
import io.fabric8.kubernetes.api.model.EnvVarSourceBuilder;
59+
import io.fabric8.kubernetes.api.model.HasMetadata;
5560
import io.fabric8.kubernetes.api.model.LocalObjectReference;
5661
import io.fabric8.kubernetes.api.model.Pod;
5762
import io.fabric8.kubernetes.api.model.PodBuilder;
@@ -134,6 +139,16 @@ protected Container startContainer(ContainerSpec spec, Proxy proxy) throws Excep
134139

135140
String kubeNamespace = getProperty(PROPERTY_NAMESPACE, DEFAULT_NAMESPACE);
136141
String apiVersion = getProperty(PROPERTY_API_VERSION, DEFAULT_API_VERSION);
142+
143+
// create additional manifests
144+
for (String manifest : proxy.getSpec().getKubernetesAdditionalManifests()) {
145+
List<HasMetadata> objects = kubeClient.load(new ByteArrayInputStream(manifest.getBytes())).get();
146+
for (HasMetadata object : objects) {
147+
if (kubeClient.resource(object).fromServer().get() == null) {
148+
kubeClient.resource(object).createOrReplace();
149+
}
150+
}
151+
}
137152

138153
String[] volumeStrings = Optional.ofNullable(spec.getVolumes()).orElse(new String[] {});
139154
List<Volume> volumes = new ArrayList<>();
@@ -287,6 +302,7 @@ protected Container startContainer(ContainerSpec spec, Proxy proxy) throws Excep
287302
proxy.getTargets().put(mapping, target);
288303
}
289304

305+
290306
return container;
291307
}
292308

@@ -334,6 +350,14 @@ protected void doStopProxy(Proxy proxy) throws Exception {
334350
if (pod != null) kubeClient.pods().inNamespace(kubeNamespace).delete(pod);
335351
Service service = Service.class.cast(container.getParameters().get(PARAM_SERVICE));
336352
if (service != null) kubeClient.services().inNamespace(kubeNamespace).delete(service);
353+
354+
// delete additional manifests
355+
for (String manifest : proxy.getSpec().getKubernetesAdditionalManifests()) {
356+
List<HasMetadata> objects = kubeClient.load(new ByteArrayInputStream(manifest.getBytes())).get();
357+
for (HasMetadata object : objects) {
358+
kubeClient.resource(object).delete();
359+
}
360+
}
337361
}
338362
}
339363

src/main/java/eu/openanalytics/containerproxy/model/spec/ProxySpec.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.HashMap;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.stream.Collectors;
2829

2930
import javax.json.JsonPatch;
3031
import javax.json.JsonValue;
@@ -50,6 +51,7 @@ public class ProxySpec {
5051
private Map<String, String> settings = new HashMap<>();
5152

5253
private JsonPatch kubernetesPodPatches;
54+
private List<String> kubernetesAdditionalManifests = new ArrayList<>();
5355

5456
public ProxySpec() {
5557
settings = new HashMap<>();
@@ -154,6 +156,14 @@ public void setKubernetesPodPatches(String kubernetesPodPatches) throws JsonPars
154156
private void setKubernetesPodPatches(JsonPatch kubernetesPodPatches) {
155157
this.kubernetesPodPatches = kubernetesPodPatches;
156158
}
159+
160+
public void setKubernetesAdditionalManifests(List<String> manifests) {
161+
this.kubernetesAdditionalManifests = manifests;
162+
}
163+
164+
public List<String> getKubernetesAdditionalManifests() {
165+
return kubernetesAdditionalManifests;
166+
}
157167

158168
public void copy(ProxySpec target) {
159169
target.setId(id);
@@ -195,6 +205,10 @@ public void copy(ProxySpec target) {
195205
target.setKubernetesPodPatches(kubernetesPodPatches);
196206
}
197207

208+
if (kubernetesAdditionalManifests != null) {
209+
target.setKubernetesAdditionalManifests(kubernetesAdditionalManifests.stream().collect(Collectors.toList()));
210+
}
211+
198212
}
199213

200214
}

0 commit comments

Comments
 (0)