Skip to content

Commit 2eafe34

Browse files
committed
wip
1 parent 9f2d53e commit 2eafe34

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.javaoperatorsdk.operator;
2+
3+
public class LeaderElectionManager {
4+
5+
public LeaderElectionManager() {}
6+
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java

+33-7
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
import io.fabric8.kubernetes.api.model.HasMetadata;
1212
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
1313
import io.fabric8.kubernetes.client.KubernetesClient;
14+
import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
1415
import io.fabric8.kubernetes.client.Version;
15-
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
16-
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceOverrider;
17-
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
18-
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
19-
import io.javaoperatorsdk.operator.api.config.ControllerConfigurationOverrider;
20-
import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
16+
import io.fabric8.kubernetes.client.extended.leaderelection.LeaderElectionConfig;
17+
import io.fabric8.kubernetes.client.extended.leaderelection.LeaderElector;
18+
import io.fabric8.kubernetes.client.extended.leaderelection.LeaderElectorBuilder;
19+
import io.fabric8.kubernetes.client.extended.leaderelection.resourcelock.LeaseLock;
20+
import io.fabric8.kubernetes.client.extended.leaderelection.resourcelock.Lock;
21+
import io.javaoperatorsdk.operator.api.config.*;
2122
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
2223
import io.javaoperatorsdk.operator.processing.Controller;
2324
import io.javaoperatorsdk.operator.processing.LifecycleAware;
@@ -27,6 +28,7 @@ public class Operator implements LifecycleAware {
2728
private static final Logger log = LoggerFactory.getLogger(Operator.class);
2829
private final KubernetesClient kubernetesClient;
2930
private final ControllerManager controllers = new ControllerManager();
31+
private LeaderElector leaderElector;
3032

3133
public Operator() {
3234
this(new DefaultKubernetesClient(), ConfigurationServiceProvider.instance());
@@ -49,8 +51,9 @@ public Operator(Consumer<ConfigurationServiceOverrider> overrider) {
4951
}
5052

5153
public Operator(KubernetesClient client, Consumer<ConfigurationServiceOverrider> overrider) {
52-
this(client);
54+
this.kubernetesClient = client;
5355
ConfigurationServiceProvider.overrideCurrent(overrider);
56+
5457
}
5558

5659
/**
@@ -81,6 +84,7 @@ public KubernetesClient getKubernetesClient() {
8184
*/
8285
public void start() {
8386
try {
87+
8488
controllers.shouldStart();
8589

8690
final var version = ConfigurationServiceProvider.instance().getVersion();
@@ -199,4 +203,26 @@ public int getRegisteredControllersNumber() {
199203
return controllers.size();
200204
}
201205

206+
private void initLeaderElector(KubernetesClient client) {
207+
208+
var leaderElectionConfig =
209+
ConfigurationServiceProvider.instance().getLeaderElectionConfiguration();
210+
if (leaderElectionConfig.isEmpty()) {
211+
return;
212+
}
213+
var conf = leaderElectionConfig.get();
214+
215+
// todo discuss openshift client not a NamespacedKubernetesClient?
216+
// name of the pod
217+
// todo configurable
218+
String identity = System.getenv("HOSTNAME");
219+
220+
Lock lock = new LeaseLock(conf.getLeaseNamespace(), conf.getLeaseName(), identity);
221+
// todo check release on cancel
222+
leaderElector = new LeaderElectorBuilder<>((NamespacedKubernetesClient) client)
223+
.withConfig(new LeaderElectionConfig(lock, conf.getLeaseDuration(), conf.getRenewDeadline(),
224+
conf.getRetryPeriod(), null, true, conf.getLeaseName()))
225+
.build();
226+
}
227+
202228
}

0 commit comments

Comments
 (0)