-
Notifications
You must be signed in to change notification settings - Fork 0
/
vmware_helper.py
185 lines (143 loc) · 5.63 KB
/
vmware_helper.py
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#!/usr/bin/python
from __future__ import print_function
import ssl
import atexit
# import sys
#from pyVim import connect
from pyVim.connect import Disconnect, SmartConnect # , Getvsphere_connection
from pyVim.task import WaitForTask
from pyVmomi import vim #, vmodl
class VwareHelper(object):
def __init__(self):
self.vsphere_connection = ''
def connect(self, username, password, hostname, port='443'):
context = None
if hasattr(ssl, '_create_unverified_context'):
context = ssl._create_unverified_context()
vsphere_connection = SmartConnect(host=hostname,
user=username,
pwd=password,
port=int(port),
sslContext=context)
if not vsphere_connection:
print("Could not connect to the specified host uvsphere_connectionng specified "
"username and password")
return -1
atexit.register(Disconnect, vsphere_connection)
self.vsphere_connection = vsphere_connection
def run_on_all_vms(self, function):
"""
Run passed function on vm object of all virtual machines
Input: function
Return: list of return valused from function
"""
return_val = []
vsphere_connection = self.vsphere_connection
content = vsphere_connection.RetrieveContent()
vm_view = content.viewManager.CreateContainerView(content.rootFolder,
[vim.VirtualMachine],
True)
obj = [vm for vm in vm_view.view]
for vm in obj:
return_val.append(function(vm))
return return_val
def get_vm_obj_by_name(self, name):
"""
Get the vsphere object associated with a given text name
"""
vsphere_connection = self.vsphere_connection
content = vsphere_connection.RetrieveContent()
container = content.viewManager.CreateContainerView(
content.rootFolder, [vim.VirtualMachine], True)
for curr_container in container.view:
if curr_container.name == name:
return_val = curr_container
break
return return_val
def get_vm_struct(self, vm):
"""
Create Strcuture entry from vm obj data
"""
vminfo = {}
vminfo['name'] = vm.summary.config.name
vminfo['vmpathname'] = vm.summary.config.vmPathName
vminfo['guestfullname'] = vm.summary.config.guestFullName
vminfo['powerstate'] = vm.summary.runtime.powerState
vminfo['annotation'] = vm.summary.config.annotation
vminfo['ipaddress'] = vm.summary.guest.ipAddress
if vm.summary.runtime.question != None:
vminfo['question'] = vm.summary.runtime.question.text
return vminfo
def print_vm_info(self, vm):
"""
Print information from vm object
"""
summary = vm.summary
print("Name : ", summary.config.name)
print("Path : ", summary.config.vmPathName)
print("Guest : ", summary.config.guestFullName)
annotation = summary.config.annotation
# if annotation != None and annotation != "":
# print("Annotation : ", annotation)
print("State : ", summary.runtime.powerState)
if summary.guest != None:
ip = summary.guest.ipAddress
if ip != None and ip != "":
print("IP : ", ip)
if summary.runtime.question != None:
print("Question : ", summary.runtime.question.text)
print("")
# Snapshot functions
def get_snap_obj(self, snapshot_list, snapshot_reference):
"""
Get snapshot object by referecne
Input: vm.snapshot.rootSnapshotList, vm.snapshot.currentSnapshot
Return: vim.vm.SnapshotTree
"""
for snapshot in snapshot_list:
if snapshot.snapshot == snapshot_reference:
snap_obj = snapshot
break
return snap_obj
def get_current_snap_vm_obj(self, vm):
"""
Get current snapshot for a VM
Input: vm object
return: 0 if no snapshot, else vim.vm.SnapshotTree
"""
try:
current_snap_obj = self.get_snap_obj(vm.snapshot.rootSnapshotList, vm.snapshot.currentSnapshot)
"""
current_snap_obj.name
current_snap_obj.createTime
current_snap_obj.state
"""
return current_snap_obj
except:
# print("Unexpected error:", sys.exc_info()[0])
return 0
def print_current_snap_vm_obj(self, vm):
"""
Get current snapshot for a VM
Input: vm object
"""
try:
current_snap_obj_list = self.get_snap_obj(vm.snapshot.rootSnapshotList, vm.snapshot.currentSnapshot)
print("Name: %s; CreateTime: %s; State: %s" % (
current_snap_obj_list.name,
current_snap_obj_list.createTime,
current_snap_obj_list.state))
except:
# print("Unexpected error:", sys.exc_info()[0])
return 0
def revert_to_snap_obj(self, snap):
"""
Revert to specific snapshot object
Input:
"""
snap_obj = snap.snapshot
try:
WaitForTask(snap_obj.RevertToSnapshot_Task())
return 1
except:
return 0