vagrant-helpers 1.2.0 → 1.3.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.
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
  - - ">="