vagrant-lxc 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e595cc6f680e584b60fd1a734c4f174bddba99fa
4
- data.tar.gz: 9e432b94e595b4da4d33a6d724728a11a06fd4bb
3
+ metadata.gz: ee93b037eb8ad8145d874a64f28a585bba51ab3f
4
+ data.tar.gz: 41040fa650a3be3ec3bf59c9f8eed18a9a84cdfa
5
5
  SHA512:
6
- metadata.gz: 8542b6cbd0bcf756ef6846cb0cc87dc489ed47460255b3c16526021cd80c4ae8d52dc42617298f258f5ee51cf64a357b082dabec99265ad80a49cbd32430b00a
7
- data.tar.gz: 4dee7221dbc5dacb6e0a290a89174d450f714e6b83c891cea1f11fccd870df144acb2b30e8cf0a62917feac5b6d527d90d28a93f4d2310ff8323786f36c475f3
6
+ metadata.gz: 48855758f0ed808c6caa4a5c48852811c128e0ab223204f2b01b5091695475e541d15283a3588d1202b795460e1d02086d1c622a2148d4a9adddfdde252460a0
7
+ data.tar.gz: 25e57b7957bec28488416a534313cf431147c88cf131549b163b37ec823f427f00beef8ffa716d7f1f01ffaf477035c219e925b8f5b3ca12f9a8e8be6d5eff24
data/CHANGELOG.md CHANGED
@@ -1,4 +1,21 @@
1
- ## [0.7.0](https://github.com/fgrehm/vagrant-lxc/compare/v0.6.4...v0.7.0) (unreleased)
1
+ ## [0.8.0](https://github.com/fgrehm/vagrant-lxc/compare/v0.7.0...v0.8.0) (Feb 26, 2014)
2
+
3
+ FEATURES:
4
+
5
+ - Support for naming containers from Vagrantfiles [#132](https://github.com/fgrehm/vagrant-lxc/issues/132)
6
+
7
+ IMPROVEMENTS:
8
+
9
+ - Use a safer random name for containers [#152](https://github.com/fgrehm/vagrant-lxc/issues/152)
10
+ - Improve Ubuntu 13.10 compatibility [#190](https://github.com/fgrehm/vagrant-lxc/pull/190) / [#197](https://github.com/fgrehm/vagrant-lxc/pull/197)
11
+ - Improved mac address detection from lxc configs [#226](https://github.com/fgrehm/vagrant-lxc/pull/226)
12
+
13
+ BUG FIXES:
14
+
15
+ - Properly detect if lxc is installed on hosts that do not have `lxc-version` on their paths [#186](https://github.com/fgrehm/vagrant-lxc/issues/186)
16
+
17
+
18
+ ## [0.7.0](https://github.com/fgrehm/vagrant-lxc/compare/v0.6.4...v0.7.0) (Nov 8, 2013)
2
19
 
3
20
  IMPROVEMENTS:
4
21
 
@@ -8,7 +25,7 @@ IMPROVEMENTS:
8
25
 
9
26
  BUG FIXES:
10
27
 
11
- - Error out in case an invalid IPs are provided for forwarded ports [#170](https://github.com/fgrehm/vagrant-lxc/issues/170)
28
+ - Nicely handle blank strings provided to `:host_ip` when specifying forwarded ports [#170](https://github.com/fgrehm/vagrant-lxc/issues/170)
12
29
  - Fix "Permission denied" when starting/destroying containers after lxc
13
30
  security update in Ubuntu [#180](https://github.com/fgrehm/vagrant-lxc/issues/180)
14
31
  - Fix `vagrant package` [#172](https://github.com/fgrehm/vagrant-lxc/issues/172)
@@ -16,6 +33,10 @@ BUG FIXES:
16
33
 
17
34
  ## [0.6.4](https://github.com/fgrehm/vagrant-lxc/compare/v0.6.3...v0.6.4) (Oct 27, 2013)
18
35
 
36
+ FEATURES:
37
+
38
+ - New script for building OpenMandriva base boxes [#167](https://github.com/fgrehm/vagrant-lxc/issues/167)
39
+
19
40
  IMPROVEMENTS:
20
41
 
21
42
  - Make `lxc-template` compatible with Ubuntu 13.10 [#150](https://github.com/fgrehm/vagrant-lxc/issues/150)
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  GIT
2
2
  remote: git://github.com/fgrehm/vagrant-cachier.git
3
- revision: 536ca7ad54b3096644993f91f363df8a884d4600
3
+ revision: a9f41c5f01297773f209c0525400e22704b40c93
4
4
  specs:
5
- vagrant-cachier (0.4.2.dev)
5
+ vagrant-cachier (0.5.0)
6
6
 
7
7
  GIT
8
8
  remote: git://github.com/fgrehm/vagrant-pristine.git
@@ -25,7 +25,7 @@ GIT
25
25
  PATH
26
26
  remote: .
27
27
  specs:
28
- vagrant-lxc (0.7.0)
28
+ vagrant-lxc (0.8.0)
29
29
 
30
30
  GEM
31
31
  remote: https://rubygems.org/
@@ -41,7 +41,7 @@ GEM
41
41
  simplecov (>= 0.7)
42
42
  term-ansicolor
43
43
  thor
44
- diff-lcs (1.2.4)
44
+ diff-lcs (1.2.5)
45
45
  erubis (2.7.0)
46
46
  ffi (1.9.3)
47
47
  formatador (0.2.4)
@@ -84,8 +84,8 @@ GEM
84
84
  rspec-core (2.13.1)
85
85
  rspec-expectations (2.13.0)
86
86
  diff-lcs (>= 1.1.3, < 2.0)
87
- rspec-fire (1.2.0)
88
- rspec (~> 2.11)
87
+ rspec-fire (1.3.0)
88
+ rspec (>= 2.11, < 4)
89
89
  rspec-mocks (2.13.1)
90
90
  rspec-spies (2.1.4)
91
91
  rspec (~> 2.0)
@@ -98,7 +98,7 @@ GEM
98
98
  tins (~> 0.8)
99
99
  thor (0.18.1)
100
100
  timers (1.1.0)
101
- tins (0.12.0)
101
+ tins (0.13.0)
102
102
  vagrant-omnibus (1.1.2)
103
103
 
104
104
  PLATFORMS
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Fábio Rehm
1
+ Copyright (c) 2013-2014 Fábio Rehm
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # vagrant-lxc
2
2
 
3
- [![Build Status](https://travis-ci.org/fgrehm/vagrant-lxc.png?branch=master)](https://travis-ci.org/fgrehm/vagrant-lxc) [![Gem Version](https://badge.fury.io/rb/vagrant-lxc.png)](http://badge.fury.io/rb/vagrant-lxc) [![Code Climate](https://codeclimate.com/github/fgrehm/vagrant-lxc.png)](https://codeclimate.com/github/fgrehm/vagrant-lxc) [![Coverage Status](https://coveralls.io/repos/fgrehm/vagrant-lxc/badge.png?branch=master)](https://coveralls.io/r/fgrehm/vagrant-lxc)
3
+ [![Build Status](https://travis-ci.org/fgrehm/vagrant-lxc.png?branch=master)](https://travis-ci.org/fgrehm/vagrant-lxc) [![Gem Version](https://badge.fury.io/rb/vagrant-lxc.png)](http://badge.fury.io/rb/vagrant-lxc) [![Code Climate](https://codeclimate.com/github/fgrehm/vagrant-lxc.png)](https://codeclimate.com/github/fgrehm/vagrant-lxc) [![Coverage Status](https://coveralls.io/repos/fgrehm/vagrant-lxc/badge.png?branch=master)](https://coveralls.io/r/fgrehm/vagrant-lxc) [![Gittip](http://img.shields.io/gittip/fgrehm.svg)](https://www.gittip.com/fgrehm/)
4
4
 
5
5
  [LXC](http://lxc.sourceforge.net/) provider for [Vagrant](http://www.vagrantup.com/) 1.1+
6
6
 
@@ -23,7 +23,7 @@ to see it in action.
23
23
  * [Vagrant 1.1+](http://downloads.vagrantup.com/)
24
24
  * lxc 0.7.5+
25
25
  * redir (if you are planning to use port forwarding)
26
- * A [bug-free](https://github.com/fgrehm/vagrant-lxc/wiki/Troubleshooting#im-unable-to-restart-containers) kernel
26
+ * A [kernel != 3.5.0-17.28](https://github.com/fgrehm/vagrant-lxc/wiki/Troubleshooting#wiki-im-unable-to-restart-containers)
27
27
 
28
28
  The plugin is known to work better and pretty much out of the box on Ubuntu 12.04+
29
29
  hosts and installing the dependencies on it basically means a `apt-get install lxc lxc-templates cgroup-lite redir`
@@ -55,7 +55,7 @@ vagrant plugin install vagrant-lxc
55
55
  After installing, add a [base box](#base-boxes) using any name you want, for example:
56
56
 
57
57
  ```
58
- vagrant box add quantal64 http://bit.ly/vagrant-lxc-quantal64-2013-07-12
58
+ vagrant box add quantal64 http://bit.ly/vagrant-lxc-quantal64-2013-10-23
59
59
  ```
60
60
 
61
61
  Then create a Vagrantfile that looks like the following, changing the box name
@@ -95,11 +95,30 @@ prior to starting it.
95
95
 
96
96
  For other configuration options, please check the [lxc.conf manpages](http://manpages.ubuntu.com/manpages/quantal/man5/lxc.conf.5.html).
97
97
 
98
+ ### Container naming
99
+
100
+ By default vagrant-lxc will attempt to generate a unique container name
101
+ for you. However, if the container name is important to you, you may use the
102
+ `container_name` attribute to set it explicitly from the `provider` block:
103
+
104
+ ```ruby
105
+ Vagrant.configure("2") do |config|
106
+ config.vm.box = "quantal64"
107
+
108
+ config.vm.define "db" do |node|
109
+ node.vm.provider :lxc do |lxc|
110
+ lxc.container_name = :machine # Sets the container name to 'db'
111
+ lxc.container_name = 'mysql' # Sets the container name to 'mysql'
112
+ end
113
+ end
114
+ end
115
+ ```
116
+
98
117
  ### Avoiding `sudo` passwords
99
118
 
100
119
  This plugin requires **a lot** of `sudo`ing since [user namespaces](https://wiki.ubuntu.com/UserNamespace)
101
120
  are not supported on mainstream kernels. Have a look at the [Wiki](https://github.com/fgrehm/vagrant-lxc/wiki/Avoiding-'sudo'-passwords)
102
- to find out how to work around that specially if you are running an OS with sudo
121
+ to find out how to work around that specially if you are running an OS with `sudo`
103
122
  < 1.8.4 (like Ubuntu 12.04) as you might be affected by a bug.
104
123
 
105
124
  ### Base boxes
@@ -123,14 +142,6 @@ list if you have a problem and feel free to use the [issue tracker](https://gith
123
142
  propose new functionality and / or report bugs.
124
143
 
125
144
 
126
- ## Support
127
-
128
- Support this project and [others by fgrehm](https://github.com/fgrehm)
129
- via [gittip](https://www.gittip.com/fgrehm/).
130
-
131
- [![Support via Gittip](https://rawgithub.com/twolfson/gittip-badge/0.1.0/dist/gittip.png)](https://www.gittip.com/fgrehm/)
132
-
133
-
134
145
  ## Contributing
135
146
 
136
147
  1. Fork it
@@ -138,5 +149,3 @@ via [gittip](https://www.gittip.com/fgrehm/).
138
149
  3. Commit your changes (`git commit -am 'Add some feature'`)
139
150
  4. Push to the branch (`git push origin my-new-feature`)
140
151
  5. Create new Pull Request
141
-
142
- [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/fgrehm/vagrant-lxc/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
@@ -7,9 +7,20 @@ module Vagrant
7
7
  end
8
8
 
9
9
  def call(env)
10
- container_name = "#{env[:root_path].basename}_#{env[:machine].name}"
11
- container_name.gsub!(/[^-a-z0-9_]/i, "")
12
- container_name << "-#{Time.now.to_i}"
10
+ container_name = env[:machine].provider_config.container_name
11
+
12
+ case container_name
13
+ when :machine
14
+ container_name = env[:machine].name.to_s
15
+ when String
16
+ # Nothing to do here, move along...
17
+ else
18
+ container_name = "#{env[:root_path].basename}_#{env[:machine].name}"
19
+ container_name.gsub!(/[^-a-z0-9_]/i, "")
20
+ # milliseconds + random number suffix to allow for simultaneous
21
+ # `vagrant up` of the same box in different dirs
22
+ container_name << "_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
23
+ end
13
24
 
14
25
  env[:machine].provider.driver.create(
15
26
  container_name,
@@ -12,9 +12,14 @@ module Vagrant
12
12
  # on /etc/sudoers
13
13
  attr_accessor :sudo_wrapper
14
14
 
15
+ # A string to explicitly set the container name. To use the vagrant
16
+ # machine name, set this to :machine
17
+ attr_accessor :container_name
18
+
15
19
  def initialize
16
20
  @customizations = []
17
21
  @sudo_wrapper = UNSET_VALUE
22
+ @container_name = UNSET_VALUE
18
23
  end
19
24
 
20
25
  # Customize the container by calling `lxc-start` with the given
@@ -34,6 +39,7 @@ module Vagrant
34
39
 
35
40
  def finalize!
36
41
  @sudo_wrapper = nil if @sudo_wrapper == UNSET_VALUE
42
+ @container_name = nil if @container_name == UNSET_VALUE
37
43
  end
38
44
 
39
45
  def validate(machine)
@@ -40,7 +40,7 @@ module Vagrant
40
40
  end
41
41
 
42
42
  def mac_address
43
- @mac_address ||= config_string.match(/^lxc\.network\.hwaddr\s+=\s+(.+)$/)[1]
43
+ @mac_address ||= config_string.match(/^lxc\.network\.hwaddr\s*+=\s*+(.+)$/)[1]
44
44
  end
45
45
 
46
46
  def config_string
@@ -111,6 +111,11 @@ module Vagrant
111
111
  target_path = "#{Dir.mktmpdir}/rootfs.tar.gz"
112
112
 
113
113
  @logger.info "Compressing '#{rootfs_path}' rootfs to #{target_path}"
114
+ # "vagrant package" will copy the existing lxc-template in the new box file
115
+ # To keep this function backwards compatible with existing boxes, the path
116
+ # included in the tarball needs to have the same amount of path components (2)
117
+ # that will be stripped before extraction, hence the './.'
118
+ # TODO: This should be reviewed before 1.0
114
119
  cmds = [
115
120
  "cd #{base_path}",
116
121
  "rm -f rootfs.tar.gz",
@@ -38,7 +38,7 @@ module Vagrant
38
38
  end
39
39
 
40
40
  def state
41
- if @name && run(:info, '--name', @name, retryable: true) =~ /^state:[^A-Z]+([A-Z]+)$/
41
+ if @name && run(:info, '--name', @name, retryable: true) =~ /^state:[^A-Z]+([A-Z]+)$/i
42
42
  $1.downcase.to_sym
43
43
  elsif @name
44
44
  :unknown
@@ -58,6 +58,12 @@ module Vagrant
58
58
  '--name', @name,
59
59
  *(config_opts),
60
60
  *extra
61
+ rescue Errors::ExecuteError => e
62
+ if e.stderr =~ /already exists/i
63
+ raise Errors::ContainerAlreadyExists, name: @name
64
+ else
65
+ raise
66
+ end
61
67
  end
62
68
 
63
69
  def destroy
@@ -69,6 +75,7 @@ module Vagrant
69
75
  end
70
76
 
71
77
  def stop
78
+ attach '/sbin/halt'
72
79
  run :stop, '--name', @name
73
80
  end
74
81
 
@@ -5,7 +5,16 @@ module Vagrant
5
5
  module Errors
6
6
  class ExecuteError < Vagrant::Errors::VagrantError
7
7
  error_key(:lxc_execute_error)
8
+ attr_reader :stderr, :stdout
9
+ def initialize(message, *args)
10
+ super
11
+ if message.is_a?(Hash)
12
+ @stderr = message[:stderr]
13
+ @stdout = message[:stdout]
14
+ end
15
+ end
8
16
  end
17
+
9
18
  class NamespacesNotSupported < Vagrant::Errors::VagrantError
10
19
  end
11
20
 
@@ -13,6 +22,10 @@ module Vagrant
13
22
  error_key(:lxc_not_installed)
14
23
  end
15
24
 
25
+ class ContainerAlreadyExists < Vagrant::Errors::VagrantError
26
+ error_key(:lxc_container_already_exists)
27
+ end
28
+
16
29
  # Box related errors
17
30
  class TemplateFileMissing < Vagrant::Errors::VagrantError
18
31
  error_key(:lxc_template_file_missing)
@@ -26,7 +26,9 @@ module Vagrant
26
26
  end
27
27
 
28
28
  def ensure_lxc_installed!
29
- unless system("which lxc-version > /dev/null")
29
+ begin
30
+ sudo_wrapper.run("which", "lxc-create")
31
+ rescue Vagrant::LXC::Errors::ExecuteError
30
32
  raise Errors::LxcNotInstalled
31
33
  end
32
34
  end
@@ -51,7 +51,8 @@ module Vagrant
51
51
  if @interrupted
52
52
  @logger.info("Exit code != 0, but interrupted. Ignoring.")
53
53
  else
54
- raise LXC::Errors::ExecuteError, :command => command.inspect
54
+ raise LXC::Errors::ExecuteError,
55
+ command: command.inspect, stderr: r.stderr, stdout: r.stdout
55
56
  end
56
57
  end
57
58
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module LXC
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -60,3 +60,8 @@ en:
60
60
 
61
61
  lxc_redir_not_installed: |-
62
62
  `redir` is not installed or is not accessible on the PATH.
63
+
64
+ lxc_container_already_exists: |-
65
+ There is container on your system with the same name you've specified
66
+ on your Vagrantfile (%{name}), please choose a different one or
67
+ run `lxc-destroy --name %{name}` and try again.
@@ -49,20 +49,27 @@ describe Vagrant::LXC::Driver::CLI do
49
49
 
50
50
  before do
51
51
  subject.stub(:run) { |*args| @run_args = args }
52
+ end
53
+
54
+ it 'issues a lxc-create with provided template, container name and hash of arguments' do
52
55
  subject.create(template, config_file, template_args)
56
+ subject.should have_received(:run).with(
57
+ :create,
58
+ '--template', template,
59
+ '--name', name,
60
+ '-f', config_file,
61
+ '--',
62
+ '--extra-param', 'param',
63
+ '--other', 'value'
64
+ )
53
65
  end
54
66
 
55
- it 'issues a lxc-create with provided template, container name and hash of arguments' do
56
- subject.should have_received(:run).with(
57
- :create,
58
- '--template', template,
59
- '--name', name,
60
- '-f', config_file,
61
- '--',
62
- '--extra-param', 'param',
63
- '--other', 'value'
64
- )
65
- end
67
+ it 'wraps a low level error into something more meaningful in case the container already exists' do
68
+ subject.stub(:run) { raise Vagrant::LXC::Errors::ExecuteError, stderr: 'alreAdy Exists' }
69
+ expect {
70
+ subject.create(template, config_file, template_args)
71
+ }.to raise_error(Vagrant::LXC::Errors::ContainerAlreadyExists)
72
+ end
66
73
  end
67
74
 
68
75
  describe 'destroy' do
@@ -134,6 +141,11 @@ describe Vagrant::LXC::Driver::CLI do
134
141
  it 'maps the output of lxc-info status out to a symbol' do
135
142
  subject.state.should == :stopped
136
143
  end
144
+
145
+ it 'is not case sensitive' do
146
+ subject.stub(:run).and_return("StatE: STarTED\npid: 2")
147
+ subject.state.should == :started
148
+ end
137
149
  end
138
150
 
139
151
  describe 'attach' do
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.7.0
4
+ version: 0.8.0
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-11-08 00:00:00.000000000 Z
11
+ date: 2014-02-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Linux Containers provider for Vagrant
14
14
  email:
@@ -17,10 +17,10 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - .gitignore
21
- - .rspec
22
- - .travis.yml
23
- - .vimrc
20
+ - ".gitignore"
21
+ - ".rspec"
22
+ - ".travis.yml"
23
+ - ".vimrc"
24
24
  - BOXES.md
25
25
  - CHANGELOG.md
26
26
  - CONTRIBUTING.md
@@ -114,17 +114,17 @@ require_paths:
114
114
  - lib
115
115
  required_ruby_version: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - '>='
117
+ - - ">="
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  requirements: []
126
126
  rubyforge_project:
127
- rubygems_version: 2.1.5
127
+ rubygems_version: 2.2.2
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: Linux Containers provider for Vagrant