vagrant-vmware-free 0.0.1
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.
- 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
|