forked from ManageIQ/manageiq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vmware.tcl
133 lines (101 loc) · 3.41 KB
/
vmware.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
namespace eval vmware {
proc split= { what } {
set index [string first = $what]
if { $index == -1 } { error "No EQUAL(=) sign in $what" }
set left [string range $what 0 [expr { $index - 1 }]]
set right [string range $what [expr { $index + 1 }] end]
set left [string trim $left]
set right [string trim $right]
return [list $left $right]
}
proc getValue= { what } { lindex [split= $what] 1 }
proc getConnectedUsers { vm } {
set users [exec vmware-cmd $vm getconnectedusers]
}
proc getState { vm } { getValue= [exec vmware-cmd $vm getstate] }
proc getConfigFile { vm } { getValue= [exec vmware-cmd $vm getconfigfile] }
proc getConfig { vm var } { getValue= [exec vmware-cmd $vm getconfig $var] }
proc hasSnapshot { vm } { getValue= [exec vmware-cmd $vm hassnapshot] }
proc getToolsLastActive { vm } {
if { [getState $vm] == "off" } { return "" }
getValue= [exec vmware-cmd $vm gettoolslastactive]
}
proc getHeartbeat { vm } {
if { [getState $vm] == "off" } { return "" }
getValue= [exec vmware-cmd $vm getheartbeat]
}
proc getProductInfo { vm } {
set info [exec vmware-cmd $vm getproductinfo]
}
proc start { vm { type soft } } {
if { [getState $vm] == "on" } { return "already started" }
set result [exec vmware-cmd $vm start $type]
set result [lindex [split= $result] 1]
if { $result == 1 } { return "ok" }
return $result
}
proc errorMessage { emsg } {
if { [string first "ServerFaultCode(1606)" $emsg] != -1 } {
set emsg "1606: VMware Tools are not running"
}
return $emsg
}
proc stop { vm { type soft } } {
if { [catch {
set result [exec vmware-cmd $vm stop $type]
} emsg] } {
error [errorMessage $emsg]
}
set result [lindex [split= $result] 1]
if { $result == 1 } { return "ok" }
return $result
}
proc suspend { vm { type soft } } {
set result [exec vmware-cmd $vm suspend $type]
}
proc reset { vm { type soft } } {
set result [exec vmware-cmd $vm reset $type]
}
proc getVersion { } {
set version [exec vmware -v]
}
proc getVMs { } {
set vms {}
set result [exec vmware-cmd -l]
foreach vm [split $result \n] {
lappend vms $vm
}
return $vms
}
}
puts "ESX Version: [vmware::getVersion]"
foreach vm [vmware::getVMs] {
catch { unset VM }
set VM(name) $vm
set VM(state) [vmware::getState $vm]
set VM(users) [vmware::getConnectedUsers $vm]
set VM(heartbeat) [vmware::getHeartbeat $vm]
set VM(configfile) [vmware::getConfigFile $vm]
set VM(hasSnapshot) [vmware::hasSnapshot $vm]
# set VM(productInfo) [vmware::getProductInfo $vm]
set VM(tools) [vmware::getToolsLastActive $vm]
foreach var [list memsize] {
set VM([string toupper $var]) [vmware::getConfig $vm $var]
}
parray VM
puts "========================================"
}
foreach vm [vmware::getVMs] {
puts "Working with VM: $vm"
puts "\tState=[vmware::getState $vm]"
puts "\tSTARTing..."
set result [vmware::start $vm]
puts "\tSTARTed....$result"
puts "\tState=[vmware::getState $vm]"
# puts "\tSUSPENDing..."
# set result [vmware::suspend $vm]
# puts "\tSUSPENDed....$result"
puts "\tSTOPPing..."
set result [vmware::stop $vm hard]
puts "\tSTOPPed....$result"
}