mirror of
https://github.com/openshift/openshift-docs.git
synced 2026-02-05 12:46:18 +01:00
74 lines
2.9 KiB
Plaintext
74 lines
2.9 KiB
Plaintext
// Module included in the following assemblies:
|
|
//
|
|
// * operators/operator_sdk/java/osdk-java-tutorial.adoc
|
|
|
|
:_mod-docs-content-type: CONCEPT
|
|
[id="osdk-java-controller-reconcile-loop_{context}"]
|
|
= Reconcile loop
|
|
|
|
. Every controller has a reconciler object with a `Reconcile()` method that implements the reconcile loop. The reconcile loop is passed the `Deployment` argument, as shown in the following example:
|
|
+
|
|
[source,java]
|
|
----
|
|
Deployment deployment = client.apps()
|
|
.deployments()
|
|
.inNamespace(resource.getMetadata().getNamespace())
|
|
.withName(resource.getMetadata().getName())
|
|
.get();
|
|
----
|
|
|
|
. As shown in the following example, if the `Deployment` is `null`, the deployment needs to be created. After you create the `Deployment`, you can determine if reconciliation is necessary. If there is no need of reconciliation, return the value of `UpdateControl.noUpdate()`, otherwise, return the value of `UpdateControl.updateStatus(resource):
|
|
+
|
|
[source, java]
|
|
----
|
|
if (deployment == null) {
|
|
Deployment newDeployment = createMemcachedDeployment(resource);
|
|
client.apps().deployments().create(newDeployment);
|
|
return UpdateControl.noUpdate();
|
|
}
|
|
----
|
|
|
|
. After getting the `Deployment`, get the current and required replicas, as shown in the following example:
|
|
+
|
|
[source,java]
|
|
----
|
|
int currentReplicas = deployment.getSpec().getReplicas();
|
|
int requiredReplicas = resource.getSpec().getSize();
|
|
----
|
|
|
|
. If `currentReplicas` does not match the `requiredReplicas`, you must update the `Deployment`, as shown in the following example:
|
|
+
|
|
[source,java]
|
|
----
|
|
if (currentReplicas != requiredReplicas) {
|
|
deployment.getSpec().setReplicas(requiredReplicas);
|
|
client.apps().deployments().createOrReplace(deployment);
|
|
return UpdateControl.noUpdate();
|
|
}
|
|
----
|
|
|
|
. The following example shows how to obtain the list of pods and their names:
|
|
+
|
|
[source,java]
|
|
----
|
|
List<Pod> pods = client.pods()
|
|
.inNamespace(resource.getMetadata().getNamespace())
|
|
.withLabels(labelsForMemcached(resource))
|
|
.list()
|
|
.getItems();
|
|
|
|
List<String> podNames =
|
|
pods.stream().map(p -> p.getMetadata().getName()).collect(Collectors.toList());
|
|
----
|
|
|
|
. Check if resources were created and verify podnames with the Memcached resources. If a mismatch exists in either of these conditions, perform a reconciliation as shown in the following example:
|
|
+
|
|
[source,java]
|
|
----
|
|
if (resource.getStatus() == null
|
|
|| !CollectionUtils.isEqualCollection(podNames, resource.getStatus().getNodes())) {
|
|
if (resource.getStatus() == null) resource.setStatus(new MemcachedStatus());
|
|
resource.getStatus().setNodes(podNames);
|
|
return UpdateControl.updateResource(resource);
|
|
}
|
|
---- |