💣 custom machine state class
This commit is contained in:
parent
d4edab4979
commit
1eb7b52da9
10 changed files with 14 additions and 80 deletions
|
@ -124,7 +124,7 @@ module Vagrant
|
|||
b2.use Disconnect
|
||||
b2.use ClearForwardedPorts
|
||||
b2.use Vagrant::Action::Builtin::Call, Vagrant::Action::Builtin::GracefulHalt, :stopped, :running do |env2, b3|
|
||||
if !env2[:result] && env2[:machine].provider.state.running?
|
||||
if !env2[:result]
|
||||
b3.use ForcedHalt
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,14 +11,9 @@ module Vagrant
|
|||
|
||||
config = env[:machine].provider_config
|
||||
|
||||
# Allows this middleware to be called multiple times. We need to
|
||||
# support this as base boxes might have after create scripts which
|
||||
# require SSH access
|
||||
unless env[:machine].state.running?
|
||||
env[:ui].info I18n.t("vagrant.actions.vm.boot.booting")
|
||||
env[:machine].provider.driver.start(config)
|
||||
raise Vagrant::Errors::VMFailedToBoot if !wait_for_boot
|
||||
end
|
||||
|
||||
@app.call env
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ module Vagrant
|
|||
end
|
||||
|
||||
def call(env)
|
||||
unless env[:machine].state.created?
|
||||
if env[:machine].state.id == :not_created
|
||||
raise Vagrant::Errors::VMNotCreatedError
|
||||
end
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ module Vagrant
|
|||
end
|
||||
|
||||
def call(env)
|
||||
unless env[:machine].state.running?
|
||||
if env[:machine].state.id != :running
|
||||
raise Vagrant::Errors::VMNotRunningError
|
||||
end
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ module Vagrant
|
|||
|
||||
def call(env)
|
||||
# Set the result to be true if the machine is created.
|
||||
env[:result] = env[:machine].state.created?
|
||||
env[:result] = env[:machine].state.id != :not_created
|
||||
|
||||
# Call the next if we have one (but we shouldn't, since this
|
||||
# middleware is built to run with the Call-type middlewares)
|
||||
|
|
|
@ -7,7 +7,7 @@ module Vagrant
|
|||
end
|
||||
|
||||
def call(env)
|
||||
if env[:machine].provider.state.running?
|
||||
if env[:machine].provider.state.id == :running
|
||||
env[:ui].info I18n.t("vagrant.actions.vm.halt.force")
|
||||
# TODO: Driver#halt is kinda graceful as well, if it doesn't
|
||||
# work we can issue a lxc-stop.
|
||||
|
|
|
@ -7,7 +7,7 @@ module Vagrant
|
|||
end
|
||||
|
||||
def call(env)
|
||||
env[:result] = env[:machine].state.running?
|
||||
env[:result] = env[:machine].state.id == :running
|
||||
|
||||
# Call the next if we have one (but we shouldn't, since this
|
||||
# middleware is built to run with the Call-type middlewares)
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
module Vagrant
|
||||
module LXC
|
||||
class MachineState < Vagrant::MachineState
|
||||
CREATED_STATES = %w( running stopped ).map!(&:to_sym)
|
||||
|
||||
def initialize(state_id)
|
||||
short = state_id.to_s.gsub("_", " ")
|
||||
long = I18n.t("vagrant.commands.status.#{state_id}")
|
||||
super(state_id, short, long)
|
||||
end
|
||||
|
||||
def created?
|
||||
CREATED_STATES.include?(self.id)
|
||||
end
|
||||
|
||||
def off?
|
||||
self.id == :stopped
|
||||
end
|
||||
|
||||
def running?
|
||||
self.id == :running
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -2,7 +2,6 @@ require "log4r"
|
|||
|
||||
require "vagrant-lxc/action"
|
||||
require "vagrant-lxc/driver"
|
||||
require "vagrant-lxc/machine_state"
|
||||
|
||||
module Vagrant
|
||||
module LXC
|
||||
|
@ -61,7 +60,11 @@ module Vagrant
|
|||
state_id = :not_created if !@driver.container_name
|
||||
state_id = @driver.state if !state_id
|
||||
state_id = :unknown if !state_id
|
||||
LXC::MachineState.new(state_id)
|
||||
|
||||
short = state_id.to_s.gsub("_", " ")
|
||||
long = I18n.t("vagrant.commands.status.#{state_id}")
|
||||
|
||||
Vagrant::MachineState.new(state_id, short, long)
|
||||
end
|
||||
|
||||
def to_s
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
require 'unit_helper'
|
||||
|
||||
require 'vagrant-lxc/machine_state'
|
||||
|
||||
describe Vagrant::LXC::MachineState do
|
||||
describe 'short description' do
|
||||
subject { described_class.new(:not_created) }
|
||||
|
||||
it 'is a humanized version of state id' do
|
||||
subject.short_description.should == 'not created'
|
||||
end
|
||||
end
|
||||
|
||||
describe 'long description' do
|
||||
subject { described_class.new(:short_name) }
|
||||
before { I18n.stub(t: 'some really long description') }
|
||||
|
||||
it 'is a localized version of the state id' do
|
||||
subject.long_description.should == 'some really long description'
|
||||
I18n.should have_received(:t).with('vagrant.commands.status.short_name')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when state id is :running' do
|
||||
subject { described_class.new(:running) }
|
||||
|
||||
it { should be_created }
|
||||
it { should be_running }
|
||||
it { should_not be_off }
|
||||
end
|
||||
|
||||
context 'when state id is :stopped' do
|
||||
subject { described_class.new(:stopped) }
|
||||
|
||||
it { should be_created }
|
||||
it { should be_off }
|
||||
it { should_not be_running }
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue