update
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
import argparse
|
||||
import json
|
||||
import time
|
||||
|
||||
sys.path.insert(0, './classes/')
|
||||
import cohesityAPI as cohesity
|
||||
import serviceNowAPI as serviceNow
|
||||
import sharePointAPI as sharePoint
|
||||
import automationsAPI as dashboard
|
||||
|
||||
def GetArgs():
|
||||
parser = argparse.ArgumentParser(add_help=False)
|
||||
parser.add_argument('--server', '-s', type=str, action='store')
|
||||
parser.add_argument('--protectGroup', '-p', type=str, action='store')
|
||||
parser.add_argument('--help', '-h', action='store_true')
|
||||
parser.add_argument('--debug', '-d', action='store_true')
|
||||
return (parser.parse_args())
|
||||
|
||||
def PrintHelp():
|
||||
print("\nBasic Usage:")
|
||||
print("\npython3 serverRegistration.py -s hostname.nd.gov -p MyApp@physical")
|
||||
print("\t -s: Fully qualified domain name of the Server")
|
||||
print("\t -p: Protection Group the server will be in")
|
||||
print("\t -h Prints this help message")
|
||||
|
||||
args = GetArgs()
|
||||
|
||||
if not (args.server and args.protectGroup):
|
||||
PrintHelp()
|
||||
exit(1)
|
||||
|
||||
# Proceed with registration
|
||||
if (args.server and args.protectGroup):
|
||||
try:
|
||||
mdn = cohesity.API('itdmdndpc01.nd.gov')
|
||||
mdnToken = mdn.GetAuthToken()
|
||||
mdn.UpdateHeaders(mdnToken['accessToken'])
|
||||
|
||||
newHost = args.server
|
||||
protectionGroup = args.protectGroup
|
||||
|
||||
isPhysicalRegistered = bool()
|
||||
|
||||
# Get the physical server objects in Cohesity
|
||||
physicalServers = mdn.GetFilteredRequest("/public/protectionSources/registrationInfo", "?environments=kPhysical")
|
||||
|
||||
for nodes in physicalServers['rootNodes']:
|
||||
if nodes['rootNode']['name'] == newHost:
|
||||
print(newHost + " is already registerd as a physical server.")
|
||||
isPhysicalRegistered = bool("true")
|
||||
physicalSourceId = nodes['rootNode']['id']
|
||||
break
|
||||
|
||||
if not isPhysicalRegistered:
|
||||
attempt = mdn.RegisterPhysical(newHost)
|
||||
print("Registering " + newHost + " as a Physical Server ")
|
||||
time.sleep(20)
|
||||
try:
|
||||
physicalSourceId = attempt['id']
|
||||
except:
|
||||
print("\nCould not reach " + newHost + " on port 50051. Please verify the agent is running and that all firewall rules are accounted for.")
|
||||
exit(1)
|
||||
|
||||
# Get the list of protection groups & add the new one if necessary
|
||||
protectionJobs = mdn.GetFilteredRequest("/public/protectionJobs", "?environments[0]=kPhysical")
|
||||
uniqueJobs = {job['id'] : job for job in protectionJobs}.values()
|
||||
jobExists = bool()
|
||||
isProtected = bool()
|
||||
jobSources = []
|
||||
|
||||
for job in uniqueJobs:
|
||||
# Source ID cannot be in more then on protection group for SQL
|
||||
if ('sourceIds' in job) and (physicalSourceId in job['sourceIds'] and ("DELETED" not in job['name']) ):
|
||||
print(newHost + " is already in " + job['name'] + " and cannot be in multiple groups.")
|
||||
isProtected = bool("true")
|
||||
jobExists = bool("true")
|
||||
break
|
||||
|
||||
# The source ID was not found in any other SQL job, but a job name already exsits, so lets collect all sources in the job.
|
||||
elif (job['name'] == protectionGroup) and ( physicalSourceId not in job['sourceIds']):
|
||||
jobExists = bool("true")
|
||||
break
|
||||
|
||||
if jobExists == bool('true') and isProtected != bool('true'):
|
||||
print("Adding host " + newHost + " to protection group " + protectionGroup)
|
||||
|
||||
# By default we will protect all local drives
|
||||
sourceParams = {
|
||||
"sourceId": physicalSourceId,
|
||||
"physicalSpecialParameters": {
|
||||
"filePaths": [
|
||||
{
|
||||
"backupFilePath":"$ALL_LOCAL_DRIVES",
|
||||
"skipNestedVolumes":True
|
||||
}
|
||||
],
|
||||
"usesSkipNestedVolumesVec":True
|
||||
}
|
||||
}
|
||||
|
||||
job["sourceIds"].append(physicalSourceId)
|
||||
job["sourceSpecialParameters"].append(sourceParams)
|
||||
resp = mdn.UpdateProtectionJob(job)
|
||||
print(resp.content)
|
||||
|
||||
if jobExists == bool():
|
||||
print("Creating protection job for " + protectionGroup + " and adding " + newHost)
|
||||
################ TO DO ###############
|
||||
# Defaults from JSON dump of jobs objects
|
||||
resp = mdn.CreatePhysicalProtectionJob(physicalSourceId, protectionGroup)
|
||||
print(resp.content)
|
||||
|
||||
except OSError as cohesityError:
|
||||
print('Cohesity Error: ' + cohesityError)
|
||||
|
||||
dashboard.send_automation({'AutomationName': 'Infra-Cohesity', 'Action': 'Provisioning', 'Platform': 'Python-registerServer.py', 'Units': 30})
|
||||
Reference in New Issue
Block a user