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,112 +1,86 @@
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
4
+ require 'pathname'
5
+ BASE_URL = 'http://dl.dropbox.com/u/13510779'
6
+ LAST_RELEASE_DATE = '2013-05-08'
7
+ LOCAL_BOXES_PATH = Pathname('../boxes/output').expand_path
8
+ def lxc_box_url(release_name)
9
+ file_name = "lxc-#{release_name}-amd64-#{LAST_RELEASE_DATE}.box"
10
+ local_box_file = LOCAL_BOXES_PATH.join(file_name)
11
+
12
+ local_box_file.exist? ?
13
+ local_box_file.to_s :
14
+ "#{BASE_URL}/#{file_name}"
12
15
  end
13
16
 
14
- def local_gem_cache(box_name)
15
- cache_dir = File.join(File.expand_path(Vagrant::Environment::DEFAULT_HOME),
16
- 'cache',
17
- 'gems',
18
- 'source',
19
- box_name)
20
- FileUtils.mkdir_p(cache_dir) unless File.exists? cache_dir
21
- cache_dir
22
- end
17
+ BOXES = {
18
+ precise: {
19
+ lxc_url: lxc_box_url('precise'),
20
+ vbox_url: 'http://files.vagrantup.com/precise64.box'
21
+ },
22
+ quantal: {
23
+ lxc_url: lxc_box_url('quantal'),
24
+ vbox_url: 'https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box'
25
+ },
26
+ raring: {
27
+ lxc_url: lxc_box_url('raring'),
28
+ vbox_url: 'http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-amd64-vagrant-disk1.box'
29
+ },
30
+ squeeze: {
31
+ lxc_url: lxc_box_url('squeeze'),
32
+ vbox_url: 'http://f.willianfernandes.com.br/vagrant-boxes/DebianSqueeze64.box'
33
+ },
34
+ wheezy: {
35
+ lxc_url: lxc_box_url('wheezy'),
36
+ },
37
+ sid: {
38
+ lxc_url: lxc_box_url('sid'),
39
+ }
40
+ }
23
41
 
24
- # Required to make sure vagrant picks it up during development
25
42
  Vagrant.require_plugin 'vagrant-lxc'
43
+ Vagrant.require_plugin 'vagrant-cachier'
26
44
 
27
45
  Vagrant.configure("2") do |config|
28
46
  config.vm.synced_folder "../", "/vagrant", id: 'vagrant-root', nfs: true
29
47
 
30
- config.vm.define :vbox do |vb_config|
31
- vb_config.vm.network :private_network, ip: "192.168.50.33"
32
- vb_config.vm.box = 'quantal64'
33
- vb_config.vm.box_url = "https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box"
34
- vb_config.vm.hostname = 'vbox'
35
-
36
- vb_config.vm.provider :virtualbox do |vb|
37
- # Configure VM to use 1.5gb of ram and 2 cpus
38
- vb.customize [
39
- "modifyvm", :id,
40
- "--memory", '1536',
41
- "--cpus", '2'
42
- ]
43
- end
44
-
45
- cache_dir = local_apt_cache(vb_config.vm.box)
46
- vb_config.vm.synced_folder cache_dir, "/var/cache/apt/archives", id: "vagrant-apt-cache"
47
-
48
- cache_dir = local_gem_cache(vb_config.vm.box)
49
- vb_config.vm.synced_folder cache_dir, "/home/vagrant/gems/cache", id: "vagrant-gem-cache"
50
- end
51
-
52
- config.vm.define :precise do |precise|
53
- precise.vm.network :private_network, ip: "192.168.50.32"
54
- precise.vm.box = 'precise64'
55
- precise.vm.hostname = 'vbox'
56
- precise.vm.box_url = 'http://files.vagrantup.com/precise64.box'
57
-
58
- precise.vm.provider :virtualbox do |vb|
59
- # Configure VM to use 1.5gb of ram and 2 cpus
60
- vb.customize [
61
- "modifyvm", :id,
62
- "--memory", '1536',
63
- "--cpus", '2'
64
- ]
65
- end
66
-
67
- cache_dir = local_apt_cache(precise.vm.box)
68
- precise.vm.synced_folder cache_dir, "/var/cache/apt/archives", id: "vagrant-apt-cache"
69
-
70
- cache_dir = local_gem_cache(precise.vm.box)
71
- precise.vm.synced_folder cache_dir, "/home/vagrant/gems/cache", id: "vagrant-gem-cache"
72
- end
73
-
74
- config.vm.define :raring do |raring|
75
- raring.vm.network :private_network, ip: "192.168.50.34"
76
- raring.vm.box = 'raring64'
77
- raring.vm.hostname = 'vbox'
78
- raring.vm.box_url = 'http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-amd64-vagrant-disk1.box'
79
-
80
- raring.vm.provider :virtualbox do |vb|
81
- # Configure VM to use 1.5gb of ram and 2 cpus
82
- vb.customize [
83
- "modifyvm", :id,
84
- "--memory", '1536',
85
- "--cpus", '2'
86
- ]
87
- end
88
-
89
- cache_dir = local_apt_cache(raring.vm.box)
90
- raring.vm.synced_folder cache_dir, "/var/cache/apt/archives", id: "vagrant-apt-cache"
91
-
92
- cache_dir = local_gem_cache(raring.vm.box)
93
- raring.vm.synced_folder cache_dir, "/home/vagrant/gems/cache", id: "vagrant-gem-cache"
94
- end
95
-
96
- config.vm.define :lxc do |lxc_config|
97
- lxc_config.vm.box = 'quantal64'
98
- lxc_config.vm.hostname = 'lxc-dev-box'
99
- lxc_config.vm.box_url = 'http://dl.dropbox.com/u/13510779/lxc-quantal64-2013-04-21.box'
100
- # Uncomment to test boxes built locally:
101
- # lxc_config.vm.box_url = '../boxes/output/lxc-quantal64.box'
102
-
103
- lxc_config.vm.provider :lxc do |lxc|
104
- # Required to boot nested containers
105
- lxc.customize 'aa_profile', 'unconfined'
48
+ ip_suffix = 30
49
+ BOXES.each do |box_name, box_config|
50
+ config.vm.define(box_name.to_sym) do |vm_config|
51
+ vm_config.vm.network :private_network, ip: "192.168.50.#{ip_suffix += 1}"
52
+ vm_config.vm.box = "#{box_name}64"
53
+
54
+ if box_config[:vbox_url]
55
+ vm_config.vm.provider :virtualbox do |vb, vb_config|
56
+ vb_config.vm.box_url = box_config[:vbox_url]
57
+ vb_config.vm.hostname = 'vbox'
58
+
59
+ vb.customize [
60
+ "modifyvm", :id,
61
+ "--memory", '1536',
62
+ "--cpus", '2'
63
+ ]
64
+ end
65
+ end
66
+
67
+ if box_config[:lxc_url]
68
+ vm_config.vm.provider :lxc do |lxc, lxc_config|
69
+ lxc_config.vm.box_url = box_config[:lxc_url]
70
+ lxc_config.vm.hostname = 'lxc-dev-box' unless %w(squeeze wheezy sid).include? box_name.to_s
71
+
72
+ # Required to boot nested containers
73
+ lxc.customize 'aa_profile', 'unconfined' unless %w(squeeze wheezy sid).include? box_name.to_s
74
+ end
75
+ end
76
+
77
+ vm_config.cache.enable :apt
78
+ vm_config.cache.enable :gem
106
79
  end
107
80
  end
108
81
 
109
- config.vm.provision :shell, :path => 'shell-provisioning/upgrade-kernel'
82
+ config.vm.provision :shell, :inline => 'sudo apt-get update'
83
+ config.vm.provision :shell, :path => 'shell-provisioning/upgrade-kernel'
110
84
 
111
85
  config.vm.provision :puppet do |puppet|
112
86
  puppet.manifests_path = "."
@@ -0,0 +1,37 @@
1
+ ###############################################################################
2
+ # This file has the same configs as the built in /etc/default/lxc on Ubuntu,
3
+ # we only changed IPs to 10.0.254.* to avoid collision with LXC default 10.0.3.*
4
+ # which is likely to be running from the host machine
5
+ ###############################################################################
6
+
7
+
8
+ # MIRROR to be used by ubuntu template at container creation:
9
+ # Leaving it undefined is fine
10
+ #MIRROR="http://archive.ubuntu.com/ubuntu"
11
+ # or
12
+ #MIRROR="http://<host-ip-addr>:3142/archive.ubuntu.com/ubuntu"
13
+
14
+ # LXC_AUTO - whether or not to start containers symlinked under
15
+ # /etc/lxc/auto
16
+ LXC_AUTO="true"
17
+
18
+ # Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
19
+ # containers. Set to "false" if you'll use virbr0 or another existing
20
+ # bridge, or mavlan to your host's NIC.
21
+ USE_LXC_BRIDGE="true"
22
+
23
+ # If you change the LXC_BRIDGE to something other than lxcbr1, then
24
+ # you will also need to update your /etc/lxc/lxc.conf as well as the
25
+ # configuration (/var/lib/lxc/<container>/config) for any containers
26
+ # already created using the default config to reflect the new bridge
27
+ # name.
28
+ # If you have the dnsmasq daemon installed, you'll also have to update
29
+ # /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
30
+ LXC_BRIDGE="lxcbr0"
31
+ LXC_ADDR="10.0.251.1"
32
+ LXC_NETMASK="255.255.255.0"
33
+ LXC_NETWORK="10.0.251.0/24"
34
+ LXC_DHCP_RANGE="10.0.253.2,10.0.251.254"
35
+ LXC_DHCP_MAX="253"
36
+
37
+ LXC_SHUTDOWN_TIMEOUT=120
@@ -0,0 +1,37 @@
1
+ ###############################################################################
2
+ # This file has the same configs as the built in /etc/default/lxc on Ubuntu,
3
+ # we only changed IPs to 10.0.254.* to avoid collision with LXC default 10.0.3.*
4
+ # which is likely to be running from the host machine
5
+ ###############################################################################
6
+
7
+
8
+ # MIRROR to be used by ubuntu template at container creation:
9
+ # Leaving it undefined is fine
10
+ #MIRROR="http://archive.ubuntu.com/ubuntu"
11
+ # or
12
+ #MIRROR="http://<host-ip-addr>:3142/archive.ubuntu.com/ubuntu"
13
+
14
+ # LXC_AUTO - whether or not to start containers symlinked under
15
+ # /etc/lxc/auto
16
+ LXC_AUTO="true"
17
+
18
+ # Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
19
+ # containers. Set to "false" if you'll use virbr0 or another existing
20
+ # bridge, or mavlan to your host's NIC.
21
+ USE_LXC_BRIDGE="true"
22
+
23
+ # If you change the LXC_BRIDGE to something other than lxcbr1, then
24
+ # you will also need to update your /etc/lxc/lxc.conf as well as the
25
+ # configuration (/var/lib/lxc/<container>/config) for any containers
26
+ # already created using the default config to reflect the new bridge
27
+ # name.
28
+ # If you have the dnsmasq daemon installed, you'll also have to update
29
+ # /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
30
+ LXC_BRIDGE="lxcbr0"
31
+ LXC_ADDR="10.0.250.1"
32
+ LXC_NETMASK="255.255.255.0"
33
+ LXC_NETWORK="10.0.250.0/24"
34
+ LXC_DHCP_RANGE="10.0.253.2,10.0.250.254"
35
+ LXC_DHCP_MAX="253"
36
+
37
+ LXC_SHUTDOWN_TIMEOUT=120
@@ -0,0 +1,37 @@
1
+ ###############################################################################
2
+ # This file has the same configs as the built in /etc/default/lxc on Ubuntu,
3
+ # we only changed IPs to 10.0.254.* to avoid collision with LXC default 10.0.3.*
4
+ # which is likely to be running from the host machine
5
+ ###############################################################################
6
+
7
+
8
+ # MIRROR to be used by ubuntu template at container creation:
9
+ # Leaving it undefined is fine
10
+ #MIRROR="http://archive.ubuntu.com/ubuntu"
11
+ # or
12
+ #MIRROR="http://<host-ip-addr>:3142/archive.ubuntu.com/ubuntu"
13
+
14
+ # LXC_AUTO - whether or not to start containers symlinked under
15
+ # /etc/lxc/auto
16
+ LXC_AUTO="true"
17
+
18
+ # Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
19
+ # containers. Set to "false" if you'll use virbr0 or another existing
20
+ # bridge, or mavlan to your host's NIC.
21
+ USE_LXC_BRIDGE="true"
22
+
23
+ # If you change the LXC_BRIDGE to something other than lxcbr1, then
24
+ # you will also need to update your /etc/lxc/lxc.conf as well as the
25
+ # configuration (/var/lib/lxc/<container>/config) for any containers
26
+ # already created using the default config to reflect the new bridge
27
+ # name.
28
+ # If you have the dnsmasq daemon installed, you'll also have to update
29
+ # /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
30
+ LXC_BRIDGE="lxcbr0"
31
+ LXC_ADDR="10.0.252.1"
32
+ LXC_NETMASK="255.255.255.0"
33
+ LXC_NETWORK="10.0.252.0/24"
34
+ LXC_DHCP_RANGE="10.0.253.2,10.0.252.254"
35
+ LXC_DHCP_MAX="253"
36
+
37
+ LXC_SHUTDOWN_TIMEOUT=120
@@ -9,6 +9,6 @@ fi
9
9
  echo 'An old kernel was found on the guest machine and it will be upgraded' 1>&2
10
10
  echo 'Please reload the box after provisioning when finished' 1>&2
11
11
  sudo apt-get update
12
- sudo apt-get install linux-image-3.5.0-27-generic linux-headers-3.5.0-27-generic -y
13
- sudo apt-get dist-upgrade -y
12
+ sudo apt-get install linux-image-3.5.0-28-generic linux-headers-3.5.0-28-generic -y
13
+ sudo apt-get upgrade -y
14
14
  sudo apt-get autoremove -y
data/development/site.pp CHANGED
@@ -5,6 +5,9 @@ exec {
5
5
  'echo "alias be=\"bundle exec\"" >> /home/vagrant/.bashrc':
6
6
  unless => 'grep -q "bundle exec" /home/vagrant/.bashrc';
7
7
 
8
+ 'echo "export VAGRANT_DEFAULT_PROVIDER=lxc" >> /home/vagrant/.bashrc':
9
+ unless => 'grep -q "VAGRANT_DEFAULT_PROVIDER" /home/vagrant/.bashrc';
10
+
8
11
  'echo "cd /vagrant" >> /home/vagrant/.bashrc':
9
12
  unless => 'grep -q "cd /vagrant" /home/vagrant/.bashrc';
10
13
  }
data/example/Vagrantfile CHANGED
@@ -32,11 +32,25 @@ echo "Hi there I'm a shell script used for provisioning"
32
32
  releases.each do |release|
33
33
  config.vm.define(release) do |lxc_config|
34
34
  lxc_config.vm.box = "#{release}64"
35
- lxc_config.vm.box_url = "http://dl.dropbox.com/u/13510779/lxc-#{release}-amd64-2013-04-21.box"
35
+ lxc_config.vm.box_url = "http://dl.dropbox.com/u/13510779/lxc-#{release}-amd64-2013-05-08.box"
36
+ lxc_config.vm.network :forwarded_port, guest: 80, host: (port += 1)
36
37
  # Uncomment if you want to try out a box built locally
37
38
  # lxc_config.vm.box_url = "../boxes/output/lxc-#{release}64.box"
38
39
  lxc_config.vm.hostname = "lxc-#{release}64-example"
40
+ end
41
+ end
42
+
43
+ port = 8090
44
+ releases = %w(wheezy squeeze sid)
45
+ releases.each do |release|
46
+ config.vm.define(release) do |lxc_config|
47
+ lxc_config.vm.box = "#{release}64"
48
+ lxc_config.vm.box_url = "http://dl.dropbox.com/u/13510779/lxc-#{release}-amd64-2013-05-08.box"
39
49
  lxc_config.vm.network :forwarded_port, guest: 80, host: (port += 1)
50
+ # Uncomment if you want to try out a box built locally
51
+ # lxc_config.vm.box_url = "../boxes/output/lxc-#{release}64.box"
52
+ # Does not work yet:
53
+ # lxc_config.vm.hostname = "lxc-#{release}64-example"
40
54
  end
41
55
  end
42
56
  end
@@ -13,6 +13,7 @@ require 'vagrant-lxc/action/forward_ports'
13
13
  require 'vagrant-lxc/action/handle_box_metadata'
14
14
  require 'vagrant-lxc/action/is_running'
15
15
  require 'vagrant-lxc/action/message'
16
+ require 'vagrant-lxc/action/remove_temporary_files'
16
17
  require 'vagrant-lxc/action/setup_package_files'
17
18
  require 'vagrant-lxc/action/share_folders'
18
19
 
@@ -117,9 +118,10 @@ module Vagrant
117
118
  # b.use CheckDependencies
118
119
  b.use Vagrant::Action::Builtin::Call, Created do |env, b2|
119
120
  if env[:result]
120
- # TODO: If vagrant >=...
121
+ # TODO: Remove this on / after 0.4
121
122
  b2.use Disconnect
122
123
  b2.use ClearForwardedPorts
124
+ b2.use RemoveTemporaryFiles
123
125
  b2.use Vagrant::Action::Builtin::Call, Vagrant::Action::Builtin::GracefulHalt, :stopped, :running do |env2, b3|
124
126
  if !env2[:result]
125
127
  b3.use ForcedHalt
@@ -9,9 +9,7 @@ module Vagrant
9
9
  def call(env)
10
10
  if env[:machine].provider.state.id == :running
11
11
  env[:ui].info I18n.t("vagrant_lxc.messages.force_shutdown")
12
- # TODO: Driver#halt is kinda graceful as well, if it doesn't
13
- # work we can issue a lxc-stop.
14
- env[:machine].provider.driver.halt
12
+ env[:machine].provider.driver.forced_halt
15
13
  end
16
14
 
17
15
  @app.call(env)
@@ -0,0 +1,23 @@
1
+ module Vagrant
2
+ module LXC
3
+ module Action
4
+ class RemoveTemporaryFiles
5
+ def initialize(app, env)
6
+ @app = app
7
+ @logger = Log4r::Logger.new("vagrant::lxc::action::remove_tmp_files")
8
+ end
9
+
10
+ def call(env)
11
+ # Continue execution, we need the container to be stopped
12
+ @app.call env
13
+
14
+ if env[:machine].state.id == :stopped
15
+ @logger.debug 'Removing temporary files'
16
+ tmp_path = env[:machine].provider.driver.rootfs_path.join('tmp')
17
+ system "sudo rm -rf #{tmp_path}/*"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -69,11 +69,11 @@ module Vagrant
69
69
  @cli.transition_to(:running) { |c| c.start(customizations, (extra || nil)) }
70
70
  end
71
71
 
72
- def halt
72
+ def forced_halt
73
73
  @logger.info('Shutting down container...')
74
-
75
- # TODO: issue an lxc-stop if a timeout gets reached
76
74
  @cli.transition_to(:stopped) { |c| c.shutdown }
75
+ rescue CLI::TargetStateNotReached
76
+ @cli.transition_to(:stopped) { |c| c.stop }
77
77
  end
78
78
 
79
79
  def destroy
@@ -10,6 +10,12 @@ module Vagrant
10
10
  attr_accessor :name
11
11
 
12
12
  class TransitionBlockNotProvided < RuntimeError; end
13
+ class TargetStateNotReached < RuntimeError
14
+ def initialize(target_state, state)
15
+ msg = "Target state '#{target_state}' not reached, currently on '#{state}'"
16
+ super(msg)
17
+ end
18
+ end
13
19
 
14
20
  # Include this so we can use `Subprocess` more easily.
15
21
  include Vagrant::Util::Retryable
@@ -60,6 +66,10 @@ module Vagrant
60
66
  run :start, '-d', '--name', @name, *options
61
67
  end
62
68
 
69
+ def stop
70
+ run :stop, '--name', @name
71
+ end
72
+
63
73
  def shutdown
64
74
  run :shutdown, '--name', @name
65
75
  end
@@ -76,12 +86,20 @@ module Vagrant
76
86
  run :attach, '--name', @name, *((extra || []) + cmd)
77
87
  end
78
88
 
79
- def transition_to(state, &block)
89
+ def transition_to(target_state, tries = 30, timeout = 1, &block)
80
90
  raise TransitionBlockNotProvided unless block_given?
81
91
 
82
92
  yield self
83
93
 
84
- run :wait, '--name', @name, '--state', state.to_s.upcase
94
+ while (last_state = self.state) != target_state && tries > 0
95
+ @logger.debug "Target state '#{target_state}' not reached, currently on '#{last_state}'"
96
+ sleep timeout
97
+ tries -= 1
98
+ end
99
+
100
+ unless last_state == target_state
101
+ raise TargetStateNotReached.new target_state, last_state
102
+ end
85
103
  end
86
104
 
87
105
  private