The fix for bug 1649900 allowed the user to define a resource that 'depends_on' a resource that is disabled at runtime using a conditon. This fix works well both when convergence is enabled and when creating a stack in the legacy path.
However, when doing a stack update in the legacy path, we copy resource definitions over one at a time as we create/update resources - but only resources that are enabled. So when we update a resource that 'depends_on' one that is conditionally disabled, the stored template will now contain a resource that 'depends_on' something that is not only not enabled, but not even defined in the template. Calculating the dependencies of this template will fail.
At the end of a successful update, the entire template is copied over verbatim, so there will be no long-term consequences. However, if the update fails then the existing template will be left in the inconsistent state (as will the template of the backup stack).
Possibly this is the cause of the problems reported in bug 1689553 and https://review.openstack.org/#/c/479016/ although it's not obvious that those cases involved resuming after a failed update. It's possible (although I can't immediately spot it) that something is recalculating the dependencies during the initial update itself and causing things to fail there. A stack trace would give us more information to go on.
Fix proposed to branch: master /review. openstack. org/479367
Review: https:/