What cannot be deleted¶
Some things a run reports as residue rather than as failures, because the platform does not offer a way to delete them within the run. Knowing which is which is the difference between reading a plan correctly and chasing a bug that is not there.
What cannot be deleted¶
Not every resource this tool finds can actually be removed on the run that finds it. The
platform itself imposes a handful of limitations, each reported through a machine-readable
scope.Reason* value so an operator never has to guess why something is still there:
Vault,KmsKeyandVaultSecretscheduled-deletion window (scope.ReasonScheduledDeletion). OCI enforces a 7-30 day deletion window on vaults and keys, and a 1-30 day one on secrets, that a run cannot shorten.oci-nukeschedules the deletion and reports the resource as a leftover rather than treating the delay as a failure. A secret's name stays taken until its window ends, which is why secrets default to the one-day floor.RetentionRulepermanent lock (scope.ReasonRetentionLocked). A retention rule locks permanently 14 days after creation and, once locked, can only be removed by deleting the bucket it belongs to — never directly. BecauseBucketdeclaresRetentionRuleas a dependency, a locked rule also blocks its own bucket from being deleted this run.TagNamespaceretire-then-cascade (no dedicatedReason— a two-stepRemove()). A tag namespace cannot be deleted directly; it must first be retired (IsRetired: true), and the cascade-delete of every tag definition and value beneath it runs asynchronously afterward.oci-nukeperforms both steps, but the cascade can still be in flight when a run ends.MySQLDbSystemservice-level delete protection (scope.ReasonDeleteProtected). WhenDeletionPolicy.IsDeleteProtectedis set on the DB system, OCI's own service refuses the delete — independent of anyoci-nukeconfiguration, and not bypassed by--force.Compartmentthat will not be empty (scope.ReasonCompartmentNotEmpty). A compartment with a blocklisted descendant can never physically empty, sooci-nukenever attempts to delete it. Nor does it attempt one that still holds anything the run will leave behind — a scheduled deletion, a protected or too-young resource, backup residue, a child compartment that stays — or one whoseDeleteCompartmentOCI refused while the run had nothing of its own in it. The plan already shows such a compartment as skipped and names what holds it; a later run deletes it once that is gone.- Database backup residue for
AutonomousDatabase,DbSystem, andMySQLDbSystem(scope.ReasonBackupResidue). Terminating one of these database types leaves an automatic post-termination backup behind that Oracle itself retains for 72 hours to 95 days.oci-nukeenumerates these backups for visibility but never attempts to delete them — this is a deliberate scope decision, not a bug.
See docs/resources/ and each type's Filter() doc comment in
resources/ for the authoritative, per-type detail behind each bullet above.