vagrant-auto_network 1.0.0.beta2 → 1.0.0.rc1
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +17 -0
- data/.yardopts +1 -0
- data/CHANGELOG +17 -0
- data/Gemfile +10 -4
- data/README.markdown +2 -0
- data/acceptance/auto_network/auto_network_spec.rb +2 -2
- data/lib/auto_network/action/base.rb +65 -0
- data/lib/auto_network/action/filter_networks.rb +3 -14
- data/lib/auto_network/action/load_pool.rb +5 -7
- data/lib/auto_network/action/release.rb +6 -12
- data/lib/auto_network/action/request.rb +5 -11
- data/lib/auto_network/pool.rb +9 -2
- data/lib/auto_network/settings.rb +22 -2
- data/lib/auto_network/version.rb +1 -1
- data/spec/integration/legacy_spec.rb +41 -0
- data/spec/integration/plugin_spec.rb +38 -15
- data/spec/integration/shared/auto_network_0x_context.rb +48 -0
- data/spec/integration/shared/auto_network_1x_context.rb +53 -0
- data/spec/integration/shared/isolated_settings_context.rb +17 -0
- data/spec/unit/settings_spec.rb +8 -0
- data/vagrant-auto_network.gemspec +3 -2
- data/{vagrant-spec.config.rb → vagrant-spec.config.example.rb} +9 -0
- metadata +27 -5
- data/lib/auto_network/action_helpers.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 497131d24f1670f54dd51b9264f9d896c6d5c299
|
4
|
+
data.tar.gz: acfdf515d2a0c57f6607b1d43029d290e99ce33c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebb3a65b50265b98b07310e1a5ceab508acb57f2146bea4157d57f5562bdc4453176d89954c8b0dea0a20fb6817e52c8afbf2e6bcd1e329df0ec1931fe6a6fa7
|
7
|
+
data.tar.gz: b0df283881996781bcf2ad23fe7dfcca4259a3c10f7ac3e7022f5e304c8d4f521af6d9f9062e864b0b2d2a1d5c91421bfdb79072c28151780d1a3ada2565032e
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
language: ruby
|
3
|
+
before_install:
|
4
|
+
- gem install bundler --version 1.5.3
|
5
|
+
install: bundle $BUNDLER_VERSION install
|
6
|
+
script: bundle $BUNDLER_VERSION exec rspec --color --format documentation
|
7
|
+
notifications:
|
8
|
+
email: false
|
9
|
+
rvm:
|
10
|
+
- 2.0.0
|
11
|
+
env:
|
12
|
+
global:
|
13
|
+
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
14
|
+
matrix:
|
15
|
+
- TEST_VAGRANT_VERSION=v1.5.4 BUNDLER_VERSION=_1.5.3_
|
16
|
+
- TEST_VAGRANT_VERSION=v1.6.2
|
17
|
+
- TEST_VAGRANT_VERSION=HEAD
|
data/.yardopts
CHANGED
data/CHANGELOG
CHANGED
@@ -26,8 +26,24 @@ Specifically, the following issues have been addressed:
|
|
26
26
|
storage mechanism that offers more resiliance to race conditions and data
|
27
27
|
loss from aborted actions.
|
28
28
|
|
29
|
+
The following features have been removed:
|
30
|
+
|
29
31
|
* (GH-14) Remove depreciated AutoNetwork mixin module.
|
30
32
|
|
33
|
+
|
34
|
+
1.0.0.rc1
|
35
|
+
---------
|
36
|
+
|
37
|
+
2014-05-12
|
38
|
+
|
39
|
+
Changes since 1.0.0.beta2:
|
40
|
+
|
41
|
+
* Addition of integration tests that check for interoperability between
|
42
|
+
AutoNetwork and Vagrant. Test suite automatically run by Travis CI.
|
43
|
+
|
44
|
+
* Internal refactoring and cleanup.
|
45
|
+
|
46
|
+
|
31
47
|
1.0.0.beta2
|
32
48
|
-----------
|
33
49
|
|
@@ -39,6 +55,7 @@ Bug Fixes:
|
|
39
55
|
|
40
56
|
* Ensure directories exist when creating `pool.yaml` for the first time.
|
41
57
|
|
58
|
+
|
42
59
|
1.0.0.beta1
|
43
60
|
-----------
|
44
61
|
|
data/Gemfile
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
ruby '2.0.0'
|
3
3
|
|
4
|
+
ENV['TEST_VAGRANT_VERSION'] ||= 'v1.6.2'
|
5
|
+
|
4
6
|
# Using the :plugins group causes Vagrant to automagially load auto_network
|
5
7
|
# during acceptance tests.
|
6
8
|
group :plugins do
|
7
9
|
gemspec
|
8
10
|
end
|
9
11
|
|
10
|
-
group :
|
11
|
-
|
12
|
-
|
12
|
+
group :test do
|
13
|
+
if ENV['TEST_VAGRANT_VERSION'] == 'HEAD'
|
14
|
+
gem 'vagrant', :github => 'mitchellh/vagrant', :branch => 'master'
|
15
|
+
else
|
16
|
+
gem 'vagrant', :github => 'mitchellh/vagrant', :tag => ENV['TEST_VAGRANT_VERSION']
|
17
|
+
end
|
18
|
+
|
19
|
+
# Pinned on 05/05/2014. Compatible with Vagrant 1.5.x and 1.6.x.
|
13
20
|
gem 'vagrant-spec', :github => 'mitchellh/vagrant-spec', :ref => 'aae28ee'
|
14
|
-
gem 'rake'
|
15
21
|
end
|
16
22
|
|
17
23
|
if File.exists? "#{__FILE__}.local"
|
data/README.markdown
CHANGED
@@ -22,12 +22,12 @@ shared_examples 'provider/auto_network' do |provider, options|
|
|
22
22
|
# invocation is dependant on the state created by the prior command.
|
23
23
|
it 'manages IP address allocation for the lifecycle of a VM' do
|
24
24
|
result = assert_execute('vagrant', 'up', "--provider=#{provider}")
|
25
|
-
expect(result.stdout).to match(/
|
25
|
+
expect(result.stdout).to match(/AutoNetwork assigning "\S+" to 'default'/)
|
26
26
|
|
27
27
|
assert_execute('vagrant', 'status')
|
28
28
|
assert_execute('vagrant', 'reload', 'default')
|
29
29
|
|
30
30
|
result = assert_execute('vagrant', 'destroy', '--force')
|
31
|
-
expect(result.stdout).to match(/
|
31
|
+
expect(result.stdout).to match(/AutoNetwork releasing "\S+" from 'default'/)
|
32
32
|
end
|
33
33
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module AutoNetwork
|
2
|
+
# This is an abstract base class for AutoNetwork actions that provides
|
3
|
+
# helper methods for interfacing with a {AutoNetwork::PoolManager} object
|
4
|
+
# and the {AutoNetwork::Pool} instances it manages.
|
5
|
+
#
|
6
|
+
# @abstract Subclass and override {#call} to implement a new AutoNetwork
|
7
|
+
# action.
|
8
|
+
class Action::Base
|
9
|
+
# Create a new action instance that is suitable for execution as part of
|
10
|
+
# Vagrant middleware.
|
11
|
+
#
|
12
|
+
# @param app [#call] an instance of an object that responds to `call`.
|
13
|
+
# Typically an object representing a chain of Vagrant actions.
|
14
|
+
# Executing `call` passes execution to the next action in the chain.
|
15
|
+
# @param env [Hash] a hash representing the Vagrant state this action
|
16
|
+
# executes under. Unfortunately, there are two or three variations of
|
17
|
+
# what data can be passed, so Action logic that inspects this parameter
|
18
|
+
# is a bit fragile.
|
19
|
+
def initialize(app, env)
|
20
|
+
@app, @env = app, env
|
21
|
+
end
|
22
|
+
|
23
|
+
def call(env)
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
# Determine if the given machine exists and has an auto_network address
|
30
|
+
#
|
31
|
+
# @param machine [Vagrant::Machine]
|
32
|
+
#
|
33
|
+
# @return [true, false]
|
34
|
+
def machine_has_address?(machine)
|
35
|
+
!!(machine and AutoNetwork.active_pool_manager.address_for(machine))
|
36
|
+
end
|
37
|
+
|
38
|
+
# Fetch all private networks that are tagged for auto networking
|
39
|
+
#
|
40
|
+
# @param machine [Vagrant::Machine]
|
41
|
+
#
|
42
|
+
# @return [Array(Symbol, Hash)] All auto_networks
|
43
|
+
def machine_auto_networks(machine)
|
44
|
+
machine.config.vm.networks.select do |(net_type, options)|
|
45
|
+
net_type == :private_network and options[:auto_network]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Convert an auto network to a private network with a static IP address.
|
50
|
+
#
|
51
|
+
# This does an in-place modification of the private_network options hash
|
52
|
+
# to strip out the auto_network configuration and make this behave like a
|
53
|
+
# normal private network interface with a static IP address.
|
54
|
+
#
|
55
|
+
# @param iface [Array(Symbol, Hash)]
|
56
|
+
# @param addr [String] The static IP address to assign to the private network
|
57
|
+
#
|
58
|
+
# @return [void]
|
59
|
+
def filter_private_network(iface, addr)
|
60
|
+
opts = iface[1]
|
61
|
+
opts.delete(:auto_network)
|
62
|
+
opts[:ip] = addr
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,16 +1,6 @@
|
|
1
|
-
require 'auto_network/
|
2
|
-
require 'log4r'
|
3
|
-
|
4
|
-
class AutoNetwork::Action::FilterNetworks
|
5
|
-
|
6
|
-
include AutoNetwork::ActionHelpers
|
7
|
-
|
8
|
-
def initialize(app, env)
|
9
|
-
@app, @env = app, env
|
10
|
-
|
11
|
-
@logger = Log4r::Logger.new('vagrant::auto_network::filter_networks')
|
12
|
-
end
|
1
|
+
require 'auto_network/action/base'
|
13
2
|
|
3
|
+
class AutoNetwork::Action::FilterNetworks < AutoNetwork::Action::Base
|
14
4
|
# Convert auto_network interfaces to static private_network interfaces.
|
15
5
|
#
|
16
6
|
# @param env [Hash]
|
@@ -48,8 +38,7 @@ class AutoNetwork::Action::FilterNetworks
|
|
48
38
|
|
49
39
|
def assign_address(machine)
|
50
40
|
machine_auto_networks(machine).each do |net|
|
51
|
-
addr = AutoNetwork.
|
52
|
-
@logger.info "Reassigning #{addr.inspect} to existing machine #{machine.name}"
|
41
|
+
addr = AutoNetwork.active_pool_manager.address_for(machine)
|
53
42
|
filter_private_network(net, addr)
|
54
43
|
end
|
55
44
|
end
|
@@ -1,11 +1,6 @@
|
|
1
|
-
require 'auto_network'
|
2
|
-
|
3
|
-
class AutoNetwork::Action::LoadPool
|
4
|
-
|
5
|
-
def initialize(app, env)
|
6
|
-
@app, @env = app, env
|
7
|
-
end
|
1
|
+
require 'auto_network/action/base'
|
8
2
|
|
3
|
+
class AutoNetwork::Action::LoadPool < AutoNetwork::Action::Base
|
9
4
|
# Handle the loading and unloading of the auto_network pool
|
10
5
|
#
|
11
6
|
# @param env [Hash]
|
@@ -39,6 +34,9 @@ class AutoNetwork::Action::LoadPool
|
|
39
34
|
end
|
40
35
|
|
41
36
|
def deserialize!
|
37
|
+
unless @statefile.exist?
|
38
|
+
@env[:env].ui.info "Initializing AutoNetwork pool storage."
|
39
|
+
end
|
42
40
|
AutoNetwork.pool_manager = AutoNetwork::PoolManager.new(@statefile)
|
43
41
|
end
|
44
42
|
end
|
@@ -1,13 +1,6 @@
|
|
1
|
-
require 'auto_network/
|
2
|
-
|
3
|
-
class AutoNetwork::Action::Release
|
4
|
-
|
5
|
-
include AutoNetwork::ActionHelpers
|
6
|
-
|
7
|
-
def initialize(app, env)
|
8
|
-
@app, @env = app, env
|
9
|
-
end
|
1
|
+
require 'auto_network/action/base'
|
10
2
|
|
3
|
+
class AutoNetwork::Action::Release < AutoNetwork::Action::Base
|
11
4
|
# Release auto_network IP address on VM destruction
|
12
5
|
#
|
13
6
|
# @param env [Hash]
|
@@ -29,8 +22,9 @@ class AutoNetwork::Action::Release
|
|
29
22
|
private
|
30
23
|
|
31
24
|
def release_network_addresses
|
32
|
-
addr = AutoNetwork.
|
33
|
-
@env[:ui].info "
|
34
|
-
|
25
|
+
addr = AutoNetwork.active_pool_manager.address_for(@machine)
|
26
|
+
@env[:ui].info "AutoNetwork releasing #{addr.inspect} from '#{@machine.name}'",
|
27
|
+
:prefix => true
|
28
|
+
AutoNetwork.active_pool_manager.release(@machine)
|
35
29
|
end
|
36
30
|
end
|
@@ -1,13 +1,6 @@
|
|
1
|
-
require 'auto_network/
|
2
|
-
|
3
|
-
class AutoNetwork::Action::Request
|
4
|
-
|
5
|
-
include AutoNetwork::ActionHelpers
|
6
|
-
|
7
|
-
def initialize(app, env)
|
8
|
-
@app, @env = app, env
|
9
|
-
end
|
1
|
+
require 'auto_network/action/base'
|
10
2
|
|
3
|
+
class AutoNetwork::Action::Request < AutoNetwork::Action::Base
|
11
4
|
# Request an auto_network IP address on VM creation
|
12
5
|
#
|
13
6
|
# @param env [Hash]
|
@@ -30,8 +23,9 @@ class AutoNetwork::Action::Request
|
|
30
23
|
|
31
24
|
def request_address
|
32
25
|
machine_auto_networks(@machine).each do |net|
|
33
|
-
addr = AutoNetwork.
|
34
|
-
@env[:ui].info "
|
26
|
+
addr = AutoNetwork.active_pool_manager.request(@machine)
|
27
|
+
@env[:ui].info "AutoNetwork assigning #{addr.inspect} to '#{@machine.name}'",
|
28
|
+
:prefix => true
|
35
29
|
filter_private_network(net, addr)
|
36
30
|
end
|
37
31
|
end
|
data/lib/auto_network/pool.rb
CHANGED
@@ -13,8 +13,7 @@ module AutoNetwork
|
|
13
13
|
error_key(:pool_exhausted, 'vagrant_auto_network')
|
14
14
|
end
|
15
15
|
|
16
|
-
#
|
17
|
-
# @return [String] The address range manged by this Pool instance.
|
16
|
+
# @return [String] The address range manged by this Pool instance.
|
18
17
|
attr_reader :network_range
|
19
18
|
|
20
19
|
# Create a new Pool object that manages a range of IP addresses.
|
@@ -76,6 +75,14 @@ module AutoNetwork
|
|
76
75
|
addr
|
77
76
|
end
|
78
77
|
|
78
|
+
# Compute the value that will be used to identify a machine. This value
|
79
|
+
# will be associated with IP addresses allocated to the machine.
|
80
|
+
#
|
81
|
+
# @param machine [Vagrant::Machine]
|
82
|
+
#
|
83
|
+
# @return [Hash{String=>String}] A hash containing the path to the
|
84
|
+
# directory containing the Vagrantfile that defined the machine and the
|
85
|
+
# machine name.
|
79
86
|
def id_for(machine)
|
80
87
|
{
|
81
88
|
'path' => machine.env.root_path.to_s,
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'ipaddr'
|
2
|
+
require 'auto_network/pool_manager'
|
2
3
|
require 'vagrant/errors'
|
3
4
|
|
4
5
|
module AutoNetwork
|
@@ -13,10 +14,29 @@ module AutoNetwork
|
|
13
14
|
error_key(:invalid_setting, 'vagrant_auto_network')
|
14
15
|
end
|
15
16
|
|
16
|
-
#
|
17
|
-
#
|
17
|
+
# Access the global {AutoNetwork::PoolManager} instance.
|
18
|
+
# @return [AutoNetwork::PoolManager, nil]
|
18
19
|
attr_accessor :pool_manager
|
19
20
|
|
21
|
+
# Assertively retrieve the global {AutoNetwork::PoolManager} instance.
|
22
|
+
#
|
23
|
+
# Raises an error if {#pool_manager} has been set to `nil` or an invalid
|
24
|
+
# value.
|
25
|
+
#
|
26
|
+
# @return [AutoNetwork::PoolManager]
|
27
|
+
# @raise [InvalidSettingErrror] If {#pool_manager} is not set to a usable
|
28
|
+
# value.
|
29
|
+
def active_pool_manager
|
30
|
+
manager = pool_manager
|
31
|
+
unless manager.is_a?(AutoNetwork::PoolManager)
|
32
|
+
raise InvalidSettingErrror,
|
33
|
+
:setting_name => 'pool_manager',
|
34
|
+
:value => manager
|
35
|
+
end
|
36
|
+
|
37
|
+
manager
|
38
|
+
end
|
39
|
+
|
20
40
|
# Unless overriden, this will be the IP range assigned to the very first
|
21
41
|
# {AutoNetwork::Pool} created by {AutoNetwork::PoolManager} instances.
|
22
42
|
DEFAULT_POOL = '10.20.1.0/24'
|
data/lib/auto_network/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative 'shared/auto_network_0x_context'
|
3
|
+
|
4
|
+
describe 'Working with AutoNetwork 0.x data' do
|
5
|
+
include_context 'vagrant-unit'
|
6
|
+
include_context 'auto_network 0.x'
|
7
|
+
|
8
|
+
def current_ip(machine)
|
9
|
+
settings.pool_manager.with_pool_for(machine) {|p| p.address_for(machine)}
|
10
|
+
end
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
env = test_env.create_vagrant_env
|
14
|
+
@test_machine = env.machine(:test1, :dummy)
|
15
|
+
|
16
|
+
# Legacy pool data is assigned to the VirtualBox provider. Fake our
|
17
|
+
# provider name for this purpose.
|
18
|
+
allow(@test_machine).to receive(:provider_name).and_return(:virtualbox)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'upgrades the poolfile format when saving data' do
|
22
|
+
# Running a read/write transaction will cause the poolfile to be
|
23
|
+
# regenerated.
|
24
|
+
settings.pool_manager.with_pool_for(@test_machine, read_only=false){|p| }
|
25
|
+
pool_data = YAML.load_file(pool_file)
|
26
|
+
|
27
|
+
# Expect that the poolfile has been upgraded to the latest version.
|
28
|
+
expect(pool_data).to include({
|
29
|
+
'poolfile_version' => AutoNetwork::PoolStorage::POOLFILE_VERSION
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
# The 0.x context defines one machine with an IP allocated by UUID.
|
34
|
+
it 'releases IP addresses allocated by UUID' do
|
35
|
+
expect(current_ip(@test_machine)).to eq('10.20.1.2')
|
36
|
+
|
37
|
+
@test_machine.action(:destroy)
|
38
|
+
|
39
|
+
expect(current_ip(@test_machine)).to be_nil
|
40
|
+
end
|
41
|
+
end
|
@@ -1,28 +1,51 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require_relative 'shared/auto_network_1x_context'
|
2
3
|
|
3
4
|
describe AutoNetwork::Plugin do
|
4
5
|
include_context 'vagrant-unit'
|
6
|
+
include_context 'auto_network 1.x'
|
5
7
|
|
6
8
|
context 'when a vagrant environment is initialized' do
|
7
|
-
let(:settings) {
|
8
|
-
Module.new do
|
9
|
-
extend AutoNetwork::Settings
|
10
|
-
end
|
11
|
-
}
|
12
|
-
let(:manager_double) { double().as_null_object }
|
13
|
-
|
14
9
|
it 'sets the global pool_manager' do
|
15
|
-
allow(AutoNetwork).to receive(:pool_manager=) do |pool_manager|
|
16
|
-
settings.pool_manager = pool_manager
|
17
|
-
end
|
18
|
-
allow(manager_double).to receive(:new).and_return('a_pool_manager')
|
19
|
-
stub_const('AutoNetwork::PoolManager', manager_double)
|
20
|
-
|
21
10
|
# Create an environment \o/
|
22
|
-
|
11
|
+
test_env.create_vagrant_env
|
12
|
+
|
13
|
+
expect(settings.pool_manager).to be_a(AutoNetwork::PoolManager)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'assigns autonetworked IP addresses to existing machines' do
|
17
|
+
env = test_env.create_vagrant_env
|
18
|
+
|
19
|
+
test_machine = env.machine(:test1, :dummy)
|
20
|
+
_, network_opts = test_machine.config.vm.networks.find {|n| n.first == :private_network}
|
21
|
+
|
22
|
+
expect(network_opts).to include(:ip => '10.20.1.2')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
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
|
+
it 'releases the allocated IP address' do
|
32
|
+
env = test_env.create_vagrant_env
|
33
|
+
test_machine = env.machine(:test1, :dummy)
|
23
34
|
|
24
|
-
expect(
|
35
|
+
expect(current_ip(test_machine)).to eq('10.20.1.2')
|
36
|
+
|
37
|
+
test_machine.action(:destroy)
|
38
|
+
|
39
|
+
expect(current_ip(test_machine)).to be_nil
|
25
40
|
end
|
41
|
+
end
|
26
42
|
|
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.'
|
49
|
+
end
|
27
50
|
end
|
28
51
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'isolated_settings_context'
|
2
|
+
|
3
|
+
# Creates an environment for each test containing data that would have been
|
4
|
+
# created by an installation of AutoNetwork 0.x.
|
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
|
17
|
+
--- !ruby/object:AutoNetwork::Pool
|
18
|
+
network_range: 10.20.1.0/29
|
19
|
+
pool:
|
20
|
+
10.20.1.2: some-uuid-string
|
21
|
+
10.20.1.3:
|
22
|
+
10.20.1.4:
|
23
|
+
10.20.1.5:
|
24
|
+
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
|
+
EOF
|
35
|
+
|
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
|
43
|
+
|
44
|
+
# Dispose of the temporary directory used to run the test.
|
45
|
+
after(:each) do
|
46
|
+
test_env.close
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative 'isolated_settings_context'
|
2
|
+
|
3
|
+
# Creates an environment for each test containing a small pool of AutoNetwork
|
4
|
+
# addresses and a single "created" VM.
|
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
|
17
|
+
---
|
18
|
+
poolfile_version: 2
|
19
|
+
pools:
|
20
|
+
dummy: !ruby/object:AutoNetwork::Pool
|
21
|
+
network_range: 10.20.1.0/29
|
22
|
+
pool:
|
23
|
+
10.20.1.2:
|
24
|
+
path: #{test_env.workdir}
|
25
|
+
name: test1
|
26
|
+
10.20.1.3:
|
27
|
+
10.20.1.4:
|
28
|
+
10.20.1.5:
|
29
|
+
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
|
+
EOF
|
40
|
+
|
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
|
48
|
+
|
49
|
+
# Dispose of the temporary directory used to run the test.
|
50
|
+
after(:each) do
|
51
|
+
test_env.close
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,17 @@
|
|
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
|
data/spec/unit/settings_spec.rb
CHANGED
@@ -19,4 +19,12 @@ describe AutoNetwork::Settings do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
22
|
+
|
23
|
+
describe 'pool_manager' do
|
24
|
+
context 'when unset' do
|
25
|
+
it 'raises an error when accessed through active_pool_manager' do
|
26
|
+
expect { subject.active_pool_manager }.to raise_error(AutoNetwork::Settings::InvalidSettingErrror)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
22
30
|
end
|
@@ -7,8 +7,8 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.name = "vagrant-auto_network"
|
8
8
|
gem.version = AutoNetwork::VERSION
|
9
9
|
|
10
|
-
gem.authors = 'Adrien Thebo'
|
11
|
-
gem.email = 'adrien@somethingsinistral.net'
|
10
|
+
gem.authors = ['Adrien Thebo', 'Charlie Sharpsteen']
|
11
|
+
gem.email = ['adrien@somethingsinistral.net', 'source@sharpsteen.net']
|
12
12
|
gem.homepage = 'https://github.com/adrienthebo/vagrant-auto_network'
|
13
13
|
|
14
14
|
gem.summary = "Automatically create an internal network for all vagrant boxes"
|
@@ -18,5 +18,6 @@ Gem::Specification.new do |gem|
|
|
18
18
|
|
19
19
|
gem.license = 'Apache 2.0'
|
20
20
|
|
21
|
+
gem.add_development_dependency 'rake'
|
21
22
|
gem.add_development_dependency 'rspec', '~> 2.14.0'
|
22
23
|
end
|
@@ -13,4 +13,13 @@ Vagrant::Spec::Acceptance.configure do |c|
|
|
13
13
|
'VBOX_USER_HOME' => '{{homedir}}',
|
14
14
|
'AUTO_NETWORK_TEST_RANGE' => '10.42.1.0/24',
|
15
15
|
}
|
16
|
+
|
17
|
+
# VMware Fusion disabled by default. Instructions:
|
18
|
+
# https://github.com/adrienthebo/vagrant-auto_network/wiki#vmware-fusion
|
19
|
+
|
20
|
+
#c.provider 'vmware_fusion',
|
21
|
+
# box: (acceptance_dir + 'artifacts' + 'vmware_fusion.box').to_s,
|
22
|
+
# env_vars: {
|
23
|
+
# 'AUTO_NETWORK_TEST_RANGE' => '10.42.2.0/24',
|
24
|
+
# }
|
16
25
|
end
|
metadata
CHANGED
@@ -1,15 +1,30 @@
|
|
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.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrien Thebo
|
8
|
+
- Charlie Sharpsteen
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-12 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
13
28
|
- !ruby/object:Gem::Dependency
|
14
29
|
name: rspec
|
15
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -25,12 +40,15 @@ dependencies:
|
|
25
40
|
- !ruby/object:Gem::Version
|
26
41
|
version: 2.14.0
|
27
42
|
description:
|
28
|
-
email:
|
43
|
+
email:
|
44
|
+
- adrien@somethingsinistral.net
|
45
|
+
- source@sharpsteen.net
|
29
46
|
executables: []
|
30
47
|
extensions: []
|
31
48
|
extra_rdoc_files: []
|
32
49
|
files:
|
33
50
|
- .gitignore
|
51
|
+
- .travis.yml
|
34
52
|
- .yardopts
|
35
53
|
- CHANGELOG
|
36
54
|
- Gemfile
|
@@ -40,11 +58,11 @@ files:
|
|
40
58
|
- acceptance/skeletons/auto_network/Vagrantfile
|
41
59
|
- lib/auto_network.rb
|
42
60
|
- lib/auto_network/action.rb
|
61
|
+
- lib/auto_network/action/base.rb
|
43
62
|
- lib/auto_network/action/filter_networks.rb
|
44
63
|
- lib/auto_network/action/load_pool.rb
|
45
64
|
- lib/auto_network/action/release.rb
|
46
65
|
- lib/auto_network/action/request.rb
|
47
|
-
- lib/auto_network/action_helpers.rb
|
48
66
|
- lib/auto_network/plugin.rb
|
49
67
|
- lib/auto_network/pool.rb
|
50
68
|
- lib/auto_network/pool_manager.rb
|
@@ -52,14 +70,18 @@ files:
|
|
52
70
|
- lib/auto_network/settings.rb
|
53
71
|
- lib/auto_network/version.rb
|
54
72
|
- lib/vagrant-auto_network.rb
|
73
|
+
- spec/integration/legacy_spec.rb
|
55
74
|
- spec/integration/plugin_spec.rb
|
75
|
+
- spec/integration/shared/auto_network_0x_context.rb
|
76
|
+
- spec/integration/shared/auto_network_1x_context.rb
|
77
|
+
- spec/integration/shared/isolated_settings_context.rb
|
56
78
|
- spec/spec_helper.rb
|
57
79
|
- spec/unit/pool_spec.rb
|
58
80
|
- spec/unit/settings_spec.rb
|
59
81
|
- tasks/acceptance.rake
|
60
82
|
- templates/locales/en.yml
|
61
83
|
- vagrant-auto_network.gemspec
|
62
|
-
- vagrant-spec.config.rb
|
84
|
+
- vagrant-spec.config.example.rb
|
63
85
|
homepage: https://github.com/adrienthebo/vagrant-auto_network
|
64
86
|
licenses:
|
65
87
|
- Apache 2.0
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module AutoNetwork
|
2
|
-
module ActionHelpers
|
3
|
-
|
4
|
-
# Determine if the given machine exists and has an auto_network address
|
5
|
-
#
|
6
|
-
# @param [Vagrant::Machine]
|
7
|
-
#
|
8
|
-
# @return [true, false]
|
9
|
-
def machine_has_address?(machine)
|
10
|
-
!!(machine and AutoNetwork.pool_manager.address_for(machine))
|
11
|
-
end
|
12
|
-
|
13
|
-
# Fetch all private networks that are tagged for auto networking
|
14
|
-
#
|
15
|
-
# @param iface [Array<Symbol, Hash>]
|
16
|
-
#
|
17
|
-
# @return [Array<Symbol, Hash>] All auto_networks
|
18
|
-
def machine_auto_networks(machine)
|
19
|
-
machine.config.vm.networks.select do |(net_type, options)|
|
20
|
-
net_type == :private_network and options[:auto_network]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Convert an auto network to a private network with a static IP address.
|
25
|
-
#
|
26
|
-
# This does an in-place modification of the private_network options hash
|
27
|
-
# to strip out the auto_network configuration and make this behave like a
|
28
|
-
# normal private network interface with a static IP address.
|
29
|
-
#
|
30
|
-
# @param iface [Array<Symbol, Hash>]
|
31
|
-
# @param addr [String] The static IP address to assign to the private network
|
32
|
-
#
|
33
|
-
# @return [void]
|
34
|
-
def filter_private_network(iface, addr)
|
35
|
-
opts = iface[1]
|
36
|
-
opts.delete(:auto_network)
|
37
|
-
opts[:ip] = addr
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|