Skip to content
This repository has been archived by the owner on Mar 19, 2021. It is now read-only.

Commit

Permalink
Workaround for Python >= 2.7.9 enforcing SSL verify,
Browse files Browse the repository at this point in the history
check if folder name starts with / and
check if datacententer, folder, vm could be found
  • Loading branch information
sduehr authored and Marco van Wieringen committed Aug 3, 2015
1 parent 24aadd2 commit 0813407
Showing 1 changed file with 31 additions and 24 deletions.
55 changes: 31 additions & 24 deletions vmware_cbt_tool/vmware_cbt_tool.py
Expand Up @@ -32,7 +32,7 @@
import atexit
import getpass
import sys
import pprint


def GetArgs():
"""
Expand Down Expand Up @@ -65,7 +65,7 @@ def GetArgs():
parser.add_argument('-f', '--folder',
required=True,
action='store',
help='Folder Name')
help='Folder Name (must start with /, use / for root folder')
parser.add_argument('-v', '--vmname',
required=True,
action='append',
Expand Down Expand Up @@ -95,7 +95,13 @@ def main():
Python program for enabling/disabling/resetting CBT on a VMware VM
"""

pp = pprint.PrettyPrinter(indent=4)
# workaround needed on Debian 8/Python >= 2.7.9
# see https://github.com/vmware/pyvmomi/issues/212
py_ver = sys.version_info[0:3]
if py_ver[0] == 2 and py_ver[1] == 7 and py_ver[2] >= 9:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

args = GetArgs()
if args.password:
password = args.password
Expand All @@ -105,7 +111,11 @@ def main():
(args.host, args.user))

if [args.enablecbt, args.disablecbt, args.resetcbt, args.info].count(True) > 1:
print "Only one of --enablecbt, --disablecbt, --resetcbt, --info allowed"
print "ERROR: Only one of --enablecbt, --disablecbt, --resetcbt, --info allowed"
sys.exit(1)

if not args.folder.startswith('/'):
print "ERROR: Folder name must start with /"
sys.exit(1)

try:
Expand All @@ -129,14 +139,7 @@ def main():

atexit.register(Disconnect, si)

# Retreive the list of Virtual Machines from the invetory objects
# under the rootFolder
content = si.content
# objView = content.viewManager.CreateContainerView(content.rootFolder,
# [vim.VirtualMachine],
# True)
# vmList = objView.view
# objView.Destroy()

dcftree = {}
dcView = content.viewManager.CreateContainerView(content.rootFolder,
Expand All @@ -150,23 +153,21 @@ def main():
folder = ''
get_dcftree(dcftree[dc.name], folder, dc.vmFolder)

# Find the vm and power it on
# tasks = [vm.PowerOn() for vm in vmList if vm.name in vmnames]

# Wait for power on to complete
# WaitForTasks(tasks, si)

# print "Virtual Machine(s) have been powered on successfully"

#pp.pprint(dcftree)

# pp.pprint(dcftree['dass5']['/stephand-test02'])
vm = None
for vmname in args.vmname:
vm_path = args.folder + '/' + vmname
if args.folder.endswith('/'):
vm_path = args.folder + vmname
# pp.pprint(dcftree[args.datacenter][vm_path])

if args.datacenter not in dcftree:
print "ERROR: Could not find datacenter %s" % (args.datacenter)
sys.exit(1)

if vm_path not in dcftree[args.datacenter]:
print "ERROR: Could not find VM %s in folder %s" % (
vmname, args.folder)
sys.exit(1)

vm = dcftree[args.datacenter][vm_path]

print "INFO: VM %s CBT supported: %s" % (
Expand Down Expand Up @@ -207,6 +208,7 @@ def enable_cbt(si, vm):
WaitForTasks([task], si)
return create_and_remove_snapshot(si, vm)


def disable_cbt(si, vm):
if not vm.capability.changeTrackingSupported:
print "ERROR: VM %s does not support CBT" % (vm.name)
Expand All @@ -222,6 +224,7 @@ def disable_cbt(si, vm):
WaitForTasks([task], si)
return create_and_remove_snapshot(si, vm)


def get_dcftree(dcf, folder, vm_folder):
for vm_or_folder in vm_folder.childEntity:
if isinstance(vm_or_folder, vim.VirtualMachine):
Expand All @@ -231,6 +234,7 @@ def get_dcftree(dcf, folder, vm_folder):
else:
print "ERROR: %s is neither Folder nor VirtualMachine" % vm_or_folder


def create_vm_snapshot(si, vm):
"""
creates a snapshot on the given vm
Expand All @@ -251,21 +255,23 @@ def create_vm_snapshot(si, vm):
create_snap_result = create_snap_task.info.result
return create_snap_result


def remove_vm_snapshot(si, create_snap_result):
"""
removes a given snapshot
"""
remove_snap_task = None
try:
remove_snap_task = create_snap_result.RemoveSnapshot_Task(
removeChildren=True)
removeChildren=True)
except vmodl.MethodFault as e:
print "Failed to remove snapshot %s" % (e.msg)
return False

WaitForTasks([remove_snap_task], si)
return True


def create_and_remove_snapshot(si, vm):
"""
creates, then removes a snapshot,
Expand All @@ -280,6 +286,7 @@ def create_and_remove_snapshot(si, vm):

return False


def WaitForTasks(tasks, si):
"""
Given the service instance si and tasks, it returns after all the
Expand Down

0 comments on commit 0813407

Please sign in to comment.