Skip to content

Commit 4aba900

Browse files
committed
bulks sample + fixes
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 4131977 commit 4aba900

File tree

6 files changed

+101
-4
lines changed

6 files changed

+101
-4
lines changed

src/main/java/io/javaoperatorsdk/operator/glue/Utils.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,13 @@ private static Optional<String> getOptionalPropertyValueFromTemplate(String reso
146146
String property) {
147147
var finalProp = property + ":";
148148
var targetLine = resourceTemplate.lines().filter(l -> l.contains(finalProp)).findFirst();
149-
return targetLine.map(l -> l.replace(finalProp, "").trim());
149+
return targetLine.map(l -> {
150+
int index = l.indexOf(finalProp);
151+
if (index > 0) {
152+
l = l.substring(index);
153+
}
154+
return l.replace(finalProp, "").trim();
155+
});
150156
}
151157

152158
private static String getPropertyValueFromTemplate(String resourceTemplate, String property) {

src/main/java/io/javaoperatorsdk/operator/glue/reconciler/glue/GlueReconciler.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.javaoperatorsdk.operator.glue.reconciler.ValidationAndErrorHandler;
2929
import io.javaoperatorsdk.operator.glue.reconciler.operator.GlueOperatorReconciler;
3030
import io.javaoperatorsdk.operator.glue.templating.GenericTemplateHandler;
31+
import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
3132
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
3233
import io.javaoperatorsdk.operator.processing.dependent.workflow.KubernetesResourceDeletedCondition;
3334
import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowBuilder;
@@ -184,9 +185,11 @@ private void createAndAddDependentToWorkflow(Glue primary, Context<Glue> context
184185
var dr = createDependentResource(spec, leafDependent, resourceInSameNamespaceAsPrimary);
185186
var gvk = dr.getGroupVersionKind();
186187

187-
dr.setResourceDiscriminator(new GenericResourceDiscriminator(dr.getGroupVersionKind(),
188-
genericTemplateHandler.processTemplate(Utils.getName(spec), primary, context),
189-
targetNamespace.orElse(null)));
188+
if (!(dr instanceof BulkDependentResource<?, ?>)) {
189+
dr.setResourceDiscriminator(new GenericResourceDiscriminator(dr.getGroupVersionKind(),
190+
genericTemplateHandler.processTemplate(Utils.getName(spec), primary, context),
191+
targetNamespace.orElse(null)));
192+
}
190193

191194
var es = informerRegister.registerInformer(context, gvk, primary);
192195
dr.configureWith(es);

src/test/java/io/javaoperatorsdk/operator/glue/GlueTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,31 @@ void customizeMatcher() {
368368
});
369369
}
370370

371+
@Test
372+
void simpleBulk() {
373+
var glue = createGlue("/glue/" + "SimpleBulk.yaml");
374+
375+
await().untilAsserted(() -> {
376+
var configMaps = getRelatedConfigMaps(glue.getMetadata().getName());
377+
assertThat(configMaps).hasSize(3);
378+
assertThat(configMaps)
379+
.allMatch(cm -> cm.getMetadata().getName().startsWith("simple-glue-configmap-"));
380+
});
381+
382+
delete(glue);
383+
384+
await().untilAsserted(
385+
() -> assertThat(getRelatedConfigMaps(glue.getMetadata().getName())).isEmpty());
386+
}
387+
388+
List<ConfigMap> getRelatedConfigMaps(String ownerName) {
389+
return list(ConfigMap.class).stream()
390+
.filter(cm -> !cm.getMetadata().getOwnerReferences().isEmpty()
391+
&& cm.getMetadata().getOwnerReferences()
392+
.get(0).getName().equals(ownerName))
393+
.toList();
394+
}
395+
371396
private List<Glue> testWorkflowList(int num) {
372397
List<Glue> res = new ArrayList<>();
373398
IntStream.range(0, num).forEach(index -> {

src/test/java/io/javaoperatorsdk/operator/glue/TestBase.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.javaoperatorsdk.operator.glue;
22

33
import java.time.Duration;
4+
import java.util.List;
45

56
import org.junit.jupiter.api.AfterEach;
67
import org.junit.jupiter.api.BeforeEach;
@@ -70,6 +71,10 @@ protected <T extends HasMetadata> T get(Class<T> clazz, String name) {
7071
return client.resources(clazz).inNamespace(testNamespace).withName(name).get();
7172
}
7273

74+
protected <T extends HasMetadata> List<T> list(Class<T> clazz) {
75+
return client.resources(clazz).inNamespace(testNamespace).list().getItems();
76+
}
77+
7378
protected <T extends HasMetadata> T update(T resource) {
7479
resource.getMetadata().setResourceVersion(null);
7580
return client.resource(resource).inNamespace(testNamespace).update();
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.javaoperatorsdk.operator.glue;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
class UtilsTest {
9+
10+
11+
@Test
12+
void getAPIVersionFromListResource() {
13+
String apiVersion = Utils.getApiVersionFromTemplate("""
14+
- apiVersion: v1
15+
kind: ConfigMap
16+
metadata:
17+
name: simple-glue-configmap-{i}
18+
data:
19+
key: "value1"
20+
""");
21+
22+
assertThat(apiVersion).isEqualTo("v1");
23+
}
24+
25+
@Test
26+
void getAPIVersionPFromResource() {
27+
String apiVersion = Utils.getApiVersionFromTemplate("""
28+
apiVersion: v1
29+
kind: ConfigMap
30+
metadata:
31+
name: simple-glue-configmap-{i}
32+
data:
33+
key: "value1"
34+
""");
35+
36+
assertThat(apiVersion).isEqualTo("v1");
37+
}
38+
39+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Invalid GLUE, presents resources with non-unique name
2+
apiVersion: io.javaoperatorsdk.operator.glue/v1beta1
3+
kind: Glue
4+
metadata:
5+
name: simple-glue
6+
spec:
7+
childResources:
8+
- name: configMaps
9+
bulk: true
10+
resourceTemplate: |
11+
items:
12+
{#for i in 3}
13+
- apiVersion: v1
14+
kind: ConfigMap
15+
metadata:
16+
name: simple-glue-configmap-{i}
17+
data:
18+
key: "value1"
19+
{/for}

0 commit comments

Comments
 (0)