75 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import requests
 | ||
| import xml.dom.minidom
 | ||
| 
 | ||
| class cloud:
 | ||
|     def __init__(self, API_TOKEN: str, API_VERSION: str, SITE: str, TENANT: str):
 | ||
|         '''
 | ||
|         Запрос списка машин с перечнем атрибутов: Имя, ОС, IP-адрес, Состояние
 | ||
|         На входе нужен Access Token получить который можно при помощи функции getAccessToken(API Token)
 | ||
|         '''
 | ||
|         
 | ||
|         self.API_TOKEN = API_TOKEN
 | ||
|         self.API_VERSION = API_VERSION
 | ||
|         self.SITE = SITE
 | ||
|         self.TENANT = TENANT
 | ||
| 
 | ||
|         url = "https://" + self.SITE + "/oauth/tenant/" + self.TENANT + "/token"
 | ||
|         headers = {
 | ||
|             "Accept": "application/json",
 | ||
|             "Content-Type": "application/x-www-form-urlencoded",
 | ||
|             "Content-Length": "71"
 | ||
|         }
 | ||
|         data = "grant_type=refresh_token&refresh_token=" + self.API_TOKEN
 | ||
| 
 | ||
|         try:
 | ||
|             token = requests.post(url=url, headers=headers, data=data).json()['access_token']
 | ||
|             self.__access_token = token
 | ||
|         except:
 | ||
|             raise SystemError("Ошибка иницализации Access Token.")
 | ||
| 
 | ||
|     def getVMList(self) -> list:
 | ||
|         '''
 | ||
|         Запрос списка машин с перечнем атрибутов: Имя, ОС, IP-адрес, Состояние
 | ||
|         '''
 | ||
|         url = "https://" + self.SITE + "/api/query/?type=vm&fields=name,detectedGuestOs,ipAddress,status&filter=isVAppTemplate==false"
 | ||
| 
 | ||
|         headers = {
 | ||
|             "Accept": "application/*;version=" + self.API_VERSION,
 | ||
|             "Authorization": "Bearer " + self.__access_token
 | ||
|         }
 | ||
| 
 | ||
|         res = requests.get(url=url, headers=headers)
 | ||
|         dom = xml.dom.minidom.parseString(res.text)
 | ||
| 
 | ||
|         return [{
 | ||
|             "name": e.attributes['name'].value,
 | ||
|             "detectedGuestOs": e.attributes['detectedGuestOs'].value,
 | ||
|             "ipAddress": e.attributes['ipAddress'].value,
 | ||
|             "status": e.attributes['status'].value}
 | ||
|             for e in dom.getElementsByTagName("VMRecord")]
 | ||
| 
 | ||
| 
 | ||
|     def getUserList(self) -> list:
 | ||
|         '''
 | ||
|         Запрос списка пользователей
 | ||
|         На выходе имеем список словарей:
 | ||
|         [{
 | ||
|             "name": "str('name')",
 | ||
|             "fullName": "str('fullName)",
 | ||
|             "isEnabled": bool('isEnabled')
 | ||
|         }, {
 | ||
|             .....
 | ||
|         }]
 | ||
|         '''
 | ||
|         url = "https://" + self.SITE + "/api/query?type=user&fields=name,fullName,isEnabled"
 | ||
| 
 | ||
|         headers = {
 | ||
|             "Accept": "application/*;version=" + self.API_VERSION,
 | ||
|             "Authorization": "Bearer " + self.__access_token
 | ||
|         }
 | ||
| 
 | ||
|         res = requests.get(url=url, headers=headers)
 | ||
|         dom = xml.dom.minidom.parseString(res.text)
 | ||
| 
 | ||
|         return [{"name": e.attributes['name'].value, "fullName": e.attributes['fullName'].value, "isEnabled": bool(e.attributes['isEnabled'].value)} for e in dom.getElementsByTagName("UserRecord")]
 |