def on_step action, &block
      if action.is_a? Hash
        t = action
        action = t.keys[0]
        depends = t.values[0]
      else
        depends = nil
      end
      change_attr :@_current_action, action do
        yield
        if depends
          # Merge the recipes of the dependency into
          # the current recipes
          _recipes(depends).each do |r|
            recipe r
          end
        end
      end
    end
def on_step action, &block
      if action.is_a? Hash
        t = action
        action = t.keys[0]
        depends = t.values[0]
      else
        depends = nil
      end
      change_attr :@_current_action, action do
        yield
        if depends
          # Merge the recipes of the dependency into
          # the current recipes
          _recipes(depends).each do |r|
            recipe r
          end
        end
      end
    end
=== Description

 Provides the ability to specify steps that can be
 run via chef

 pool "mycluster" do
   cloud "mycloud" do

       on_step :download_install do
           recipe "myrecipes::download"
           recipe "myrecipes::install"
       end

       on_step :run => :download_install do
           recipe "myrecipes::run"
       end
   end
 end

 Then from the command line you can do

 cloud-configure --step=download_install

 to only do the partial job or

 cloud-configure --step=run

 to do everything