Because the failure is more likely to come from a sub-workflow in 'provide', the simple payload message formatting we usually do is a bit too rough to be useful: $ openstack overcloud node provide 45dda8e9-f553-4301-ab0e-5c465a425136 Failed to set nodes to available state: [{u'result': u'Failure caused by error in tasks: set_provision_state\n\n set_provision_state [task_ex_id=d7d9ff22-a1f9-4489-8309-9c30ca94dc7a] -> Failed to run action [action_ex_id=6d31e9b1-aa70-4871-989f-5fb86d7becfd, action_cls=\'\', attributes=\'{u\'client_method_name\': u\'node.set_provision_state\'}\', params=\'{u\'state\': u\'provide\', u\'node_uuid\': u\'45dda8e9-f553-4301-ab0e-5c465a425136\', u\'configdrive\': None, u\'cleansteps\': None}\']\n IronicAction.node.set_provision_state failed: : The requested action "provide" can not be performed on node "45dda8e9-f553-4301-ab0e-5c465a425136" while it is in state "available".\n [action_ex_id=6d31e9b1-aa70-4871-989f-5fb86d7becfd, idx=0]: Failed to run action [action_ex_id=6d31e9b1-aa70-4871-989f-5fb86d7becfd, action_cls=\'\', attributes=\'{u\'client_method_name\': u\'node.set_provision_state\'}\', params=\'{u\'state\': u\'provide\', u\'node_uuid\': u\'45dda8e9-f553-4301-ab0e-5c465a425136\', u\'configdrive\': None, u\'cleansteps\': None}\']\n IronicAction.node.set_provision_state failed: : The requested action "provide" can not be performed on node "45dda8e9-f553-4301-ab0e-5c465a425136" while it is in state "available".\n'}] A bit of simple massaging leads to this (for each failed node): $ openstack overcloud node provide 45dda8e9-f553-4301-ab0e-5c465a425136 Failed to set nodes to available state: Failure caused by error in tasks: set_provision_state set_provision_state [task_ex_id=472bf915-7a0d-471d-8493-9e104c8fd7c6] -> Failed to run action [action_ex_id=9671e995-218a-43f2-adbf-bc5b8093bbfa, action_cls='', attributes='{u'client_method_name': u'node.set_provision_state'}', params='{u'state': u'provide', u'node_uuid': u'45dda8e9-f553-4301-ab0e-5c465a425136', u'configdrive': None, u'cleansteps': None}'] IronicAction.node.set_provision_state failed: : The requested action "provide" can not be performed on node "45dda8e9-f553-4301-ab0e-5c465a425136" while it is in state "available". [action_ex_id=9671e995-218a-43f2-adbf-bc5b8093bbfa, idx=0]: Failed to run action [action_ex_id=9671e995-218a-43f2-adbf-bc5b8093bbfa, action_cls='', attributes='{u'client_method_name': u'node.set_provision_state'}', params='{u'state': u'provide', u'node_uuid': u'45dda8e9-f553-4301-ab0e-5c465a425136', u'configdrive': None, u'cleansteps': None}'] IronicAction.node.set_provision_state failed: : The requested action "provide" can not be performed on node "45dda8e9-f553-4301-ab0e-5c465a425136" while it is in state "available". This is still a mouthful but I think/hope it's still easier to read and scan thus somewhat useful. I'm somewhat reluctant to make an attempt at more detailed string parsing so late in the cycle when the errors returned could be in any format. There's plenty of additional work that could be done to improve error reporting in general but dealing with the task more broadly may be better suited for an Ocata task at this point.