akissa/vagrant-rimu

View on GitHub
lib/vagrant-rimu/actions/stop_instance.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'log4r'

require 'vagrant-rimu/actions/abstract_action'

module VagrantPlugins
  module Rimu
    module Actions
      # This stops the running instance.
      class StopInstance < AbstractAction
        def initialize(app, _env)
          @app    = app
          @logger = Log4r::Logger.new('vagrant_rimu::action::stop_instance')
        end

        def execute(env)
          if env[:machine].state.id == :off
            env[:ui].info(I18n.t('vagrant_rimu.already_status', :status => env[:machine].state.id))
          else
            shutdown(env)
          end
          
          @app.call(env)
        end
        
        def shutdown(env)
          env[:ui].info(I18n.t('vagrant_rimu.stopping'))
          client = env[:rimu_api]
          begin
            client.servers.shutdown(env[:machine].id.to_i)
          rescue ::Rimu::RimuAPI::RimuRequestError, ::Rimu::RimuAPI::RimuResponseError => e
            raise Errors::ApiError, {:stderr=>e}
          end
        end
      end
    end
  end
end