131 lines
5.0 KiB
Python
131 lines
5.0 KiB
Python
#!/usr/bin/python
|
|
import sys,argparse,json,time
|
|
import time
|
|
sys.path.insert(0, './classes/')
|
|
|
|
import cohesityAPI as cohesity
|
|
import sharePointAPI as sharePoint
|
|
import serviceNowAPI as snow
|
|
import automationsAPI as dashboard
|
|
|
|
|
|
# Global variables that will be used across all functions
|
|
# Begin Functions
|
|
|
|
def GetArgs():
|
|
parser = argparse.ArgumentParser(add_help=False)
|
|
parser.add_argument('--cluster', '-c', type=str, action='store')
|
|
parser.add_argument('--verify', '-v', action='store_true')
|
|
parser.add_argument('--jobName', '-p', type=str, action='store')
|
|
parser.add_argument('--newJobName', '-n', type=str, action='store')
|
|
parser.add_argument('--unDelete', '-r', action='store_true')
|
|
parser.add_argument('--help', '-h', action='store_true')
|
|
return (parser.parse_args())
|
|
|
|
def PrintHelp():
|
|
print("\nBasic Usage:")
|
|
print("\npython3 sqlServerRegistration.py -c cluster.fqdn.tld")
|
|
print("\t -c FQDN of Cohesity cluster address")
|
|
print("\t -v force confirmation on change")
|
|
print("\t -p Protection job name, use in conjunction with -n")
|
|
print("\t -n New Protection job name, use in conjunction with -p")
|
|
print("\t -r Restore job from a deleted status, only used with single job operations")
|
|
print("\t -h Prints this help message")
|
|
|
|
args = GetArgs()
|
|
|
|
# Validate arguments & assign variables if necessary
|
|
if args.help:
|
|
PrintHelp()
|
|
exit(1)
|
|
|
|
if not args.cluster:
|
|
PrintHelp()
|
|
exit(1)
|
|
|
|
if args.jobName:
|
|
args.verify = True
|
|
if not args.newJobName:
|
|
PrintHelp()
|
|
exit(1)
|
|
|
|
# ServiceNow object
|
|
ticketSystem = snow.SnowAPI("northdakota.service-now.com")
|
|
|
|
# Sharepoint Object
|
|
cmdb = sharePoint.API()
|
|
|
|
# Connect to the Cohesity cluster
|
|
cluster = cohesity.API(args.cluster)
|
|
authToken = cluster.GetAuthToken()
|
|
cluster.UpdateHeaders(authToken['accessToken'])
|
|
|
|
if args.jobName:
|
|
vmWareJobs=cluster.GetFilteredRequest("/public/protectionJobs","?names={0}".format(args.jobName))
|
|
else:
|
|
vmWareJobs=cluster.GetFilteredRequest("/public/protectionJobs","?environments=kVMware&isActive=True")
|
|
|
|
for job in vmWareJobs:
|
|
|
|
preChangeNotes = json.dumps(job)
|
|
|
|
if 'name' in job:
|
|
jobName = job['name']
|
|
oldName = job['name']
|
|
|
|
|
|
if args.newJobName:
|
|
print("\nUpdating job name for {0}".format(jobName))
|
|
newName = args.newJobName
|
|
jobData = {"name": newName}
|
|
job.update(jobData)
|
|
|
|
if args.unDelete:
|
|
print("\nRestoring job {0} from a deleted state.".format(jobName))
|
|
jobData = {"isDeleted": False}
|
|
job.update(jobData)
|
|
|
|
if '@PRD-itd' not in jobName and '@NPD-itd' not in jobName:
|
|
print("\nUpdating job name for {0}".format(jobName))
|
|
x = jobName.split('@')
|
|
newName = x[0] + "@PRD-" + x[1]
|
|
jobData = {"name": newName}
|
|
job.update(jobData)
|
|
|
|
print("Adding the exclude Test tag")
|
|
vcenterSource = cluster.GetFilteredRequest("/public/protectionSources", "?id=" + str(job['parentSourceId']))
|
|
testTagId = cluster.GetVcenterTagId(vcenterSource, 'Test')
|
|
excludeData = {"excludeVmTagIds": [[testTagId]]}
|
|
job.update(excludeData)
|
|
|
|
print("Updating to the new Policy Id")
|
|
policy = cluster.GetProtectionPolicyByName("ITD-Bronze-PRD")
|
|
policyData = {"policyId": policy[0]['id']}
|
|
job.update(policyData)
|
|
|
|
if args.verify:
|
|
confirm = input("About to update protection job {0}. Are you sure? [yes|no] ".format(oldName))
|
|
else:
|
|
confirm = "yes"
|
|
|
|
if confirm.lower() == "yes":
|
|
changeID = ticketSystem.CreateStandardChange("NDIT-SPS-Cohesity Data Protection", "NDIT-Computer Systems Storage", "svccohesityadm", "ndheck", "mlaverdure", "Computer Systems", "Backup/Restore", "Automated Change - Cohesity job update for {}".format(oldName), "Split production and non-production servers into multiple groups.")
|
|
changeSysID = changeID['result']['sys_id']['value']
|
|
ticketSystem.scheduleStandardChange(changeSysID)
|
|
ticketSystem.implementStandardChange(changeSysID)
|
|
ticketSystem.addStandardChangeNotes(changeSysID, "Original job details\n\n{}".format(preChangeNotes))
|
|
ticketSystem.reviewStandardChange(changeSysID)
|
|
|
|
updateStats = cluster.UpdateVMProtectionJob(job)
|
|
|
|
if updateStats.status_code != 200 and updateStats.status_code != 201:
|
|
postChangeNotes = "Job update failed\n\n" + updateStats.text
|
|
ticketSystem.addStandardChangeNotes(changeSysID, postChangeNotes)
|
|
ticketSystem.closeStandardChange(changeSysID, "Unsuccessful", "Change Failed")
|
|
else:
|
|
postChangeNotes = "Updated job name, added the exclude test tag, and updated the policy\n\n" + updateStats.text
|
|
ticketSystem.addStandardChangeNotes(changeSysID, postChangeNotes)
|
|
ticketSystem.closeStandardChange(changeSysID, "Successful", "Change Complete")
|
|
|
|
print("Chagne {} complete".format(changeID['result']['number']['value']))
|