akissa/vagrant-rimu

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

Summary

Maintainability
A
0 mins
Test Coverage
require 'log4r'

require 'vagrant-rimu/actions/abstract_action'

module VagrantPlugins
  module Rimu
    module Actions
      class ReadState < AbstractAction
        def initialize(app, env)
          @app = app
          @machine = env[:machine]
          @logger = Log4r::Logger.new('vagrant_rimu::action::read_state')
        end

        def execute(env)
          client = env[:rimu_api]
          env[:machine_state] = read_state(client, @machine)
          @logger.info I18n.t('vagrant_rimu.states.current_state', {:state => env[:machine_state]})
          @app.call(env)
        end

        def read_state(client, machine)
          return :not_created if machine.id.nil?
          begin
            server = client.servers.status(machine.id.to_i)
          rescue ::Rimu::RimuAPI::RimuRequestError, ::Rimu::RimuAPI::RimuResponseError => e
            @logger.debug(e)
            return :destroyed
          end
          return :not_created if server.nil?
          status = server.running_state
          return :not_created if status.nil?
          states = {
            'RUNNING' => :active,
            'NOTRUNNING' => :off,
            'RESTARTING' => :shutting_down,
            'POWERCYCLING' => :shutting_down,
            'DESTROYED' => :destroyed
          }
          states[status.to_s]
        end
      end
    end
  end
end