Skip to content

Commit dc4d622

Browse files
authored
Merge pull request #22 from IBM/fix_status_finalizer
Fix bug when removing finalizer
2 parents 7459e0e + 9cf38f8 commit dc4d622

File tree

4 files changed

+33
-13
lines changed

4 files changed

+33
-13
lines changed

oper8/deploy_manager/dry_run_deploy_manager.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,19 @@ def disable(self, resource_definitions):
8989
log.debug2(
9090
"Calling registered finalizer [%s] for [%s]", callback, key
9191
)
92-
callback(content)
93-
94-
# If finalizers have been cleared than delete object
95-
if not self._cluster_content[namespace][kind][api_version][name][
96-
"metadata"
97-
].get("finalizers"):
92+
callback(self._cluster_content[namespace][kind][api_version][name])
93+
94+
# If finalizers have been cleared and object hasn't already been deleted then
95+
# remove the key
96+
current_obj = (
97+
self._cluster_content.get(namespace, {})
98+
.get(kind, {})
99+
.get(api_version, {})
100+
.get(name, {})
101+
)
102+
if current_obj and not current_obj.get("metadata", {}).get(
103+
"finalizers", []
104+
):
98105
with DRY_RUN_CLUSTER_LOCK:
99106
self._delete_key(namespace, kind, api_version, name)
100107

oper8/utils.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,11 @@ def add_finalizer(session: SESSION_TYPE, finalizer: str):
216216

217217
log.debug("Adding finalizer: %s", finalizer)
218218

219-
manifest = copy.deepcopy(session.cr_manifest)
219+
manifest = {
220+
"kind": session.kind,
221+
"apiVersion": session.api_version,
222+
"metadata": copy.deepcopy(session.metadata),
223+
}
220224
manifest["metadata"].setdefault("finalizers", []).append(finalizer)
221225
success, _ = session.deploy_manager.deploy([manifest])
222226

@@ -243,7 +247,14 @@ def remove_finalizer(session: SESSION_TYPE, finalizer: str):
243247

244248
log.debug("Removing finalizer: %s", finalizer)
245249

246-
manifest = copy.deepcopy(session.cr_manifest)
250+
# Create manifest with only required fields
251+
manifest = {
252+
"kind": session.kind,
253+
"apiVersion": session.api_version,
254+
"metadata": copy.deepcopy(session.metadata),
255+
}
256+
257+
# Remove the finalizer
247258
manifest["metadata"]["finalizers"].remove(finalizer)
248259
success, _ = session.deploy_manager.deploy([manifest])
249260

oper8/watch_manager/dry_run_watch_manager.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ def run_reconcile(self, is_finalizer: bool, resource: dict):
105105
if (
106106
self._resource.get("kind") == resource.get("kind")
107107
and self._resource.get("apiVersion") == resource.get("apiVersion")
108-
and resource_metadata.get("name") == resource_metadata.get("name")
109-
and resource_metadata.get("namespace") == resource_metadata.get("namespace")
108+
and resource_metadata.get("name")
109+
== resource.get("metadata", {}).get("name")
110+
and resource_metadata.get("namespace")
111+
== resource.get("metadata", {}).get("namespace")
110112
):
111113
return
112114

tests/test_reconcile.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@ def check_status(
6363
api_version=cr.apiVersion,
6464
)
6565
assert obj is not None
66-
assert obj.status
66+
assert obj.get("status")
6767

68-
ready_cond = status.get_condition(status.READY_CONDITION, obj.status)
68+
ready_cond = status.get_condition(status.READY_CONDITION, obj["status"])
6969
if ready_reason:
7070
assert ready_cond
7171
assert ready_cond["reason"] == ready_reason.value
7272
else:
7373
assert not ready_cond
7474

75-
update_cond = status.get_condition(status.UPDATING_CONDITION, obj.status)
75+
update_cond = status.get_condition(status.UPDATING_CONDITION, obj["status"])
7676
if updating_reason:
7777
assert update_cond
7878
assert update_cond["reason"] == updating_reason.value

0 commit comments

Comments
 (0)