vixen 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.md +122 -10
  2. data/lib/vixen/bridge.rb +10 -4
  3. data/vixen.gemspec +1 -1
  4. metadata +1 -1
data/README.md CHANGED
@@ -5,33 +5,145 @@ Getting Vixen
5
5
  $ gem install vixen
6
6
  ```
7
7
 
8
+ Capabilities
9
+ ------------
10
+
11
+ * View running VMs
12
+ * Control power state (on, off, suspend, reset) of VMs
13
+ * Viewing the current snapshot
14
+ * Creating snapshots
15
+
16
+ Limitations
17
+ -----------
18
+ Vixen currently only supports running on Mac OS X or Linux.
19
+
20
+ Windows support will require two libraries; one each from the 32-bit and 64-bit
21
+ versions of the Windows VMware VIX SDK. These will need to be placed into
22
+ `ext/windows/i386` and `ext/windows/x86_64` respectively, and `Vixen::Bridge`
23
+ will use [Facter](https://github.com/puppetlabs/facter) to determine which
24
+ operating system and architecture version of the library to load.
25
+
26
+
8
27
  Using Vixen
9
28
  ===========
10
29
 
30
+
31
+ Connecting to a host
32
+ --------------------
33
+
34
+ If using Vixen on the same machine as the virtual machine host, you can simply
35
+ use `Vixen.local_connect`
36
+
37
+ ```ruby
38
+ require 'vixen'
39
+
40
+ host = Vixen.local_connect
41
+ ```
42
+
43
+ If using Vixen to connect to a remote host (VMware Server, ESXi, vSphere, etc),
44
+ use `Vixen.connect`
45
+
11
46
  ```ruby
12
47
  require 'vixen'
13
48
 
14
- Vixen.local_connect.running_vms.each { |vm| puts "Current Snapshot: #{vm.current_snapshot}" }
49
+ server_type = Vixen::Constants::VixServiceProvider[:vmware_vi_server]
50
+ host = Vixen.connect server_type, <hostname>, <port>, <username>, <password>
15
51
  ```
16
52
 
53
+ Both of these will return a `Vixen::Model::Host` object.
54
+
55
+ Vixen::Model::Host
56
+ ==================
57
+
58
+ `Host` currently supports the following actions:
59
+
60
+ * `open_vm`
61
+ * `running_vms`
62
+ * `paths_of_running_vms`
63
+
64
+ Currently running virtual machines
65
+ ----------------------------------
66
+
67
+ ```ruby
68
+ require 'vixen'
69
+
70
+ host = Vixen.local_connect
71
+ machines = host.running_vms
72
+
73
+ machines.each do |vm|
74
+ puts "Current Snapshot: #{vm.current_snapshot}"
75
+ end
76
+ ```
77
+
78
+ Opening a virtual machine
79
+ -------------------------
80
+
81
+ Opening a virtual machine does not _start_ the virtual machine, but creates
82
+ an object that you can use to interrogate properties of the virtual machine.
83
+ The virtual machine _could_ be started by using this object, (see
84
+ `Vixen::Model::VM#power_on`).
85
+
17
86
  Vixen can also be used on virtual machines that are not currently active:
18
87
 
19
88
  ```ruby
20
89
  require 'vixen'
90
+
91
+ host = Vixen.local_connect
92
+
21
93
  path = '/Users/jeff/Documents/Virtual Machines/win2003sat.vmwarevm/Windows Server 2003 Enterprise x64 Edition.vmx'
22
- puts Vixen.local_connect.open_vm(path).power_on.current_snapshot.full_name
94
+
95
+ vm = host.open_vm path
96
+
97
+ puts vm.current_snapshot
23
98
  ```
24
99
 
25
- Capabilities
26
- ------------
100
+ Paths of running virtual machines
101
+ ---------------------------------
27
102
 
28
- * View running VMs
29
- * Control power state (on, off, suspend, reset) of VMs
30
- * Viewing the current snapshot
103
+ If all you are interested is the path (of the `.vmx` file) of the running
104
+ virtual machines, you may use `paths_of_running_vms`, which is much lighter
105
+ weight than `running_vms`.
31
106
 
32
- Limitations
33
- -----------
34
- Vixen currently only supports running on Mac OS X or Linux.
107
+ ```ruby
108
+ require 'vixen'
109
+
110
+ host = Vixen.local_connect
111
+
112
+ paths = host.paths_of_running_vms
113
+
114
+ paths.each do |path|
115
+ puts "Currently running: #{path}"
116
+ end
117
+ ```
118
+
119
+ Vixen::Model::VM
120
+ ================
121
+
122
+ `VM` currently supports the following actions:
123
+
124
+ * `current_snapshot`
125
+ * `create_snapshot`
126
+ * Power Operations
127
+ * `power_on`
128
+ * `power_off`
129
+ * `suspend`
130
+ * `resume`
131
+ * `reset`
132
+ * Querying current power state
133
+ * `powered_off?`
134
+ * `suspended?`
135
+ * `powered_on?`
136
+ * `current_power_states` - a VM may be concurrently have multiple power states
137
+
138
+ Vixen::Model::Snapshot
139
+ ======================
140
+
141
+ `Snapshot` currently supports the following actions:
142
+
143
+ * `display_name` - the short text title given to a snapshot
144
+ * `description` - the lengthy text, if any, given to a snapshot
145
+ * `parent` - the parent snapshot, if any
146
+ * `full_name` - the full name of the snapshot (traverses parent hierarchy)
35
147
 
36
148
  See Also
37
149
  --------
data/lib/vixen/bridge.rb CHANGED
@@ -45,6 +45,7 @@ module Vixen::Bridge
45
45
  attach_function :VixSnapshot_GetParent, [:handle, :pointer], :int
46
46
  attach_function :VixVM_PowerOn, [:handle, :int, :handle, :VixEventProc, :pointer], :handle
47
47
  attach_function :VixVM_CreateSnapshot, [:handle, :string, :string, :int, :handle, :VixEventProc, :pointer], :handle
48
+ attach_function :VixJob_CheckCompletion, [:handle, :pointer], :int
48
49
 
49
50
  def self.connect(hostType, hostname, port, username, password)
50
51
  job_handle = VixHandle[:invalid]
@@ -90,6 +91,10 @@ module Vixen::Bridge
90
91
  pointer_to :int, &block
91
92
  end
92
93
 
94
+ def self.pointer_to_bool(&block)
95
+ (pointer_to :int, &block) != 0
96
+ end
97
+
93
98
  def self.wait_for_async_job(operation, &block)
94
99
  job_handle = yield
95
100
  err = VixJob_Wait job_handle, VixPropertyId[:none]
@@ -131,10 +136,11 @@ module Vixen::Bridge
131
136
  collect_proc,
132
137
  nil)
133
138
 
134
- # FIXME: we seem to go into deadlock without this sleep
135
- # I'm not exactly sure why
136
- sleep 0.5
137
- err = VixJob_Wait job_handle, VixPropertyId[:none]
139
+ while ( not pointer_to_bool do |bool_pointer|
140
+ sleep 0.01
141
+ VixJob_CheckCompletion(job_handle, bool_pointer)
142
+ end) do
143
+ end
138
144
 
139
145
  Vix_ReleaseHandle job_handle
140
146
  available_vms
data/vixen.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'vixen'
3
- s.version = '0.0.5'
3
+ s.version = '0.0.6'
4
4
  s.summary = 'Ruby bindings for VMware VIX API'
5
5
  s.description = <<-EOF
6
6
  Vixen is an easy way to interact with VMware virtual machines from Ruby.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vixen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: