Skip to content
This repository has been archived by the owner on Nov 24, 2022. It is now read-only.

Commit

Permalink
Add support for configuring rootfs path
Browse files Browse the repository at this point in the history
References #30
  • Loading branch information
fgrehm committed Mar 29, 2013
1 parent c7c5445 commit 306deaa
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 20 deletions.
4 changes: 3 additions & 1 deletion lib/vagrant-lxc/action/create.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ def call(env)
base_name = env[:root_path].basename.to_s
base_name.gsub!(/[^-a-z0-9_]/i, "")

machine_id = env[:machine].provider.container.create(base_name, env[:machine].box.metadata)
target_rootfs_path = env[:machine].provider_config.target_rootfs_path

machine_id = env[:machine].provider.container.create(base_name, target_rootfs_path, env[:machine].box.metadata)
env[:machine].id = machine_id
env[:just_created] = true
@app.call env
Expand Down
9 changes: 8 additions & 1 deletion lib/vagrant-lxc/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,15 @@ class Config < Vagrant.plugin("2", :config)
# @return [Array]
attr_reader :start_opts

# Base directory to store container's rootfs
#
# Defaults to nil, which means it will be stored wherever the lxc template
# tells it to be stored
attr_accessor :target_rootfs_path

def initialize
@start_opts = []
@start_opts = []
@target_rootfs_path = nil
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions lib/vagrant-lxc/container.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ def base_path
end

def rootfs_path
Pathname.new("#{base_path}/rootfs")
Pathname.new(base_path.join('config').read.match(/^lxc\.rootfs\s+=\s+(.+)$/)[1])
end

def create(base_name, metadata = {})
def create(base_name, target_rootfs_path, metadata = {})
@logger.debug('Creating container using lxc-create...')

@name = "#{base_name}-#{SecureRandom.hex(6)}"
Expand All @@ -50,7 +50,7 @@ def create(base_name, metadata = {})
)

@cli.name = @name
@cli.create(metadata.fetch('template-name'), meta_opts)
@cli.create(metadata.fetch('template-name'), target_rootfs_path, meta_opts)

@name
end
Expand Down
9 changes: 6 additions & 3 deletions lib/vagrant-lxc/container/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,18 @@ def state
end
end

def create(template, template_opts = {})
def create(template, target_rootfs_path, template_opts = {})
extra = template_opts.to_a.flatten
extra.unshift '--' unless extra.empty?

rootfs_args = target_rootfs_path ?
['-B', 'dir', '--dir', target_rootfs_path] :
[]

run :create,
# lxc-create options
'--template', template,
'--name', @name,
*extra
*(rootfs_args + extra)
end

def destroy
Expand Down
34 changes: 23 additions & 11 deletions spec/unit/container/cli_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,31 @@
subject { described_class.new(name) }

before do
subject.stub(:run)
subject.create(template, template_args)
subject.stub(:run) { |*args| @run_args = args }
subject.create(template, rootfs, template_args)
end

it 'issues a lxc-create with provided template, container name and hash of arguments' do
subject.should have_received(:run).with(
:create,
'--template', template,
'--name', name,
'--',
'--extra-param', 'param',
'--other', 'value'
)
context 'when no rootfs is passed' do
let(:rootfs) { nil }

it 'issues a lxc-create with provided template, container name and hash of arguments' do
subject.should have_received(:run).with(
:create,
'--template', template,
'--name', name,
'--',
'--extra-param', 'param',
'--other', 'value'
)
end
end

context 'when the rootfs is passed' do
let(:rootfs) { 'rootfs_path' }

it 'issues a lxc-create with the right rootfs arguments' do
@run_args.join(' ').should =~ /-B dir --dir #{rootfs}/
end
end
end

Expand Down
4 changes: 3 additions & 1 deletion spec/unit/container_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,22 @@
let(:suffix) { 'random-suffix' }
let(:template_name) { 'template-name' }
let(:rootfs_cache) { '/path/to/cache' }
let(:target_rootfs) { '/path/to/rootfs' }
let(:public_key_path) { Vagrant.source_root.join('keys', 'vagrant.pub').expand_path.to_s }
let(:cli) { fire_double('Vagrant::LXC::Container::CLI', :create => true, :name= => true) }

subject { described_class.new(name, cli) }

before do
SecureRandom.stub(hex: suffix)
subject.create base_name, 'template-name' => template_name, 'rootfs-cache-path' => rootfs_cache, 'template-opts' => { '--foo' => 'bar'}
subject.create base_name, target_rootfs, 'template-name' => template_name, 'rootfs-cache-path' => rootfs_cache, 'template-opts' => { '--foo' => 'bar'}
end

it 'creates container with the right arguments' do
cli.should have_received(:name=).with("#{base_name}-#{suffix}")
cli.should have_received(:create).with(
template_name,
target_rootfs,
'--auth-key' => public_key_path,
'--cache' => rootfs_cache,
'--foo' => 'bar'
Expand Down

0 comments on commit 306deaa

Please sign in to comment.