Include the URL of your launchpad blueprint:
We need to allow the user to cancel an update that is in progress and roll back to the previous known good state. We also need to give users the option of rolling back to the previous known good state in the event of a failure while updating the stack.
Since convergence removes the Stack-level locking for updates, we can implement rollback as a simple update to a previously-stored version of the template. Other parts of the convergence implementation will ensure that this deals correctly with any resources that may still be in progress. The update will still get a new traversal ID, even though it is updating to the same template ID that was seen previously.
In the Stack table, we will store the ID of the most recent template to successfully complete (if any) alongside the ID of the current target template (at the completion of an update, these will be the same). Whenever either of the stored template IDs are overwritten in such a way that we will no longer refer to a particular Template, delete that Template from the database.