vagrant-parallels 1.4.2 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -8
- data/Rakefile +2 -2
- data/lib/vagrant-parallels.rb +7 -44
- data/lib/vagrant-parallels/action.rb +45 -45
- data/lib/vagrant-parallels/action/boot.rb +1 -2
- data/lib/vagrant-parallels/action/clear_network_interfaces.rb +1 -1
- data/lib/vagrant-parallels/action/customize.rb +1 -1
- data/lib/vagrant-parallels/action/destroy.rb +1 -1
- data/lib/vagrant-parallels/action/destroy_unused_network_interfaces.rb +2 -2
- data/lib/vagrant-parallels/action/forced_halt.rb +1 -1
- data/lib/vagrant-parallels/action/forward_ports.rb +2 -2
- data/lib/vagrant-parallels/action/handle_guest_tools.rb +9 -10
- data/lib/vagrant-parallels/action/import.rb +36 -24
- data/lib/vagrant-parallels/action/network.rb +37 -37
- data/lib/vagrant-parallels/action/package.rb +3 -3
- data/lib/vagrant-parallels/action/package_config_files.rb +3 -2
- data/lib/vagrant-parallels/action/prepare_nfs_settings.rb +2 -2
- data/lib/vagrant-parallels/action/resume.rb +1 -1
- data/lib/vagrant-parallels/action/sane_defaults.rb +0 -1
- data/lib/vagrant-parallels/action/set_name.rb +7 -7
- data/lib/vagrant-parallels/action/setup_package_files.rb +6 -6
- data/lib/vagrant-parallels/action/suspend.rb +1 -1
- data/lib/vagrant-parallels/config.rb +9 -11
- data/lib/vagrant-parallels/driver/meta.rb +1 -1
- data/lib/vagrant-parallels/driver/pd_10.rb +1 -1
- data/lib/vagrant-parallels/driver/pd_11.rb +1 -1
- data/lib/vagrant-parallels/driver/pd_8.rb +19 -19
- data/lib/vagrant-parallels/driver/pd_9.rb +1 -1
- data/lib/vagrant-parallels/errors.rb +2 -2
- data/lib/vagrant-parallels/guest_cap/linux/install_parallels_tools.rb +5 -5
- data/lib/vagrant-parallels/guest_cap/linux/mount_parallels_shared_folder.rb +3 -3
- data/lib/vagrant-parallels/model/forwarded_port.rb +1 -1
- data/lib/vagrant-parallels/plugin.rb +65 -30
- data/lib/vagrant-parallels/provider.rb +8 -8
- data/lib/vagrant-parallels/synced_folder.rb +6 -6
- data/lib/vagrant-parallels/util/compile_forwarded_ports.rb +1 -1
- data/lib/vagrant-parallels/version.rb +1 -1
- data/tasks/acceptance.rake +4 -4
- data/tasks/test.rake +1 -1
- data/test/acceptance/base.rb +2 -2
- data/test/acceptance/provider/linked_clone_spec.rb +2 -2
- data/test/acceptance/shared/context_parallels.rb +1 -1
- data/test/acceptance/skeletons/linked_clone/Vagrantfile +3 -3
- data/test/unit/base.rb +6 -6
- data/test/unit/config_test.rb +22 -22
- data/test/unit/driver/pd_10_test.rb +7 -7
- data/test/unit/driver/pd_8_test.rb +4 -4
- data/test/unit/driver/pd_9_test.rb +6 -6
- data/test/unit/support/shared/pd_driver_examples.rb +97 -97
- data/test/unit/synced_folder_test.rb +11 -11
- data/vagrant-parallels.gemspec +17 -19
- metadata +2 -32
- data/config/i18n-tasks.yml.erb +0 -18
- data/test/unit/locales/locales_test.rb +0 -14
@@ -5,13 +5,13 @@ module VagrantPlugins
|
|
5
5
|
def initialize(app, env)
|
6
6
|
@app = app
|
7
7
|
|
8
|
-
env[
|
9
|
-
env[
|
8
|
+
env['package.include'] ||= []
|
9
|
+
env['package.vagrantfile'] ||= nil
|
10
10
|
end
|
11
11
|
|
12
12
|
def call(env)
|
13
13
|
files = {}
|
14
|
-
env[
|
14
|
+
env['package.include'].each do |file|
|
15
15
|
source = Pathname.new(file)
|
16
16
|
|
17
17
|
# If the source is relative then we add the file as-is to the include
|
@@ -28,9 +28,9 @@ module VagrantPlugins
|
|
28
28
|
files[file] = dest
|
29
29
|
end
|
30
30
|
|
31
|
-
if env[
|
31
|
+
if env['package.vagrantfile']
|
32
32
|
# Vagrantfiles are treated special and mapped to a specific file
|
33
|
-
files[env[
|
33
|
+
files[env['package.vagrantfile']] = '_Vagrantfile'
|
34
34
|
end
|
35
35
|
|
36
36
|
# Verify the mapping
|
@@ -40,7 +40,7 @@ module VagrantPlugins
|
|
40
40
|
end
|
41
41
|
|
42
42
|
# Save the mapping
|
43
|
-
env[
|
43
|
+
env['package.files'] = files
|
44
44
|
|
45
45
|
@app.call(env)
|
46
46
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module VagrantPlugins
|
2
2
|
module Parallels
|
3
|
-
class Config < Vagrant.plugin(
|
3
|
+
class Config < Vagrant.plugin('2', :config)
|
4
4
|
attr_accessor :check_guest_tools
|
5
5
|
attr_reader :customizations
|
6
6
|
attr_accessor :destroy_unused_network_interfaces
|
@@ -34,7 +34,7 @@ module VagrantPlugins
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def customize(*command)
|
37
|
-
event = command.first.is_a?(String) ? command.shift :
|
37
|
+
event = command.first.is_a?(String) ? command.shift : 'pre-boot'
|
38
38
|
command = command[0]
|
39
39
|
@customizations << [event, command]
|
40
40
|
end
|
@@ -45,11 +45,11 @@ module VagrantPlugins
|
|
45
45
|
|
46
46
|
# @param size [Integer, String] the memory size in MB
|
47
47
|
def memory=(size)
|
48
|
-
customize(
|
48
|
+
customize('pre-boot', ['set', :id, '--memsize', size.to_s])
|
49
49
|
end
|
50
50
|
|
51
51
|
def cpus=(count)
|
52
|
-
customize(
|
52
|
+
customize('pre-boot', ['set', :id, '--cpus', count.to_i])
|
53
53
|
end
|
54
54
|
|
55
55
|
def regen_box_uuid=(value)
|
@@ -97,21 +97,19 @@ module VagrantPlugins
|
|
97
97
|
valid_events = ['pre-import', 'post-import', 'pre-boot', 'post-boot', 'post-comm']
|
98
98
|
@customizations.each do |event, _|
|
99
99
|
if !valid_events.include?(event)
|
100
|
-
errors << I18n.t(
|
100
|
+
errors << I18n.t('vagrant_parallels.config.invalid_event',
|
101
101
|
event: event.to_s,
|
102
|
-
valid_events: valid_events.join(
|
102
|
+
valid_events: valid_events.join(', '))
|
103
103
|
end
|
104
104
|
end
|
105
105
|
@customizations.each do |event, command|
|
106
|
-
if event ==
|
107
|
-
errors << I18n.t(
|
106
|
+
if event == 'pre-import' && command.index(:id)
|
107
|
+
errors << I18n.t('vagrant_parallels.config.id_in_pre_import')
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
-
{
|
112
|
-
|
111
|
+
{ 'Parallels Provider' => errors }
|
113
112
|
end
|
114
|
-
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
@@ -4,7 +4,7 @@ require 'securerandom'
|
|
4
4
|
|
5
5
|
require 'vagrant/util/platform'
|
6
6
|
|
7
|
-
|
7
|
+
require_relative 'base'
|
8
8
|
|
9
9
|
module VagrantPlugins
|
10
10
|
module Parallels
|
@@ -23,7 +23,7 @@ module VagrantPlugins
|
|
23
23
|
# 'Shared'(vnic0) and 'Host-Only'(vnic1) are default in Parallels Desktop
|
24
24
|
# They should not be deleted anyway.
|
25
25
|
networks.keep_if do |net|
|
26
|
-
net['Type'] ==
|
26
|
+
net['Type'] == 'host-only' &&
|
27
27
|
net['Bound To'].match(/^(?>vnic|Parallels Host-Only #)(\d+)$/)[1].to_i >= 2
|
28
28
|
end
|
29
29
|
|
@@ -58,9 +58,9 @@ module VagrantPlugins
|
|
58
58
|
adapters.each do |adapter|
|
59
59
|
args = []
|
60
60
|
if existing_adapters.include? "net#{adapter[:adapter]}"
|
61
|
-
args.concat([
|
61
|
+
args.concat(['--device-set',"net#{adapter[:adapter]}", '--enable'])
|
62
62
|
else
|
63
|
-
args.concat([
|
63
|
+
args.concat(['--device-add', 'net'])
|
64
64
|
end
|
65
65
|
|
66
66
|
if adapter[:type] == :hostonly
|
@@ -73,28 +73,28 @@ module VagrantPlugins
|
|
73
73
|
# The only difference is the destination interface:
|
74
74
|
# - in host-only (private) network it will be bridged to the 'vnicX' device
|
75
75
|
# - in real bridge (public) network it will be bridged to the assigned device
|
76
|
-
args.concat([
|
76
|
+
args.concat(['--type', 'bridged', '--iface', net_info['Bound To']])
|
77
77
|
elsif adapter[:type] == :bridged
|
78
|
-
args.concat([
|
78
|
+
args.concat(['--type', 'bridged', '--iface', adapter[:bridge]])
|
79
79
|
elsif adapter[:type] == :shared
|
80
|
-
args.concat([
|
80
|
+
args.concat(['--type', 'shared'])
|
81
81
|
end
|
82
82
|
|
83
83
|
if adapter[:mac_address]
|
84
|
-
args.concat([
|
84
|
+
args.concat(['--mac', adapter[:mac_address]])
|
85
85
|
end
|
86
86
|
|
87
87
|
if adapter[:nic_type]
|
88
|
-
args.concat([
|
88
|
+
args.concat(['--adapter-type', adapter[:nic_type].to_s])
|
89
89
|
end
|
90
90
|
|
91
|
-
execute_prlctl(
|
91
|
+
execute_prlctl('set', @uuid, *args)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
def read_host_only_interfaces
|
96
96
|
net_list = read_virtual_networks
|
97
|
-
net_list.keep_if { |net| net['Type'] ==
|
97
|
+
net_list.keep_if { |net| net['Type'] == 'host-only' }
|
98
98
|
|
99
99
|
hostonly_ifaces = []
|
100
100
|
net_list.each do |iface|
|
@@ -105,7 +105,7 @@ module VagrantPlugins
|
|
105
105
|
info[:ip] = net_info['Parallels adapter']['IP address']
|
106
106
|
info[:netmask] = net_info['Parallels adapter']['Subnet mask']
|
107
107
|
# Such interfaces are always in 'Up'
|
108
|
-
info[:status] =
|
108
|
+
info[:status] = 'Up'
|
109
109
|
|
110
110
|
# There may be a fake DHCPv4 parameters
|
111
111
|
# We can trust them only if adapter IP and DHCP IP are in the same subnet
|
@@ -128,23 +128,23 @@ module VagrantPlugins
|
|
128
128
|
|
129
129
|
# Get enabled VM's network interfaces
|
130
130
|
ifaces = read_settings.fetch('Hardware', {}).keep_if do |dev, params|
|
131
|
-
dev.start_with?('net') and params.fetch(
|
131
|
+
dev.start_with?('net') and params.fetch('enabled', true)
|
132
132
|
end
|
133
133
|
ifaces.each do |name, params|
|
134
134
|
adapter = name.match(/^net(\d+)$/)[1].to_i
|
135
135
|
nics[adapter] ||= {}
|
136
136
|
|
137
|
-
if params['type'] ==
|
137
|
+
if params['type'] == 'shared'
|
138
138
|
nics[adapter][:type] = :shared
|
139
|
-
elsif params['type'] ==
|
139
|
+
elsif params['type'] == 'host'
|
140
140
|
# It is PD internal host-only network and it is bounded to 'vnic1'
|
141
141
|
nics[adapter][:type] = :hostonly
|
142
|
-
nics[adapter][:hostonly] =
|
143
|
-
elsif params['type'] ==
|
142
|
+
nics[adapter][:hostonly] = 'vnic1'
|
143
|
+
elsif params['type'] == 'bridged' and params.fetch('iface','').start_with?('vnic')
|
144
144
|
# Bridged to the 'vnicXX'? Then it is a host-only, actually.
|
145
145
|
nics[adapter][:type] = :hostonly
|
146
146
|
nics[adapter][:hostonly] = params.fetch('iface','')
|
147
|
-
elsif params['type'] ==
|
147
|
+
elsif params['type'] == 'bridged'
|
148
148
|
nics[adapter][:type] = :bridged
|
149
149
|
nics[adapter][:bridge] = params.fetch('iface','')
|
150
150
|
end
|
@@ -160,7 +160,7 @@ module VagrantPlugins
|
|
160
160
|
name: net_info['Bound To'],
|
161
161
|
ip: net_info['Parallels adapter']['IP address'],
|
162
162
|
netmask: net_info['Parallels adapter']['Subnet mask'],
|
163
|
-
status:
|
163
|
+
status: 'Up'
|
164
164
|
}
|
165
165
|
|
166
166
|
if net_info.key?('DHCPv4 server')
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'vagrant'
|
2
2
|
|
3
3
|
module VagrantPlugins
|
4
4
|
module Parallels
|
5
5
|
module Errors
|
6
6
|
class VagrantParallelsError < Vagrant::Errors::VagrantError
|
7
|
-
error_namespace(
|
7
|
+
error_namespace('vagrant_parallels.errors')
|
8
8
|
end
|
9
9
|
|
10
10
|
class DhcpLeasesNotAccessible < VagrantParallelsError
|
@@ -7,14 +7,14 @@ module VagrantPlugins
|
|
7
7
|
if ptiagent_usable?(machine)
|
8
8
|
# Argument '--info' means that Parallels Tools version will be
|
9
9
|
# checked before the installing.
|
10
|
-
machine.communicate.sudo(
|
10
|
+
machine.communicate.sudo('ptiagent-cmd --info')
|
11
11
|
else
|
12
12
|
machine.communicate.tap do |comm|
|
13
13
|
tools_iso_path = File.expand_path(
|
14
|
-
machine.provider.driver.read_guest_tools_iso_path(
|
14
|
+
machine.provider.driver.read_guest_tools_iso_path('linux'),
|
15
15
|
machine.env.root_path
|
16
16
|
)
|
17
|
-
remote_file =
|
17
|
+
remote_file = '/tmp/prl-tools-lin.iso'
|
18
18
|
mount_point = "/media/prl-tools-lin_#{rand(100000)}/"
|
19
19
|
|
20
20
|
comm.upload(tools_iso_path, remote_file)
|
@@ -44,8 +44,8 @@ module VagrantPlugins
|
|
44
44
|
# 'ptiagent-cmd' binary should be available on the guest
|
45
45
|
|
46
46
|
machine.provider_name == :parallels &&
|
47
|
-
Gem::Version.new(machine.provider.driver.version) >= Gem::Version.new(
|
48
|
-
machine.communicate.test(
|
47
|
+
Gem::Version.new(machine.provider.driver.version) >= Gem::Version.new('9') &&
|
48
|
+
machine.communicate.test('which ptiagent-cmd', :sudo => true)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -36,12 +36,12 @@ module VagrantPlugins
|
|
36
36
|
|
37
37
|
# First mount command uses getent to get the group
|
38
38
|
mount_options = "-o uid=#{mount_uid},gid=#{mount_gid}"
|
39
|
-
mount_options += ",#{options[:mount_options].join(
|
39
|
+
mount_options += ",#{options[:mount_options].join(',')}" if options[:mount_options]
|
40
40
|
mount_commands << "mount -t prl_fs #{mount_options} #{name} #{expanded_guest_path}"
|
41
41
|
|
42
42
|
# Second mount command uses the old style `id -g`
|
43
43
|
mount_options = "-o uid=#{mount_uid},gid=#{mount_gid_old}"
|
44
|
-
mount_options += ",#{options[:mount_options].join(
|
44
|
+
mount_options += ",#{options[:mount_options].join(',')}" if options[:mount_options]
|
45
45
|
mount_commands << "mount -t prl_fs #{mount_options} #{name} #{expanded_guest_path}"
|
46
46
|
|
47
47
|
# Clear prior symlink if exists
|
@@ -80,7 +80,7 @@ module VagrantPlugins
|
|
80
80
|
end
|
81
81
|
|
82
82
|
# Emit an upstart event if we can
|
83
|
-
if machine.communicate.test(
|
83
|
+
if machine.communicate.test('test -x /sbin/initctl')
|
84
84
|
machine.communicate.sudo(
|
85
85
|
"/sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=#{expanded_guest_path}")
|
86
86
|
end
|
@@ -37,7 +37,7 @@ module VagrantPlugins
|
|
37
37
|
options ||= {}
|
38
38
|
@auto_correct = false
|
39
39
|
@auto_correct = options[:auto_correct] if options.has_key?(:auto_correct)
|
40
|
-
@protocol = options[:protocol] ||
|
40
|
+
@protocol = options[:protocol] || 'tcp'
|
41
41
|
end
|
42
42
|
|
43
43
|
# This corrects the host port and changes it to the given new port.
|
@@ -1,105 +1,140 @@
|
|
1
1
|
begin
|
2
|
-
require
|
2
|
+
require 'vagrant'
|
3
3
|
rescue LoadError
|
4
|
-
raise
|
4
|
+
raise 'The Vagrant Parallels plugin must be run within Vagrant.'
|
5
5
|
end
|
6
6
|
|
7
7
|
# This is a sanity check to make sure no one is attempting to install
|
8
8
|
# this into an early Vagrant version.
|
9
|
-
if Vagrant::VERSION <
|
10
|
-
raise
|
9
|
+
if Vagrant::VERSION < '1.5.0'
|
10
|
+
raise 'The Vagrant Parallels plugin is only compatible with Vagrant 1.5+'
|
11
11
|
end
|
12
12
|
|
13
13
|
module VagrantPlugins
|
14
14
|
module Parallels
|
15
|
-
|
16
|
-
|
17
|
-
name "vagrant-parallels"
|
15
|
+
class Plugin < Vagrant.plugin('2')
|
16
|
+
name 'vagrant-parallels'
|
18
17
|
description <<-EOF
|
19
18
|
The Parallels provider allows Vagrant to manage and control
|
20
|
-
Parallels
|
19
|
+
Parallels Desktop virtual machines.
|
21
20
|
EOF
|
22
21
|
|
23
22
|
provider(:parallels, parallel: true, priority: 7) do
|
24
|
-
|
23
|
+
# Setup logging and i18n
|
24
|
+
setup_logging
|
25
|
+
setup_i18n
|
26
|
+
|
27
|
+
require_relative 'provider'
|
25
28
|
Provider
|
26
29
|
end
|
27
30
|
|
28
31
|
config(:parallels, :provider) do
|
29
|
-
|
32
|
+
require_relative 'config'
|
30
33
|
Config
|
31
34
|
end
|
32
35
|
|
33
36
|
guest_capability(:darwin, :mount_parallels_shared_folder) do
|
34
|
-
require_relative
|
37
|
+
require_relative 'guest_cap/darwin/mount_parallels_shared_folder'
|
35
38
|
GuestDarwinCap::MountParallelsSharedFolder
|
36
39
|
end
|
37
40
|
|
38
41
|
guest_capability(:darwin, :unmount_parallels_shared_folder) do
|
39
|
-
require_relative
|
42
|
+
require_relative 'guest_cap/darwin/mount_parallels_shared_folder'
|
40
43
|
GuestDarwinCap::MountParallelsSharedFolder
|
41
44
|
end
|
42
45
|
|
43
46
|
guest_capability(:linux, :mount_parallels_shared_folder) do
|
44
|
-
require_relative
|
47
|
+
require_relative 'guest_cap/linux/mount_parallels_shared_folder'
|
45
48
|
GuestLinuxCap::MountParallelsSharedFolder
|
46
49
|
end
|
47
50
|
|
48
51
|
guest_capability(:linux, :unmount_parallels_shared_folder) do
|
49
|
-
require_relative
|
52
|
+
require_relative 'guest_cap/linux/mount_parallels_shared_folder'
|
50
53
|
GuestLinuxCap::MountParallelsSharedFolder
|
51
54
|
end
|
52
55
|
|
53
56
|
guest_capability(:linux, :prepare_psf_services) do
|
54
|
-
require_relative
|
57
|
+
require_relative 'guest_cap/linux/mount_parallels_shared_folder'
|
55
58
|
GuestLinuxCap::MountParallelsSharedFolder
|
56
59
|
end
|
57
60
|
|
58
61
|
guest_capability(:linux, :install_parallels_tools) do
|
59
|
-
require_relative
|
62
|
+
require_relative 'guest_cap/linux/install_parallels_tools'
|
60
63
|
GuestLinuxCap::InstallParallelsTools
|
61
64
|
end
|
62
65
|
|
63
66
|
provider_capability(:parallels, :public_address) do
|
64
|
-
require_relative
|
67
|
+
require_relative 'cap/public_address'
|
65
68
|
Cap::PublicAddress
|
66
69
|
end
|
67
70
|
|
68
71
|
provider_capability(:parallels, :host_address) do
|
69
|
-
require_relative
|
72
|
+
require_relative 'cap/host_address'
|
70
73
|
Cap::HostAddress
|
71
74
|
end
|
72
75
|
|
73
76
|
provider_capability(:parallels, :nic_mac_addresses) do
|
74
|
-
require_relative
|
77
|
+
require_relative 'cap/nic_mac_addresses'
|
75
78
|
Cap::NicMacAddresses
|
76
79
|
end
|
77
80
|
|
78
81
|
synced_folder(:parallels) do
|
79
|
-
|
82
|
+
require_relative 'synced_folder'
|
80
83
|
SyncedFolder
|
81
84
|
end
|
82
85
|
|
83
|
-
|
86
|
+
# This initializes the internationalization strings.
|
87
|
+
def self.setup_i18n
|
88
|
+
I18n.load_path << File.expand_path('locales/en.yml', Parallels.source_root)
|
89
|
+
I18n.reload!
|
90
|
+
end
|
84
91
|
|
85
|
-
|
92
|
+
# This sets up our log level to be whatever VAGRANT_LOG is.
|
93
|
+
def self.setup_logging
|
94
|
+
require 'log4r'
|
95
|
+
|
96
|
+
level = nil
|
97
|
+
begin
|
98
|
+
level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase)
|
99
|
+
rescue NameError
|
100
|
+
# This means that the logging constant wasn't found,
|
101
|
+
# which is fine. We just keep `level` as `nil`. But
|
102
|
+
# we tell the user.
|
103
|
+
level = nil
|
104
|
+
end
|
105
|
+
|
106
|
+
# Some constants, such as "true" resolve to booleans, so the
|
107
|
+
# above error checking doesn't catch it. This will check to make
|
108
|
+
# sure that the log level is an integer, as Log4r requires.
|
109
|
+
level = nil if !level.is_a?(Integer)
|
110
|
+
|
111
|
+
# Set the logging level on all "vagrant" namespaced
|
112
|
+
# logs as long as we have a valid level.
|
113
|
+
if level
|
114
|
+
logger = Log4r::Logger.new('vagrant_parallels')
|
115
|
+
logger.outputters = Log4r::Outputter.stderr
|
116
|
+
logger.level = level
|
117
|
+
logger = nil
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
86
121
|
|
87
122
|
# Drop some autoloads in here to optimize the performance of loading
|
88
123
|
# our drivers only when they are needed.
|
89
124
|
module Driver
|
90
|
-
autoload :Meta, File.expand_path(
|
91
|
-
autoload :PD_8, File.expand_path(
|
92
|
-
autoload :PD_9, File.expand_path(
|
93
|
-
autoload :PD_10, File.expand_path(
|
94
|
-
autoload :PD_11, File.expand_path(
|
125
|
+
autoload :Meta, File.expand_path('../driver/meta', __FILE__)
|
126
|
+
autoload :PD_8, File.expand_path('../driver/pd_8', __FILE__)
|
127
|
+
autoload :PD_9, File.expand_path('../driver/pd_9', __FILE__)
|
128
|
+
autoload :PD_10, File.expand_path('../driver/pd_10', __FILE__)
|
129
|
+
autoload :PD_11, File.expand_path('../driver/pd_11', __FILE__)
|
95
130
|
end
|
96
131
|
|
97
132
|
module Model
|
98
|
-
autoload :ForwardedPort, File.expand_path(
|
133
|
+
autoload :ForwardedPort, File.expand_path('../model/forwarded_port', __FILE__)
|
99
134
|
end
|
100
135
|
|
101
136
|
module Util
|
102
|
-
autoload :CompileForwardedPorts, File.expand_path(
|
137
|
+
autoload :CompileForwardedPorts, File.expand_path('../util/compile_forwarded_ports', __FILE__)
|
103
138
|
end
|
104
139
|
end
|
105
|
-
end
|
140
|
+
end
|