vagrant-vmware-free 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.ruby-version +1 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +57 -0
- data/LICENSE +21 -0
- data/README.md +10 -0
- data/Rakefile +3 -0
- data/lib/vagrant_vmware_free.rb +5 -0
- data/lib/vagrant_vmware_free/action.rb +214 -0
- data/lib/vagrant_vmware_free/action/boot.rb +23 -0
- data/lib/vagrant_vmware_free/action/check_accessible.rb +23 -0
- data/lib/vagrant_vmware_free/action/check_created.rb +21 -0
- data/lib/vagrant_vmware_free/action/check_guest_additions.rb +45 -0
- data/lib/vagrant_vmware_free/action/check_running.rb +21 -0
- data/lib/vagrant_vmware_free/action/check_virtualbox.rb +22 -0
- data/lib/vagrant_vmware_free/action/clean_machine_folder.rb +43 -0
- data/lib/vagrant_vmware_free/action/clear_forwarded_ports.rb +18 -0
- data/lib/vagrant_vmware_free/action/clear_network_interfaces.rb +31 -0
- data/lib/vagrant_vmware_free/action/clear_shared_folders.rb +17 -0
- data/lib/vagrant_vmware_free/action/created.rb +20 -0
- data/lib/vagrant_vmware_free/action/customize.rb +43 -0
- data/lib/vagrant_vmware_free/action/destroy.rb +19 -0
- data/lib/vagrant_vmware_free/action/destroy_unused_network_interfaces.rb +23 -0
- data/lib/vagrant_vmware_free/action/discard_state.rb +20 -0
- data/lib/vagrant_vmware_free/action/export.rb +57 -0
- data/lib/vagrant_vmware_free/action/forced_halt.rb +25 -0
- data/lib/vagrant_vmware_free/action/forward_ports.rb +89 -0
- data/lib/vagrant_vmware_free/action/get_network_address.rb +27 -0
- data/lib/vagrant_vmware_free/action/import.rb +56 -0
- data/lib/vagrant_vmware_free/action/is_paused.rb +20 -0
- data/lib/vagrant_vmware_free/action/is_running.rb +20 -0
- data/lib/vagrant_vmware_free/action/is_saved.rb +20 -0
- data/lib/vagrant_vmware_free/action/match_mac_address.rb +21 -0
- data/lib/vagrant_vmware_free/action/message_already_running.rb +16 -0
- data/lib/vagrant_vmware_free/action/message_not_created.rb +16 -0
- data/lib/vagrant_vmware_free/action/message_not_running.rb +16 -0
- data/lib/vagrant_vmware_free/action/message_will_not_destroy.rb +17 -0
- data/lib/vagrant_vmware_free/action/network.rb +424 -0
- data/lib/vagrant_vmware_free/action/package.rb +20 -0
- data/lib/vagrant_vmware_free/action/package_vagrantfile.rb +33 -0
- data/lib/vagrant_vmware_free/action/prepare_forwarded_port_collision_params.rb +35 -0
- data/lib/vagrant_vmware_free/action/prepare_nfs_settings.rb +69 -0
- data/lib/vagrant_vmware_free/action/prune_nfs_exports.rb +20 -0
- data/lib/vagrant_vmware_free/action/resume.rb +26 -0
- data/lib/vagrant_vmware_free/action/sane_defaults.rb +91 -0
- data/lib/vagrant_vmware_free/action/set_name.rb +52 -0
- data/lib/vagrant_vmware_free/action/set_network.rb +17 -0
- data/lib/vagrant_vmware_free/action/setup_package_files.rb +51 -0
- data/lib/vagrant_vmware_free/action/share_folders.rb +128 -0
- data/lib/vagrant_vmware_free/action/suspend.rb +20 -0
- data/lib/vagrant_vmware_free/action/wait_for_vm_tools.rb +19 -0
- data/lib/vagrant_vmware_free/config.rb +38 -0
- data/lib/vagrant_vmware_free/driver/base.rb +14 -0
- data/lib/vagrant_vmware_free/driver/fusion.rb +17 -0
- data/lib/vagrant_vmware_free/driver/fusion_6.rb +188 -0
- data/lib/vagrant_vmware_free/driver/meta.rb +122 -0
- data/lib/vagrant_vmware_free/driver/vix.rb +19 -0
- data/lib/vagrant_vmware_free/driver/vix/functions.rb +38 -0
- data/lib/vagrant_vmware_free/driver/vix/helpers.rb +63 -0
- data/lib/vagrant_vmware_free/driver/vix/types.rb +143 -0
- data/lib/vagrant_vmware_free/errors.rb +9 -0
- data/lib/vagrant_vmware_free/plugin.rb +43 -0
- data/lib/vagrant_vmware_free/provider.rb +62 -0
- data/lib/vagrant_vmware_free/util/vmx.rb +48 -0
- data/vagrant-vmware-free.gemspec +21 -0
- metadata +190 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ProviderVMwareFree
|
3
|
+
module Action
|
4
|
+
class Suspend
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
if env[:machine].provider.state.id == :running
|
11
|
+
env[:ui].info I18n.t("vagrant.actions.vm.suspend.suspending")
|
12
|
+
env[:machine].provider.driver.suspend
|
13
|
+
end
|
14
|
+
|
15
|
+
@app.call(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ProviderVMwareFree
|
3
|
+
module Action
|
4
|
+
class WaitForVMTools
|
5
|
+
include VagrantPlugins::ProviderVMwareFree::Driver::VIX
|
6
|
+
|
7
|
+
def initialize(app, env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
wait_for_vmtools(env[:machine].provider.driver.vm_handle)
|
13
|
+
|
14
|
+
@app.call(env)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ProviderVMwareFree
|
3
|
+
class Config < Vagrant.plugin('2', :config)
|
4
|
+
attr_reader :name
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
# @auto_nat_dns_proxy = UNSET_VALUE
|
8
|
+
# @customizations = []
|
9
|
+
# @destroy_unused_network_interfaces = UNSET_VALUE
|
10
|
+
@name = UNSET_VALUE
|
11
|
+
# @network_adapters = {}
|
12
|
+
# @gui = UNSET_VALUE
|
13
|
+
|
14
|
+
# We require that network adapter 1 is a NAT device.
|
15
|
+
# network_adapter(1, :nat)
|
16
|
+
end
|
17
|
+
|
18
|
+
def finalize!
|
19
|
+
# Default is to auto the DNS proxy
|
20
|
+
# @auto_nat_dns_proxy = true if @auto_nat_dns_proxy == UNSET_VALUE
|
21
|
+
|
22
|
+
# if @destroy_unused_network_interfaces == UNSET_VALUE
|
23
|
+
# @destroy_unused_network_interfaces = false
|
24
|
+
# end
|
25
|
+
|
26
|
+
# Default is to not show a GUI
|
27
|
+
# @gui = false if @gui == UNSET_VALUE
|
28
|
+
|
29
|
+
# The default name is just nothing, and we default it
|
30
|
+
@name = nil if @name == UNSET_VALUE
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate(machine)
|
34
|
+
{}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require_relative 'base'
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module ProviderVMwareFree
|
6
|
+
module Driver
|
7
|
+
class Fusion < Base
|
8
|
+
def initialize(uuid)
|
9
|
+
super(uuid)
|
10
|
+
|
11
|
+
@logger = Log4r::Logger.new('vagrant::provider::vmware-free::fusion')
|
12
|
+
@uuid = uuid
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,188 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'securerandom'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module ProviderVMwareFree
|
7
|
+
module Driver
|
8
|
+
class Fusion_6 < Fusion
|
9
|
+
include VagrantPlugins::ProviderVMwareFree::Util::VMX
|
10
|
+
include VagrantPlugins::ProviderVMwareFree::Driver::VIX
|
11
|
+
INVENTORY = File.join(ENV['HOME'], '.vagrant.d', 'vmware.yml')
|
12
|
+
|
13
|
+
attr_reader :vmx_path
|
14
|
+
attr_reader :vm_handle
|
15
|
+
attr_accessor :ip_address
|
16
|
+
|
17
|
+
def initialize(uuid)
|
18
|
+
super(uuid)
|
19
|
+
@logger = Log4r::Logger.new('vagrant::provider::vmware-free::fusion_6')
|
20
|
+
@host_handle = get_host_handle
|
21
|
+
|
22
|
+
if @uuid
|
23
|
+
read_vms.each do |k, v|
|
24
|
+
@vmx_path = v[:config] if k == uuid
|
25
|
+
end
|
26
|
+
@vm_handle = get_vm_handle(@host_handle, @uuid)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def import(vmx_file, dest_file)
|
31
|
+
box_handle = open_vmx(@host_handle, vmx_file)
|
32
|
+
jobHandle = VixVM_Clone(box_handle, :VIX_INVALID_HANDLE, :VIX_CLONETYPE_FULL, dest_file, 0, :VIX_INVALID_HANDLE, nil, nil)
|
33
|
+
code, values = wait(jobHandle)
|
34
|
+
|
35
|
+
raise VIXError, "VixError: #{code}" if (code != 0)
|
36
|
+
new_uuid = SecureRandom.uuid
|
37
|
+
|
38
|
+
inventory = YAML.load_file(INVENTORY)
|
39
|
+
|
40
|
+
inventory[new_uuid] = { config: dest_file }
|
41
|
+
|
42
|
+
File.open(INVENTORY, 'wb') do |f|
|
43
|
+
f.write(inventory.to_yaml)
|
44
|
+
end
|
45
|
+
|
46
|
+
new_uuid
|
47
|
+
end
|
48
|
+
|
49
|
+
def delete
|
50
|
+
job_handle = VixVM_Delete(@vm_handle, :VIX_VMDELETE_DISK_FILES, nil, nil)
|
51
|
+
code, values = wait(job_handle)
|
52
|
+
raise VIXError, code: code if (code != 0)
|
53
|
+
|
54
|
+
inventory = YAML.load_file(INVENTORY)
|
55
|
+
inventory.delete @uuid
|
56
|
+
File.open(INVENTORY, 'wb') do |f|
|
57
|
+
f.write(inventory.to_yaml)
|
58
|
+
end
|
59
|
+
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def resume(mode='headless')
|
64
|
+
start(mode)
|
65
|
+
end
|
66
|
+
|
67
|
+
def vm_exists?(uuid)
|
68
|
+
inventory = YAML.load_file(INVENTORY)
|
69
|
+
inventory.each do |k, v|
|
70
|
+
return true if k == uuid
|
71
|
+
end
|
72
|
+
|
73
|
+
false
|
74
|
+
end
|
75
|
+
|
76
|
+
# Follwing methods are stubs for now
|
77
|
+
|
78
|
+
def read_vms
|
79
|
+
YAML.load_file(INVENTORY)
|
80
|
+
end
|
81
|
+
|
82
|
+
def set_value(key, value)
|
83
|
+
vmx = vmx_parse(@vmx_path)
|
84
|
+
vmx[key] = value
|
85
|
+
vmx_save(@vmx_path, vmx)
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
|
89
|
+
def set_name(name)
|
90
|
+
inventory = read_vms
|
91
|
+
inventory[@uuid]['name'] = name
|
92
|
+
File.open(INVENTORY, 'wb') do |f|
|
93
|
+
f.write(inventory.to_yaml)
|
94
|
+
end
|
95
|
+
|
96
|
+
set_value('displayName', name)
|
97
|
+
end
|
98
|
+
|
99
|
+
def clear_forwarded_ports
|
100
|
+
end
|
101
|
+
|
102
|
+
def read_forwarded_ports
|
103
|
+
{}
|
104
|
+
end
|
105
|
+
|
106
|
+
def read_used_ports
|
107
|
+
{}
|
108
|
+
end
|
109
|
+
|
110
|
+
def clear_shared_folders
|
111
|
+
end
|
112
|
+
|
113
|
+
def share_folders(folders)
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
def start(mode)
|
118
|
+
if mode == 'gui'
|
119
|
+
mode = :VIX_VMPOWEROP_LAUNCH_GUI
|
120
|
+
else
|
121
|
+
mode = :VIX_VMPOWEROP_NORMAL
|
122
|
+
end
|
123
|
+
|
124
|
+
jobHandle = VixVM_PowerOn(@vm_handle, :VIX_VMPOWEROP_NORMAL, :VIX_INVALID_HANDLE, nil, nil)
|
125
|
+
code, values = wait(jobHandle)
|
126
|
+
raise VIXError, code: code if (code != 0)
|
127
|
+
nil
|
128
|
+
end
|
129
|
+
|
130
|
+
def halt
|
131
|
+
code, values = wait(VixVM_PowerOff(@vm_handle, :VIX_VMPOWEROP_NORMAL, nil, nil))
|
132
|
+
end
|
133
|
+
|
134
|
+
def read_state
|
135
|
+
code, state = get_properties(@vm_handle, [:VIX_PROPERTY_VM_POWER_STATE])
|
136
|
+
state = state[:VIX_PROPERTY_VM_POWER_STATE]
|
137
|
+
|
138
|
+
raise VIXError, "VixError: #{code}" if (code != 0)
|
139
|
+
@logger.debug("VM_POWER_STATE: #{state}")
|
140
|
+
|
141
|
+
states_enum = VIX.enum_type(:VixPowerState)
|
142
|
+
|
143
|
+
if state & states_enum[:VIX_POWERSTATE_POWERED_OFF] != 0
|
144
|
+
:poweroff
|
145
|
+
elsif state & states_enum[:VIX_POWERSTATE_POWERED_ON] != 0
|
146
|
+
:running
|
147
|
+
elsif state & states_enum[:VIX_POWERSTATE_SUSPENDED] != 0
|
148
|
+
:saved
|
149
|
+
elsif state & states_enum[:VIX_POWERSTATE_SUSPENDING] != 0
|
150
|
+
:saving
|
151
|
+
elsif state & states_enum[:VIX_POWERSTATE_POWERING_ON] != 0
|
152
|
+
:booting
|
153
|
+
else
|
154
|
+
false
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
protected
|
159
|
+
|
160
|
+
def get_host_handle
|
161
|
+
@logger.debug('Connecting to VIX...')
|
162
|
+
jobHandle = VixHost_Connect(:VIX_API_VERSION, :VIX_SERVICEPROVIDER_VMWARE_WORKSTATION,
|
163
|
+
'', 0, '', '', 0, :VIX_INVALID_HANDLE, nil, nil)
|
164
|
+
code, values = wait(jobHandle, [:VIX_PROPERTY_JOB_RESULT_HANDLE])
|
165
|
+
|
166
|
+
raise VIXError, code: code if (code != 0)
|
167
|
+
|
168
|
+
values[:VIX_PROPERTY_JOB_RESULT_HANDLE]
|
169
|
+
end
|
170
|
+
|
171
|
+
def get_vm_handle(host_handle, uuid)
|
172
|
+
return nil if !uuid
|
173
|
+
return nil if !vm_exists?(uuid)
|
174
|
+
open_vmx(host_handle, @vmx_path)
|
175
|
+
end
|
176
|
+
|
177
|
+
def open_vmx(host_handle, vmx_path)
|
178
|
+
jobHandle = VixHost_OpenVM(host_handle, vmx_path, :VIX_VMOPEN_NORMAL, :VIX_INVALID_HANDLE, nil, nil)
|
179
|
+
code, values = wait(jobHandle, [:VIX_PROPERTY_JOB_RESULT_HANDLE])
|
180
|
+
|
181
|
+
raise VIXError, code if (code != 0)
|
182
|
+
|
183
|
+
values[:VIX_PROPERTY_JOB_RESULT_HANDLE]
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'log4r'
|
3
|
+
require 'cfpropertylist'
|
4
|
+
|
5
|
+
require_relative('base')
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module ProviderVMwareFree
|
9
|
+
module Driver
|
10
|
+
class Meta < Base
|
11
|
+
class VMNotFound < StandardError; end
|
12
|
+
|
13
|
+
extend Forwardable
|
14
|
+
|
15
|
+
attr_reader :uuid
|
16
|
+
attr_reader :version
|
17
|
+
|
18
|
+
def initialize(uuid=nil)
|
19
|
+
super(uuid)
|
20
|
+
|
21
|
+
@logger = Log4r::Logger::new('vagrant::provider::vmware-free::meta')
|
22
|
+
@uuid = uuid
|
23
|
+
|
24
|
+
begin
|
25
|
+
@host = read_host_type_and_version || ""
|
26
|
+
rescue ProviderVMwareFree::Errors::CommandUnavailable,
|
27
|
+
ProviderVMwareFree::Errors::CommandUnavailableWindows
|
28
|
+
# This means that VirtualBox was not found, so we raise this
|
29
|
+
# error here.
|
30
|
+
raise ProviderVMwareFree::Errors::VMWareNotDetected
|
31
|
+
end
|
32
|
+
|
33
|
+
@logger.debug("Using #{@host[:product]} version: #{@host[:version]}")
|
34
|
+
|
35
|
+
driver_map = {
|
36
|
+
fusion: {
|
37
|
+
'6.0' => Fusion_6,
|
38
|
+
},
|
39
|
+
}
|
40
|
+
|
41
|
+
driver_klass = nil
|
42
|
+
driver_map[@host[:product]].each do |key, klass|
|
43
|
+
if @host[:version].start_with? key
|
44
|
+
driver_klass = klass
|
45
|
+
break
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
if !driver_klass
|
50
|
+
raise ProviderVMwareFree::Errors::VMWareInvalidVersion
|
51
|
+
end
|
52
|
+
|
53
|
+
@logger.info("Using driver: #{driver_klass}")
|
54
|
+
@driver = driver_klass.new(@uuid)
|
55
|
+
|
56
|
+
@logger.debug("UUID: #{@uuid}")
|
57
|
+
if @uuid
|
58
|
+
# require 'debugger';debugger
|
59
|
+
raise VMNotFound if !@driver.vm_exists?(@uuid)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def_delegators :@driver, :clear_forwarded_ports,
|
64
|
+
:clear_shared_folders,
|
65
|
+
:create_dhcp_server,
|
66
|
+
:create_host_only_network,
|
67
|
+
:delete,
|
68
|
+
:delete_unused_host_only_networks,
|
69
|
+
:discard_saved_state,
|
70
|
+
:enable_adapters,
|
71
|
+
:execute_command,
|
72
|
+
:export,
|
73
|
+
:forward_ports,
|
74
|
+
:halt,
|
75
|
+
:import,
|
76
|
+
:ip_address,
|
77
|
+
:ip_address=,
|
78
|
+
:read_forwarded_ports,
|
79
|
+
:read_bridged_interfaces,
|
80
|
+
:read_guest_additions_version,
|
81
|
+
:read_host_only_interfaces,
|
82
|
+
:read_mac_address,
|
83
|
+
:read_mac_addresses,
|
84
|
+
:read_machine_folder,
|
85
|
+
:read_network_interfaces,
|
86
|
+
:read_state,
|
87
|
+
:read_used_ports,
|
88
|
+
:read_vms,
|
89
|
+
:resume,
|
90
|
+
:set_mac_address,
|
91
|
+
:set_name,
|
92
|
+
:set_value,
|
93
|
+
:share_folders,
|
94
|
+
:ssh_port,
|
95
|
+
:start,
|
96
|
+
:suspend,
|
97
|
+
:verify!,
|
98
|
+
:verify_image,
|
99
|
+
:vm_exists?,
|
100
|
+
:vm_handle,
|
101
|
+
:vmx_path
|
102
|
+
|
103
|
+
protected
|
104
|
+
|
105
|
+
def read_host_type_and_version
|
106
|
+
host = {}
|
107
|
+
|
108
|
+
if /darwin/ =~ RUBY_PLATFORM
|
109
|
+
host[:product] = :fusion
|
110
|
+
|
111
|
+
fusion_plist = CFPropertyList::List.new(file: '/Applications/VMware Fusion.app/Contents/Info.plist')
|
112
|
+
version = CFPropertyList.native_types(fusion_plist.value)['CFBundleShortVersionString']
|
113
|
+
|
114
|
+
host[:version] = version
|
115
|
+
end
|
116
|
+
|
117
|
+
host
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderVMwareFree
|
5
|
+
module Driver
|
6
|
+
|
7
|
+
module VIX
|
8
|
+
class VIXError < StandardError; end
|
9
|
+
extend FFI::Library
|
10
|
+
|
11
|
+
ffi_lib '/Applications/VMware Fusion.app/Contents/Public/libvixAllProducts.dylib'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require_relative('vix/types')
|
18
|
+
require_relative('vix/functions')
|
19
|
+
require_relative('vix/helpers')
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module ProviderVMwareFree
|
3
|
+
module Driver
|
4
|
+
module VIX
|
5
|
+
attach_function :VixHost_Connect, [
|
6
|
+
:int, :VixServiceProvider, :string, :int,
|
7
|
+
:string, :string, :VixHostOptions, :VixHandle,
|
8
|
+
:VixEventProc, :pointer], :VixHandle
|
9
|
+
|
10
|
+
attach_function :VixHost_OpenVM, [
|
11
|
+
:VixHandle, :string, :VixVMOpenOptions,
|
12
|
+
:VixHandle, :VixEventProc, :pointer], :VixHandle
|
13
|
+
|
14
|
+
attach_function :VixVM_PowerOn, [
|
15
|
+
:VixHandle, :VixVMPowerOpOptions, :VixHandle,
|
16
|
+
:VixEventProc, :pointer], :VixHandle
|
17
|
+
|
18
|
+
attach_function :VixJob_Wait, [:VixHandle, :varargs], :VixError
|
19
|
+
|
20
|
+
attach_function :VixVM_PowerOff, [:VixHandle, :VixVMPowerOpOptions, :VixEventProc, :pointer], :VixHandle
|
21
|
+
|
22
|
+
attach_function :VixVM_Clone, [:VixHandle, :VixHandle, :VixCloneType, :string, :int, :VixHandle, :pointer, :pointer], :VixHandle
|
23
|
+
|
24
|
+
attach_function :Vix_ReleaseHandle, [:VixHandle], :void
|
25
|
+
|
26
|
+
attach_function :Vix_GetProperties, [:VixHandle, :varargs], :VixError
|
27
|
+
|
28
|
+
attach_function :VixVM_WaitForToolsInGuest, [:VixHandle, :int, :pointer, :pointer], :VixHandle
|
29
|
+
|
30
|
+
attach_function :VixVM_ReadVariable, [:VixHandle, :VixVariableType, :string, :int, :pointer, :pointer], :VixHandle
|
31
|
+
|
32
|
+
attach_function :VixVM_Delete, [:VixHandle, :VixVMDeleteOptions, :pointer, :pointer], :VixHandle
|
33
|
+
|
34
|
+
attach_function :VixVM_PowerOff, [:VixHandle, :VixVMPowerOpOptions, :pointer, :pointer], :VixHandle
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|