Add fallback mechanism for platforms without attach support

Some platforms (most notably CentOS and RHEL) use a kernel without
'attach' support. This patch detects this absence and falls back
to the alternative ways of doing things like detection of IP address
and halting the container.
It does so by running the command "true" through lxc-attach.
This commit is contained in:
Kristof Willaert 2014-06-03 17:53:26 +02:00
parent 3a4c0ca79d
commit a4768c26ca
3 changed files with 26 additions and 3 deletions

View file

@ -197,8 +197,14 @@ module Vagrant
def self.action_fetch_ip def self.action_fetch_ip
Builder.new.tap do |b| Builder.new.tap do |b|
b.use Builtin::ConfigValidate b.use Builtin::ConfigValidate
b.use FetchIpWithLxcAttach b.use Builtin::Call, Builtin::IsState, :running do |env, b2|
b.use FetchIpFromDnsmasqLeases if env[:result]
b2.use FetchIpWithLxcAttach if env[:machine].provider.driver.supports_attach?
b2.use FetchIpFromDnsmasqLeases
else
b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_running")
end
end
end end
end end

View file

@ -113,6 +113,10 @@ module Vagrant
@cli.destroy @cli.destroy
end end
def supports_attach?
@cli.supports_attach?
end
def attach(*command) def attach(*command)
@cli.attach(*command) @cli.attach(*command)
end end

View file

@ -77,7 +77,7 @@ module Vagrant
end end
def stop def stop
attach '/sbin/halt' attach '/sbin/halt' if supports_attach?
run :stop, '--name', @name run :stop, '--name', @name
end end
@ -126,6 +126,19 @@ module Vagrant
end end
end end
def supports_attach?
unless defined?(@supports_attach)
begin
@supports_attach = true
run(:attach, '--name', @name, 'true')
rescue LXC::Errors::ExecuteError
@supports_attach = false
end
end
return @supports_attach
end
private private
def run(command, *args) def run(command, *args)