vagrant-lxc 0.8.0 → 1.0.0.alpha.1

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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/BOXES.md +13 -21
  4. data/CHANGELOG.md +49 -0
  5. data/CONTRIBUTING.md +5 -2
  6. data/Gemfile +12 -13
  7. data/Gemfile.lock +66 -51
  8. data/README.md +39 -25
  9. data/development/Vagrantfile +0 -2
  10. data/lib/vagrant-backports/README.md +12 -0
  11. data/lib/vagrant-backports/action/handle_box.rb +1 -0
  12. data/lib/vagrant-backports/action/is_state.rb +34 -0
  13. data/lib/vagrant-backports/action/message.rb +20 -0
  14. data/lib/{vagrant-lxc → vagrant-backports}/action/wait_for_communicator.rb +6 -5
  15. data/lib/vagrant-backports/ui.rb +12 -0
  16. data/lib/vagrant-backports/utils.rb +27 -0
  17. data/lib/vagrant-lxc.rb +8 -0
  18. data/lib/vagrant-lxc/action.rb +81 -48
  19. data/lib/vagrant-lxc/action/boot.rb +2 -1
  20. data/lib/vagrant-lxc/action/fetch_ip_from_dnsmasq_leases.rb +1 -0
  21. data/lib/vagrant-lxc/action/handle_box_metadata.rb +36 -14
  22. data/lib/vagrant-lxc/action/message.rb +0 -23
  23. data/lib/vagrant-lxc/action/prepare_nfs_settings.rb +64 -0
  24. data/lib/vagrant-lxc/action/prepare_nfs_valid_ids.rb +19 -0
  25. data/lib/vagrant-lxc/action/setup_package_files.rb +6 -2
  26. data/lib/vagrant-lxc/{action → backports/action}/share_folders.rb +0 -0
  27. data/lib/vagrant-lxc/command/root.rb +58 -0
  28. data/lib/vagrant-lxc/command/sudoers.rb +87 -0
  29. data/lib/vagrant-lxc/driver.rb +21 -11
  30. data/lib/vagrant-lxc/plugin.rb +23 -5
  31. data/lib/vagrant-lxc/provider/cap/public_address.rb +17 -0
  32. data/lib/vagrant-lxc/synced_folder.rb +42 -0
  33. data/lib/vagrant-lxc/version.rb +1 -1
  34. data/locales/en.yml +6 -5
  35. data/scripts/lxc-template +165 -0
  36. data/spec/spec_helper.rb +9 -13
  37. data/spec/unit/action/clear_forwarded_ports_spec.rb +3 -3
  38. data/spec/unit/action/compress_rootfs_spec.rb +7 -5
  39. data/spec/unit/action/forward_ports_spec.rb +8 -8
  40. data/spec/unit/action/handle_box_metadata_spec.rb +71 -15
  41. data/spec/unit/action/setup_package_files_spec.rb +32 -8
  42. data/spec/unit/driver/cli_spec.rb +31 -30
  43. data/spec/unit/driver_spec.rb +35 -27
  44. data/spec/unit/support/unit_example_group.rb +6 -6
  45. data/spec/unit_helper.rb +4 -2
  46. data/tasks/spec.rake +18 -11
  47. data/vagrant-lxc.gemspec +7 -0
  48. data/vagrant-spec.config.rb +24 -0
  49. metadata +24 -36
  50. data/boxes/build-all.sh +0 -22
  51. data/boxes/build-debian-box.sh +0 -167
  52. data/boxes/build-openmandriva-box.sh +0 -159
  53. data/boxes/build-ubuntu-box.sh +0 -151
  54. data/boxes/common/cleanup +0 -7
  55. data/boxes/common/install-babushka +0 -16
  56. data/boxes/common/install-chef +0 -15
  57. data/boxes/common/install-puppet +0 -13
  58. data/boxes/common/install-salt +0 -12
  59. data/boxes/common/install-salt-debian +0 -28
  60. data/boxes/common/lxc-template +0 -226
  61. data/boxes/common/lxc-template-openmandriva +0 -225
  62. data/boxes/common/lxc.conf +0 -49
  63. data/boxes/common/metadata.json +0 -5
  64. data/lib/vagrant-lxc/action/check_created.rb +0 -21
  65. data/lib/vagrant-lxc/action/check_running.rb +0 -21
  66. data/lib/vagrant-lxc/action/created.rb +0 -20
  67. data/lib/vagrant-lxc/action/disconnect.rb +0 -18
  68. data/lib/vagrant-lxc/action/is_running.rb +0 -19
  69. data/spec/acceptance/sanity_check_spec.rb +0 -111
  70. data/spec/acceptance/support/acceptance_example_group.rb +0 -76
  71. data/spec/acceptance/support/machine_ext.rb +0 -12
  72. data/spec/acceptance/support/test_ui.rb +0 -22
  73. data/spec/acceptance_helper.rb +0 -21
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module LXC
3
- VERSION = "0.8.0"
3
+ VERSION = "1.0.0.alpha.1"
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -12,15 +12,16 @@ en:
12
12
  Starting container...
13
13
  force_shutdown: |-
14
14
  Forcing shutdown of container...
15
- # TODO: Remove the following keys after we drop support for vagrant < 1.3
16
- waiting_for_start: |-
17
- Waiting for container to start. This should not take long.
18
- container_ready: |-
19
- Container started and ready for use!
20
15
  warn_networks: |-
21
16
  Warning! The LXC provider doesn't support any of the Vagrant public / private
22
17
  network configurations (ex: `config.vm.network :private_network, ip: "some-ip"`).
23
18
  They will be silently ignored.
19
+ warn_group: |-
20
+ Warning! The LXC provider doesn't support the :group parameter for synced
21
+ folders. It will be silently ignored.
22
+ warn_owner: |-
23
+ Warning! The LXC provider doesn't support the :owner parameter for synced
24
+ folders. It will be silently ignored.
24
25
 
25
26
  vagrant:
26
27
  commands:
@@ -0,0 +1,165 @@
1
+ #!/bin/bash
2
+
3
+ # This is a modified version of /usr/share/lxc/templates/lxc-download
4
+ # that comes with ubuntu-lxc 1.0.0 stable from ppa changed to suit vagrant-lxc needs
5
+ #
6
+ # Copyright © 2014 Stéphane Graber <stgraber@ubuntu.com>
7
+ # Copyright © 2014 Fábio Rehm <fgrehm@gmail.com>
8
+ #
9
+ # This library is free software; you can redistribute it and/or
10
+ # modify it under the terms of the GNU Lesser General Public
11
+ # License as published by the Free Software Foundation; either
12
+ # version 2.1 of the License, or (at your option) any later version.
13
+
14
+ # This library is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # Lesser General Public License for more details.
18
+
19
+ # You should have received a copy of the GNU Lesser General Public
20
+ # License along with this library; if not, write to the Free Software
21
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
22
+ # USA
23
+
24
+ set -eu
25
+
26
+ LXC_HOOK_DIR="/usr/share/lxc/hooks"
27
+ LXC_TEMPLATE_CONFIG="/usr/share/lxc/config"
28
+
29
+ LXC_MAPPED_GID=
30
+ LXC_MAPPED_UID=
31
+ LXC_NAME=
32
+ LXC_PATH=
33
+ LXC_ROOTFS=
34
+ LXC_TARBALL=
35
+ LXC_CONFIG=
36
+
37
+ usage() {
38
+ cat <<EOF
39
+ vagrant-lxc default template
40
+
41
+ Required arguments:
42
+ [ --tarball <path> ]: The full path of the rootfs tarball
43
+
44
+ Optional arguments:
45
+ [ --config ]: Configuration file to be used when building the container
46
+ [ -h | --help ]: This help message
47
+
48
+ LXC internal arguments (do not pass manually!):
49
+ [ --name <name> ]: The container name
50
+ [ --path <path> ]: The path to the container
51
+ [ --rootfs <rootfs> ]: The path to the container's rootfs
52
+ [ --mapped-uid <map> ]: A uid map (user namespaces)
53
+ [ --mapped-gid <map> ]: A gid map (user namespaces)
54
+ EOF
55
+ return 0
56
+ }
57
+
58
+ options=$(getopt -o h -l tarball:,config:,help:,name:,path:,rootfs:,mapped-uid:,mapped-gid: -- "$@")SS
59
+
60
+ if [ $? -ne 0 ]; then
61
+ usage $(basename $0)
62
+ exit 1
63
+ fi
64
+ eval set -- "$options"
65
+
66
+ while true
67
+ do
68
+ case "$1" in
69
+ -h|--help) usage $0 && exit 0;;
70
+ --config) LXC_CONFIG=$2; shift 2;;
71
+ --tarball) LXC_TARBALL=$2; shift 2;;
72
+ --name) LXC_NAME=$2; shift 2;;
73
+ --path) LXC_PATH=$2; shift 2;;
74
+ --rootfs) LXC_ROOTFS=$2; shift 2;;
75
+ --mapped-uid) LXC_MAPPED_UID=$2; shift 2;;
76
+ --mapped-gid) LXC_MAPPED_GID=$2; shift 2;;
77
+ *) break;;
78
+ esac
79
+ done
80
+
81
+ if [ -z "${LXC_NAME}" ]; then
82
+ echo "'name' parameter is required"
83
+ exit 1
84
+ fi
85
+
86
+ if [ -z "${LXC_TARBALL}" ]; then
87
+ echo "'tarball' parameter is required"
88
+ exit 1
89
+ fi
90
+
91
+ if [ -z "${LXC_ROOTFS}" ]; then
92
+ echo "'rootfs' parameter is required"
93
+ exit 1
94
+ fi
95
+
96
+ if [ -z "${LXC_CONFIG}" ]; then
97
+ echo "'config' parameter is required"
98
+ exit 1
99
+ fi
100
+
101
+ if [ -z "${LXC_PATH}" ]; then
102
+ echo "'path' parameter is required"
103
+ exit 1
104
+ fi
105
+
106
+ # Unpack the rootfs
107
+ echo "Unpacking the rootfs"
108
+
109
+ mkdir -p /var/lock/subsys
110
+ (
111
+ flock -x 200
112
+ if [ $? -ne 0 ]; then
113
+ echo "Cache repository is busy."
114
+ exit 1
115
+ fi
116
+
117
+ mkdir -p ${LXC_ROOTFS}
118
+ (cd ${LXC_ROOTFS} && tar xfz ${LXC_TARBALL} --strip-components=2)
119
+ if [ $? -ne 0 ]; then
120
+ echo "Failed to extract rootfs"
121
+ exit 1
122
+ fi
123
+
124
+ ) 200>/var/lock/subsys/lxc
125
+
126
+ mkdir -p ${LXC_ROOTFS}/dev/pts/
127
+
128
+ ## Extract all the network config entries
129
+ sed -i -e "/lxc.network/{w ${LXC_PATH}/config-network" -e "d}" \
130
+ ${LXC_PATH}/config
131
+
132
+ ## Extract any other config entry
133
+ sed -i -e "/lxc./{w ${LXC_PATH}/config-auto" -e "d}" ${LXC_PATH}/config
134
+
135
+ ## Add the container-specific config
136
+ echo "" >> ${LXC_PATH}/config
137
+ echo "##############################################" >> ${LXC_PATH}/config
138
+ echo "# Container specific configuration (automatically set)" >> ${LXC_PATH}/config
139
+ if [ -e "${LXC_PATH}/config-auto" ]; then
140
+ cat ${LXC_PATH}/config-auto >> ${LXC_PATH}/config
141
+ rm ${LXC_PATH}/config-auto
142
+ fi
143
+ echo "lxc.utsname = ${LXC_NAME}" >> ${LXC_PATH}/config
144
+
145
+ ## Re-add the previously removed network config
146
+ if [ -e "${LXC_PATH}/config-network" ]; then
147
+ echo "" >> ${LXC_PATH}/config
148
+ echo "##############################################" >> ${LXC_PATH}/config
149
+ echo "# Network configuration (automatically set)" >> ${LXC_PATH}/config
150
+ cat ${LXC_PATH}/config-network >> ${LXC_PATH}/config
151
+ rm ${LXC_PATH}/config-network
152
+ fi
153
+
154
+ ## Append the defaults
155
+ echo "" >> ${LXC_PATH}/config
156
+ echo "##############################################" >> ${LXC_PATH}/config
157
+ echo "# vagrant-lxc base box specific configuration" >> ${LXC_PATH}/config
158
+ cat ${LXC_CONFIG} >> ${LXC_PATH}/config
159
+
160
+ # Empty section for lxc.customize calls from vagrantfile
161
+ echo "" >> ${LXC_PATH}/config
162
+ echo "##############################################" >> ${LXC_PATH}/config
163
+ echo "# vagrant-lxc container specific configuration" >> ${LXC_PATH}/config
164
+
165
+ exit 0
data/spec/spec_helper.rb CHANGED
@@ -10,22 +10,10 @@ require 'bundler/setup'
10
10
 
11
11
  require 'i18n'
12
12
 
13
- require 'rspec-spies'
13
+ require 'vagrant-lxc'
14
14
 
15
15
  Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
16
16
 
17
- # If we should verify constant names, eager loads
18
- if ENV['VERIFY_CONSTANT_NAMES']
19
- require 'vagrant-lxc/plugin'
20
- require 'vagrant-lxc/provider'
21
- require 'vagrant-lxc/config'
22
- end
23
-
24
- require 'rspec/fire'
25
- RSpec::Fire.configure do |config|
26
- config.verify_constant_names = ENV['VERIFY_CONSTANT_NAMES'] == '1'
27
- end
28
-
29
17
  RSpec.configure do |config|
30
18
  config.treat_symbols_as_metadata_keys_with_true_values = true
31
19
  config.run_all_when_everything_filtered = true
@@ -36,4 +24,12 @@ RSpec.configure do |config|
36
24
  # the seed, which is printed after each run.
37
25
  # --seed 1234
38
26
  config.order = 'random'
27
+
28
+ config.mock_with :rspec do |c|
29
+ c.yield_receiver_to_any_instance_implementation_blocks = true
30
+ end
31
+ config.expect_with :rspec do |c|
32
+ c.syntax = :expect
33
+ end
34
+ config.raise_errors_for_deprecations!
39
35
  end
@@ -24,12 +24,12 @@ describe Vagrant::LXC::Action::ClearForwardedPorts do
24
24
  after { FileUtils.rm_rf data_dir.to_s }
25
25
 
26
26
  it 'removes all files under pid directory' do
27
- Dir[pids_dir.to_s + "/redir_*.pid"].should be_empty
27
+ expect(Dir[pids_dir.to_s + "/redir_*.pid"]).to be_empty
28
28
  end
29
29
 
30
30
  context 'with a valid redir pid' do
31
31
  it 'kills known processes' do
32
- subject.should have_received(:system).with("pkill -TERM -P #{pid}")
32
+ expect(subject).to have_received(:system).with("pkill -TERM -P #{pid}")
33
33
  end
34
34
  end
35
35
 
@@ -37,7 +37,7 @@ describe Vagrant::LXC::Action::ClearForwardedPorts do
37
37
  let(:pid_cmd) { 'sudo ls' }
38
38
 
39
39
  it 'does not kill the process' do
40
- subject.should_not have_received(:system).with("pkill -TERM -P #{pid}")
40
+ expect(subject).not_to have_received(:system).with("pkill -TERM -P #{pid}")
41
41
  end
42
42
  end
43
43
  end
@@ -1,13 +1,15 @@
1
1
  require 'unit_helper'
2
2
 
3
+ require 'vagrant-lxc/plugin'
4
+ require 'vagrant-lxc/provider'
3
5
  require 'vagrant-lxc/action/compress_rootfs'
4
6
 
5
7
  describe Vagrant::LXC::Action::CompressRootFS do
6
8
  let(:app) { double(:app, call: true) }
7
9
  let(:env) { {machine: machine, ui: double(info: true)} }
8
- let(:machine) { instance_double('Vagrant::Machine', provider: provider) }
9
- let(:provider) { instance_double('Vagrant::LXC::Provider', driver: driver) }
10
- let(:driver) { instance_double('Vagrant::LXC::Driver', compress_rootfs: compressed_rootfs_path) }
10
+ let(:machine) { double(Vagrant::Machine, provider: provider) }
11
+ let(:provider) { double(Vagrant::LXC::Provider, driver: driver) }
12
+ let(:driver) { double(Vagrant::LXC::Driver, compress_rootfs: compressed_rootfs_path) }
11
13
  let(:compressed_rootfs_path) { '/path/to/rootfs.tar.gz' }
12
14
 
13
15
  subject { described_class.new(app, env) }
@@ -18,10 +20,10 @@ describe Vagrant::LXC::Action::CompressRootFS do
18
20
  end
19
21
 
20
22
  it "asks the driver to compress container's rootfs" do
21
- driver.should have_received(:compress_rootfs)
23
+ expect(driver).to have_received(:compress_rootfs)
22
24
  end
23
25
 
24
26
  it 'sets export.temp_dir on action env' do
25
- env['package.rootfs'].should == compressed_rootfs_path
27
+ expect(env['package.rootfs']).to eq(compressed_rootfs_path)
26
28
  end
27
29
  end
@@ -1,7 +1,7 @@
1
1
  require 'unit_helper'
2
2
 
3
3
  require 'tmpdir'
4
- require 'vagrant-lxc/errors'
4
+ require 'vagrant-lxc/provider'
5
5
  require 'vagrant-lxc/action/forward_ports'
6
6
 
7
7
  describe Vagrant::LXC::Action::ForwardPorts do
@@ -9,7 +9,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
9
9
  let(:env) { {machine: machine, ui: double(info: true)} }
10
10
  let(:machine) { double(:machine) }
11
11
  let!(:data_dir) { Pathname.new(Dir.mktmpdir) }
12
- let(:provider) { instance_double('Vagrant::LXC::Provider', ssh_info: {host: container_ip}) }
12
+ let(:provider) { double(Vagrant::LXC::Provider, ssh_info: {host: container_ip}) }
13
13
  let(:host_ip) { '127.0.0.1' }
14
14
  let(:host_port) { 8080 }
15
15
  let(:guest_port) { 80 }
@@ -33,7 +33,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
33
33
  it 'forwards ports using redir' do
34
34
  subject.stub(system: true)
35
35
  subject.call(env)
36
- subject.should have_received(:spawn).with(
36
+ expect(subject).to have_received(:spawn).with(
37
37
  "redir --laddr=#{host_ip} --lport=#{host_port} --caddr=#{container_ip} --cport=#{guest_port} 2>/dev/null"
38
38
  )
39
39
  end
@@ -42,7 +42,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
42
42
  forward_conf.delete(:host_ip)
43
43
  subject.stub(system: true)
44
44
  subject.call(env)
45
- subject.should have_received(:spawn).with(
45
+ expect(subject).to have_received(:spawn).with(
46
46
  "redir --lport=#{host_port} --caddr=#{container_ip} --cport=#{guest_port} 2>/dev/null"
47
47
  )
48
48
  end
@@ -51,7 +51,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
51
51
  forward_conf[:host_ip] = ' '
52
52
  subject.stub(system: true)
53
53
  subject.call(env)
54
- subject.should have_received(:spawn).with(
54
+ expect(subject).to have_received(:spawn).with(
55
55
  "redir --lport=#{host_port} --caddr=#{container_ip} --cport=#{guest_port} 2>/dev/null"
56
56
  )
57
57
  end
@@ -60,18 +60,18 @@ describe Vagrant::LXC::Action::ForwardPorts do
60
60
  subject.stub(system: true)
61
61
  subject.call(env)
62
62
  pid_file = data_dir.join('pids', "redir_#{host_port}.pid").read
63
- pid_file.should == pid
63
+ expect(pid_file).to eq(pid)
64
64
  end
65
65
 
66
66
  it 'allows disabling a previously forwarded port' do
67
67
  forward_conf[:disabled] = true
68
68
  subject.stub(system: true)
69
69
  subject.call(env)
70
- subject.should_not have_received(:spawn)
70
+ expect(subject).not_to have_received(:spawn)
71
71
  end
72
72
 
73
73
  it 'raises RedirNotInstalled error if `redir` is not installed' do
74
74
  subject.stub(system: false)
75
- lambda { subject.call(env) }.should raise_error(Vagrant::LXC::Errors::RedirNotInstalled)
75
+ expect { subject.call(env) }.to raise_error(Vagrant::LXC::Errors::RedirNotInstalled)
76
76
  end
77
77
  end
@@ -6,7 +6,7 @@ require 'vagrant-lxc/action/handle_box_metadata'
6
6
 
7
7
  describe Vagrant::LXC::Action::HandleBoxMetadata do
8
8
  let(:app) { double(:app, call: true) }
9
- let(:env) { {machine: machine, ui: double(info: true)} }
9
+ let(:env) { {machine: machine, ui: double(info: true, warn: true)} }
10
10
  let(:machine) { double(:machine, box: box) }
11
11
  let(:box) { double(:box, name: 'box-name', metadata: metadata, directory: box_directory) }
12
12
  let(:box_directory) { Pathname.new('/path/to/box') }
@@ -16,55 +16,111 @@ describe Vagrant::LXC::Action::HandleBoxMetadata do
16
16
 
17
17
  subject { described_class.new(app, env) }
18
18
 
19
- context 'with valid contents' do
19
+ context 'with 1.0.0 box' do
20
+ let(:version) { '1.0.0' }
21
+
20
22
  before do
21
23
  File.stub(exists?: true)
24
+ # REFACTOR: This is pretty bad
25
+ subject.stub_chain(:template_config_file, :exist?).and_return(true)
26
+ subject.stub_chain(:template_config_file, :to_s).and_return(box_directory.join('lxc-config').to_s)
22
27
  subject.call(env)
23
28
  end
24
29
 
25
30
  it 'sets the tarball argument for the template' do
26
- env[:lxc_template_opts].should include(
31
+ expect(env[:lxc_template_opts]).to include(
32
+ '--tarball' => box_directory.join('rootfs.tar.gz').to_s
33
+ )
34
+ end
35
+
36
+ it 'sets the template --config parameter' do
37
+ expect(env[:lxc_template_opts]).to include(
38
+ '--config' => box_directory.join('lxc-config').to_s
39
+ )
40
+ end
41
+
42
+ it 'does not set the auth key argument for the template' do
43
+ expect(env[:lxc_template_opts]).not_to include(
44
+ '--auth-key' => vagrant_key
45
+ )
46
+ end
47
+
48
+ it 'sets the template options from metadata on env hash' do
49
+ expect(env[:lxc_template_opts]).to include(metadata['template-opts'])
50
+ end
51
+
52
+ xit 'sets the template source path on env hash' do
53
+ expect(env[:lxc_template_src]).to eq(box_directory.join('lxc-template').to_s)
54
+ end
55
+
56
+ it 'does not warn about deprecation' do
57
+ expect(env[:ui]).not_to have_received(:warn)
58
+ end
59
+ end
60
+
61
+ context 'with valid pre 1.0.0 box' do
62
+ before do
63
+ File.stub(exists?: true)
64
+ # REFACTOR: This is pretty bad
65
+ subject.stub_chain(:old_template_config_file, :exist?).and_return(true)
66
+ subject.stub_chain(:old_template_config_file, :to_s).and_return(box_directory.join('lxc.conf').to_s)
67
+ subject.call(env)
68
+ end
69
+
70
+ it 'sets the tarball argument for the template' do
71
+ expect(env[:lxc_template_opts]).to include(
27
72
  '--tarball' => box_directory.join('rootfs.tar.gz').to_s
28
73
  )
29
74
  end
30
75
 
31
76
  it 'sets the auth key argument for the template' do
32
- env[:lxc_template_opts].should include(
77
+ expect(env[:lxc_template_opts]).to include(
33
78
  '--auth-key' => vagrant_key
34
79
  )
35
80
  end
36
81
 
82
+ it 'sets the lxc config file parameter' do
83
+ expect(env[:lxc_template_config]).to eq(box_directory.join('lxc.conf').to_s)
84
+ end
85
+
37
86
  it 'sets the template options from metadata on env hash' do
38
- env[:lxc_template_opts].should include(metadata['template-opts'])
87
+ expect(env[:lxc_template_opts]).to include(metadata['template-opts'])
88
+ end
89
+
90
+ xit 'sets the template source path on env hash' do
91
+ expect(env[:lxc_template_src]).to eq(box_directory.join('lxc-template').to_s)
39
92
  end
40
93
 
41
- it 'sets the template source path on env hash' do
42
- env[:lxc_template_src].should == box_directory.join('lxc-template').to_s
94
+ it 'warns about deprecation' do
95
+ expect(env[:ui]).to have_received(:warn)
43
96
  end
44
97
  end
45
98
 
46
99
  describe 'with invalid contents' do
47
100
  before { File.stub(exists?: true) }
48
101
 
49
- it 'raises an error if the version is != 2' do
102
+ it 'validates box versions' do
103
+ %w( 2 3 1.0.0 ).each do |v|
104
+ metadata['version'] = v
105
+ expect { subject.call(env) }.to_not raise_error
106
+ end
107
+
50
108
  metadata['version'] = '1'
51
- expect {
52
- subject.call(env)
53
- }.to raise_error(Vagrant::LXC::Errors::IncompatibleBox)
109
+ expect { subject.call(env) }.to raise_error
54
110
  end
55
111
 
56
112
  it 'raises an error if the rootfs tarball cant be found' do
57
- File.stub(:exists?).with(box_directory.join('rootfs.tar.gz').to_s).and_return(false)
113
+ allow(File).to receive(:exists?).with(box_directory.join('rootfs.tar.gz').to_s).and_return(false)
58
114
  expect {
59
115
  subject.call(env)
60
116
  }.to raise_error(Vagrant::LXC::Errors::RootFSTarballMissing)
61
117
  end
62
118
 
63
- it 'raises an error if the lxc-template script cant be found' do
64
- File.stub(:exists?).with(box_directory.join('lxc-template').to_s).and_return(false)
119
+ it 'does not raise an error if the lxc-template script cant be found' do
120
+ allow(File).to receive(:exists?).with(box_directory.join('lxc-template').to_s).and_return(false)
65
121
  expect {
66
122
  subject.call(env)
67
- }.to raise_error(Vagrant::LXC::Errors::TemplateFileMissing)
123
+ }.to_not raise_error
68
124
  end
69
125
  end
70
126
  end