Skip to content

Commit 62cf8be

Browse files
committed
improve: add sample when updating the spec with SSA it removes the finalizer
if the finalizer is not explicitly added to the fresh resource Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 7397be6 commit 62cf8be

File tree

5 files changed

+127
-0
lines changed

5 files changed

+127
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.baseapi.ssaissue.specupdate;
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.ShortNames;
7+
import io.fabric8.kubernetes.model.annotation.Version;
8+
9+
@Group("sample.javaoperatorsdk")
10+
@Version("v1")
11+
@ShortNames("ssul")
12+
public class SSASpecUpdateCustomResource
13+
extends CustomResource<SSASpecUpdateCustomResourceSpec, SSASpecUpdateCustomResourceStatus>
14+
implements Namespaced {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.baseapi.ssaissue.specupdate;
2+
3+
public class SSASpecUpdateCustomResourceSpec {
4+
5+
private String value;
6+
7+
public String getValue() {
8+
return value;
9+
}
10+
11+
public void setValue(String value) {
12+
this.value = value;
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.baseapi.ssaissue.specupdate;
2+
3+
public class SSASpecUpdateCustomResourceStatus {
4+
5+
private Integer value = 0;
6+
7+
public Integer getValue() {
8+
return value;
9+
}
10+
11+
public SSASpecUpdateCustomResourceStatus setValue(Integer value) {
12+
this.value = value;
13+
return this;
14+
}
15+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.javaoperatorsdk.operator.baseapi.ssaissue.specupdate;
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.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
import static org.awaitility.Awaitility.await;
11+
12+
class SSASpecUpdateIT {
13+
14+
public static final String TEST_RESOURCE_NAME = "test";
15+
16+
@RegisterExtension
17+
LocallyRunOperatorExtension operator =
18+
LocallyRunOperatorExtension.builder().withReconciler(SSASpecUpdateReconciler.class).build();
19+
20+
@Test
21+
void showFinalizerRemovalWhenSpecUpdated() {
22+
SSASpecUpdateCustomResource res = createResource();
23+
operator.create(res);
24+
25+
await()
26+
.untilAsserted(
27+
() -> {
28+
var actual = operator.get(SSASpecUpdateCustomResource.class, TEST_RESOURCE_NAME);
29+
assertThat(actual.getSpec()).isNotNull();
30+
assertThat(actual.getFinalizers()).isEmpty();
31+
});
32+
}
33+
34+
SSASpecUpdateCustomResource createResource() {
35+
SSASpecUpdateCustomResource res = new SSASpecUpdateCustomResource();
36+
res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build());
37+
return res;
38+
}
39+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.javaoperatorsdk.operator.baseapi.ssaissue.specupdate;
2+
3+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
4+
import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
5+
import io.javaoperatorsdk.operator.api.reconciler.Context;
6+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
7+
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
8+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
9+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
10+
11+
@ControllerConfiguration
12+
public class SSASpecUpdateReconciler
13+
implements Reconciler<SSASpecUpdateCustomResource>, Cleaner<SSASpecUpdateCustomResource> {
14+
15+
@Override
16+
public UpdateControl<SSASpecUpdateCustomResource> reconcile(
17+
SSASpecUpdateCustomResource resource, Context<SSASpecUpdateCustomResource> context) {
18+
19+
var copy = createFreshCopy(resource);
20+
copy.getSpec().setValue("value");
21+
context.getClient().resource(copy).fieldManager(context.getControllerConfiguration()
22+
.fieldManager())
23+
.serverSideApply();
24+
25+
return UpdateControl.noUpdate();
26+
}
27+
28+
SSASpecUpdateCustomResource createFreshCopy(SSASpecUpdateCustomResource resource) {
29+
var res = new SSASpecUpdateCustomResource();
30+
res.setMetadata(
31+
new ObjectMetaBuilder()
32+
.withName(resource.getMetadata().getName())
33+
.withNamespace(resource.getMetadata().getNamespace())
34+
.build());
35+
res.setSpec(new SSASpecUpdateCustomResourceSpec());
36+
return res;
37+
}
38+
39+
@Override
40+
public DeleteControl cleanup(
41+
SSASpecUpdateCustomResource resource, Context<SSASpecUpdateCustomResource> context) {
42+
43+
return DeleteControl.defaultDelete();
44+
}
45+
}

0 commit comments

Comments
 (0)