vagrant-auto_network 1.0.0 → 1.0.1

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: 72d0e15630b3b3850d0409ca564ea4c47734696e
4
- data.tar.gz: d34b1e0afaf9fc015585eb9249ff8f9f66c2c288
3
+ metadata.gz: 54c4da4f0bee53e5b39ea4bd507e11166a7b56e0
4
+ data.tar.gz: a35c80d6ad5fe095c669ab317f997717e382077b
5
5
  SHA512:
6
- metadata.gz: ec5a9d7f8ba9dfb6e2fbb7516295e0fee80d603e7c18506d17d26241c4a5ac41876d446a71b92a108344226b93a4527eb6f1d89a0cdc1e7ea6b7aaf542d6cc39
7
- data.tar.gz: e1d119a3a2e652e4c11821a88b24fca41958e3b733bf4126bd6360912339abe05eeef19c2c7ae55a0c589d4d61ad0e94d466aa2464232b801a1a59259b393339
6
+ metadata.gz: 65765f2eec79a431f740eeb2ad805f513eaa2eee7d35da0c98a0881c0a369e8fd5654715cdebf838d74c2d0e25b170a151ff46d77655ba1cb1c2253ad454ae0b
7
+ data.tar.gz: 9227ad6e275f71921a88019851773e86f8bdffec965555e3d525df221293c9cb507efe01de936a0e4a485015cc2cac8579623badad469f0d6e90c75a28026875
data/.travis.yml CHANGED
@@ -13,5 +13,5 @@ env:
13
13
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
14
14
  matrix:
15
15
  - TEST_VAGRANT_VERSION=v1.5.4 BUNDLER_VERSION=_1.5.3_
16
- - TEST_VAGRANT_VERSION=v1.6.2
16
+ - TEST_VAGRANT_VERSION=v1.6.3
17
17
  - TEST_VAGRANT_VERSION=HEAD
data/CHANGELOG CHANGED
@@ -1,6 +1,20 @@
1
1
  vagrant-auto_network
2
2
  ====================
3
3
 
4
+ 1.0.1
5
+ -----
6
+
7
+ 2014-06-06
8
+
9
+ This is a backwards compatible bugfix release.
10
+
11
+ * (GH-23) Fix crashes occurring when a VM has a pre-allocated AutoNetwork IP
12
+ address.
13
+
14
+ * Fix errors raised when a machine exists in the `.vagrant` directory
15
+ but no longer has a config in the `Vagrantfile`.
16
+
17
+
4
18
  1.0.0
5
19
  -----
6
20
 
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
  ruby '2.0.0'
3
3
 
4
- ENV['TEST_VAGRANT_VERSION'] ||= 'v1.6.2'
4
+ ENV['TEST_VAGRANT_VERSION'] ||= 'v1.6.3'
5
5
 
6
6
  # Using the :plugins group causes Vagrant to automagially load auto_network
7
7
  # during acceptance tests.
@@ -33,7 +33,16 @@ class AutoNetwork::Action::FilterNetworks < AutoNetwork::Action::Base
33
33
  end
34
34
 
35
35
  def machines_for_env
36
- @global_env.active_machines.map { |vm_id| @global_env.machine(*vm_id) }
36
+ @global_env.active_machines.map do |vm_id|
37
+ begin
38
+ @global_env.machine(*vm_id)
39
+ rescue Vagrant::Errors::MachineNotFound
40
+ # This usually happens when the definition for a machine has been
41
+ # removed from the Vagrantfile, but the machine id still exists under
42
+ # the .vagrant directory.
43
+ nil
44
+ end
45
+ end.compact
37
46
  end
38
47
 
39
48
  def assign_address(machine)
@@ -1,5 +1,8 @@
1
1
  require 'auto_network/action/base'
2
2
 
3
+
4
+ # @todo This action should be renamed. It is more like a "pre-validation
5
+ # filter" than something that only fires during machine creation.
3
6
  class AutoNetwork::Action::Request < AutoNetwork::Action::Base
4
7
  # Request an auto_network IP address on VM creation
5
8
  #
@@ -12,20 +15,27 @@ class AutoNetwork::Action::Request < AutoNetwork::Action::Base
12
15
  def call(env)
13
16
  @env = env
14
17
 
15
- @machine = @env[:machine]
18
+ machine = @env[:machine]
19
+
20
+ # Move along if this machine has no AutoNetwork interfaces.
21
+ @app.call(@env) if machine_auto_networks(machine).empty?
22
+
23
+ addr = AutoNetwork.active_pool_manager.address_for(machine)
24
+ if addr.nil?
25
+ addr = AutoNetwork.active_pool_manager.request(machine)
26
+ @env[:ui].info "AutoNetwork assigning #{addr.inspect} to '#{machine.name}'",
27
+ :prefix => true
28
+ end
16
29
 
17
- request_address unless machine_has_address?(@machine)
30
+ filter_networks(machine, addr)
18
31
 
19
32
  @app.call(@env)
20
33
  end
21
34
 
22
35
  private
23
36
 
24
- def request_address
25
- machine_auto_networks(@machine).each do |net|
26
- addr = AutoNetwork.active_pool_manager.request(@machine)
27
- @env[:ui].info "AutoNetwork assigning #{addr.inspect} to '#{@machine.name}'",
28
- :prefix => true
37
+ def filter_networks(machine, addr)
38
+ machine_auto_networks(machine).each do |net|
29
39
  filter_private_network(net, addr)
30
40
  end
31
41
  end
@@ -33,7 +33,7 @@ module AutoNetwork
33
33
  unless manager.is_a?(AutoNetwork::PoolManager)
34
34
  raise InvalidSettingErrror,
35
35
  :setting_name => 'pool_manager',
36
- :value => manager
36
+ :value => manager.inspect
37
37
  end
38
38
 
39
39
  manager
@@ -64,7 +64,7 @@ module AutoNetwork
64
64
  rescue ArgumentError
65
65
  raise InvalidSettingErrror,
66
66
  :setting_name => 'default_pool',
67
- :value => pool
67
+ :value => pool.inspect
68
68
  end
69
69
 
70
70
  @default_pool = pool
@@ -1,3 +1,3 @@
1
1
  module AutoNetwork
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -2,13 +2,8 @@ require 'spec_helper'
2
2
  require_relative 'shared/auto_network_0x_context'
3
3
 
4
4
  describe 'Working with AutoNetwork 0.x data' do
5
- include_context 'vagrant-unit'
6
5
  include_context 'auto_network 0.x'
7
6
 
8
- def current_ip(machine)
9
- settings.pool_manager.with_pool_for(machine) {|p| p.address_for(machine)}
10
- end
11
-
12
7
  before(:each) do
13
8
  env = test_env.create_vagrant_env
14
9
  @test_machine = env.machine(:test1, :dummy)
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
  require_relative 'shared/auto_network_1x_context'
3
3
 
4
4
  describe AutoNetwork::Plugin do
5
- include_context 'vagrant-unit'
6
5
  include_context 'auto_network 1.x'
7
6
 
8
7
  context 'when a vagrant environment is initialized' do
@@ -24,10 +23,6 @@ describe AutoNetwork::Plugin do
24
23
  end
25
24
 
26
25
  context 'when destroying a machine' do
27
- def current_ip(machine)
28
- settings.pool_manager.with_pool_for(machine) {|p| p.address_for(machine)}
29
- end
30
-
31
26
  it 'releases the allocated IP address' do
32
27
  env = test_env.create_vagrant_env
33
28
  test_machine = env.machine(:test1, :dummy)
@@ -40,12 +35,38 @@ describe AutoNetwork::Plugin do
40
35
  end
41
36
  end
42
37
 
43
- # Testing IP allocation is pretty tricky since it hooks into
44
- # provider-specific behavior that our dummy provider does not have.
45
- # Currently, this behavior is exercised by the acceptance tests.
46
- context 'when creating a machine' do
47
- it 'allocates an IP address' do
48
- pending 'This is currently delegated to the acceptance suite.'
38
+ describe 'when running the request action' do
39
+ subject {
40
+ Vagrant::Action::Builder.new.tap {|b| b.use AutoNetwork::Action::Request }
41
+ }
42
+
43
+ context 'on a machine with no IP allocated' do
44
+ it 'allocates an IP address' do
45
+ env = test_env.create_vagrant_env
46
+ test_machine = env.machine(:test2, :dummy)
47
+
48
+ expect(current_ip(test_machine)).to be_nil
49
+
50
+ # This emulates Machine#action_raw which didn't show up until
51
+ # Vagrant 1.6.0
52
+ action_env = { :machine => test_machine }
53
+ env.action_runner.run(subject, action_env)
54
+
55
+ expect(current_ip(test_machine)).to eq('10.20.1.3')
56
+ end
57
+ end
58
+
59
+ context 'on a machine with an allocated IP address' do
60
+ it 'assigns the address to unfiltered network interfaces' do
61
+ env = test_env.create_vagrant_env
62
+ test_machine = env.machine(:test3, :dummy)
63
+
64
+ action_env = { :machine => test_machine }
65
+ env.action_runner.run(subject, action_env)
66
+
67
+ _, network_opts = test_machine.config.vm.networks.find {|n| n.first == :private_network}
68
+ expect(network_opts).to include(:ip => '10.20.1.4')
69
+ end
49
70
  end
50
71
  end
51
72
  end
@@ -1,19 +1,9 @@
1
- require_relative 'isolated_settings_context'
1
+ require_relative 'auto_network_integration_context'
2
2
 
3
3
  # Creates an environment for each test containing data that would have been
4
4
  # created by an installation of AutoNetwork 0.x.
5
5
  shared_context 'auto_network 0.x' do
6
- include_context 'vagrant-unit'
7
- include_context 'auto_network-settings'
8
-
9
- # Configure each testing environment to contain an AutoNetwork version 1 pool
10
- # file and a single existing machine that has been allocated in the pool
11
- let(:test_env) { isolated_environment }
12
- let(:pool_file) { test_env.homedir.join('auto_network', 'pool.yaml') }
13
- before(:each) do
14
- pool_file.dirname.mkpath
15
- pool_file.open('w+') do |f|
16
- f.write <<-EOF
6
+ let(:pool_file_content) { <<-EOF }
17
7
  --- !ruby/object:AutoNetwork::Pool
18
8
  network_range: 10.20.1.0/29
19
9
  pool:
@@ -22,27 +12,8 @@ pool:
22
12
  10.20.1.4:
23
13
  10.20.1.5:
24
14
  10.20.1.6:
25
- EOF
26
- end
27
-
28
- test_env.vagrantfile <<-EOF
29
- Vagrant.configure("2") do |config|
30
- config.vm.define 'test1' do |node|
31
- node.vm.network :private_network, :auto_network => true
32
- end
33
- end
34
15
  EOF
35
16
 
36
- # Touch an ID file so that Vagrant thinks test1 exists. The 'dummy'
37
- # component of the path actually tells Vagrant which provider is managing
38
- # the machine. vagrant-spec defines a dummy provider for us.
39
- machine_dir = test_env.workdir.join('.vagrant/machines/test1/dummy')
40
- machine_dir.mkpath
41
- machine_dir.join('id').open('w+') { |f| f.write('some-uuid-string') }
42
- end
17
+ include_context 'auto_network integration'
43
18
 
44
- # Dispose of the temporary directory used to run the test.
45
- after(:each) do
46
- test_env.close
47
- end
48
19
  end
@@ -1,19 +1,9 @@
1
- require_relative 'isolated_settings_context'
1
+ require_relative 'auto_network_integration_context'
2
2
 
3
3
  # Creates an environment for each test containing a small pool of AutoNetwork
4
- # addresses and a single "created" VM.
4
+ # addresses.
5
5
  shared_context 'auto_network 1.x' do
6
- include_context 'vagrant-unit'
7
- include_context 'auto_network-settings'
8
-
9
- # Configure each testing environment to contain an AutoNetwork version 2 pool
10
- # file and a single existing machine that has been allocated in the pool
11
- let(:test_env) { isolated_environment }
12
- let(:pool_file) { test_env.homedir.join('auto_network', 'pool.yaml') }
13
- before(:each) do
14
- pool_file.dirname.mkpath
15
- pool_file.open('w+') do |f|
16
- f.write <<-EOF
6
+ let(:pool_file_content) { <<-EOF }
17
7
  ---
18
8
  poolfile_version: 2
19
9
  pools:
@@ -25,29 +15,12 @@ pools:
25
15
  name: test1
26
16
  10.20.1.3:
27
17
  10.20.1.4:
18
+ path: #{test_env.workdir}
19
+ name: test3
28
20
  10.20.1.5:
29
21
  10.20.1.6:
30
- EOF
31
- end
32
-
33
- test_env.vagrantfile <<-EOF
34
- Vagrant.configure("2") do |config|
35
- config.vm.define 'test1' do |node|
36
- node.vm.network :private_network, :auto_network => true
37
- end
38
- end
39
22
  EOF
40
23
 
41
- # Touch an ID file so that Vagrant thinks test1 exists. The 'dummy'
42
- # component of the path actually tells Vagrant which provider is managing
43
- # the machine. vagrant-spec defines a dummy provider for us.
44
- machine_dir = test_env.workdir.join('.vagrant/machines/test1/dummy')
45
- machine_dir.mkpath
46
- machine_dir.join('id').open('w+') { |f| f.write('') }
47
- end
24
+ include_context 'auto_network integration'
48
25
 
49
- # Dispose of the temporary directory used to run the test.
50
- after(:each) do
51
- test_env.close
52
- end
53
26
  end
@@ -0,0 +1,84 @@
1
+ # This context leverages the vagrant-spec library to set up isolated Vagrant
2
+ # Environments in which integration tests can be run. Some additions are made
3
+ # to the stop unit testing environment:
4
+ #
5
+ # - The global AutoNetwork::Settings instance is stubbed such that a new
6
+ # settings instance is created for each test.
7
+ #
8
+ # - An AutoNetwork pool file is added to each environment.
9
+ #
10
+ # - A Vagrantfile and collection of machines are added that use AutoNetwork.
11
+ #
12
+ # This context can not be used directly. Instead, include one of the
13
+ # version-specific contexts:
14
+ #
15
+ # - auto_network 1.x
16
+ # - auto_network 0.x
17
+ shared_context 'auto_network integration' do
18
+ include_context 'vagrant-unit'
19
+
20
+ # Create a Dummy settings module for each test.
21
+ let(:settings) {
22
+ Module.new do
23
+ extend AutoNetwork::Settings
24
+ end
25
+ }
26
+
27
+ # Stub the settings attached to the AutoNetwork module so we don't change
28
+ # global state during tests.
29
+ before(:each) do
30
+ allow(AutoNetwork).to receive(:pool_manager=) do |pool_manager|
31
+ settings.pool_manager = pool_manager
32
+ end
33
+ allow(AutoNetwork).to receive(:pool_manager).and_return { settings.pool_manager }
34
+ end
35
+
36
+ # Configure each testing environment to include an AutoNetwork pool file and
37
+ # some machine definitions.
38
+ let(:test_env) { isolated_environment }
39
+ let(:pool_file) { test_env.homedir.join('auto_network', 'pool.yaml') }
40
+ before(:each) do
41
+ pool_file.dirname.mkpath
42
+ # The actual contents of the poolfile are defined in the version-specific
43
+ # contexts.
44
+ pool_file.open('w+') {|f| f.write pool_file_content}
45
+
46
+ # Three machines are defined:
47
+ #
48
+ # - test1 has an IP allocated in the pool and an ID allocated in the
49
+ # `.vagrant` directory.
50
+ #
51
+ # - test2 has no IP or ID allocated.
52
+ #
53
+ # - test3 has an allocated IP, but no ID.
54
+ test_env.vagrantfile <<-EOF
55
+ Vagrant.configure("2") do |config|
56
+ %w[test1 test2 test3].each do |machine|
57
+ config.vm.define machine do |node|
58
+ node.vm.network :private_network, :auto_network => true
59
+ end
60
+ end
61
+ end
62
+ EOF
63
+
64
+ # Touch an ID file so that Vagrant thinks test1 exists. The 'dummy'
65
+ # component of the path actually tells Vagrant which provider is managing
66
+ # the machine. vagrant-spec defines a dummy provider for us.
67
+ machine_dir = test_env.workdir.join('.vagrant/machines/test1/dummy')
68
+ machine_dir.mkpath
69
+ machine_dir.join('id').open('w+') { |f| f.write('some-uuid-string') }
70
+ end
71
+
72
+ # Dispose of the temporary Vagrant Environment used to run the test.
73
+ after(:each) do
74
+ test_env.close
75
+ end
76
+
77
+ # A helper for grabbing the IP allocated to a machine.
78
+ #
79
+ # TODO: This should probably be in a general utility module under the
80
+ # AutoNetwork namespace.
81
+ def current_ip(machine)
82
+ settings.pool_manager.with_pool_for(machine) {|p| p.address_for(machine)}
83
+ end
84
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-auto_network
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Thebo
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-21 00:00:00.000000000 Z
12
+ date: 2014-06-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -74,7 +74,7 @@ files:
74
74
  - spec/integration/plugin_spec.rb
75
75
  - spec/integration/shared/auto_network_0x_context.rb
76
76
  - spec/integration/shared/auto_network_1x_context.rb
77
- - spec/integration/shared/isolated_settings_context.rb
77
+ - spec/integration/shared/auto_network_integration_context.rb
78
78
  - spec/spec_helper.rb
79
79
  - spec/unit/pool_spec.rb
80
80
  - spec/unit/settings_spec.rb
@@ -1,17 +0,0 @@
1
- shared_context 'auto_network-settings' do
2
- # Create a Dummy settings module for each test.
3
- let(:settings) {
4
- Module.new do
5
- extend AutoNetwork::Settings
6
- end
7
- }
8
-
9
- # Stub the settings attached to the AutoNetwork module so we don't change
10
- # global state during tests.
11
- before(:each) do
12
- allow(AutoNetwork).to receive(:pool_manager=) do |pool_manager|
13
- settings.pool_manager = pool_manager
14
- end
15
- allow(AutoNetwork).to receive(:pool_manager).and_return { settings.pool_manager }
16
- end
17
- end