def deploy_workflow_rollback(self):
    """Method to start rollback action.
      When rollback completes, it moves to exit state.
    """
    log.info("deploy workflow ==> enter [%s] state",
             self.current_context['state'])
    # rollback to the beginning state
    utils.run_command_silient("git reset --hard deploy_start")

    log.info("wait for rollback completion...")
    time.sleep(self.opts['wait'] * 5)

    self.current_context['state'] = STATE_EXIT
    self.current_context['prestate'] = STATE_ROLLBACK
  def run(self):
    """This method is the main loop for deployment
      state machine
    """
    log.info(">== deployment workflow starts.")

    deploy_state = self.current_context['state']
    log.debug("deploy_state: %s", deploy_state)
    try:
      while deploy_state != STATE_EXIT:
        action = DeployWorkflow.deploy_state_machine[deploy_state]
        action(self)
        deploy_state = self.current_context['state']
      # go through "exit" state to complete the state machine
      DeployWorkflow.deploy_state_machine[deploy_state](self)
    except Exception:
      # rollback to the beginning state
      utils.run_command_silient("git reset --hard deploy_start")
    finally:
      utils.run_command_silient("git tag -d deploy_start")
      utils.run_command_silient("git checkout master")

    log.info("<== deployment workflow completed.")