97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
#!/usr/bin/python
|
|
import sys,argparse,json,time
|
|
sys.path.insert(0, './classes/')
|
|
|
|
import cohesityAPI as cohesity
|
|
import automationsAPI as dashboard
|
|
|
|
def GetArgs():
|
|
parser = argparse.ArgumentParser(add_help=False)
|
|
parser.add_argument('--cluster', '-c', type=str, action='store')
|
|
parser.add_argument('--vcenter', '-v', type=str, action='store')
|
|
parser.add_argument('--type', '-t', type=str, action='store')
|
|
parser.add_argument('--job', '-j', type=str, action='store')
|
|
parser.add_argument('--pause', '-p', action='store_true')
|
|
parser.add_argument('--resume', '-r', action='store_true')
|
|
parser.add_argument('--help', '-h', action='store_true')
|
|
return (parser.parse_args())
|
|
|
|
def PrintHelp():
|
|
print("\nBasic Usage:")
|
|
print("\n python3 pauseBackups.py -c cluster1.domain.tld -v vCenter.domain.tld [ -t kVMware, kPhysical, kSQL ] [ -p | -r ] [ -j protectionJobName ]")
|
|
print("\t -c FQDN of Cohesity cluster address")
|
|
print("\t -v FQDN of vCenter Server, used in conjuntion with -t kVMware ")
|
|
print("\t -t Cohesity job type, kVMware, kPhysical, kSQL")
|
|
print("\t -j Cohesity job name")
|
|
print("\t -p Pause jobs that match the specified parameters")
|
|
print("\t -r Resume jobs that match the specified parameters")
|
|
print("\t -h Prints this help message")
|
|
|
|
args = GetArgs()
|
|
|
|
if args.help:
|
|
PrintHelp()
|
|
exit(1)
|
|
|
|
if not args.cluster:
|
|
sys.exit("Error: Specify Cohesity cluster fqdn with -c parameter.")
|
|
elif args.type == "kVMware" and not args.vcenter:
|
|
sys.exit("Error: Specify vmware cluster address withe -v parameter when using type of kVMware.")
|
|
elif args.vcenter and not args.type:
|
|
args.type = "kVMware"
|
|
else:
|
|
cluster = cohesity.API(args.cluster)
|
|
authToken = cluster.GetAuthToken()
|
|
cluster.UpdateHeaders(authToken['accessToken'])
|
|
|
|
if args.type=='kVMware' and args.vcenter:
|
|
vmSources = cluster.GetFilteredRequest("/public/protectionSources", "?environments=kVMware")
|
|
|
|
for source in vmSources:
|
|
if source['protectionSource']['name'] == args.vcenter:
|
|
vCenter = source
|
|
print (vCenter)
|
|
vCenterID = source['protectionSource']['id']
|
|
break
|
|
|
|
if args.job:
|
|
vmJobs = cluster.GetFilteredRequest("/public/protectionJobs", "?names=" + args.job)
|
|
else:
|
|
vmJobs = cluster.GetFilteredRequest("/public/protectionJobs", "?environments=kVMware")
|
|
print("Attempting to pause all jobs under " + args.vcenter)
|
|
|
|
uniqueJobs = {job['id'] : job for job in vmJobs}.values()
|
|
|
|
if args.pause:
|
|
pausedJobs = []
|
|
for job in uniqueJobs:
|
|
if job['parentSourceId'] != vCenterID:
|
|
print("not vcenter")
|
|
continue
|
|
|
|
elif "isDeleted" in job:
|
|
continue
|
|
|
|
elif "isPaused" in job:
|
|
if job['isPaused']:
|
|
pausedJobs.append(job)
|
|
continue
|
|
|
|
print("Pausing: " + job['name'])
|
|
resp = cluster.PauseJob(job['id'])
|
|
|
|
print("The following jobs were previously paused before this operation.")
|
|
for pJob in pausedJobs:
|
|
print(pJob['name'])
|
|
|
|
if args.resume:
|
|
for job in uniqueJobs:
|
|
if job['parentSourceId'] != vCenterID:
|
|
continue
|
|
elif "isDeleted" in job:
|
|
continue
|
|
print("Resuming: " + job['name'])
|
|
resp = cluster.ResumeJob(job['id'])
|
|
|
|
dashboard.send_automation({'AutomationName': 'Infra-Cohesity', 'Action': 'Maintenance', 'Platform': 'Python-pauseOrResumeJob.py', 'Units': 60})
|