vagrant-helpers 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vagrant-helpers.rb +42 -2
  3. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 940a1a6aa656ba637977a45fff007bf624753fd9
4
- data.tar.gz: 5512dd49a8267f283029ea75d9602a09d521d4ff
3
+ metadata.gz: a086365b1b3ec96fb79913620a58196486cdbb85
4
+ data.tar.gz: 005ee89cfa5976954a1ad95cb11d7e07fa14a06c
5
5
  SHA512:
6
- metadata.gz: 8e07e680e5bec72530ddd198ffef2da9fd653a72e50676ce8a92241fe89bcadb19fb700b7524b37eb4676d5284952fab07899f0adddce7d5775a55f2b3980805
7
- data.tar.gz: 8e3caff0a2a68bc6a4e738fca917518121495b2b8dc958fe8fd867c7ae180130ced2daabcb694481e29c9a16d0ba731eba0f098933949baf649749b616a4c5ae
6
+ metadata.gz: a99b2e9524140246b27c3da4ddbcc286eee27f665e43821580863ebdeb5fe59e072ae41630b6b2dbc840d097cad57302fe5561a1b5d4d56ec8186c8a271c39a2
7
+ data.tar.gz: 6ffd87fc0e9b2f7bf7bf6a291e6811d42b0d55f7e2a336118fea68dd7a8f023c9fbc5296a476b37162ea668dc5a5146ddcba91a3414a8aee3d0be8fd0d8a6876
@@ -1,6 +1,9 @@
1
1
  require 'vagrant'
2
2
  require 'yaml'
3
3
  require 'dotenv'
4
+ require 'socket'
5
+ require 'ipaddr'
6
+ require 'ip'
4
7
 
5
8
 
6
9
  module VagrantPlugins
@@ -90,12 +93,49 @@ module VagrantPlugins
90
93
  end
91
94
  end
92
95
 
96
+ def self.get_cidr_mask(mask)
97
+ Integer(32 - Math.log2((IPAddr.new(mask, Socket::AF_INET).to_i ^ 0xffffffff) + 1))
98
+ end
99
+
100
+ def self.get_host_networks
101
+ host_networks = []
102
+
103
+ Socket.getifaddrs.each do |ifaddr|
104
+ if ifaddr.addr.ipv4? && ifaddr.addr.ipv4_private?
105
+ machine_address = IP.new ifaddr.addr.ip_address
106
+ netmask = IP.new ifaddr.netmask.ip_address
107
+ network_address = machine_address & netmask
108
+ host_networks << IP.new("#{network_address}/#{get_cidr_mask ifaddr.netmask.ip_address}")
109
+ end
110
+ end
111
+
112
+ host_networks
113
+ end
114
+
115
+ def self.host_in_network?(network_addr)
116
+ get_host_networks.any? { |host_network| host_network.eql? network_addr }
117
+ end
118
+
93
119
  def self.set_vm_public_networks(config, opts)
94
120
  vm_public_networks = opts.fetch('vm', {}).fetch('network', {}).fetch('public', [])
95
121
 
122
+ network_list = []
123
+
96
124
  vm_public_networks.each do |options|
97
- prepared_options = ::Hash[options.map { |(k, v)| [k.to_sym, v] }]
98
- config.vm.network :public_network, **prepared_options
125
+ if options.has_key? 'network'
126
+ network_addr = IP.new options.delete 'network'
127
+ if host_in_network? network_addr
128
+ network_list << options
129
+ break
130
+ end
131
+ else
132
+ network_list << options
133
+ end
134
+ end
135
+
136
+ network_list.each do |network_options|
137
+ options_sym_hash = ::Hash[network_options.map { |(k, v)| [k.to_sym, v] }]
138
+ config.vm.network :public_network, **options_sym_hash
99
139
  end
100
140
  end
101
141
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Pyatkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-13 00:00:00.000000000 Z
11
+ date: 2016-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby-ip
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -71,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - ">="
73
87
  - !ruby/object:Gem::Version
74
- version: '2.0'
88
+ version: '2.1'
75
89
  required_rubygems_version: !ruby/object:Gem::Requirement
76
90
  requirements:
77
91
  - - ">="