From cd70f514d6615d954dcc7e80c6438078a945b46e Mon Sep 17 00:00:00 2001
From: Lucas Alvares Gomes <lucasagomes@gmail.com>
Date: Wed, 15 Jul 2015 15:23:45 +0100
Subject: [PATCH] Make the erase_devices clean step abortable

This patches updates the get_clean_steps() method to make the
erase_devices step abortable. Erasing devices is something that can be
cancelled without damaging the machine.

When a clean step is aborted the provision state of the Ironic node
will go to CLEANFAIL state. The operator can then do what is needed to
fix the problem (i.e network booting issues) and restart the cleaning
later on.

Partial-Bug: #1455825
Change-Id: Ic181ac3712810c6f6925e8b627ee79e77ecf4d83
---
 ironic_python_agent/hardware.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py
index 49473ac2b..ebde7b018 100644
--- a/ironic_python_agent/hardware.py
+++ b/ironic_python_agent/hardware.py
@@ -234,6 +234,12 @@ class HardwareManager(object):
            'reboot_requested': Whether the agent should request Ironic reboots
                                the node via the power driver after the
                                operation completes.
+           'abortable': Boolean value. Whether the clean step can be
+                        stopped by the operator or not. Some clean step may
+                        cause non-reversible damage to a machine if interrupted
+                        (i.e firmware update), for such steps this parameter
+                        should be set to False. If no value is set for this
+                        parameter, Ironic will consider False (non-abortable).
           }
 
         If multiple hardware managers return the same step name, the priority
@@ -257,7 +263,8 @@ class HardwareManager(object):
                 'step': 'erase_devices',
                 'priority': 10,
                 'interface': 'deploy',
-                'reboot_requested': False
+                'reboot_requested': False,
+                'abortable': True
             }
         ]