Skip to content

Commit 62a1b0a

Browse files
committed
minor
1 parent 669ff53 commit 62a1b0a

File tree

7 files changed

+452
-339
lines changed

7 files changed

+452
-339
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.apicurio.registry.operator;
22

3+
import static io.apicurio.registry.operator.Constants.*;
4+
35
import io.apicur.registry.v1.ApicurioRegistry;
46
import io.fabric8.kubernetes.api.model.OwnerReferenceBuilder;
57
import io.fabric8.kubernetes.api.model.apps.Deployment;
@@ -8,39 +10,72 @@
810
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
911
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
1012

11-
import static io.apicurio.registry.operator.Constants.*;
12-
1313
@KubernetesDependent(labelSelector = LABEL_SELECTOR_KEY)
14-
public class ApicurioDeployment extends CRUDKubernetesDependentResource<Deployment, ApicurioRegistry> {
14+
public class ApicurioDeployment
15+
extends CRUDKubernetesDependentResource<Deployment, ApicurioRegistry> {
1516

16-
public ApicurioDeployment() {
17-
super(Deployment.class);
18-
}
17+
public ApicurioDeployment() {
18+
super(Deployment.class);
19+
}
1920

20-
public static String name(ApicurioRegistry apicurioRegistry) {
21-
return apicurioRegistry.getMetadata().getName();
22-
}
21+
public static String name(ApicurioRegistry apicurioRegistry) {
22+
return apicurioRegistry.getMetadata().getName();
23+
}
2324

24-
@Override
25-
protected Deployment desired(ApicurioRegistry apicurioRegistry, Context<ApicurioRegistry> context) {
26-
var labels = apicurioRegistry.getMetadata().getLabels();
27-
labels.putAll(Constants.defaultLabels(apicurioRegistry));
28-
return new DeploymentBuilder().withNewMetadata().withName(ApicurioDeployment.name(apicurioRegistry))
29-
.withNamespace(apicurioRegistry.getMetadata().getNamespace())
30-
.withOwnerReferences(new OwnerReferenceBuilder().withController(true)
31-
.withBlockOwnerDeletion(true).withApiVersion(apicurioRegistry.getApiVersion())
32-
.withKind(apicurioRegistry.getKind())
33-
.withName(apicurioRegistry.getMetadata().getName())
34-
.withUid(apicurioRegistry.getMetadata().getUid()).build())
35-
.withLabels(labels).endMetadata().withNewSpec().withNewSelector()
36-
.addToMatchLabels(LABEL_SELECTOR_KEY, LABEL_SELECTOR_VALUE).endSelector()
37-
.withReplicas(DEFAULT_REPLICAS).withNewTemplate().withNewMetadata().withLabels(labels)
38-
.endMetadata().withNewSpec().addNewContainer().withName(CONTAINER_NAME)
39-
.withImage(DEFAULT_CONTAINER_IMAGE).withImagePullPolicy("Always").withNewResources()
40-
.withRequests(DEFAULT_REQUESTS).withLimits(DEFAULT_LIMITS).endResources()
41-
.withReadinessProbe(DEFAULT_READINESS_PROBE).withLivenessProbe(DEFAULT_LIVENESS_PROBE)
42-
.endContainer().endSpec().endTemplate().withNewStrategy().withNewRollingUpdate()
43-
.withNewMaxUnavailable().withValue(1).endMaxUnavailable().withNewMaxSurge().withValue(1)
44-
.endMaxSurge().endRollingUpdate().endStrategy().endSpec().build();
45-
}
25+
@Override
26+
protected Deployment desired(
27+
ApicurioRegistry apicurioRegistry, Context<ApicurioRegistry> context) {
28+
var labels = apicurioRegistry.getMetadata().getLabels();
29+
labels.putAll(Constants.defaultLabels(apicurioRegistry));
30+
return new DeploymentBuilder()
31+
.withNewMetadata()
32+
.withName(ApicurioDeployment.name(apicurioRegistry))
33+
.withNamespace(apicurioRegistry.getMetadata().getNamespace())
34+
.withOwnerReferences(
35+
new OwnerReferenceBuilder()
36+
.withController(true)
37+
.withBlockOwnerDeletion(true)
38+
.withApiVersion(apicurioRegistry.getApiVersion())
39+
.withKind(apicurioRegistry.getKind())
40+
.withName(apicurioRegistry.getMetadata().getName())
41+
.withUid(apicurioRegistry.getMetadata().getUid())
42+
.build())
43+
.withLabels(labels)
44+
.endMetadata()
45+
.withNewSpec()
46+
.withNewSelector()
47+
.addToMatchLabels(LABEL_SELECTOR_KEY, LABEL_SELECTOR_VALUE)
48+
.endSelector()
49+
.withReplicas(DEFAULT_REPLICAS)
50+
.withNewTemplate()
51+
.withNewMetadata()
52+
.withLabels(labels)
53+
.endMetadata()
54+
.withNewSpec()
55+
.addNewContainer()
56+
.withName(CONTAINER_NAME)
57+
.withImage(DEFAULT_CONTAINER_IMAGE)
58+
.withImagePullPolicy("Always")
59+
.withNewResources()
60+
.withRequests(DEFAULT_REQUESTS)
61+
.withLimits(DEFAULT_LIMITS)
62+
.endResources()
63+
.withReadinessProbe(DEFAULT_READINESS_PROBE)
64+
.withLivenessProbe(DEFAULT_LIVENESS_PROBE)
65+
.endContainer()
66+
.endSpec()
67+
.endTemplate()
68+
.withNewStrategy()
69+
.withNewRollingUpdate()
70+
.withNewMaxUnavailable()
71+
.withValue(1)
72+
.endMaxUnavailable()
73+
.withNewMaxSurge()
74+
.withValue(1)
75+
.endMaxSurge()
76+
.endRollingUpdate()
77+
.endStrategy()
78+
.endSpec()
79+
.build();
80+
}
4681
}

operator/controller/src/main/java/io/apicurio/registry/operator/Constants.java

+61-35
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,70 @@
55
import io.fabric8.kubernetes.api.model.ProbeBuilder;
66
import io.fabric8.kubernetes.api.model.Quantity;
77
import io.fabric8.kubernetes.api.model.QuantityBuilder;
8-
98
import java.util.HashMap;
109
import java.util.Map;
1110

1211
public class Constants {
1312

14-
public static final String MANAGED_BY_LABEL = "app.kubernetes.io/managed-by";
15-
public static final String MANAGED_BY_VALUE = "apicurio-registry-operator";
16-
public static final String LABEL_SELECTOR_KEY = "app.apicurio-registry-operator.io/managed";
17-
public static final String LABEL_SELECTOR_VALUE = "true";
18-
19-
public static final int DEFAULT_REPLICAS = 1;
20-
public static final String CONTAINER_NAME = "registry";
21-
public static final String DEFAULT_CONTAINER_IMAGE = "apicurio/apicurio-registry-mem:latest-snapshot";
22-
23-
public static final Map<String, Quantity> DEFAULT_REQUESTS = Map.of("cpu",
24-
new QuantityBuilder().withAmount("500").withFormat("m").build(), "memory",
25-
new QuantityBuilder().withAmount("512").withFormat("Mi").build());
26-
public static final Map<String, Quantity> DEFAULT_LIMITS = Map.of("cpu",
27-
new QuantityBuilder().withAmount("1").build(), "memory",
28-
new QuantityBuilder().withAmount("1300").withFormat("Mi").build());
29-
public static final Probe DEFAULT_READINESS_PROBE = new ProbeBuilder().withNewHttpGet()
30-
.withPath("/health/ready").withNewPort().withValue(8080).endPort().endHttpGet()
31-
.withInitialDelaySeconds(15).withTimeoutSeconds(5).withPeriodSeconds(10).withSuccessThreshold(1)
32-
.withFailureThreshold(3).build();
33-
34-
public static final Probe DEFAULT_LIVENESS_PROBE = new ProbeBuilder().withNewHttpGet()
35-
.withPath("/health/live").withNewPort().withValue(8080).endPort().endHttpGet()
36-
.withInitialDelaySeconds(15).withTimeoutSeconds(5).withPeriodSeconds(10).withSuccessThreshold(1)
37-
.withFailureThreshold(3).build();
38-
39-
public static final Map<String, String> BASIC_LABELS = Map.of(MANAGED_BY_LABEL, MANAGED_BY_VALUE,
40-
LABEL_SELECTOR_KEY, LABEL_SELECTOR_VALUE);
41-
42-
public static final Map<String, String> defaultLabels(ApicurioRegistry apicurioRegistry) {
43-
var labels = new HashMap();
44-
labels.putAll(BASIC_LABELS);
45-
labels.put("app", apicurioRegistry.getMetadata().getName());
46-
return labels;
47-
}
13+
public static final String MANAGED_BY_LABEL = "app.kubernetes.io/managed-by";
14+
public static final String MANAGED_BY_VALUE = "apicurio-registry-operator";
15+
public static final String LABEL_SELECTOR_KEY = "app.apicurio-registry-operator.io/managed";
16+
public static final String LABEL_SELECTOR_VALUE = "true";
17+
18+
public static final int DEFAULT_REPLICAS = 1;
19+
public static final String CONTAINER_NAME = "registry";
20+
public static final String DEFAULT_CONTAINER_IMAGE =
21+
"apicurio/apicurio-registry-mem:latest-snapshot";
22+
23+
public static final Map<String, Quantity> DEFAULT_REQUESTS =
24+
Map.of(
25+
"cpu",
26+
new QuantityBuilder().withAmount("500").withFormat("m").build(),
27+
"memory",
28+
new QuantityBuilder().withAmount("512").withFormat("Mi").build());
29+
public static final Map<String, Quantity> DEFAULT_LIMITS =
30+
Map.of(
31+
"cpu",
32+
new QuantityBuilder().withAmount("1").build(),
33+
"memory",
34+
new QuantityBuilder().withAmount("1300").withFormat("Mi").build());
35+
public static final Probe DEFAULT_READINESS_PROBE =
36+
new ProbeBuilder()
37+
.withNewHttpGet()
38+
.withPath("/health/ready")
39+
.withNewPort()
40+
.withValue(8080)
41+
.endPort()
42+
.endHttpGet()
43+
.withInitialDelaySeconds(15)
44+
.withTimeoutSeconds(5)
45+
.withPeriodSeconds(10)
46+
.withSuccessThreshold(1)
47+
.withFailureThreshold(3)
48+
.build();
49+
50+
public static final Probe DEFAULT_LIVENESS_PROBE =
51+
new ProbeBuilder()
52+
.withNewHttpGet()
53+
.withPath("/health/live")
54+
.withNewPort()
55+
.withValue(8080)
56+
.endPort()
57+
.endHttpGet()
58+
.withInitialDelaySeconds(15)
59+
.withTimeoutSeconds(5)
60+
.withPeriodSeconds(10)
61+
.withSuccessThreshold(1)
62+
.withFailureThreshold(3)
63+
.build();
64+
65+
public static final Map<String, String> BASIC_LABELS =
66+
Map.of(MANAGED_BY_LABEL, MANAGED_BY_VALUE, LABEL_SELECTOR_KEY, LABEL_SELECTOR_VALUE);
67+
68+
public static final Map<String, String> defaultLabels(ApicurioRegistry apicurioRegistry) {
69+
var labels = new HashMap();
70+
labels.putAll(BASIC_LABELS);
71+
labels.put("app", apicurioRegistry.getMetadata().getName());
72+
return labels;
73+
}
4874
}

operator/controller/src/main/java/io/apicurio/registry/operator/DeploymentController.java

+25-22
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,33 @@
1313
import io.quarkus.logging.Log;
1414
import jakarta.inject.Inject;
1515

16-
@ControllerConfiguration(dependents = { @Dependent(type = ApicurioDeployment.class) })
16+
@ControllerConfiguration(dependents = {@Dependent(type = ApicurioDeployment.class)})
1717
public class DeploymentController
18-
implements Reconciler<ApicurioRegistry>, ErrorStatusHandler<ApicurioRegistry> {
19-
@Inject
20-
KubernetesClient client;
18+
implements Reconciler<ApicurioRegistry>, ErrorStatusHandler<ApicurioRegistry> {
19+
@Inject KubernetesClient client;
2120

22-
@Override
23-
public UpdateControl<ApicurioRegistry> reconcile(ApicurioRegistry apicurioRegistry,
24-
Context<ApicurioRegistry> context) {
25-
Log.infof("Reconciling Apicurio Registry: {}", apicurioRegistry);
26-
var statusUpdater = new StatusUpdater(apicurioRegistry);
21+
@Override
22+
public UpdateControl<ApicurioRegistry> reconcile(
23+
ApicurioRegistry apicurioRegistry, Context<ApicurioRegistry> context) {
24+
Log.infof("Reconciling Apicurio Registry: {}", apicurioRegistry);
25+
var statusUpdater = new StatusUpdater(apicurioRegistry);
2726

28-
return context.getSecondaryResource(Deployment.class).map(deployment -> {
29-
Log.infof("Updating Apicurio Registry status:");
30-
apicurioRegistry.setStatus(statusUpdater.next(deployment));
31-
return UpdateControl.patchStatus(apicurioRegistry);
32-
}).orElseGet(UpdateControl::noUpdate);
33-
}
27+
return context
28+
.getSecondaryResource(Deployment.class)
29+
.map(
30+
deployment -> {
31+
Log.infof("Updating Apicurio Registry status:");
32+
apicurioRegistry.setStatus(statusUpdater.next(deployment));
33+
return UpdateControl.patchStatus(apicurioRegistry);
34+
})
35+
.orElseGet(UpdateControl::noUpdate);
36+
}
3437

35-
@Override
36-
public ErrorStatusUpdateControl<ApicurioRegistry> updateErrorStatus(ApicurioRegistry apicurioRegistry,
37-
Context<ApicurioRegistry> context, Exception e) {
38-
var statusUpdater = new StatusUpdater(apicurioRegistry);
39-
apicurioRegistry.setStatus(statusUpdater.errorStatus(e));
40-
return ErrorStatusUpdateControl.updateStatus(apicurioRegistry);
41-
}
38+
@Override
39+
public ErrorStatusUpdateControl<ApicurioRegistry> updateErrorStatus(
40+
ApicurioRegistry apicurioRegistry, Context<ApicurioRegistry> context, Exception e) {
41+
var statusUpdater = new StatusUpdater(apicurioRegistry);
42+
apicurioRegistry.setStatus(statusUpdater.errorStatus(e));
43+
return ErrorStatusUpdateControl.updateStatus(apicurioRegistry);
44+
}
4245
}

operator/controller/src/main/java/io/apicurio/registry/operator/StatusUpdater.java

+52-47
Original file line numberDiff line numberDiff line change
@@ -4,69 +4,74 @@
44
import io.apicur.registry.v1.ApicurioRegistryStatus;
55
import io.apicur.registry.v1.apicurioregistrystatus.Conditions;
66
import io.fabric8.kubernetes.api.model.apps.Deployment;
7-
87
import java.time.ZonedDateTime;
98
import java.util.Arrays;
109
import java.util.List;
1110
import java.util.stream.Collectors;
1211

1312
public class StatusUpdater {
1413

15-
public static final String ERROR_TYPE = "ERROR";
14+
public static final String ERROR_TYPE = "ERROR";
15+
16+
private ApicurioRegistry registry;
1617

17-
private ApicurioRegistry registry;
18+
public StatusUpdater(ApicurioRegistry registry) {
19+
this.registry = registry;
20+
}
1821

19-
public StatusUpdater(ApicurioRegistry registry) {
20-
this.registry = registry;
22+
public ApicurioRegistryStatus errorStatus(Exception e) {
23+
ZonedDateTime lastTransitionTime = ZonedDateTime.now();
24+
if (registry != null
25+
&& registry.getStatus() != null
26+
&& registry.getStatus().getConditions().size() > 0
27+
&&
28+
// TODO: better `lastTransitionTime` handling
29+
registry.getStatus().getConditions().get(0).getLastTransitionTime() != null) {
30+
lastTransitionTime = registry.getStatus().getConditions().get(0).getLastTransitionTime();
2131
}
2232

23-
public ApicurioRegistryStatus errorStatus(Exception e) {
24-
ZonedDateTime lastTransitionTime = ZonedDateTime.now();
25-
if (registry != null && registry.getStatus() != null
26-
&& registry.getStatus().getConditions().size() > 0 &&
27-
// TODO: better `lastTransitionTime` handling
28-
registry.getStatus().getConditions().get(0).getLastTransitionTime() != null) {
29-
lastTransitionTime = registry.getStatus().getConditions().get(0).getLastTransitionTime();
30-
}
33+
var generation = registry.getMetadata() == null ? null : registry.getMetadata().getGeneration();
34+
var newLastTransitionTime = ZonedDateTime.now();
35+
var errorCondition = new Conditions();
36+
errorCondition.setStatus(Conditions.Status.TRUE);
37+
errorCondition.setType(ERROR_TYPE);
38+
errorCondition.setObservedGeneration(generation);
39+
errorCondition.setLastTransitionTime(newLastTransitionTime);
40+
errorCondition.setMessage(
41+
Arrays.stream(e.getStackTrace())
42+
.map(st -> st.toString())
43+
.collect(Collectors.joining("\n")));
44+
errorCondition.setReason("reasons");
3145

32-
var generation = registry.getMetadata() == null ? null : registry.getMetadata().getGeneration();
33-
var newLastTransitionTime = ZonedDateTime.now();
34-
var errorCondition = new Conditions();
35-
errorCondition.setStatus(Conditions.Status.TRUE);
36-
errorCondition.setType(ERROR_TYPE);
37-
errorCondition.setObservedGeneration(generation);
38-
errorCondition.setLastTransitionTime(newLastTransitionTime);
39-
errorCondition.setMessage(
40-
Arrays.stream(e.getStackTrace()).map(st -> st.toString()).collect(Collectors.joining("\n")));
41-
errorCondition.setReason("reasons");
46+
var status = new ApicurioRegistryStatus();
47+
status.setConditions(List.of(errorCondition));
4248

43-
var status = new ApicurioRegistryStatus();
44-
status.setConditions(List.of(errorCondition));
49+
return status;
50+
}
4551

46-
return status;
52+
public ApicurioRegistryStatus next(Deployment deployment) {
53+
var lastTransitionTime = ZonedDateTime.now();
54+
if (registry != null
55+
&& registry.getStatus() != null
56+
&& registry.getStatus().getConditions().size() > 0
57+
&&
58+
// TODO: should we sort the conditions before taking the first?
59+
registry.getStatus().getConditions().get(0).getLastTransitionTime() != null) {
60+
lastTransitionTime = registry.getStatus().getConditions().get(0).getLastTransitionTime();
4761
}
4862

49-
public ApicurioRegistryStatus next(Deployment deployment) {
50-
var lastTransitionTime = ZonedDateTime.now();
51-
if (registry != null && registry.getStatus() != null
52-
&& registry.getStatus().getConditions().size() > 0 &&
53-
// TODO: should we sort the conditions before taking the first?
54-
registry.getStatus().getConditions().get(0).getLastTransitionTime() != null) {
55-
lastTransitionTime = registry.getStatus().getConditions().get(0).getLastTransitionTime();
56-
}
63+
var generation = registry.getMetadata() == null ? null : registry.getMetadata().getGeneration();
64+
var nextCondition = new Conditions();
65+
nextCondition.setStatus(Conditions.Status.TRUE);
66+
nextCondition.setType(ERROR_TYPE);
67+
nextCondition.setObservedGeneration(generation);
68+
nextCondition.setLastTransitionTime(lastTransitionTime);
69+
nextCondition.setMessage("TODO");
70+
nextCondition.setReason("reasons");
5771

58-
var generation = registry.getMetadata() == null ? null : registry.getMetadata().getGeneration();
59-
var nextCondition = new Conditions();
60-
nextCondition.setStatus(Conditions.Status.TRUE);
61-
nextCondition.setType(ERROR_TYPE);
62-
nextCondition.setObservedGeneration(generation);
63-
nextCondition.setLastTransitionTime(lastTransitionTime);
64-
nextCondition.setMessage("TODO");
65-
nextCondition.setReason("reasons");
72+
var status = new ApicurioRegistryStatus();
73+
status.setConditions(List.of(nextCondition));
6674

67-
var status = new ApicurioRegistryStatus();
68-
status.setConditions(List.of(nextCondition));
69-
70-
return status;
71-
}
75+
return status;
76+
}
7277
}

0 commit comments

Comments
 (0)