@@ -62,7 +62,7 @@ public Controller(Reconciler<R> reconciler,
62
62
prepareEventSources (context ).forEach (eventSourceManager ::registerEventSource );
63
63
}
64
64
65
- private void waitUntilStarted ( ) {
65
+ private void waitUntilStartedAndInitContext ( R resource , Context context ) {
66
66
if (!started .get ()) {
67
67
AtomicInteger count = new AtomicInteger (0 );
68
68
final var waitTime = 50 ;
@@ -77,11 +77,32 @@ private void waitUntilStarted() {
77
77
log .info ("Waited {}ms for controller '{}' to finish initializing" , count .get () * waitTime ,
78
78
configuration .getName ());
79
79
}
80
+
81
+ if (reconciler instanceof ContextInitializer ) {
82
+ final var initializer = (ContextInitializer <R >) reconciler ;
83
+ initializer .initContext (resource , context );
84
+ }
80
85
}
81
86
82
87
@ Override
83
88
public DeleteControl cleanup (R resource , Context context ) {
84
- waitUntilStarted ();
89
+ waitUntilStartedAndInitContext (resource , context );
90
+
91
+ configuration .getDependentResources ().stream ()
92
+ .filter (DependentResource ::deletable )
93
+ .forEach (dependent -> {
94
+ var dependentResource = dependent .getFor (resource , context );
95
+ if (dependentResource != null ) {
96
+ dependent .delete (dependentResource , resource , context );
97
+ logOperationInfo (resource , dependent , dependentResource , "Deleting" );
98
+ } else {
99
+ log .info ("Ignoring already deleted {} for '{}' {}" ,
100
+ dependent .getResourceType ().getName (),
101
+ resource .getMetadata ().getName (),
102
+ configuration .getResourceTypeName ());
103
+ }
104
+ });
105
+
85
106
return metrics ().timeControllerExecution (
86
107
new ControllerExecution <>() {
87
108
@ Override
@@ -108,30 +129,23 @@ public DeleteControl execute() {
108
129
109
130
@ Override
110
131
public UpdateControl <R > reconcile (R resource , Context context ) {
111
- waitUntilStarted ();
112
-
113
- if (reconciler instanceof ContextInitializer ) {
114
- final var initializer = (ContextInitializer <R >) reconciler ;
115
- initializer .initContext (resource , context );
116
- }
117
-
118
- configuration .getDependentResources ().forEach (dependent -> {
119
- if (!dependent .creatable () && !dependent .updatable ()) {
120
- return ;
121
- }
122
-
123
- var dependentResource = dependent .getFor (resource );
124
- if (dependent .creatable () && dependentResource == null ) {
125
- // we need to create the dependent
126
- dependentResource = dependent .buildFor (resource );
127
- createOrReplaceDependent (resource , dependent , dependentResource , "Creating" );
128
- } else if (dependent .updatable ()) {
129
- dependentResource = dependent .update (dependentResource , resource );
130
- createOrReplaceDependent (resource , dependent , dependentResource , "Updating" );
131
- } else {
132
- logOperationInfo (resource , dependent , dependentResource , "Ignoring" );
133
- }
134
- });
132
+ waitUntilStartedAndInitContext (resource , context );
133
+
134
+ configuration .getDependentResources ().stream ()
135
+ .filter (dependent -> !dependent .creatable () && !dependent .updatable ())
136
+ .forEach (dependent -> {
137
+ var dependentResource = dependent .getFor (resource , context );
138
+ if (dependent .creatable () && dependentResource == null ) {
139
+ // we need to create the dependent
140
+ dependentResource = dependent .buildFor (resource , context );
141
+ createOrReplaceDependent (resource , context , dependent , dependentResource , "Creating" );
142
+ } else if (dependent .updatable ()) {
143
+ dependentResource = dependent .update (dependentResource , resource , context );
144
+ createOrReplaceDependent (resource , context , dependent , dependentResource , "Updating" );
145
+ } else {
146
+ logOperationInfo (resource , dependent , dependentResource , "Ignoring" );
147
+ }
148
+ });
135
149
136
150
return metrics ().timeControllerExecution (
137
151
new ControllerExecution <>() {
@@ -166,7 +180,7 @@ public UpdateControl<R> execute() {
166
180
167
181
// todo: rename variables more explicitly
168
182
private void createOrReplaceDependent (R resource ,
169
- DependentResource dependent ,
183
+ Context context , DependentResource dependent ,
170
184
Object dependentResource , String operationDescription ) {
171
185
// add owner reference if needed
172
186
if (dependentResource instanceof HasMetadata
@@ -178,7 +192,7 @@ private void createOrReplaceDependent(R resource,
178
192
179
193
// commit the changes
180
194
// todo: add metrics timing for dependent resource
181
- dependent .createOrReplace (dependentResource );
195
+ dependent .createOrReplace (dependentResource , context );
182
196
}
183
197
184
198
private void logOperationInfo (R resource , DependentResource dependent ,
0 commit comments