mirror of https://github.com/pulumi/pulumi.git
3f27ee9688
As well as indicating that a resource's state has changes, a diff can also indicate that those changes require the _replacement_ of the resource, meaning that it must be recreated and not just updated. In this scenario, there are two possible ways to replace the resource -- by first creating another new resource before deleting the old one ("create-before-replace"), or by first deleting the old resource before creating its replacement ("delete-before-replace"). Create-before-replace is the default since generally, if possible to implement, it should result in fewer instances of "downtime", where a desired resource does not exist in the system. Should delete-before-replace be chosen, Pulumi implements this under the hood as three steps: delete for replacement, replace, and create replacement. To track things consistently, as well as enable resumption of an interrupted operation, Pulumi writes a flag, `PendingReplacement` to the state of a deleted resource that will later be cleaned up by a completed replacement. Should an interrupted operation be resumed, Pulumi does not currently take `PendingReplacement` into account, and always enqueues a(nother) delete operation. This is typically fine (albeit wasteful) since deletes are (should) be idempotent, but unnecessary. This commit adds @jesse-triplewhale's fix for this behaviour whereby the `PendingReplacement` flag is simply removed before the remainder of the required steps (replace, create replacement) are actioned as normal. It also extends this work with some lifecycle tests for this scenario and a few others that may arise as a result of an interrupted replacement. Fixes #16288 Closes #16303 Co-authored-by: Jesse Grodman <jesse@triplewhale.com> |
||
---|---|---|
.. | ||
0 | ||
1 | ||
2 |