The undo feature is very useful for enterprise adoption of Chef. This feature means:
when a recipe is removed from the node's run_list(e.g. a role is removed from node's role list or a recipe is removed from a role's run_list), chef-client is able to detect the change between node's new run_list and last ran run_list, and undo the changes made by the removed recipe(e.g. stop services and remove packages/files installed by the removed recipe).
1. Manually. Write a new recipe abc_undo to appropriately un-install recipe abc, and add the recipe into node's run_list. Once it's uninstalled, remove abc_undo from node's run_list.
2. Automatically. chef-client defects the diff of old and new run_list, automatically run the abc_undo recipe, then run the real needed recipes.
We expect to implement this undo feature using an automatic way, because manual way is somehow complicated and not straight forward.