Skip to content

Commit 3074b2b

Browse files
committed
reproduce ssa issue
1 parent e9c2639 commit 3074b2b

File tree

5 files changed

+144
-0
lines changed

5 files changed

+144
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.javaoperatorsdk.operator;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.RegisterExtension;
5+
6+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
7+
import io.fabric8.kubernetes.api.model.apps.StatefulSet;
8+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
9+
import io.javaoperatorsdk.operator.sample.ssastatefulsetmatcherissue.SSAStatefulSetMatcherIssueCustomResource;
10+
import io.javaoperatorsdk.operator.sample.ssastatefulsetmatcherissue.SSAStatefulSetMatcherIssueReconciler;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
import static org.awaitility.Awaitility.await;
14+
15+
public class SSAStatefulSetMatcherIssueIT {
16+
17+
public static final String TEST_1 = "test1";
18+
@RegisterExtension
19+
LocallyRunOperatorExtension extension =
20+
LocallyRunOperatorExtension.builder()
21+
.withReconciler(new SSAStatefulSetMatcherIssueReconciler())
22+
.build();
23+
24+
@Test
25+
void testSSAMatcher() {
26+
extension.create(testResource());
27+
28+
29+
await().untilAsserted(() -> {
30+
var statefulSet = extension.get(StatefulSet.class, TEST_1);
31+
assertThat(statefulSet).isNotNull();
32+
});
33+
34+
System.out.println("ok");
35+
}
36+
37+
SSAStatefulSetMatcherIssueCustomResource testResource() {
38+
var res = new SSAStatefulSetMatcherIssueCustomResource();
39+
res.setMetadata(new ObjectMetaBuilder()
40+
.withName(TEST_1)
41+
.build());
42+
return res;
43+
}
44+
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.sample.ssastatefulsetmatcherissue;
2+
3+
import io.fabric8.kubernetes.api.model.Namespaced;
4+
import io.fabric8.kubernetes.client.CustomResource;
5+
import io.fabric8.kubernetes.model.annotation.Group;
6+
import io.fabric8.kubernetes.model.annotation.Version;
7+
8+
@Group("sample.javaoperatorsdk")
9+
@Version("v1")
10+
public class SSAStatefulSetMatcherIssueCustomResource
11+
extends CustomResource<Void, Void>
12+
implements Namespaced {
13+
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.javaoperatorsdk.operator.sample.ssastatefulsetmatcherissue;
2+
3+
import io.javaoperatorsdk.operator.api.reconciler.Context;
4+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
5+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
6+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
7+
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
8+
9+
@ControllerConfiguration(dependents = {@Dependent(type = StatefulSetDependentResource.class)})
10+
public class SSAStatefulSetMatcherIssueReconciler
11+
implements Reconciler<SSAStatefulSetMatcherIssueCustomResource> {
12+
13+
@Override
14+
public UpdateControl<SSAStatefulSetMatcherIssueCustomResource> reconcile(
15+
SSAStatefulSetMatcherIssueCustomResource resource,
16+
Context<SSAStatefulSetMatcherIssueCustomResource> context) throws Exception {
17+
return UpdateControl.noUpdate();
18+
}
19+
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.javaoperatorsdk.operator.sample.ssastatefulsetmatcherissue;
2+
3+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
4+
import io.fabric8.kubernetes.api.model.apps.StatefulSet;
5+
import io.javaoperatorsdk.operator.ReconcilerUtils;
6+
import io.javaoperatorsdk.operator.api.reconciler.Context;
7+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
8+
9+
public class StatefulSetDependentResource
10+
extends CRUDKubernetesDependentResource<StatefulSet, SSAStatefulSetMatcherIssueCustomResource> {
11+
12+
public StatefulSetDependentResource() {
13+
14+
super(StatefulSet.class);
15+
}
16+
17+
@Override
18+
protected StatefulSet desired(SSAStatefulSetMatcherIssueCustomResource primary,
19+
Context<SSAStatefulSetMatcherIssueCustomResource> context) {
20+
var template = ReconcilerUtils.loadYaml(StatefulSet.class, getClass(), "statefulset.yaml");
21+
template.setMetadata(new ObjectMetaBuilder()
22+
.withName(primary.getMetadata().getName())
23+
.withNamespace(primary.getMetadata().getNamespace())
24+
.build());
25+
return template;
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: web
5+
spec:
6+
persistentVolumeClaimRetentionPolicy:
7+
whenDeleted: "Retain"
8+
whenScaled: "Delete"
9+
selector:
10+
matchLabels:
11+
app: nginx # has to match .spec.template.metadata.labels
12+
serviceName: "nginx"
13+
replicas: 1
14+
minReadySeconds: 10 # by default is 0
15+
template:
16+
metadata:
17+
labels:
18+
app: nginx # has to match .spec.selector.matchLabels
19+
spec:
20+
terminationGracePeriodSeconds: 10
21+
containers:
22+
- name: nginx
23+
image: registry.k8s.io/nginx-slim:0.8
24+
ports:
25+
- containerPort: 80
26+
name: web
27+
volumeMounts:
28+
- name: www
29+
mountPath: /usr/share/nginx/html
30+
volumeClaimTemplates:
31+
- metadata:
32+
name: www
33+
spec:
34+
accessModes: [ "ReadWriteOnce" ]
35+
storageClassName: "my-storage-class"
36+
resources:
37+
requests:
38+
storage: 1Gi

0 commit comments

Comments
 (0)