Add support for starting processes inside a running container using lxc-attach
This commit is contained in:
parent
555d7d61e2
commit
e8388743ca
3 changed files with 33 additions and 1 deletions
|
@ -1,4 +1,3 @@
|
||||||
# FIXME: Ruby 1.8 users dont have SecureRandom
|
|
||||||
require 'securerandom'
|
require 'securerandom'
|
||||||
|
|
||||||
require "vagrant-lxc/errors"
|
require "vagrant-lxc/errors"
|
||||||
|
|
|
@ -56,6 +56,18 @@ module Vagrant
|
||||||
run :shutdown, '--name', @name
|
run :shutdown, '--name', @name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def attach(*cmd)
|
||||||
|
cmd = ['--'] + cmd
|
||||||
|
|
||||||
|
if cmd.last.is_a?(Hash)
|
||||||
|
opts = cmd.pop
|
||||||
|
namespaces = Array(opts[:namespaces]).map(&:upcase).join('|')
|
||||||
|
extra = ['--namespaces', namespaces] if namespaces
|
||||||
|
end
|
||||||
|
|
||||||
|
run :attach, '--name', @name, *((extra || []) + cmd)
|
||||||
|
end
|
||||||
|
|
||||||
def transition_to(state, &block)
|
def transition_to(state, &block)
|
||||||
raise TransitionBlockNotProvided unless block_given?
|
raise TransitionBlockNotProvided unless block_given?
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,27 @@ describe Vagrant::LXC::Container::CLI do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'attach' do
|
||||||
|
let(:name) { 'a-running-container' }
|
||||||
|
let(:command) { ['ls', 'cat /tmp/file'] }
|
||||||
|
let(:command_output) { 'folders list' }
|
||||||
|
subject { described_class.new(name) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
subject.stub(run: command_output)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'calls lxc-attach with specified command' do
|
||||||
|
subject.attach(*command)
|
||||||
|
subject.should have_received(:run).with(:attach, '--name', name, '--', *command)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'supports a "namespaces" parameter' do
|
||||||
|
subject.attach *(command + [{namespaces: ['network', 'mount']}])
|
||||||
|
subject.should have_received(:run).with(:attach, '--name', name, '--namespaces', 'NETWORK|MOUNT', '--', *command)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'transition block' do
|
describe 'transition block' do
|
||||||
let(:name) { 'a-running-container' }
|
let(:name) { 'a-running-container' }
|
||||||
subject { described_class.new(name) }
|
subject { described_class.new(name) }
|
||||||
|
|
Loading…
Add table
Reference in a new issue