vagrant-auto_network 0.1.0

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.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,61 @@
1
+ Vagrant Auto-network
2
+ ====================
3
+
4
+ Automatically configure Vagrant private network interfaces.
5
+
6
+ Summary
7
+ -------
8
+
9
+ Adding a private network address for vagrant machines generally requires
10
+ manually entering network interfaces and IP addresses for each machine, and
11
+ adding or removing machines means updating private network interfaces to make
12
+ sure that new machines don't collide. Alternately one can run a full blown DHCP
13
+ server but this is not necessarily portable and requires significant preparation
14
+ on top of Vagrant.
15
+
16
+ This plugin registers an internal address range and assigns unique IP addresses
17
+ for each successive request so that network configuration is entirely hands off.
18
+ It's much lighter than running a DNS server and masks the underlying work of
19
+ manually assigning addresses.
20
+
21
+ Usage
22
+ -----
23
+
24
+ Vagrant.configure('2') do |config|
25
+ config.vm.define 'first' do |node|
26
+ node.vm.box = "centos-5-i386"
27
+
28
+ node.vm.extend AutoNetwork::Mixin
29
+ node.vm.auto_network!
30
+ end
31
+
32
+ config.vm.define 'second' do |node|
33
+ node.vm.box = "centos-5-i386"
34
+
35
+ node.vm.extend AutoNetwork::Mixin
36
+ node.vm.auto_network!
37
+ end
38
+ end
39
+
40
+ Installation
41
+ ------------
42
+
43
+ vagrant plugin install vagrant-auto_network
44
+
45
+ Caveats
46
+ -------
47
+
48
+ The default pool range has been hardcoded as '10.20.1.2/24', pending the
49
+ ability to query the host virtual network adapters for their configuration.
50
+ To change this, add the following _before_ the Vagrant configuration block:
51
+
52
+ AutoNetwork.default_pool = '172.16.0.0/12'
53
+
54
+ Contact
55
+ -------
56
+
57
+ * Source code: https://github.com/adrienthebo/vagrant-auto\_network
58
+ * Issue tracker: https://github.com/adrienthebo/vagrant-auto\_network/issues
59
+
60
+ If you have questions or concerns about this module, contact finch on Freenode,
61
+ or email adrien@puppetlabs.com.
@@ -0,0 +1,13 @@
1
+ require 'auto_network/mixin'
2
+
3
+ module AutoNetwork
4
+ class << self
5
+ def default_pool
6
+ @default_pool ||= '10.20.1.0/24'
7
+ end
8
+
9
+ def default_pool=(pool)
10
+ @default_pool = pool
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'auto_network/pool'
2
+
3
+ module AutoNetwork
4
+
5
+ # Extension to vagrant VM configuration to automatically configure an
6
+ # internal network.
7
+ module Mixin
8
+
9
+ def auto_network!
10
+ pool = AutoNetwork::Pool.instance
11
+ addr = pool.next
12
+ network :private_network, :ip => addr
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,39 @@
1
+ require 'auto_network'
2
+
3
+ require 'ipaddress'
4
+
5
+ module AutoNetwork
6
+ class Pool
7
+
8
+ class PoolExhaustedError < StandardError; end
9
+
10
+ # Provide a single instance of this class
11
+ #
12
+ # @return [AutoNetwork::Pool]
13
+ def self.instance
14
+ @myself ||= new
15
+ end
16
+
17
+ # @param addr [String] The network address range to use as the address pool.
18
+ # Defaults to `AutoNetwork.default_pool`
19
+ def initialize(addr = AutoNetwork.default_pool)
20
+ @addr = addr
21
+ @network = IPAddress.parse(addr)
22
+
23
+ @range = @network.hosts
24
+ # Drop the first IP address as it should be reserved for the host system
25
+ @range.shift
26
+ end
27
+
28
+ # @return [String] The string representation of the next available address
29
+ # @raise [PoolExhaustedError] There are no remaining addresses in the pool.
30
+ def next
31
+ if @range.empty?
32
+ raise PoolExhaustedError, "No addresses remaining in network address pool #{addr.inspect}"
33
+ end
34
+
35
+ addr = @range.shift
36
+ addr.address
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module AutoNetwork
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1 @@
1
+ require 'auto_network'
@@ -0,0 +1,20 @@
1
+ lib = File.expand_path('../lib/', __FILE__)
2
+ $:.unshift lib unless $:.include?(lib)
3
+
4
+ require 'auto_network/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "vagrant-auto_network"
8
+ gem.version = AutoNetwork::VERSION
9
+
10
+ gem.authors = 'Adrien Thebo'
11
+ gem.email = 'adrien@somethingsinistral.net'
12
+ gem.homepage = 'https://github.com/adrienthebo/vagrant-auto_network'
13
+
14
+ gem.summary = "Automatically create an internal network for all vagrant boxes"
15
+
16
+ gem.add_dependency 'ipaddress'
17
+
18
+ gem.files = %x{git ls-files -z}.split("\0")
19
+ gem.require_path = 'lib'
20
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-auto_network
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adrien Thebo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ipaddress
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description:
31
+ email: adrien@somethingsinistral.net
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - Gemfile
37
+ - README.markdown
38
+ - lib/auto_network.rb
39
+ - lib/auto_network/mixin.rb
40
+ - lib/auto_network/pool.rb
41
+ - lib/auto_network/version.rb
42
+ - lib/vagrant-auto_network.rb
43
+ - vagrant-auto_network.gemspec
44
+ homepage: https://github.com/adrienthebo/vagrant-auto_network
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.23
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Automatically create an internal network for all vagrant boxes
68
+ test_files: []
69
+ has_rdoc: