'Destroy the specified instance from the Hypervisor.
If the instance is not found (for example if networking failed), this
function should still succeed. It\'s probably a good idea to log a
warning in that case.
:param context: security context
:param instance: Instance object as returned by DB layer.
:param network_info: instance network information
:param block_device_info: Information about block devices that should
be detached from the instance.
:param destroy_disks: Indicates if disks should be destroyed'

def destroy(self, context, instance, network_info, block_device_info=None, destroy_disks=True):

    self._log_operation('destroy', instance)
    def _setup_flow_and_run():
        flow = tf_lf.Flow('destroy')
        flow.add(tf_vm.PowerOff(self.adapter, instance, force_immediate=destroy_disks))
        flow.add(tf_stg.DetachDisk(self.disk_dvr, instance))
        if destroy_disks:
            flow.add(tf_stg.DeleteDisk(self.disk_dvr))
        flow.add(tf_vm.Delete(self.adapter, instance))
        tf_base.run(flow, instance=instance)
    try:
        _setup_flow_and_run()
    except exc.InstanceNotFound:
        LOG.debug('VM    was    not    found    during    destroy    operation.', instance=instance)
        return
    except pvm_exc.Error as e:
        LOG.exception('PowerVM    error    during    destroy.', instance=instance)
        raise exc.InstanceTerminationFailure(reason=six.text_type(e))
