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:
parent
3a4c0ca79d
commit
a4768c26ca
3 changed files with 26 additions and 3 deletions
|
@ -197,8 +197,14 @@ module Vagrant
|
|||
def self.action_fetch_ip
|
||||
Builder.new.tap do |b|
|
||||
b.use Builtin::ConfigValidate
|
||||
b.use FetchIpWithLxcAttach
|
||||
b.use FetchIpFromDnsmasqLeases
|
||||
b.use Builtin::Call, Builtin::IsState, :running do |env, b2|
|
||||
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
|
||||
|
||||
|
|
|
@ -113,6 +113,10 @@ module Vagrant
|
|||
@cli.destroy
|
||||
end
|
||||
|
||||
def supports_attach?
|
||||
@cli.supports_attach?
|
||||
end
|
||||
|
||||
def attach(*command)
|
||||
@cli.attach(*command)
|
||||
end
|
||||
|
|
|
@ -77,7 +77,7 @@ module Vagrant
|
|||
end
|
||||
|
||||
def stop
|
||||
attach '/sbin/halt'
|
||||
attach '/sbin/halt' if supports_attach?
|
||||
run :stop, '--name', @name
|
||||
end
|
||||
|
||||
|
@ -126,6 +126,19 @@ module Vagrant
|
|||
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
|
||||
|
||||
def run(command, *args)
|
||||
|
|
Loading…
Reference in a new issue