Skip to content

Commit 9a9a9eb

Browse files
authored
Add optional filter to subscription reconciler (#65)
1 parent c3fa16a commit 9a9a9eb

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

hoptimator-operator/src/main/java/com/linkedin/hoptimator/operator/HoptimatorOperatorApp.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,25 @@
2828
import java.util.List;
2929
import java.util.Properties;
3030
import java.util.concurrent.TimeUnit;
31+
import java.util.function.Predicate;
3132

3233
public class HoptimatorOperatorApp {
3334
private static final Logger log = LoggerFactory.getLogger(HoptimatorOperatorApp.class);
3435

3536
final String modelPath;
3637
final String namespace;
3738
final ApiClient apiClient;
39+
final Predicate<V1alpha1Subscription> subscriptionFilter;
3840
final Properties properties;
3941
final Resource.Environment environment;
4042

4143
/** This constructor is likely to evolve and break. */
42-
public HoptimatorOperatorApp(String modelPath, String namespace, ApiClient apiClient, Properties properties) {
44+
public HoptimatorOperatorApp(String modelPath, String namespace, ApiClient apiClient,
45+
Predicate<V1alpha1Subscription> subscriptionFilter, Properties properties) {
4346
this.modelPath = modelPath;
4447
this.namespace = namespace;
4548
this.apiClient = apiClient;
49+
this.subscriptionFilter = subscriptionFilter;
4650
this.properties = properties;
4751
this.environment = new Resource.SimpleEnvironment(properties);
4852
}
@@ -66,7 +70,7 @@ public static void main(String[] args) throws Exception {
6670
cmd = parser.parse(options, args);
6771
} catch (ParseException e) {
6872
System.out.println(e.getMessage());
69-
formatter.printHelp("utility-name", options);
73+
formatter.printHelp("hoptimator-operator", options);
7074

7175
System.exit(1);
7276
return;
@@ -75,8 +79,8 @@ public static void main(String[] args) throws Exception {
7579
String modelFileInput = cmd.getArgs()[0];
7680
String namespaceInput = cmd.getOptionValue("namespace", "default");
7781

78-
new HoptimatorOperatorApp(modelFileInput, namespaceInput, Config.defaultClient(),
79-
new Properties()).run();
82+
new HoptimatorOperatorApp(modelFileInput, namespaceInput, Config.defaultClient(), null,
83+
new Properties()).run();
8084
}
8185

8286
public void run() throws Exception {
@@ -96,7 +100,7 @@ public void run() throws Exception {
96100

97101
List<Controller> controllers = new ArrayList<>();
98102
controllers.addAll(ControllerService.controllers(operator));
99-
controllers.add(SubscriptionReconciler.controller(operator, plannerFactory, environment));
103+
controllers.add(SubscriptionReconciler.controller(operator, plannerFactory, environment, subscriptionFilter));
100104

101105
ControllerManager controllerManager = new ControllerManager(operator.informerFactory(),
102106
controllers.toArray(new Controller[0]));

hoptimator-operator/src/main/java/com/linkedin/hoptimator/operator/subscription/SubscriptionReconciler.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.Properties;
3838
import java.util.concurrent.ExecutionException;
3939
import java.util.concurrent.CountDownLatch;
40+
import java.util.function.Predicate;
4041
import java.util.stream.Collectors;
4142
import java.util.stream.Stream;
4243

@@ -47,12 +48,14 @@ public class SubscriptionReconciler implements Reconciler {
4748
private final Operator operator;
4849
private final HoptimatorPlanner.Factory plannerFactory;
4950
private final Resource.Environment environment;
51+
private final Predicate<V1alpha1Subscription> filter;
5052

5153
private SubscriptionReconciler(Operator operator, HoptimatorPlanner.Factory plannerFactory,
52-
Resource.Environment environment) {
54+
Resource.Environment environment, Predicate<V1alpha1Subscription> filter) {
5355
this.operator = operator;
5456
this.plannerFactory = plannerFactory;
5557
this.environment = environment;
58+
this.filter = filter;
5659
}
5760

5861
@Override
@@ -67,7 +70,12 @@ public Result reconcile(Request request) {
6770
name);
6871

6972
if (object == null) {
70-
log.info("Object {}/{} deleted, skipping.", namespace, name);
73+
log.info("Object {}/{} deleted. Skipping.", namespace, name);
74+
return new Result(false);
75+
}
76+
77+
if (filter != null && !filter.test(object)) {
78+
log.info("Object {}/{} filtered. Skipping.", namespace, name);
7179
return new Result(false);
7280
}
7381

@@ -368,8 +376,9 @@ private static Map<String, String> guessAttributes(DynamicKubernetesObject obj)
368376
return Collections.emptyMap();
369377
}
370378

371-
public static Controller controller(Operator operator, HoptimatorPlanner.Factory plannerFactory, Resource.Environment environment) {
372-
Reconciler reconciler = new SubscriptionReconciler(operator, plannerFactory, environment);
379+
public static Controller controller(Operator operator, HoptimatorPlanner.Factory plannerFactory,
380+
Resource.Environment environment, Predicate<V1alpha1Subscription> filter) {
381+
Reconciler reconciler = new SubscriptionReconciler(operator, plannerFactory, environment, filter);
373382
return ControllerBuilder.defaultBuilder(operator.informerFactory())
374383
.withReconciler(reconciler)
375384
.withName("subscription-controller")

0 commit comments

Comments
 (0)