/
CustomServiceReconciler.java
62 lines (49 loc) · 2.13 KB
/
CustomServiceReconciler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package io.javaoperatorsdk.operator.springboot.starter.sample;
import java.util.Collections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.fabric8.kubernetes.api.model.ServiceBuilder;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.operator.api.reconciler.*;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
/** A very simple sample controller that creates a service with a label. */
@ControllerConfiguration(dependents = {
@Dependent(name = "config", type = ConfigMapDpendentResource.class)
})
public class CustomServiceReconciler implements Reconciler<CustomService> {
private static final Logger log = LoggerFactory.getLogger(CustomServiceReconciler.class);
private final KubernetesClient kubernetesClient;
public CustomServiceReconciler() {
this(new DefaultKubernetesClient());
}
public CustomServiceReconciler(KubernetesClient kubernetesClient) {
this.kubernetesClient = kubernetesClient;
}
@Override
public UpdateControl<CustomService> reconcile(
CustomService resource, Context<CustomService> context) {
log.info("Reconciling: {}", resource.getMetadata().getName());
ServicePort servicePort = new ServicePort();
servicePort.setPort(8080);
ServiceSpec serviceSpec = new ServiceSpec();
serviceSpec.setPorts(Collections.singletonList(servicePort));
var service = new ServiceBuilder()
.withNewMetadata()
.withName(resource.getSpec().getName())
.withNamespace(resource.getMetadata().getNamespace())
.addToLabels("testLabel", resource.getSpec().getLabel())
.endMetadata()
.withSpec(serviceSpec)
.build();
service.addOwnerReference(resource);
kubernetesClient
.services()
.inNamespace(resource.getMetadata().getNamespace())
.createOrReplace(service);
return UpdateControl.updateResource(resource);
}
}