Skip to content

Commit 6b1a0d4

Browse files
committed
refactor: use new configuration option on SchemaDependentResource
1 parent 907c29b commit 6b1a0d4

File tree

4 files changed

+49
-15
lines changed

4 files changed

+49
-15
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ private void cleanupAfterEventFiltering(ResourceID resourceID) {
246246
@Override
247247
@SuppressWarnings("unchecked")
248248
public KubernetesDependentResourceConfig configFrom(KubernetesDependent kubeDependent,
249-
ControllerConfiguration parentConfiguration) {
249+
ControllerConfiguration<?> parentConfiguration) {
250250
var namespaces = parentConfiguration.getNamespaces();
251251
var configuredNS = false;
252252
String labelSelector = null;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.javaoperatorsdk.operator.sample.dependent;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Target({ElementType.TYPE})
10+
public @interface SchemaConfig {
11+
int DEFAULT_POLL_PERIOD = 500;
12+
int DEFAULT_PORT = 3306;
13+
14+
int pollPeriod() default DEFAULT_POLL_PERIOD;
15+
16+
String host();
17+
18+
String user();
19+
20+
String password();
21+
22+
int port() default DEFAULT_PORT;
23+
}

sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
import org.slf4j.LoggerFactory;
1010

1111
import io.fabric8.kubernetes.api.model.Secret;
12+
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
1213
import io.javaoperatorsdk.operator.api.reconciler.Context;
1314
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
1415
import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceProvider;
16+
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.AnnotationDependentResourceConfigurator;
1517
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DependentResourceConfigurator;
1618
import io.javaoperatorsdk.operator.processing.dependent.Creator;
1719
import io.javaoperatorsdk.operator.processing.dependent.external.PerResourcePollingDependentResource;
@@ -24,13 +26,18 @@
2426
import static io.javaoperatorsdk.operator.sample.dependent.SecretDependentResource.MYSQL_SECRET_USERNAME;
2527
import static java.lang.String.format;
2628

29+
@SchemaConfig(pollPeriod = 700, host = "127.0.0.1",
30+
port = SchemaDependentResource.LOCAL_PORT,
31+
user = "root", password = "password")
2732
public class SchemaDependentResource
2833
extends PerResourcePollingDependentResource<Schema, MySQLSchema>
2934
implements EventSourceProvider<MySQLSchema>,
3035
DependentResourceConfigurator<ResourcePollerConfig>,
36+
AnnotationDependentResourceConfigurator<SchemaConfig, ResourcePollerConfig>,
3137
Creator<Schema, MySQLSchema>, Deleter<MySQLSchema> {
3238

3339
public static final String NAME = "schema";
40+
public static final int LOCAL_PORT = 3307;
3441
private static final Logger log = LoggerFactory.getLogger(SchemaDependentResource.class);
3542

3643
private MySQLDbConfig dbConfig;
@@ -43,13 +50,25 @@ public SchemaDependentResource() {
4350
public Optional<ResourcePollerConfig> configuration() {
4451
return Optional.of(new ResourcePollerConfig((int) getPollingPeriod(), dbConfig));
4552
}
46-
53+
4754
@Override
4855
public void configureWith(ResourcePollerConfig config) {
4956
this.dbConfig = config.getMySQLDbConfig();
5057
setPollingPeriod(config.getPollPeriod());
5158
}
5259

60+
@Override
61+
public ResourcePollerConfig configFrom(SchemaConfig annotation,
62+
ControllerConfiguration<?> parentConfiguration) {
63+
if (annotation != null) {
64+
return new ResourcePollerConfig(annotation.pollPeriod(),
65+
new MySQLDbConfig(annotation.host(), "" + annotation.port(),
66+
annotation.user(), annotation.password()));
67+
}
68+
return new ResourcePollerConfig(SchemaConfig.DEFAULT_POLL_PERIOD,
69+
MySQLDbConfig.loadFromEnvironmentVars());
70+
}
71+
5372
@Override
5473
public Schema desired(MySQLSchema primary, Context<MySQLSchema> context) {
5574
return new Schema(primary.getMetadata().getName(), primary.getSpec().getEncoding());
@@ -102,5 +121,4 @@ public Set<Schema> fetchResources(MySQLSchema primaryResource) {
102121
throw new RuntimeException("Error while trying read Schema", e);
103122
}
104123
}
105-
106124
}

sample-operators/mysql-schema/src/test/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperatorE2E.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@
1313
import io.fabric8.kubernetes.api.model.HasMetadata;
1414
import io.fabric8.kubernetes.api.model.NamespaceBuilder;
1515
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
16-
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
1716
import io.fabric8.kubernetes.client.KubernetesClient;
17+
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
1818
import io.javaoperatorsdk.operator.junit.AbstractOperatorExtension;
1919
import io.javaoperatorsdk.operator.junit.ClusterDeployedOperatorExtension;
2020
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
21-
import io.javaoperatorsdk.operator.sample.dependent.ResourcePollerConfig;
2221
import io.javaoperatorsdk.operator.sample.dependent.SchemaDependentResource;
2322

2423
import static java.util.concurrent.TimeUnit.MINUTES;
@@ -33,13 +32,12 @@ class MySQLSchemaOperatorE2E {
3332

3433
static final Logger log = LoggerFactory.getLogger(MySQLSchemaOperatorE2E.class);
3534

36-
static final KubernetesClient client = new DefaultKubernetesClient();
35+
static final KubernetesClient client = new KubernetesClientBuilder().build();
3736

3837
static final String MY_SQL_NS = "mysql";
3938

4039
private final static List<HasMetadata> infrastructure = new ArrayList<>();
4140
public static final String TEST_RESOURCE_NAME = "mydb1";
42-
public static final Integer LOCAL_PORT = 3307;
4341

4442
static {
4543
infrastructure.add(
@@ -63,15 +61,10 @@ boolean isLocal() {
6361
AbstractOperatorExtension operator =
6462
isLocal()
6563
? LocallyRunOperatorExtension.builder()
66-
.withReconciler(
67-
new MySQLSchemaReconciler(),
68-
c -> c.replacingNamedDependentResourceConfig(
69-
SchemaDependentResource.NAME,
70-
new ResourcePollerConfig(
71-
700, new MySQLDbConfig("127.0.0.1", LOCAL_PORT.toString(), "root",
72-
"password"))))
64+
.withReconciler(new MySQLSchemaReconciler()) // configuration for schema comes from
65+
// SchemaDependentResource annotation
7366
.withInfrastructure(infrastructure)
74-
.withPortForward(MY_SQL_NS, "app", "mysql", 3306, LOCAL_PORT)
67+
.withPortForward(MY_SQL_NS, "app", "mysql", 3306, SchemaDependentResource.LOCAL_PORT)
7568
.build()
7669
: ClusterDeployedOperatorExtension.builder()
7770
.withOperatorDeployment(client.load(new FileInputStream("k8s/operator.yaml")).get())

0 commit comments

Comments
 (0)