Description of problem: We need to split the logic of providerIDReconciler into NodeController and ProviderIDController. This will allow us to ignore nodes that don't have the ovirt providerID on the delete node flow: ProviderIDController: If Node already has providerID, ignore If Node doesn't have providerID, attempt to find it from oVirt/(Machine with oVirt spec) If Node doesn't have providerID and isn't oVirt, error and look again later NodeController: If no providerID or providerID not prefixed with ovirt, ignore. If ovirt providerID and this vm no longer exists on provider, remove How to test: Try to challenge the machine logic, scaling up and down, removing VM from ovirt and so on
Verified on: 4.8.0-0.nightly-2021-03-19-075500 Steps: 1. scaled up the cluster 2. on ovirt, manually removed some worker vms (some while it's been deployed) 3. scale down and then up few times repeating the deletion in the middle Results: deletion and addition of nodes/vms working as expected missing vms properly reported as failed (or stuck in provisioning/provisioned if deletion while being created - they would be the first ones to be deleted on scale down though)
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (Moderate: OpenShift Container Platform 4.8.2 bug fix and security update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2021:2438