import requests import urllib3 import json urllib3.disable_warnings() vManageUrl = 'https://vmanage01.testlab.com/' baseUrl = 'https://vmanage01.testlab.com/dataservice/' class apiSess: def __init__(self): self.session = {} # API Session Object self.uuid = [] # List of available UUID self.templateid = '' # Device Template ID self.aaa() # Perform AAA Login def aaa(self): print "***** Authenticating to vManage *****" url = vManageUrl + 'j_security_check' body = { 'j_username': 'admin', 'j_password': 'admin' } tempSess = requests.session() resp = tempSess.post(url, data=body, verify=False) if resp.status_code == 200: print 'Connection Successful' self.session = tempSess else: print 'Connection Failed' exit(1) def getAPI(self, path): url = baseUrl + path tempSess = self.session resp = tempSess.get(url, verify=False) if resp.status_code == 200: print "GET Successful" return resp else: print "GET Failed" def postAPI(self, path, body): url = baseUrl + path tempSess = self.session resp = tempSess.post(url, json=body, verify=False) if resp.status_code == 200: print 'POST Successful' else: print 'POST Failed' print resp.content exit(1) #************* MAIN ****************** # Get Session Cookie apiObj = apiSess() # Get Available Device UUID print '***** Get Available Device UUID *****' resp = apiObj.getAPI('system/device/vedges') devList = resp.json()['data'] for device in devList: if 'system-ip' not in device: print device['chasisNumber'] apiObj.uuid.append(device['chasisNumber']) # Get Device Template ID print '***** Get Template ID *****' resp = apiObj.getAPI('template/device') templateList = resp.json()['data'] for k in templateList: if k['templateName'] == 'BRANCH': apiObj.templateid = k['templateId'] print 'Template ' + 'BRANCH' + ' = ' + apiObj.templateid # Add device to template print '***** Add Device to Template *****' with open('vedge_para.csv', 'r') as f: # Get Column Header keyList = f.readline().rstrip('\n').split(',') devNo = 0 for line in f: # Read Device Config One Line at a time paraList = line.rstrip('\n').split(',') devConfig = dict(zip(keyList,paraList)) # Assign UUID to Device devConfig['csv-deviceId'] = apiObj.uuid[devNo] # Build Device Config Structure print "---> Creating Config for Device #" + str(devNo + 1) + " " + str(devConfig) print ' - Assigned UUID is ' + devConfig['csv-deviceId'] configDict = { "deviceTemplateList": [ { "templateId": apiObj.templateid, "device": [devConfig], "isEdited": 'false', "isMasterEdited": 'false' } ] } # Send to vManage resp = apiObj.postAPI('template/device/config/attachfeature', configDict) print " - Device successfully attached to template" devNo += 1 f.close()