import logging import os.path import sys import subprocess import os import datetime import time import requests import json import base64  | 
def GenerateZertoRestSession_WindowsAuthentication(zvmIp, user, password):   credStr = user + ":" + password   encodedCredStr = "Basic " + base64.b64encode(credStr)   print encodedCredStr   headers = {'Authorization': encodedCredStr}   url = "https://" + zvmIp + ":9669/v1/session/add"   r = requests.post(url, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed authenticating to the Zerto Virtual Manager")   res = r.headers.get('x-zerto-session')   print "session = " + res   return res  | 
def GenerateZertoRestSession_VcenterAuthentication(zvmIp, user, password):   credStr = user + ":" + password   encodedCredStr = "Basic " + base64.b64encode(credStr)   print encodedCredStr   payload = {"AuthenticationMethod": 1}   dataval = json.dumps(payload)   print (dataval)   headers = {'Authorization': encodedCredStr, 'content-type': 'application/json'}   url = "https://" + zvmIp + ":9669/v1/session/add"   r = requests.post(url, data=dataval, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):   raise Exception("Failed authenticating to the Zerto Virtual Manager")   res = r.headers.get('x-zerto-session')   print "session = " + res   return res  | 
def GetVpgIdFromName(zvmIp, sessionId, vpgName):   url = "https://" + zvmIp + ":9669/v1/vpgs?name=" + vpgName   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.get(url, headers=headers, verify=False)   if(r.status_code != requests.codes.ok):     raise Exception("Call to ZVM failed")   print r.status_code   print r.text   vpgData = json.loads(r.text)   if(len(vpgData) == 0):     raise Exception("VPG by name " + vpgName + " not found")   if(len(vpgData) > 1):   raise Exception("multiple vpgs named " + vpgName + " found")   thisVpg = vpgData[0]   res = thisVpg["VpgIdentifier"]   print thisVpg   print res   return res  | 
def GetLatestCheckpointForVpg(zvmIp, sessionId, vpgId):   url = "https://" + zvmIp + ":9669/v1/vpgs/" + vpgId + "/checkpoints"   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.get(url, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed GetLatestCheckpointForVpg")   allcpData = json.loads(r.text)   print str(len(allcpData))   if(len(allcpData) == 0):     raise Exception("no checkpoints found for vpg " + vpgId)   sortedCps = sorted(allcpData, key=lambda x: x["TimeStamp"], reverse=True)   latestCp = sortedCps[0]   print latestCp   return latestCp["CheckpointIdentifier"]  | 
def StartFailoverTest(zvmIp, sessionId, vpgId, cpId):   url = "https://" + zvmIp + ":9669/v1/vpgs/" + vpgId + "/failovertest"   payload = {"CheckpointId": cpId}   dataval = json.dumps(payload)   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.post(url, data=dataval, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed StartFailoverTest")   taskId = json.loads(r.text)   print "task id = " + taskId   return taskId  | 
def StopFailoverTest(zvmIp, sessionId, vpgId, status):   url = "https://" + zvmIp + ":9669/v1/vpgs/" + vpgId + "/failoverteststop"   payload = {"FailoverTestSuccess": status, "FailoverTestSummary":"Automatically"}   dataval = json.dumps(payload)   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.post(url, data=dataval, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed StopFailoverTest")   taskId = json.loads(r.text)   print "task id = " + taskId   return taskId  | 
def GetVmNamesForVpg(zvmIp, sessionId, vpgName):   url = "https://" + zvmIp + ":9669/v1/vms?vpgName=" + vpgName   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.get(url, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed GetVmNamesForVpg")   allvms = json.loads(r.text)   print allvms   res = []   for vm in allvms:     print "cur"     print vm     res.append(vm["VmName"])   print res   return res  | 
def IsTaskComplete(zvmIp, sessionId, stopFotTaskId):   url = "https://" + zvmIp + ":9669/v1/tasks/" + stopFotTaskId   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.get(url, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed getting tasks")   tasksRes = json.loads(r.text)   print tasksRes      taskStatus = tasksRes["Status"]   state = taskStatus["State"]   print state   if(state == 4 or state == 5):     raise Exception("task failed")   res = state == 6   print res   return res  |