diff --git a/lib/vagrant-backports/action/is_state.rb b/lib/vagrant-backports/action/is_state.rb index baca5c2..8d956f5 100644 --- a/lib/vagrant-backports/action/is_state.rb +++ b/lib/vagrant-backports/action/is_state.rb @@ -1,2 +1,34 @@ -# TODO: Implement this for vagrant < 1.5 -raise 'Action::IsState has not been backported yet!' +module Vagrant + module Backports + module Action + # This middleware is meant to be used with Call and can check if + # a machine is in the given state ID. + class IsState + # Note: Any of the arguments can be arrays as well. + # + # @param [Symbol] target_state The target state ID that means that + # the machine was properly shut down. + # @param [Symbol] source_state The source state ID that the machine + # must be in to be shut down. + def initialize(app, env, check, **opts) + @app = app + @logger = Log4r::Logger.new("vagrant::action::builtin::is_state") + @check = check + @invert = !!opts[:invert] + end + + def call(env) + @logger.debug("Checking if machine state is '#{@check}'") + state = env[:machine].state.id + @logger.debug("-- Machine state: #{state}") + + env[:result] = @check == state + env[:result] = !env[:result] if @invert + @app.call(env) + end + end + end + end +end + +Vagrant::Action::Builtin.const_set :IsState, Vagrant::Backports::Action::IsState diff --git a/lib/vagrant-lxc/action.rb b/lib/vagrant-lxc/action.rb index 5286718..81e0b25 100644 --- a/lib/vagrant-lxc/action.rb +++ b/lib/vagrant-lxc/action.rb @@ -26,6 +26,7 @@ unless Vagrant::Backports.vagrant_1_5_or_later? require 'vagrant-backports/ui' require 'vagrant-backports/action/handle_box' require 'vagrant-backports/action/message' + require 'vagrant-backports/action/is_state' end module Vagrant