vagrant-lxc 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module LXC
3
- VERSION = "0.3.3"
3
+ VERSION = "0.3.4"
4
4
  end
5
5
  end
data/spec/Vagrantfile CHANGED
@@ -1,33 +1,24 @@
1
1
  # -*- mode: ruby -*-
2
2
  # vi: set ft=ruby :
3
3
 
4
- def local_apt_cache(box_name)
5
- cache_dir = File.join(File.expand_path(Vagrant::Environment::DEFAULT_HOME),
6
- 'cache',
7
- 'apt',
8
- box_name)
9
- partial_dir = File.join(cache_dir, 'partial')
10
- FileUtils.mkdir_p(partial_dir) unless File.exists? partial_dir
11
- cache_dir
12
- end
13
-
14
4
  Vagrant.require_plugin 'vagrant-lxc'
5
+ Vagrant.require_plugin 'vagrant-cachier'
15
6
 
16
- Vagrant.configure("2") do |config|
17
- config.vm.box = "quantal64"
18
- config.vm.hostname = 'lxc-test-box'
7
+ ENV['BOX_NAME'] ||= 'quantal64'
19
8
 
20
- config.vm.box_url = 'http://dl.dropbox.com/u/13510779/lxc-quantal64-2013-04-10.box'
21
- # Uncomment to test boxes built locally:
22
- # config.vm.box_url = '../boxes/output/lxc-quantal64.box'
9
+ Vagrant.configure("2") do |config|
10
+ config.vm.box = ENV['BOX_NAME']
11
+ # FIXME: Find out why this does not work for debian boxes
12
+ unless %w( squeeze64 wheezy64 sid64 ).include? config.vm.box
13
+ config.vm.hostname = 'lxc-test-box'
14
+ end
23
15
 
24
- cache_dir = local_apt_cache(config.vm.box)
25
- config.vm.synced_folder cache_dir, "/var/cache/apt/archives", id: "vagrant-apt-cache"
16
+ config.cache.enable :apt
26
17
 
27
18
  config.vm.provision :shell,
28
19
  inline: 'mkdir -p /vagrant/tmp && echo -n "Provisioned" > /vagrant/tmp/provisioning'
29
20
 
30
21
  config.vm.network :forwarded_port, guest: 80, host: 8080
31
22
  config.vm.provision :shell,
32
- inline: 'sudo apt-get install nginx -y && sudo service nginx start'
23
+ inline: 'sudo apt-get install apache2 -y'
33
24
  end
@@ -20,7 +20,10 @@ describe 'Sanity check' do
20
20
  end
21
21
 
22
22
  it "is able to be SSH'ed" do
23
- expect(vagrant_ssh('hostname')).to eq 'lxc-test-box'
23
+ expected = 'lxc-test-box'
24
+ # HACK:
25
+ expected = ENV['BOX_NAME'].gsub(/64$/, '') if %w( squeeze64 wheezy64 sid64 ).include? ENV['BOX_NAME']
26
+ expect(vagrant_ssh('hostname')).to eq expected
24
27
  end
25
28
 
26
29
  it 'mounts shared folders with the right permissions' do
@@ -36,7 +39,7 @@ describe 'Sanity check' do
36
39
 
37
40
  it 'forwards configured ports' do
38
41
  output = `curl -s localhost:8080`.strip.chomp
39
- expect(output).to include 'Welcome to nginx!'
42
+ expect(output).to include 'It works!'
40
43
  end
41
44
  end
42
45
 
@@ -44,6 +47,7 @@ describe 'Sanity check' do
44
47
  before(:all) do
45
48
  destroy_container
46
49
  vagrant_up
50
+ vagrant_ssh 'touch /tmp/{some,files}'
47
51
  vagrant_halt
48
52
  end
49
53
 
@@ -61,6 +65,11 @@ describe 'Sanity check' do
61
65
  processes = `pgrep redir`
62
66
  expect($?.exitstatus).to_not eq 0
63
67
  end
68
+
69
+ it 'removes files under `/tmp`' do
70
+ container_tmp = Pathname("/var/lib/lxc/#{vagrant_container_name}/rootfs/tmp")
71
+ expect(container_tmp.entries).to have(2).items # basically '.' and '..'
72
+ end
64
73
  end
65
74
 
66
75
  context '`vagrant destroy`' do
@@ -3,7 +3,7 @@ class TestUI < Vagrant::UI::Interface
3
3
 
4
4
  METHODS = [:clear_line, :report_progress, :warn, :error, :info, :success]
5
5
 
6
- def initialize(resource = nil)
6
+ def initialize
7
7
  super
8
8
  @messages = METHODS.each_with_object({}) { |m, h| h[m] = [] }
9
9
  end
@@ -157,9 +157,11 @@ describe Vagrant::LXC::Driver::CLI do
157
157
  let(:name) { 'a-running-container' }
158
158
  subject { described_class.new(name) }
159
159
 
160
- before { subject.stub(:run) }
160
+ before do
161
+ subject.stub(run: true, sleep: true, state: :stopped)
162
+ end
161
163
 
162
- it 'yields cli object' do
164
+ it 'yields a cli object' do
163
165
  subject.stub(:shutdown)
164
166
  subject.transition_to(:stopped) { |c| c.shutdown }
165
167
  subject.should have_received(:shutdown)
@@ -171,9 +173,6 @@ describe Vagrant::LXC::Driver::CLI do
171
173
  }.to raise_error(described_class::TransitionBlockNotProvided)
172
174
  end
173
175
 
174
- it 'waits for the expected container state using lxc-wait' do
175
- subject.transition_to(:running) { }
176
- subject.should have_received(:run).with(:wait, '--name', name, '--state', 'RUNNING')
177
- end
176
+ pending 'waits for the expected container state'
178
177
  end
179
178
  end
@@ -2,6 +2,7 @@ require 'unit_helper'
2
2
 
3
3
  require 'vagrant'
4
4
  require 'vagrant-lxc/driver'
5
+ require 'vagrant-lxc/driver/cli'
5
6
 
6
7
  describe Vagrant::LXC::Driver do
7
8
  describe 'container name validation' do
@@ -101,12 +102,19 @@ describe Vagrant::LXC::Driver do
101
102
 
102
103
  it 'delegates to cli shutdown' do
103
104
  cli.should_receive(:shutdown)
104
- subject.halt
105
+ subject.forced_halt
105
106
  end
106
107
 
107
108
  it 'expects a transition to running state to take place' do
108
109
  cli.should_receive(:transition_to).with(:stopped)
109
- subject.halt
110
+ subject.forced_halt
111
+ end
112
+
113
+ it 'attempts to force the container to stop in case a shutdown doesnt work' do
114
+ cli.stub(:shutdown).and_raise(Vagrant::LXC::Driver::CLI::TargetStateNotReached.new :target, :source)
115
+ cli.should_receive(:transition_to).with(:stopped).twice
116
+ cli.should_receive(:stop)
117
+ subject.forced_halt
110
118
  end
111
119
  end
112
120
 
data/tasks/boxes.rake CHANGED
@@ -1,79 +1,179 @@
1
+ require 'pathname'
1
2
  require 'rake/tasklib'
2
3
 
3
- class BuildUbuntuBoxTask < ::Rake::TaskLib
4
+ class BuildGenericBoxTask < ::Rake::TaskLib
4
5
  include ::Rake::DSL
5
6
 
6
7
  attr_reader :name
7
8
 
8
- def initialize(name, release, arch, opts = {})
9
- @name = name
10
- @release = release.to_s
11
- @arch = arch.to_s
12
- @install_chef = opts.fetch(:chef, true)
13
- @install_puppet = opts.fetch(:puppet, true)
14
- @file = opts[:file] || default_box_file
15
-
16
- desc "Build an Ubuntu #{release} #{arch} box" unless ::Rake.application.last_comment
9
+ def initialize(name, distrib, release, arch, opts = {})
10
+ @name = name
11
+ @distrib = distrib
12
+ @release = release.to_s
13
+ @arch = arch.to_s
14
+ @install_chef = opts.fetch(:chef, true)
15
+ @install_puppet = opts.fetch(:puppet, true)
16
+ @install_babushka = opts.fetch(:babushka, true)
17
+ @file = opts[:file] || default_box_file
18
+ @scripts_path = Pathname(Dir.pwd).join('boxes')
19
+
20
+ desc "Build an #{distrib.upcase} #{release} #{arch} box" unless
21
+ ::Rake.application.last_comment
17
22
  task name do
18
23
  RakeFileUtils.send(:verbose, true) do
19
- run_task
24
+ build
20
25
  end
21
26
  end
22
27
  end
23
28
 
24
- def run_task
25
- if File.exists?("./boxes/output/#{@file}")
26
- puts 'Box has been built already!'
27
- exit 1
29
+ def default_box_file
30
+ require 'time'
31
+ "lxc-#{@release}-#{@arch}-#{Date.today}.box"
32
+ end
33
+
34
+ def run(script_name, *args)
35
+ unless (script = @scripts_path.join(@distrib, script_name)).readable?
36
+ script = @scripts_path.join('common', script_name)
28
37
  end
29
38
 
30
- if Dir.exists?('boxes/temp')
31
- puts "There is a partially built box under #{File.expand_path('./boxes/temp')}, please remove it before building a new box"
39
+ if script.readable?
40
+ sh "sudo #{script} #{args.join(' ')}"
41
+ else
42
+ STDERR.puts "cannot execute #{install_path} (not found?)"
32
43
  exit 1
33
44
  end
45
+ end
34
46
 
47
+ def build
48
+ check_if_box_has_been_built!
49
+
50
+ FileUtils.mkdir_p 'boxes/temp' unless File.exist? 'base/temp'
51
+ check_for_partially_built_box!
52
+
53
+ pwd = Dir.pwd
35
54
  sh 'mkdir -p boxes/temp/'
36
55
  Dir.chdir 'boxes/temp' do
37
- sh "sudo ../ubuntu/download #{@arch} #{@release}"
38
- sh "sudo ../ubuntu/install-puppet" if @install_puppet
39
- sh "sudo ../ubuntu/install-chef" if @install_chef
40
- sh 'sudo rm -f rootfs.tar.gz'
41
- sh 'sudo tar --numeric-owner -czf rootfs.tar.gz ./rootfs/*'
56
+ download
57
+ install_cfg_engines
58
+ prepare_package_contents pwd
42
59
  sh 'sudo rm -rf rootfs'
43
- sh "sudo chown #{ENV['USER']}:#{ENV['USER']} rootfs.tar.gz"
44
- sh "cp ../ubuntu/lxc-template ."
45
- metadata = File.read('../ubuntu/metadata.json.template')
46
- metadata.gsub!('ARCH', @arch)
47
- metadata.gsub!('RELEASE', @release)
48
- File.open('metadata.json', 'w') { |f| f.print metadata }
49
60
  sh "tar -czf tmp-package.box ./*"
50
61
  end
51
62
 
63
+ sh 'mkdir -p boxes/output'
52
64
  sh "cp boxes/temp/tmp-package.box boxes/output/#{@file}"
53
65
  sh "rm -rf boxes/temp"
54
66
  end
55
67
 
56
- def default_box_file
57
- require 'time'
58
- "lxc-#{@release}-#{@arch}-#{Date.today}.box"
68
+ def check_if_box_has_been_built!
69
+ return unless File.exists?("./boxes/output/#{@file}")
70
+
71
+ puts 'Box has been built already!'
72
+ exit 1
73
+ end
74
+
75
+ def check_for_partially_built_box!
76
+ return unless Dir.entries('boxes/temp').size > 2
77
+
78
+ puts 'There is a partially built box under ' +
79
+ File.expand_path('./boxes/temp') +
80
+ ', please remove it before building a new box'
81
+ exit 1
82
+ end
83
+
84
+ def download
85
+ run 'download', @arch, @release
86
+ end
87
+
88
+ def install_cfg_engines
89
+ [ :puppet, :chef, :babushka ].each do |cfg_engine|
90
+ next unless instance_variable_get :"@install_#{cfg_engine}"
91
+ script_name = "install-#{cfg_engine}"
92
+ run script_name
93
+ end
94
+ end
95
+
96
+ def prepare_package_contents(pwd)
97
+ run 'cleanup'
98
+ sh 'sudo rm -f rootfs.tar.gz'
99
+ sh 'sudo tar --numeric-owner -czf rootfs.tar.gz ./rootfs/*'
100
+ sh "sudo chown #{ENV['USER']}:#{ENV['USER']} rootfs.tar.gz"
101
+ sh "cp #{pwd}/boxes/#{@distrib}/lxc-template ."
102
+ compile_metadata(pwd)
103
+ end
104
+
105
+ def compile_metadata(pwd)
106
+ metadata = File.read("#{pwd}/boxes/#{@distrib}/metadata.json.template")
107
+ metadata.gsub!('ARCH', @arch)
108
+ metadata.gsub!('RELEASE', @release)
109
+ File.open('metadata.json', 'w') { |f| f.print metadata }
110
+ end
111
+ end
112
+
113
+ class BuildDebianBoxTask < BuildGenericBoxTask
114
+ def initialize(name, release, arch, opts = {})
115
+ super(name, 'debian', release, arch, opts)
116
+ end
117
+ end
118
+
119
+ class BuildUbuntuBoxTask < BuildGenericBoxTask
120
+ def initialize(name, release, arch, opts = {})
121
+ super(name, 'ubuntu', release, arch, opts)
59
122
  end
60
123
  end
61
124
 
125
+ chef = ENV['CHEF'] == '1'
126
+ puppet = ENV['PUPPET'] == '1'
127
+ babushka = ENV['BABUSHKA'] == '1'
128
+
62
129
  namespace :boxes do
63
130
  namespace :ubuntu do
64
131
  namespace :build do
65
- chef = ENV['CHEF'] != '0'
66
- puppet = ENV['PUPPET'] != '0'
67
132
 
68
133
  desc 'Build an Ubuntu Precise 64 bits box'
69
- BuildUbuntuBoxTask.new(:precise64, :precise, 'amd64', chef: chef, puppet: puppet)
134
+ BuildUbuntuBoxTask.
135
+ new(:precise64,
136
+ :precise, 'amd64', chef: chef, puppet: puppet, babushka: babushka)
70
137
 
71
138
  desc 'Build an Ubuntu Quantal 64 bits box'
72
- BuildUbuntuBoxTask.new(:quantal64, :quantal, 'amd64', chef: chef, puppet: puppet)
139
+ BuildUbuntuBoxTask.
140
+ new(:quantal64,
141
+ :quantal, 'amd64', chef: chef, puppet: puppet, babushka: babushka)
73
142
 
74
143
  # FIXME: Find out how to install chef on raring
75
144
  desc 'Build an Ubuntu Raring 64 bits box'
76
- BuildUbuntuBoxTask.new(:raring64, :raring, 'amd64', chef: false, puppet: puppet)
145
+ BuildUbuntuBoxTask.
146
+ new(:raring64,
147
+ :raring, 'amd64', chef: false, puppet: puppet, babushka: babushka)
148
+
149
+ desc 'Build all Ubuntu boxes'
150
+ task :all => %w( precise64 quantal64 raring64 )
77
151
  end
78
152
  end
153
+
154
+ # FIXME: Find out how to install chef on debian boxes
155
+ namespace :debian do
156
+ namespace :build do
157
+ desc 'Build an Debian Squeeze 64 bits box'
158
+ BuildDebianBoxTask.
159
+ new(:squeeze64,
160
+ :squeeze, 'amd64', chef: false, puppet: puppet, babushka: babushka)
161
+
162
+ desc 'Build an Debian Wheezy 64 bits box'
163
+ BuildDebianBoxTask.
164
+ new(:wheezy64,
165
+ :wheezy, 'amd64', chef: false, puppet: puppet, babushka: babushka)
166
+
167
+ desc 'Build an Debian Sid/unstable 64 bits box'
168
+ BuildDebianBoxTask.
169
+ new(:sid64,
170
+ :sid, 'amd64', chef: false, puppet: puppet, babushka: babushka)
171
+
172
+ desc 'Build all Debian boxes'
173
+ task :all => %w( squeeze64 wheezy64 sid64 )
174
+ end
175
+ end
176
+
177
+ desc 'Build all base boxes for release'
178
+ task :build_all => %w( ubuntu:build:all debian:build:all )
79
179
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-lxc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Rehm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-23 00:00:00.000000000 Z
11
+ date: 2013-05-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Linux Containers provider for Vagrant
14
14
  email:
@@ -28,14 +28,22 @@ files:
28
28
  - LICENSE.txt
29
29
  - README.md
30
30
  - Rakefile
31
+ - boxes/common/cleanup
32
+ - boxes/common/install-babushka
33
+ - boxes/common/install-chef
34
+ - boxes/common/install-puppet
35
+ - boxes/debian/download
36
+ - boxes/debian/lxc-template
37
+ - boxes/debian/metadata.json.template
31
38
  - boxes/ubuntu/download
32
- - boxes/ubuntu/install-chef
33
- - boxes/ubuntu/install-puppet
34
39
  - boxes/ubuntu/lxc-template
35
40
  - boxes/ubuntu/metadata.json.template
36
41
  - development/Vagrantfile
37
42
  - development/lxc-configs/lxc-dev-box
43
+ - development/lxc-configs/sid
44
+ - development/lxc-configs/squeeze
38
45
  - development/lxc-configs/vbox
46
+ - development/lxc-configs/wheezy
39
47
  - development/shell-provisioning/upgrade-kernel
40
48
  - development/site.pp
41
49
  - example/Vagrantfile
@@ -59,6 +67,7 @@ files:
59
67
  - lib/vagrant-lxc/action/handle_box_metadata.rb
60
68
  - lib/vagrant-lxc/action/is_running.rb
61
69
  - lib/vagrant-lxc/action/message.rb
70
+ - lib/vagrant-lxc/action/remove_temporary_files.rb
62
71
  - lib/vagrant-lxc/action/setup_package_files.rb
63
72
  - lib/vagrant-lxc/action/share_folders.rb
64
73
  - lib/vagrant-lxc/config.rb