Skip to content

Commit 6fde60c

Browse files
committed
minor
1 parent 62a1b0a commit 6fde60c

File tree

7 files changed

+339
-452
lines changed

7 files changed

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

3-
import static io.apicurio.registry.operator.Constants.*;
4-
53
import io.apicur.registry.v1.ApicurioRegistry;
64
import io.fabric8.kubernetes.api.model.OwnerReferenceBuilder;
75
import io.fabric8.kubernetes.api.model.apps.Deployment;
@@ -10,72 +8,39 @@
108
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
119
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
1210

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

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

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

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-
}
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+
}
8146
}

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

+35-61
Original file line numberDiff line numberDiff line change
@@ -5,70 +5,44 @@
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+
89
import java.util.HashMap;
910
import java.util.Map;
1011

1112
public class Constants {
1213

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-
}
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+
}
7448
}

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

+22-25
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,30 @@
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 KubernetesClient client;
18+
implements Reconciler<ApicurioRegistry>, ErrorStatusHandler<ApicurioRegistry> {
19+
@Inject
20+
KubernetesClient client;
2021

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);
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);
2627

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-
}
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+
}
3734

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-
}
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+
}
4542
}

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

+47-52
Original file line numberDiff line numberDiff line change
@@ -4,74 +4,69 @@
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+
78
import java.time.ZonedDateTime;
89
import java.util.Arrays;
910
import java.util.List;
1011
import java.util.stream.Collectors;
1112

1213
public class StatusUpdater {
1314

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

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

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();
19+
public StatusUpdater(ApicurioRegistry registry) {
20+
this.registry = registry;
3121
}
3222

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");
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+
}
4531

46-
var status = new ApicurioRegistryStatus();
47-
status.setConditions(List.of(errorCondition));
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");
4842

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

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();
46+
return status;
6147
}
6248

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");
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+
}
7157

72-
var status = new ApicurioRegistryStatus();
73-
status.setConditions(List.of(nextCondition));
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");
7466

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

0 commit comments

Comments
 (0)