vagrant-vmware-dhcp 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vagrant-vmware-dhcp/action/config_dhcp.rb +17 -118
- data/lib/vagrant-vmware-dhcp/action/prune_dhcp.rb +52 -0
- data/lib/vagrant-vmware-dhcp/action.rb +5 -7
- data/lib/vagrant-vmware-dhcp/dhcp.rb +8 -0
- data/lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager.rb +129 -0
- data/lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager_darwin.rb +106 -0
- data/lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager_linux.rb +101 -0
- data/lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager_windows.rb +78 -0
- data/lib/vagrant-vmware-dhcp/plugin.rb +20 -12
- data/lib/vagrant-vmware-dhcp/version.rb +1 -1
- metadata +8 -5
- data/lib/vagrant-vmware-dhcp/action/config_dhcp_darwin.rb +0 -106
- data/lib/vagrant-vmware-dhcp/action/config_dhcp_linux.rb +0 -106
- data/lib/vagrant-vmware-dhcp/action/config_dhcp_windows.rb +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0bc39c6cd747318ab85baf9c099e0744ef8eebc
|
4
|
+
data.tar.gz: b236907c228d090f4d935525b99a5f9f83b03a91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90aa5e525f2b6ac08fe534db152f41c576878a10d5a65e0a1df0f979997fba67f3dd775bc5801205aeb627d46fbdd6f94a2efb736578b72808c44aebdfe6abc1
|
7
|
+
data.tar.gz: 2738e4446d5034abe7175718f604965638eb3963f62ae9954b82af9ab205c360ddea5abbb37c38678e1b906ff00db34f4ab818c85b55a1a4145f0af3abf8786c
|
@@ -17,7 +17,7 @@ module VagrantPlugins
|
|
17
17
|
|
18
18
|
if @env[:machine]
|
19
19
|
if @env[:machine].provider_name == :vmware_fusion or @env[:machine].provider_name == :vmware_workstation
|
20
|
-
configure_dhcp
|
20
|
+
configure_dhcp(@env[:machine])
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -26,130 +26,29 @@ module VagrantPlugins
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
-
def configure_dhcp
|
30
|
-
|
29
|
+
def configure_dhcp(machine)
|
30
|
+
# dhcp_manager = VagrantPlugins::VagrantVmwareDhcp::DhcpManager.new(@env[:ui], @logger, machine)
|
31
|
+
dhcp_manager = get_dhcp_manager(machine)
|
31
32
|
|
32
|
-
|
33
|
+
dhcp_manager.prune()
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
@logger.debug("After retrieval network_map is #{network_map}")
|
39
|
-
|
40
|
-
apply_static_dhcp_config(machine, network_map)
|
41
|
-
end
|
42
|
-
|
43
|
-
def retrieve_vmx_network_settings(machine)
|
44
|
-
vmx_networks = {}
|
45
|
-
|
46
|
-
File.open(machine.provider.driver.vmx_path).each_line {
|
47
|
-
|line|
|
48
|
-
|
49
|
-
matches = /^(ethernet\d+\.)(.+?)\s*=\s*"?(.*?)"?\s*$/.match(line)
|
50
|
-
|
51
|
-
if not matches
|
52
|
-
next
|
53
|
-
end
|
54
|
-
|
55
|
-
adapter_name = matches[1]
|
56
|
-
adapter_property = matches[2]
|
57
|
-
property_value = matches[3]
|
58
|
-
|
59
|
-
if not vmx_networks.has_key?(adapter_name)
|
60
|
-
vmx_networks[adapter_name] = {}
|
61
|
-
end
|
62
|
-
|
63
|
-
vmx_networks[adapter_name][adapter_property] = property_value
|
64
|
-
}
|
65
|
-
|
66
|
-
vmx_networks_by_mac = {}
|
67
|
-
|
68
|
-
vmx_networks.each {
|
69
|
-
|adapter_name, properties|
|
70
|
-
|
71
|
-
if not properties.has_key?("address") or not properties.has_key?("vnet")
|
72
|
-
next
|
73
|
-
end
|
74
|
-
|
75
|
-
vmx_networks_by_mac[ properties['address'] ] = properties
|
76
|
-
}
|
77
|
-
|
78
|
-
vmx_networks_by_mac
|
79
|
-
end
|
80
|
-
|
81
|
-
def make_network_map(machine, vmx_networks)
|
82
|
-
vm_networks = machine.config.vm.networks.select { |vm_network| vm_network[0] == :private_network and vm_network[1][:ip] and vm_network[1][:mac] }
|
83
|
-
|
84
|
-
network_map = {}
|
85
|
-
|
86
|
-
vm_networks.each { |vm_network|
|
87
|
-
mac = vm_network[1][ :mac ]
|
88
|
-
mac = mac.scan(/.{2}/).join(":")
|
89
|
-
|
90
|
-
if not vmx_networks.has_key?(mac)
|
91
|
-
@logger.error("Missing VMX network configuration for vm_network #{vm_network}")
|
92
|
-
next
|
93
|
-
end
|
94
|
-
|
95
|
-
network_map[mac] = { :ip => vm_network[1][:ip], :vnet => vmx_networks[mac]["vnet"], :mac => mac }
|
96
|
-
}
|
97
|
-
|
98
|
-
network_map
|
99
|
-
end
|
100
|
-
|
101
|
-
def apply_static_dhcp_config(machine, network_map)
|
102
|
-
|
103
|
-
network_map.each {
|
104
|
-
|mac, network|
|
105
|
-
|
106
|
-
@logger.info("Pruning DHCP configuration for #{network[:ip]}")
|
107
|
-
prune_dhcpd_conf(network)
|
108
|
-
|
109
|
-
@env[:ui].error("CONTROL_DHCP is #{machine.config.control_dhcp.enable}")
|
110
|
-
|
111
|
-
if machine.config.control_dhcp.enable
|
112
|
-
@env[:ui].info("Configuring DHCP for #{network[:ip]} on #{network[:vnet]}")
|
113
|
-
|
114
|
-
write_dhcpd_conf(network)
|
115
|
-
end
|
116
|
-
}
|
117
|
-
|
118
|
-
trigger_dhcpd_update
|
119
|
-
|
120
|
-
@env[:ui].info("DHCP Configured")
|
35
|
+
if machine.config.control_dhcp.enable
|
36
|
+
dhcp_manager.configure()
|
37
|
+
end
|
121
38
|
|
39
|
+
dhcp_manager.reload()
|
122
40
|
end
|
123
41
|
|
124
|
-
def
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
template_root: VagrantPlugins::VagrantVmwareDhcp.source_root().join("templates")
|
133
|
-
)
|
134
|
-
return output
|
42
|
+
def get_dhcp_manager(machine)
|
43
|
+
if Vagrant::Util::Platform.windows?
|
44
|
+
return VagrantPlugins::VagrantVmwareDhcp::DhcpManagerWindows.new(@env[:ui], @logger, machine)
|
45
|
+
elsif Vagrant::Util::Platform.linux?
|
46
|
+
return VagrantPlugins::VagrantVmwareDhcp::DhcpManagerLinux.new(@env[:ui], @logger, machine)
|
47
|
+
elsif Vagrant::Util::Platform.darwin?
|
48
|
+
return VagrantPlugins::VagrantVmwareDhcp::DhcpManagerDarwin.new(@env[:ui], @logger, machine)
|
49
|
+
end
|
135
50
|
end
|
136
51
|
|
137
|
-
# def prune_dhcpd_conf(network)
|
138
|
-
# raise "This should never happen!"
|
139
|
-
# end
|
140
|
-
#
|
141
|
-
# def dhcpd_conf_location(network)
|
142
|
-
# raise "This should never happen!"
|
143
|
-
# end
|
144
|
-
#
|
145
|
-
# def write_dhcpd_conf(network)
|
146
|
-
# raise "This should never happen!"
|
147
|
-
# end
|
148
|
-
#
|
149
|
-
# def trigger_dhcpd_update(network)
|
150
|
-
# raise "This should never happen!"
|
151
|
-
# end
|
152
|
-
|
153
52
|
end
|
154
53
|
end
|
155
54
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "digest"
|
3
|
+
|
4
|
+
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
5
|
+
module VagrantPlugins
|
6
|
+
module VagrantVmwareDhcp
|
7
|
+
module Action
|
8
|
+
class PruneDhcp
|
9
|
+
def initialize(app, env)
|
10
|
+
@app = app
|
11
|
+
@env = env
|
12
|
+
@logger = Log4r::Logger.new("vagrant::plugins::vagrant-vmware-dhcp::prune_dhcp")
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
@env = env
|
17
|
+
|
18
|
+
if @env[:machine]
|
19
|
+
if @env[:machine].provider_name == :vmware_fusion or @env[:machine].provider_name == :vmware_workstation
|
20
|
+
@env[:ui].info("Pruning altered DHCP configuration")
|
21
|
+
prune_dhcp(@env[:machine])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
@app.call(@env)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def prune_dhcp(machine)
|
31
|
+
# dhcp_manager = VagrantPlugins::VagrantVmwareDhcp::DhcpManager.new(@env[:ui], @logger, machine)
|
32
|
+
dhcp_manager = get_dhcp_manager(machine)
|
33
|
+
|
34
|
+
dhcp_manager.prune()
|
35
|
+
|
36
|
+
dhcp_manager.reload()
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_dhcp_manager(machine)
|
40
|
+
if Vagrant::Util::Platform.windows?
|
41
|
+
return VagrantPlugins::VagrantVmwareDhcp::DhcpManagerWindows.new(@env[:ui], @logger, machine)
|
42
|
+
elsif Vagrant::Util::Platform.linux?
|
43
|
+
return VagrantPlugins::VagrantVmwareDhcp::DhcpManagerLinux.new(@env[:ui], @logger, machine)
|
44
|
+
elsif Vagrant::Util::Platform.darwin?
|
45
|
+
return VagrantPlugins::VagrantVmwareDhcp::DhcpManagerDarwin.new(@env[:ui], @logger, machine)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -1,9 +1,7 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
require 'vagrant-vmware-dhcp/action/config_dhcp_linux'
|
7
|
-
require 'vagrant-vmware-dhcp/action/config_dhcp_windows'
|
1
|
+
module VagrantPlugins
|
2
|
+
module VagrantVmwareDhcp
|
3
|
+
require_relative 'action/set_mac'
|
4
|
+
require_relative 'action/config_dhcp'
|
5
|
+
require_relative 'action/prune_dhcp'
|
8
6
|
end
|
9
7
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module VagrantVmwareDhcp
|
3
|
+
require_relative 'dhcp_manager/dhcp_manager.rb'
|
4
|
+
require_relative 'dhcp_manager/dhcp_manager_darwin.rb'
|
5
|
+
require_relative 'dhcp_manager/dhcp_manager_linux.rb'
|
6
|
+
require_relative 'dhcp_manager/dhcp_manager_windows.rb'
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "digest"
|
3
|
+
|
4
|
+
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
5
|
+
module VagrantPlugins
|
6
|
+
module VagrantVmwareDhcp
|
7
|
+
class DhcpManager
|
8
|
+
|
9
|
+
def initialize(ui, logger, machine)
|
10
|
+
@ui = ui
|
11
|
+
@logger = logger
|
12
|
+
@machine = machine
|
13
|
+
@network_map = make_network_map(machine)
|
14
|
+
end
|
15
|
+
|
16
|
+
def prune()
|
17
|
+
@network_map.each {
|
18
|
+
|mac, network|
|
19
|
+
|
20
|
+
prune_configuration(network)
|
21
|
+
}
|
22
|
+
|
23
|
+
reload_configuration
|
24
|
+
end
|
25
|
+
|
26
|
+
def configure()
|
27
|
+
@network_map.each {
|
28
|
+
|mac, network|
|
29
|
+
|
30
|
+
@ui.info("Configuring DHCP for #{network[:ip]} on #{network[:vnet]}")
|
31
|
+
|
32
|
+
write_configuration(network)
|
33
|
+
}
|
34
|
+
|
35
|
+
@ui.info("DHCP Configured")
|
36
|
+
end
|
37
|
+
|
38
|
+
def reload()
|
39
|
+
@ui.info("Reloading DHCP Configuration")
|
40
|
+
reload_configuration
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def template_machine_definition(network)
|
46
|
+
netname = [network[:vnet], network[:ip].gsub(/\./, '_')].join('_')
|
47
|
+
|
48
|
+
output = Vagrant::Util::TemplateRenderer.render('dhcpd_static',
|
49
|
+
mac: network[:mac],
|
50
|
+
ip: network[:ip],
|
51
|
+
vnet: network[:vnet],
|
52
|
+
name: netname,
|
53
|
+
template_root: VagrantPlugins::VagrantVmwareDhcp.source_root().join("templates")
|
54
|
+
)
|
55
|
+
|
56
|
+
@logger.debug("DHCPD template for interface #{network[:vnet]} is #{output}")
|
57
|
+
|
58
|
+
return output
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def make_network_map(machine)
|
64
|
+
vmx_networks = retrieve_vmx_network_settings(machine)
|
65
|
+
|
66
|
+
vm_networks = machine.config.vm.networks.select { |vm_network| vm_network[0] == :private_network and vm_network[1][:ip] and vm_network[1][:mac] }
|
67
|
+
|
68
|
+
network_map = {}
|
69
|
+
|
70
|
+
vm_networks.each { |vm_network|
|
71
|
+
mac = vm_network[1][ :mac ]
|
72
|
+
mac = mac.scan(/.{2}/).join(":")
|
73
|
+
|
74
|
+
if not vmx_networks.has_key?(mac)
|
75
|
+
@logger.error("Missing VMX network configuration for vm_network #{vm_network}")
|
76
|
+
next
|
77
|
+
end
|
78
|
+
|
79
|
+
network_map[mac] = { :ip => vm_network[1][:ip], :vnet => vmx_networks[mac]["vnet"], :mac => mac }
|
80
|
+
}
|
81
|
+
|
82
|
+
@logger.debug("After mutating, network_map is #{network_map}")
|
83
|
+
|
84
|
+
network_map
|
85
|
+
end
|
86
|
+
|
87
|
+
def retrieve_vmx_network_settings(machine)
|
88
|
+
vmx_networks = {}
|
89
|
+
|
90
|
+
File.open(machine.provider.driver.vmx_path).each_line {
|
91
|
+
|line|
|
92
|
+
|
93
|
+
matches = /^(ethernet\d+\.)(.+?)\s*=\s*"?(.*?)"?\s*$/.match(line)
|
94
|
+
|
95
|
+
if not matches
|
96
|
+
next
|
97
|
+
end
|
98
|
+
|
99
|
+
adapter_name = matches[1]
|
100
|
+
adapter_property = matches[2]
|
101
|
+
property_value = matches[3]
|
102
|
+
|
103
|
+
if not vmx_networks.has_key?(adapter_name)
|
104
|
+
vmx_networks[adapter_name] = {}
|
105
|
+
end
|
106
|
+
|
107
|
+
vmx_networks[adapter_name][adapter_property] = property_value
|
108
|
+
}
|
109
|
+
|
110
|
+
vmx_networks_by_mac = {}
|
111
|
+
|
112
|
+
vmx_networks.each {
|
113
|
+
|adapter_name, properties|
|
114
|
+
|
115
|
+
if not properties.has_key?("address") or not properties.has_key?("vnet")
|
116
|
+
next
|
117
|
+
end
|
118
|
+
|
119
|
+
vmx_networks_by_mac[ properties['address'] ] = properties
|
120
|
+
}
|
121
|
+
|
122
|
+
@logger.debug("After retrieval vmx_networks_by_mac is #{vmx_networks_by_mac}")
|
123
|
+
|
124
|
+
vmx_networks_by_mac
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "digest"
|
3
|
+
require "vagrant/util/shell_quote"
|
4
|
+
require "vagrant/util/subprocess"
|
5
|
+
|
6
|
+
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
7
|
+
module VagrantPlugins
|
8
|
+
module VagrantVmwareDhcp
|
9
|
+
class DhcpManagerDarwin < DhcpManager
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def dhcpd_conf_location(network)
|
14
|
+
# Locations from https://pubs.vmware.com/workstation-9/index.jsp?topic=%2Fcom.vmware.ws.using.doc%2FGUID-04D783E1-3AB9-4D98-9891-2C58215905CC.html
|
15
|
+
|
16
|
+
location = "/Library/Preferences/VMware Fusion/#{network[:vnet]}/dhcpd.conf"
|
17
|
+
|
18
|
+
@logger.debug("Using dhcpd.conf at #{location}")
|
19
|
+
|
20
|
+
return location
|
21
|
+
end
|
22
|
+
|
23
|
+
def prune_configuration(network)
|
24
|
+
@logger.info("Pruning DHCP configuration for #{network[:ip]}")
|
25
|
+
|
26
|
+
conf_location = dhcpd_conf_location(network)
|
27
|
+
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
28
|
+
|
29
|
+
mac = network[:mac]
|
30
|
+
ip = network[:ip]
|
31
|
+
|
32
|
+
before = File.open(conf_location).read
|
33
|
+
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
34
|
+
|
35
|
+
command = []
|
36
|
+
command << "sudo" if !File.writable?(conf_location)
|
37
|
+
command += [
|
38
|
+
"sed", "-E", "-e",
|
39
|
+
"/^# VAGRANT-BEGIN: #{mac}/," +
|
40
|
+
"/^# VAGRANT-END: #{mac}\s*/ d",
|
41
|
+
"-ibak",
|
42
|
+
conf_location
|
43
|
+
]
|
44
|
+
|
45
|
+
system(*command)
|
46
|
+
|
47
|
+
command = []
|
48
|
+
command << "sudo" if !File.writable?(conf_location)
|
49
|
+
command += [
|
50
|
+
"sed", "-E", "-e",
|
51
|
+
"/^# VAGRANT-BEGIN: #{ip}/," +
|
52
|
+
"/^# VAGRANT-END: #{ip}\s*/ d",
|
53
|
+
"-ibak",
|
54
|
+
conf_location
|
55
|
+
]
|
56
|
+
|
57
|
+
system(*command)
|
58
|
+
|
59
|
+
after = File.open(conf_location).read
|
60
|
+
@logger.debug("After, dhcpd.conf content is #{after}")
|
61
|
+
end
|
62
|
+
|
63
|
+
def write_configuration(network)
|
64
|
+
conf_location = dhcpd_conf_location(network)
|
65
|
+
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
66
|
+
|
67
|
+
sudo_command = ""
|
68
|
+
sudo_command = "sudo " if !File.writable?(conf_location)
|
69
|
+
|
70
|
+
output = template_machine_definition(network)
|
71
|
+
|
72
|
+
before = File.open(conf_location).read
|
73
|
+
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
74
|
+
|
75
|
+
output.split("\n").each do |line|
|
76
|
+
line = Vagrant::Util::ShellQuote.escape(line, "'")
|
77
|
+
system(%Q[echo '#{line}' | #{sudo_command}tee -a '#{escaped_conf_location}' >/dev/null])
|
78
|
+
end
|
79
|
+
|
80
|
+
after = File.open(conf_location).read
|
81
|
+
@logger.debug("After, dhcpd.conf content is #{after}")
|
82
|
+
end
|
83
|
+
|
84
|
+
def reload_configuration
|
85
|
+
# Per http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026510
|
86
|
+
|
87
|
+
vmnet_cli = "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli"
|
88
|
+
|
89
|
+
configureCommand = [ "sudo", vmnet_cli, "--configure" ].flatten
|
90
|
+
stopCommand = [ "sudo", vmnet_cli, "--stop" ].flatten
|
91
|
+
startCommand = [ "sudo", vmnet_cli, "--start" ].flatten
|
92
|
+
statusCommand = [ "sudo", vmnet_cli, "--status" ].flatten
|
93
|
+
|
94
|
+
Vagrant::Util::Subprocess.execute(*configureCommand)
|
95
|
+
Vagrant::Util::Subprocess.execute(*stopCommand)
|
96
|
+
Vagrant::Util::Subprocess.execute(*startCommand)
|
97
|
+
r = Vagrant::Util::Subprocess.execute(*statusCommand)
|
98
|
+
|
99
|
+
if r.exit_code != 0
|
100
|
+
@ui.error("VMNet status exited with code #{r.exit_code} and output:\n#{r.stdout.chomp}")
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "digest"
|
3
|
+
require "vagrant/util/shell_quote"
|
4
|
+
require "vagrant/util/subprocess"
|
5
|
+
|
6
|
+
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
7
|
+
module VagrantPlugins
|
8
|
+
module VagrantVmwareDhcp
|
9
|
+
class DhcpManagerLinux < DhcpManager
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def dhcpd_conf_location(network)
|
14
|
+
# Locations from https://pubs.vmware.com/workstation-9/index.jsp?topic=%2Fcom.vmware.ws.using.doc%2FGUID-04D783E1-3AB9-4D98-9891-2C58215905CC.html
|
15
|
+
|
16
|
+
location = "/etc/vmware/#{network[:vnet]}/dhcpd/dhcpd.conf"
|
17
|
+
|
18
|
+
@logger.debug("Using dhcpd.conf at #{location}")
|
19
|
+
|
20
|
+
return location
|
21
|
+
end
|
22
|
+
|
23
|
+
def prune_configuration(network)
|
24
|
+
@logger.info("Pruning DHCP configuration for #{network[:ip]}")
|
25
|
+
|
26
|
+
conf_location = dhcpd_conf_location(network)
|
27
|
+
|
28
|
+
mac = network[:mac]
|
29
|
+
ip = network[:ip]
|
30
|
+
|
31
|
+
before = File.open(conf_location).read
|
32
|
+
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
33
|
+
|
34
|
+
command = []
|
35
|
+
command << "sudo" if !File.writable?(conf_location)
|
36
|
+
command += [
|
37
|
+
"sed", "-E", "-e",
|
38
|
+
"/^# VAGRANT-BEGIN: #{mac}/," +
|
39
|
+
"/^# VAGRANT-END: #{mac}\s*/ d",
|
40
|
+
"-ibak",
|
41
|
+
conf_location
|
42
|
+
]
|
43
|
+
|
44
|
+
system(*command)
|
45
|
+
|
46
|
+
command = []
|
47
|
+
command << "sudo" if !File.writable?(conf_location)
|
48
|
+
command += [
|
49
|
+
"sed", "-E", "-e",
|
50
|
+
"/^# VAGRANT-BEGIN: #{ip}/," +
|
51
|
+
"/^# VAGRANT-END: #{ip}\s*/ d",
|
52
|
+
"-ibak",
|
53
|
+
conf_location
|
54
|
+
]
|
55
|
+
|
56
|
+
system(*command)
|
57
|
+
|
58
|
+
after = File.open(conf_location).read
|
59
|
+
@logger.debug("After, dhcpd.conf content is #{after}")
|
60
|
+
end
|
61
|
+
|
62
|
+
def write_configuration(network)
|
63
|
+
conf_location = dhcpd_conf_location(network)
|
64
|
+
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
65
|
+
|
66
|
+
sudo_command = ""
|
67
|
+
sudo_command = "sudo " if !File.writable?(conf_location)
|
68
|
+
|
69
|
+
output = template_machine_definition(network)
|
70
|
+
|
71
|
+
before = File.open(conf_location).read
|
72
|
+
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
73
|
+
|
74
|
+
output.split("\n").each do |line|
|
75
|
+
line = Vagrant::Util::ShellQuote.escape(line, "'")
|
76
|
+
system(%Q[echo '#{line}' | #{sudo_command}tee -a '#{escaped_conf_location}' >/dev/null])
|
77
|
+
end
|
78
|
+
|
79
|
+
after = File.open(conf_location).read
|
80
|
+
@logger.debug("After, dhcpd.conf content is #{after}")
|
81
|
+
end
|
82
|
+
|
83
|
+
def reload_configuration
|
84
|
+
# Per http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026510
|
85
|
+
|
86
|
+
service_location = "/etc/rc.d/init.d/vmware"
|
87
|
+
|
88
|
+
restartCommand = [ "sudo", service_location, "restart" ].flatten
|
89
|
+
statusCommand = [ "sudo", service_location, "status" ].flatten
|
90
|
+
|
91
|
+
Vagrant::Util::Subprocess.execute(*restartCommand)
|
92
|
+
r = Vagrant::Util::Subprocess.execute(*statusCommand)
|
93
|
+
|
94
|
+
if r.exit_code != 0
|
95
|
+
@ui.error("VMNet status exited with code #{r.exit_code} and output:\n#{r.stdout.chomp}")
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "digest"
|
3
|
+
require "vagrant/util/shell_quote"
|
4
|
+
require "vagrant/util/subprocess"
|
5
|
+
|
6
|
+
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
7
|
+
module VagrantPlugins
|
8
|
+
module VagrantVmwareDhcp
|
9
|
+
class DhcpManagerWindows < DhcpManager
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def dhcpd_conf_location(network)
|
14
|
+
# Locations from https://pubs.vmware.com/workstation-9/index.jsp?topic=%2Fcom.vmware.ws.using.doc%2FGUID-04D783E1-3AB9-4D98-9891-2C58215905CC.html
|
15
|
+
|
16
|
+
if File.exist?('c:\ProgramData\VMware\vmnetdhcp.conf')
|
17
|
+
location = 'C:\ProgramData\VMware\vmnetdhcp.conf'
|
18
|
+
elsif File.exist?('C:\Documents and Settings\All Users\Application Data\VMware\vmnetdhcp.conf')
|
19
|
+
location = 'C:\Documents and Settings\All Users\Application Data\VMware\vmnetdhcp.conf'
|
20
|
+
end
|
21
|
+
|
22
|
+
@logger.debug("Using dhcpd.conf at #{location}")
|
23
|
+
|
24
|
+
return location
|
25
|
+
end
|
26
|
+
|
27
|
+
def prune_configuration(network)
|
28
|
+
conf_location = dhcpd_conf_location(network)
|
29
|
+
|
30
|
+
mac = network[:mac]
|
31
|
+
ip = network[:ip]
|
32
|
+
|
33
|
+
before = File.open(conf_location).read
|
34
|
+
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
35
|
+
|
36
|
+
intermediate = before.gsub(/^# VAGRANT-BEGIN: #{mac}.*^# VAGRANT-END: #{mac}\s+/m, '')
|
37
|
+
after = intermediate.gsub(/^# VAGRANT-BEGIN: #{ip}.*^# VAGRANT-END: #{ip}\s+/m, '')
|
38
|
+
|
39
|
+
File.open(conf_location, "w") { |fd| fd.write(after) }
|
40
|
+
|
41
|
+
after = File.open(conf_location).read
|
42
|
+
@logger.debug("After altering, dhcpd.conf content is #{after}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def write_configuration(network)
|
46
|
+
conf_location = dhcpd_conf_location(network)
|
47
|
+
|
48
|
+
section = get_dhcpd_section(network)
|
49
|
+
|
50
|
+
@logger.debug("DHCPD template for interface #{network[:vnet]} is #{section}")
|
51
|
+
|
52
|
+
before = File.open(conf_location).read
|
53
|
+
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
54
|
+
|
55
|
+
after = "#{before}\n\n#{section}\n"
|
56
|
+
|
57
|
+
File.open(conf_location, "w") { |fd| fd.write(after) }
|
58
|
+
|
59
|
+
after = File.open(conf_location).read
|
60
|
+
@logger.debug("After, dhcpd.conf content is #{after}")
|
61
|
+
end
|
62
|
+
|
63
|
+
def reload_configuration
|
64
|
+
# This is non-authoritative, but is the obvious solution and seems to work.
|
65
|
+
|
66
|
+
stopCommand = [ "NET", "STOP", "VMware DHCP Service" ]
|
67
|
+
startCommand = [ "NET", "START", "VMware DHCP Service" ]
|
68
|
+
|
69
|
+
Vagrant::Util::Subprocess.execute(*stopCommand)
|
70
|
+
r = Vagrant::Util::Subprocess.execute(*startCommand)
|
71
|
+
|
72
|
+
if r.exit_code != 0
|
73
|
+
@ui.error("VMNet dhcp start exited with code #{r.exit_code} and output:\n#{r.stdout.chomp}")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative "action"
|
2
|
+
require_relative "dhcp"
|
2
3
|
|
3
4
|
module VagrantPlugins
|
4
5
|
module VagrantVmwareDhcp
|
@@ -13,26 +14,33 @@ module VagrantPlugins
|
|
13
14
|
Config
|
14
15
|
end
|
15
16
|
|
16
|
-
action_hook('DA
|
17
|
+
action_hook('DA VMware Network: Configure MAC addresses') do |hook|
|
17
18
|
action = Vagrant::Action::Builtin::ConfigValidate
|
18
19
|
hook.before(action, VagrantVmwareDhcp::Action::SetMac)
|
19
20
|
end
|
20
21
|
|
21
|
-
action_hook('DA
|
22
|
-
if defined?(
|
22
|
+
action_hook('DA VMware Network: Configure dhcp.conf') do |hook|
|
23
|
+
if defined?(ActionConfigure)
|
23
24
|
# no-op
|
24
|
-
elsif Vagrant::Util::Platform.windows?
|
25
|
-
|
26
|
-
ActionClass = HashiCorp::VagrantVMwareworkstation::Action::Network
|
27
|
-
elsif Vagrant::Util::Platform.linux?
|
28
|
-
ConfigDhcpClass = VagrantVmwareDhcp::Action::ConfigDhcpLinux
|
29
|
-
ActionClass = HashiCorp::VagrantVMwareworkstation::Action::Network
|
25
|
+
elsif Vagrant::Util::Platform.windows? or Vagrant::Util::Platform.linux?
|
26
|
+
ActionConfigure = HashiCorp::VagrantVMwareworkstation::Action::Network
|
30
27
|
elsif Vagrant::Util::Platform.darwin?
|
31
|
-
|
32
|
-
ActionClass = HashiCorp::VagrantVMwarefusion::Action::Network
|
28
|
+
ActionConfigure = HashiCorp::VagrantVMwarefusion::Action::Network
|
33
29
|
end
|
34
30
|
|
35
|
-
hook.after(
|
31
|
+
hook.after(ActionConfigure, VagrantVmwareDhcp::Action::ConfigDhcp)
|
32
|
+
end
|
33
|
+
|
34
|
+
action_hook('DA VMware Network: Prune dhcp.conf') do |hook|
|
35
|
+
if defined?(ActionPrune)
|
36
|
+
# no-op
|
37
|
+
elsif Vagrant::Util::Platform.windows? or Vagrant::Util::Platform.linux?
|
38
|
+
ActionPrune = HashiCorp::VagrantVMwareworkstation::Action::Destroy
|
39
|
+
elsif Vagrant::Util::Platform.darwin?
|
40
|
+
ActionPrune = HashiCorp::VagrantVMwarefusion::Action::Destroy
|
41
|
+
end
|
42
|
+
|
43
|
+
hook.before(ActionPrune, VagrantVmwareDhcp::Action::PruneDhcp)
|
36
44
|
end
|
37
45
|
|
38
46
|
# action_hook(:init_i18n, :environment_load) { init_i18n }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-vmware-dhcp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Israel Shirk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -54,11 +54,14 @@ files:
|
|
54
54
|
- lib/vagrant-vmware-dhcp.rb
|
55
55
|
- lib/vagrant-vmware-dhcp/action.rb
|
56
56
|
- lib/vagrant-vmware-dhcp/action/config_dhcp.rb
|
57
|
-
- lib/vagrant-vmware-dhcp/action/
|
58
|
-
- lib/vagrant-vmware-dhcp/action/config_dhcp_linux.rb
|
59
|
-
- lib/vagrant-vmware-dhcp/action/config_dhcp_windows.rb
|
57
|
+
- lib/vagrant-vmware-dhcp/action/prune_dhcp.rb
|
60
58
|
- lib/vagrant-vmware-dhcp/action/set_mac.rb
|
61
59
|
- lib/vagrant-vmware-dhcp/config.rb
|
60
|
+
- lib/vagrant-vmware-dhcp/dhcp.rb
|
61
|
+
- lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager.rb
|
62
|
+
- lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager_darwin.rb
|
63
|
+
- lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager_linux.rb
|
64
|
+
- lib/vagrant-vmware-dhcp/dhcp_manager/dhcp_manager_windows.rb
|
62
65
|
- lib/vagrant-vmware-dhcp/plugin.rb
|
63
66
|
- lib/vagrant-vmware-dhcp/version.rb
|
64
67
|
- locales/en.yml
|
@@ -1,106 +0,0 @@
|
|
1
|
-
require "log4r"
|
2
|
-
require "digest"
|
3
|
-
|
4
|
-
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
5
|
-
module VagrantPlugins
|
6
|
-
module VagrantVmwareDhcp
|
7
|
-
module Action
|
8
|
-
class ConfigDhcpDarwin < ConfigDhcp
|
9
|
-
|
10
|
-
protected
|
11
|
-
|
12
|
-
def dhcpd_conf_location(network)
|
13
|
-
# Locations from https://pubs.vmware.com/workstation-9/index.jsp?topic=%2Fcom.vmware.ws.using.doc%2FGUID-04D783E1-3AB9-4D98-9891-2C58215905CC.html
|
14
|
-
|
15
|
-
location = "/Library/Preferences/VMware Fusion/#{network[:vnet]}/dhcpd.conf"
|
16
|
-
|
17
|
-
@logger.debug("Using dhcpd.conf at #{location}")
|
18
|
-
|
19
|
-
return location
|
20
|
-
end
|
21
|
-
|
22
|
-
def prune_dhcpd_conf(network)
|
23
|
-
conf_location = dhcpd_conf_location(network)
|
24
|
-
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
25
|
-
|
26
|
-
mac = network[:mac]
|
27
|
-
ip = network[:ip]
|
28
|
-
|
29
|
-
before = File.open(conf_location).read
|
30
|
-
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
31
|
-
|
32
|
-
command = []
|
33
|
-
command << "sudo" if !File.writable?(conf_location)
|
34
|
-
command += [
|
35
|
-
"sed", "-E", "-e",
|
36
|
-
"/^# VAGRANT-BEGIN: #{mac}/," +
|
37
|
-
"/^# VAGRANT-END: #{mac}/ d",
|
38
|
-
"-ibak",
|
39
|
-
conf_location
|
40
|
-
]
|
41
|
-
|
42
|
-
system(*command)
|
43
|
-
|
44
|
-
command = []
|
45
|
-
command << "sudo" if !File.writable?(conf_location)
|
46
|
-
command += [
|
47
|
-
"sed", "-E", "-e",
|
48
|
-
"/^# VAGRANT-BEGIN: #{ip}/," +
|
49
|
-
"/^# VAGRANT-END: #{ip}/ d",
|
50
|
-
"-ibak",
|
51
|
-
conf_location
|
52
|
-
]
|
53
|
-
|
54
|
-
system(*command)
|
55
|
-
|
56
|
-
after = File.open(conf_location).read
|
57
|
-
@logger.debug("After, dhcpd.conf content is #{after}")
|
58
|
-
end
|
59
|
-
|
60
|
-
def write_dhcpd_conf(network)
|
61
|
-
conf_location = dhcpd_conf_location(network)
|
62
|
-
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
63
|
-
|
64
|
-
sudo_command = ""
|
65
|
-
sudo_command = "sudo " if !File.writable?(conf_location)
|
66
|
-
|
67
|
-
output = get_dhcpd_section(network)
|
68
|
-
|
69
|
-
@logger.debug("DHCPD template for interface #{network[:vnet]} is #{output}")
|
70
|
-
|
71
|
-
before = File.open(conf_location).read
|
72
|
-
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
73
|
-
|
74
|
-
output.split("\n").each do |line|
|
75
|
-
line = Vagrant::Util::ShellQuote.escape(line, "'")
|
76
|
-
system(%Q[echo '#{line}' | #{sudo_command}tee -a '#{escaped_conf_location}' >/dev/null])
|
77
|
-
end
|
78
|
-
|
79
|
-
after = File.open(conf_location).read
|
80
|
-
@logger.debug("After, dhcpd.conf content is #{after}")
|
81
|
-
end
|
82
|
-
|
83
|
-
def trigger_dhcpd_update
|
84
|
-
# Per http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026510
|
85
|
-
|
86
|
-
vmnet_cli = "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli"
|
87
|
-
|
88
|
-
configureCommand = [ "sudo", vmnet_cli, "--configure" ].flatten
|
89
|
-
stopCommand = [ "sudo", vmnet_cli, "--stop" ].flatten
|
90
|
-
startCommand = [ "sudo", vmnet_cli, "--start" ].flatten
|
91
|
-
statusCommand = [ "sudo", vmnet_cli, "--status" ].flatten
|
92
|
-
|
93
|
-
Vagrant::Util::Subprocess.execute(*configureCommand)
|
94
|
-
Vagrant::Util::Subprocess.execute(*stopCommand)
|
95
|
-
Vagrant::Util::Subprocess.execute(*startCommand)
|
96
|
-
r = Vagrant::Util::Subprocess.execute(*statusCommand)
|
97
|
-
|
98
|
-
if r.exit_code != 0
|
99
|
-
@env[:ui].error("VMNet status exited with code #{r.exit_code} and output:\n#{r.stdout.chomp}")
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
@@ -1,106 +0,0 @@
|
|
1
|
-
require "log4r"
|
2
|
-
require "digest"
|
3
|
-
|
4
|
-
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
5
|
-
module VagrantPlugins
|
6
|
-
module VagrantVmwareDhcp
|
7
|
-
module Action
|
8
|
-
class ConfigDhcpLinux < ConfigDhcp
|
9
|
-
|
10
|
-
protected
|
11
|
-
|
12
|
-
def dhcpd_conf_location(network)
|
13
|
-
# Locations from https://pubs.vmware.com/workstation-9/index.jsp?topic=%2Fcom.vmware.ws.using.doc%2FGUID-04D783E1-3AB9-4D98-9891-2C58215905CC.html
|
14
|
-
|
15
|
-
location = "/etc/vmware/#{network[:vnet]}/dhcp/dhcp.conf"
|
16
|
-
|
17
|
-
@logger.debug("Using dhcpd.conf at #{location}")
|
18
|
-
|
19
|
-
return location
|
20
|
-
end
|
21
|
-
|
22
|
-
def prune_dhcpd_conf(network)
|
23
|
-
conf_location = dhcpd_conf_location(network)
|
24
|
-
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
25
|
-
|
26
|
-
mac = network[:mac]
|
27
|
-
ip = network[:ip]
|
28
|
-
|
29
|
-
before = File.open(conf_location).read
|
30
|
-
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
31
|
-
|
32
|
-
command = []
|
33
|
-
command << "sudo" if !File.writable?(conf_location)
|
34
|
-
command += [
|
35
|
-
"sed", "-E", "-e",
|
36
|
-
"/^# VAGRANT-BEGIN: #{mac}/," +
|
37
|
-
"/^# VAGRANT-END: #{mac}/ d",
|
38
|
-
"-ibak",
|
39
|
-
conf_location
|
40
|
-
]
|
41
|
-
|
42
|
-
system(*command)
|
43
|
-
|
44
|
-
command = []
|
45
|
-
command << "sudo" if !File.writable?(conf_location)
|
46
|
-
command += [
|
47
|
-
"sed", "-E", "-e",
|
48
|
-
"/^# VAGRANT-BEGIN: #{ip}/," +
|
49
|
-
"/^# VAGRANT-END: #{ip}/ d",
|
50
|
-
"-ibak",
|
51
|
-
conf_location
|
52
|
-
]
|
53
|
-
|
54
|
-
system(*command)
|
55
|
-
|
56
|
-
after = File.open(conf_location).read
|
57
|
-
@logger.debug("After, dhcpd.conf content is #{after}")
|
58
|
-
end
|
59
|
-
|
60
|
-
def write_dhcpd_conf(network)
|
61
|
-
conf_location = dhcpd_conf_location(network)
|
62
|
-
escaped_conf_location = Vagrant::Util::ShellQuote.escape(conf_location, "'")
|
63
|
-
|
64
|
-
sudo_command = ""
|
65
|
-
sudo_command = "sudo " if !File.writable?(conf_location)
|
66
|
-
|
67
|
-
output = get_dhcpd_section(network)
|
68
|
-
|
69
|
-
@logger.debug("DHCPD template for interface #{network[:vnet]} is #{output}")
|
70
|
-
|
71
|
-
before = File.open(conf_location).read
|
72
|
-
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
73
|
-
|
74
|
-
output.split("\n").each do |line|
|
75
|
-
line = Vagrant::Util::ShellQuote.escape(line, "'")
|
76
|
-
system(%Q[echo '#{line}' | #{sudo_command}tee -a '#{escaped_conf_location}' >/dev/null])
|
77
|
-
end
|
78
|
-
|
79
|
-
after = File.open(conf_location).read
|
80
|
-
@logger.debug("After, dhcpd.conf content is #{after}")
|
81
|
-
end
|
82
|
-
|
83
|
-
def trigger_dhcpd_update
|
84
|
-
# Per http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026510
|
85
|
-
|
86
|
-
vmnet_cli = "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli"
|
87
|
-
|
88
|
-
configureCommand = [ "sudo", vmnet_cli, "--configure" ].flatten
|
89
|
-
stopCommand = [ "sudo", vmnet_cli, "--stop" ].flatten
|
90
|
-
startCommand = [ "sudo", vmnet_cli, "--start" ].flatten
|
91
|
-
statusCommand = [ "sudo", vmnet_cli, "--status" ].flatten
|
92
|
-
|
93
|
-
Vagrant::Util::Subprocess.execute(*configureCommand)
|
94
|
-
Vagrant::Util::Subprocess.execute(*stopCommand)
|
95
|
-
Vagrant::Util::Subprocess.execute(*startCommand)
|
96
|
-
r = Vagrant::Util::Subprocess.execute(*statusCommand)
|
97
|
-
|
98
|
-
if r.exit_code != 0
|
99
|
-
@env[:ui].error("VMNet status exited with code #{r.exit_code} and output:\n#{r.stdout.chomp}")
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require "log4r"
|
2
|
-
require "digest"
|
3
|
-
|
4
|
-
# Someone who's had some sleep recently is welcome to come fill in comments here...
|
5
|
-
module VagrantPlugins
|
6
|
-
module VagrantVmwareDhcp
|
7
|
-
module Action
|
8
|
-
class ConfigDhcpWindows < ConfigDhcp
|
9
|
-
|
10
|
-
protected
|
11
|
-
|
12
|
-
def dhcpd_conf_location(network)
|
13
|
-
# Locations from https://pubs.vmware.com/workstation-9/index.jsp?topic=%2Fcom.vmware.ws.using.doc%2FGUID-04D783E1-3AB9-4D98-9891-2C58215905CC.html
|
14
|
-
|
15
|
-
if File.exist?('c:\ProgramData\VMware\vmnetdhcp.conf')
|
16
|
-
location = 'C:\ProgramData\VMware\vmnetdhcp.conf'
|
17
|
-
elsif File.exist?('C:\Documents and Settings\All Users\Application Data\VMware\vmnetdhcp.conf')
|
18
|
-
location = 'C:\Documents and Settings\All Users\Application Data\VMware\vmnetdhcp.conf'
|
19
|
-
end
|
20
|
-
|
21
|
-
@logger.debug("Using dhcpd.conf at #{location}")
|
22
|
-
|
23
|
-
return location
|
24
|
-
end
|
25
|
-
|
26
|
-
def prune_dhcpd_conf(network)
|
27
|
-
conf_location = dhcpd_conf_location(network)
|
28
|
-
|
29
|
-
mac = network[:mac]
|
30
|
-
ip = network[:ip]
|
31
|
-
|
32
|
-
before = File.open(conf_location).read
|
33
|
-
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
34
|
-
|
35
|
-
intermediate = before.gsub(/^# VAGRANT-BEGIN: #{mac}.*^# VAGRANT-END: #{mac}\s+/m, '')
|
36
|
-
after = intermediate.gsub(/^# VAGRANT-BEGIN: #{ip}.*^# VAGRANT-END: #{ip}\s+/m, '')
|
37
|
-
|
38
|
-
File.open(conf_location, "w") { |fd| fd.write(after) }
|
39
|
-
|
40
|
-
after = File.open(conf_location).read
|
41
|
-
@logger.debug("After altering, dhcpd.conf content is #{after}")
|
42
|
-
end
|
43
|
-
|
44
|
-
def write_dhcpd_conf(network)
|
45
|
-
conf_location = dhcpd_conf_location(network)
|
46
|
-
|
47
|
-
section = get_dhcpd_section(network)
|
48
|
-
|
49
|
-
@logger.debug("DHCPD template for interface #{network[:vnet]} is #{section}")
|
50
|
-
|
51
|
-
before = File.open(conf_location).read
|
52
|
-
@logger.debug("Before altering, dhcpd.conf content is #{before}")
|
53
|
-
|
54
|
-
after = "#{before}\n\n#{section}\n"
|
55
|
-
|
56
|
-
File.open(conf_location, "w") { |fd| fd.write(after) }
|
57
|
-
|
58
|
-
after = File.open(conf_location).read
|
59
|
-
@logger.debug("After, dhcpd.conf content is #{after}")
|
60
|
-
end
|
61
|
-
|
62
|
-
def trigger_dhcpd_update
|
63
|
-
# This is non-authoritative, but is the obvious solution and seems to work.
|
64
|
-
|
65
|
-
stopCommand = [ "NET", "STOP", "VMware DHCP Service" ]
|
66
|
-
startCommand = [ "NET", "START", "VMware DHCP Service" ]
|
67
|
-
|
68
|
-
Vagrant::Util::Subprocess.execute(*stopCommand)
|
69
|
-
r = Vagrant::Util::Subprocess.execute(*startCommand)
|
70
|
-
|
71
|
-
if r.exit_code != 0
|
72
|
-
@env[:ui].error("VMNet dhcp start exited with code #{r.exit_code} and output:\n#{r.stdout.chomp}")
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|