#!/usr/bin/python3
#imports
import getopt, sys, json, requests, configparser
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# Authenticate (vROps local user - consider updating script to allow for IDM)
def Authenticate():
#Read Config parameters
config = configparser.ConfigParser()
config.read('config.ini')
#Your vROps environment parameters
usrName = config['vrops user']['usrName']
usrPass = config['vrops user']['usrPass']
srvName = config['vrops server']['srvName']
global baseURL
baseURL = "https://" + srvName
tokenURL = baseURL + "/suite-api/api/auth/token/acquire"
authJSON = {"username": usrName,"authSource": "Local","password": usrPass,"others": [],"otherAttributes": {}}
authHeaders = {"Content-Type":"application/json","Accept":"application/json"}
authResponse = requests.post(tokenURL,data=json.dumps(authJSON),headers=authHeaders,verify=False)
if (authResponse.status_code != 200):
print('probably invalid credentials')
print('Returned Status Code: ' + authResponse.status_code)
sys.exit(2)
else:
authToken = "vRealizeOpsToken " + authResponse.json()['token']
return authToken
# Get all VMs in the vROps database
# Return only VMs that are not templates and are receiving data from vCenter
def vropsGetAllVms(token):
vmList=[]
Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
vropsURL = baseURL+"/suite-api/api/resources?resourceKind=virtualmachine"
response = requests.get(vropsURL,headers=Headers,verify=False)
data = response.json()
AddVmToList(token,data,vmList)
return(vmList)
# Search vROps database for the VM Name
# Return only VMs that are not templates and are receiving data from vCenter
def vropsSearchName(token, vm_name):
vmList = []
Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
vropsURL = baseURL+"/suite-api/api/adapterkinds/VMWARE/resourcekinds/virtualmachine/resources?name="+vm_name
response = requests.get(vropsURL,headers=Headers,verify=False)
if (response.status_code == 200):
data = response.json()
if data['pageInfo']['totalCount'] == '0':
return ('Searched term not found')
else:
AddVmToList(token,data,vmList)
return (vmList)
# Add VM to the VM List only if it exists, is not a template and is Powered On
def AddVmToList(token,data,vmList):
for x in range(int(data['pageInfo']['totalCount'])):
for y in range(len(data['resourceList'][x]['resourceStatusStates'])):
adapterKey = vropsGetAdapterKind(token,data['resourceList'][x]['resourceStatusStates'][y]['adapterInstanceId'])
resState = data['resourceList'][x]['resourceStatusStates'][y]['resourceState']
if (adapterKey == 'VMWARE'):
if (resState == 'NOT_EXISTING'):
break
else:
msg = vropsVmStatus(token,data['resourceList'][x]['identifier'])
if (msg[0]=='false' and msg[1]=='Powered On'):
vmList.append(data['resourceList'][x]['identifier'])
msg = data['resourceList'][x]['resourceKey']['name']+": "
msg += data['resourceList'][x]['identifier']+" "
# msg += data['resourceList'][x]['resourceKey']['resourceIdentifiers'][2]['value']
print(msg)
return(vmList)
def vropsVmStatus(token,vmId):
Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
Data = {
"resourceIds":[vmId],
"propertyKeys": ["summary|config|isTemplate","summary|runtime|powerState"],
"other": [],
"otherAttributes": {}
}
vropsURL = baseURL+"/suite-api/api/resources/properties/latest/query"
response = requests.post(vropsURL,headers=Headers,data=json.dumps(Data),verify=False)
resp = response.json()
isTemplate = resp['values'][0]['property-contents']['property-content'][0]['values'][0]
powerState = resp['values'][0]['property-contents']['property-content'][1]['values'][0]
msg = [isTemplate,powerState]
return(msg)
# Get the metrics for the VM
# Change the statKey parameter to select metrics. An empty list will return all metrics
# Change maxSamples to return X past values for each metric. 1 returns the latest metric
def vropsGetResIdStats(token, vmId):
# Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"text/csv"}
# Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/xml"}
Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
Data = {
"resourceId" : [vmId],
"statKey" : ["cpu|workload","cpu|demandPct"],
# "statKey" : [],
"metrics" : False,
"currentOnly" : False,
"maxSamples" : 1
}
vropsURL = baseURL+"/suite-api/api/resources/stats/latest/query"
response = requests.post(vropsURL,headers=Headers,data=json.dumps(Data),verify=False)
newstr=(response.text).replace("\n",",").strip()
print(newstr)
# Get all the properties for the VM
def vropsGetResIdProps(token, vmId):
# Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"text/csv"}
# Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/xml"}
Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
vropsURL = baseURL+"/suite-api/api/resources/"+vmId+"/properties"
response = requests.get(vropsURL,headers=Headers,verify=False)
newstr=(response.text).replace("\n",",").strip()
print(newstr)
def vropsGetAdapterKind(token,adapterId):
Headers = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
vropsURL = baseURL+"/suite-api/api/adapters/"+adapterId
response = requests.get(vropsURL,headers=Headers,verify=False)
if response.status_code == 200:
return(response.json()['resourceKey']['adapterKindKey'])
else:
print("There is a problem searching for the adapter")
sys.exit(2)
def Logout(token):
releaseURL = baseURL + "/suite-api/api/auth/token/release"
authHeaders = {"Content-Type":"application/json","Authorization":token,"Accept":"application/json"}
authResponse = requests.post(releaseURL,headers=authHeaders,verify=False)
def Usage():
print("We need:")
print(" -a or --all")
print(" -n <VM Name>")
print("for parameters")
def main():
# Check for passed arguments
if len(sys.argv)==1:
Usage()
sys.exit()
try:
opts, args = getopt.getopt(sys.argv[1:], "han:",["help","all","name="])
except getopt.GetoptError as err:
print(err)
Usage()
sys.exit(2)
authToken = Authenticate()
vmList = []
for key,value in opts:
if key == ("-h", "--help"):
Usage()
sys.exit()
elif key in ("-a", "--all"):
vmList = vropsGetAllVms(authToken)
elif key in ("-n", "--name"):
vmList = vropsSearchName(authToken, value)
else:
Usage()
for x in range(len(vmList)):
vropsGetResIdStats(authToken,vmList[x])
# vropsGetResIdProps(authToken,vmList[x])
Logout(authToken)
if __name__ == "__main__":
main()
No comments:
Post a Comment