Skip to content

Commit c7db869

Browse files
csvirimetacosm
authored andcommitted
delete, other improvements
1 parent fed173d commit c7db869

File tree

6 files changed

+38
-13
lines changed

6 files changed

+38
-13
lines changed

docs/assets/js/uikit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8214,7 +8214,7 @@
82148214

82158215
updateAria: function(toggled) {
82168216
attr(this.$el, 'aria-expanded', isBoolean(toggled)
8217-
? toggled
8217+
? toggled// todo delete bulk support
82188218
: isToggled(this.target, this.cls)
82198219
);
82208220
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
3434
public AbstractDependentResource() {
3535
creator = creatable ? (Creator<R, P>) this : null;
3636
updater = updatable ? (Updater<R, P>) this : null;
37+
3738
bulkDependentResource = bulk ? (BulkDependentResource<R, P>) this : null;
3839
}
3940

4041
@Override
4142
public ReconcileResult<R> reconcile(P primary, Context<P> context) {
4243
var count = bulk ? bulkDependentResource.count(primary, context) : 1;
4344
if (bulk) {
44-
// todo do this just if it is deleter?
45-
cleanupBulkResourcesIfRequired(count, resourceDiscriminator.size(), primary, context);
45+
deleteBulkResourcesIfRequired(count, resourceDiscriminator.size(), primary, context);
4646
adjustDiscriminators(count);
4747
}
4848
ReconcileResult<R> result = new ReconcileResult<>();
@@ -53,7 +53,7 @@ public ReconcileResult<R> reconcile(P primary, Context<P> context) {
5353
return result;
5454
}
5555

56-
private void cleanupBulkResourcesIfRequired(int targetCount, int actualCount, P primary,
56+
protected void deleteBulkResourcesIfRequired(int targetCount, int actualCount, P primary,
5757
Context<P> context) {
5858
if (targetCount >= actualCount) {
5959
return;

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,37 @@
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
44
import io.javaoperatorsdk.operator.api.reconciler.Context;
5+
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
56

6-
public interface BulkDependentResource<R, P extends HasMetadata> {
7+
/**
8+
* Manages dynamic number of resources created for a primary resource. Since the point of a bulk
9+
* dependent resource is to manage the number of secondary resources dynamically it implement
10+
* {@link Creator} and {@link Deleter} interfaces out of the box. A concrete dependent resource can
11+
* implement additionally also {@link Updater}.
12+
*/
13+
public interface BulkDependentResource<R, P extends HasMetadata> extends Creator<R, P>, Deleter<P> {
714

15+
/**
16+
* @return number of resources to create
17+
*/
818
int count(P primary, Context<P> context);
919

10-
default R desired(P primary, int index, Context<P> context) {
11-
throw new IllegalStateException("Implement if the dependent resource is a creator or updater");
12-
}
20+
R desired(P primary, int index, Context<P> context);
1321

22+
/**
23+
* Used to delete resource if the desired count is lower than the actual count of a resource.
24+
*
25+
* @param primary resource
26+
* @param resource actual resource from the cache for the index
27+
* @param i index of the resource
28+
* @param context actual context
29+
*/
1430
void deleteBulkResourceWithIndex(P primary, R resource, int i, Context<P> context);
1531

32+
/**
33+
* @return a discriminator factor that helps to create a discriminator for a certain resource with
34+
* an index
35+
*/
1636
BulkResourceDiscriminatorFactory<R, P> bulkResourceDiscriminatorFactory();
1737

1838
}

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,13 @@ public Result<R> match(R actualResource, P primary, int index, Context<P> contex
138138
return matcher.match(actualResource, primary, index, context);
139139
}
140140

141-
// todo delete bulk support
142141
public void delete(P primary, Context<P> context) {
143-
getSecondaryResource(primary, context).ifPresent(r -> client.resource(r).delete());
142+
if (bulk) {
143+
deleteBulkResourcesIfRequired(0, resourceDiscriminator.size(), primary, context);
144+
} else {
145+
var resource = getSecondaryResource(primary, context);
146+
resource.ifPresent(r -> client.resource(r).delete());
147+
}
144148
}
145149

146150
public void deleteBulkResourceWithIndex(P primary, R resource, int i, Context<P> context) {
@@ -158,8 +162,7 @@ protected Resource<R> prepare(R desired, P primary, String actionName) {
158162
} else if (useDefaultAnnotationsToIdentifyPrimary()) {
159163
addDefaultSecondaryToPrimaryMapperAnnotations(desired, primary);
160164
}
161-
Class<R> targetClass = (Class<R>) desired.getClass();
162-
return client.resources(targetClass).inNamespace(desired.getMetadata().getNamespace())
165+
return client.resource(desired).inNamespace(desired.getMetadata().getNamespace())
163166
.resource(desired);
164167
}
165168

operator-framework/src/test/java/io/javaoperatorsdk/operator/StandaloneBulkDependentIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class StandaloneBulkDependentIT {
2626
LocallyRunOperatorExtension.builder().withReconciler(new StandaloneBulkDependentReconciler())
2727
.build();
2828

29+
// TODO update, deleter - no GC test, external bulk resource
2930
@Test
3031
void managesBulkConfigMaps() {
3132
operator.create(testResource());

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ManagedBulkDependentReconciler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
77
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
88
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
9+
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
910

10-
@ControllerConfiguration
11+
@ControllerConfiguration(dependents = @Dependent(type = ConfigMapBulkDependentResource.class))
1112
public class ManagedBulkDependentReconciler
1213
implements Reconciler<StandaloneBulkDependentTestCustomResource> {
1314

0 commit comments

Comments
 (0)