{"body":"diff --git a/heat/engine/resources/openstack/nova/server_network_mixin.py b/heat/engine/resources/openstack/nova/server_network_mixin.py\nindex 010d773..6679710 100644\n--- a/heat/engine/resources/openstack/nova/server_network_mixin.py\n+++ b/heat/engine/resources/openstack/nova/server_network_mixin.py\n@@ -579,7 +579,23 @@ class ServerNetworkMixin(object):\n                     port=port['id'], server=prev_server_id)\n \n     def prepare_ports_for_replace(self):\n-        self.detach_ports(self)\n+        # Check that the interface can be detached\n+        server = None\n+        # TODO(TheJulia): Once Story #2002001 is underway,\n+        # we should be able to replace the query to nova and\n+        # the check for the failed status with just a check\n+        # to see if the resource has failed.\n+        with self.client_plugin().ignore_not_found:\n+            server = self.client().servers.get(self.resource_id)\n+        if server and server.status != 'ERROR':\n+            self.detach_ports(self)\n+        else:\n+            # If we are replacing an ERROR'ed node, we need to delete\n+            # internal ports that we have created, otherwise we can\n+            # encounter deployment issues with duplicate internal\n+            # port data attempting to be created in instances being\n+            # deployed.\n+            self._delete_internal_ports()\n \n     def restore_ports_after_rollback(self, convergence):\n         # In case of convergence, during rollback, the previous rsrc is\ndiff --git a/heat/tests/openstack/nova/test_server.py b/heat/tests/openstack/nova/test_server.py","name":"","extension":"txt","url":"https://www.irccloud.com/pastebin/NfHAxi4Q","modified":1564680703,"id":"NfHAxi4Q","size":1591,"lines":30,"own_paste":false,"theme":"","date":1564680703}