I think this is a bit too relying on recipes. I think a recipe should only be able to say "I need a reboot" and then crowbar will do the reboot. The fact that the reboot has been completed or not should not be handled by the recipe. So I would just do

node[:reboot] = true
node.save

in the recipe

and here we will do

(do reboot)
node[:reboot] = false
node.save