2020-03-03 07:55:30 +00:00
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
from enum import IntEnum
|
|
|
|
|
from xmlrpc.client import ServerProxy as RPCClient
|
|
|
|
|
from xmltodict import parse
|
|
|
|
|
from config import config
|
|
|
|
|
from ldap_list import vm_list
|
|
|
|
|
from db_export import setconn
|
2022-05-09 14:53:51 +00:00
|
|
|
|
from db_export import delconn
|
2020-03-03 07:55:30 +00:00
|
|
|
|
|
|
|
|
|
# Constants
|
|
|
|
|
ALL_VM_STATES = -1
|
|
|
|
|
START_ID = -1 # First id whatever it is
|
|
|
|
|
END_ID = -1 # Last id whatever it is
|
|
|
|
|
session_string = config['oca']['client_secrets']
|
|
|
|
|
opnserver = config['oca']['opn_server']
|
|
|
|
|
|
|
|
|
|
class VMState(IntEnum):
|
|
|
|
|
INIT = 0
|
|
|
|
|
PENDING = 1
|
|
|
|
|
HOLD = 2
|
|
|
|
|
ACTIVE = 3
|
|
|
|
|
STOPPED = 4
|
|
|
|
|
SUSPENDED = 5
|
|
|
|
|
DONE = 6
|
|
|
|
|
FAILED = 7
|
|
|
|
|
POWEROFF = 8
|
|
|
|
|
UNDEPLOYED = 9
|
|
|
|
|
CLONING = 10
|
|
|
|
|
CLONING_FAILURE = 11
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VmFilterFlag(IntEnum):
|
|
|
|
|
UIDUserResources = 0 # UID User’s Resources
|
|
|
|
|
UserAndItsGroupsResources = -1 # Resources belonging to the user and any of his groups
|
|
|
|
|
AllResources = -2 # All resources
|
|
|
|
|
UserResources = -3 # Resources belonging to the user
|
|
|
|
|
UserPrimaryGroupResources = -4 # Resources belonging to the user’s primary group
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VM:
|
|
|
|
|
def __init__(self, vm: dict):
|
|
|
|
|
self.id = vm.get('ID', None)
|
|
|
|
|
self.owner = {
|
|
|
|
|
'id': vm.get('UID', None),
|
|
|
|
|
'name': vm.get('UNAME', None),
|
|
|
|
|
'gname': vm.get('GNAME', None)
|
|
|
|
|
}
|
|
|
|
|
self.name = vm.get('NAME', None)
|
|
|
|
|
self.status = vm.get('STATE', None)
|
|
|
|
|
if self.status:
|
|
|
|
|
self.status = VMState(int(self.status)).name.lower()
|
|
|
|
|
|
|
|
|
|
template = vm['TEMPLATE']
|
|
|
|
|
|
|
|
|
|
self.graphics = template.get('GRAPHICS', {})
|
|
|
|
|
self.memory = template.get('MEMORY', None)
|
|
|
|
|
self.vcpu = template.get('VCPU', None)
|
|
|
|
|
self.host = {
|
|
|
|
|
'name': ((vm.get('HISTORY_RECORDS', {}) or {}).get('HISTORY', {}) or {}).get('HOSTNAME', None),
|
|
|
|
|
'id': ((vm.get('HISTORY_RECORDS', {}) or {}).get('HISTORY', {}) or {}).get('HID', None),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2022-05-09 14:53:51 +00:00
|
|
|
|
class tVM:
|
|
|
|
|
def __init__(self, tvm: dict):
|
|
|
|
|
self.id = vm.get('ID', None)
|
|
|
|
|
self.owner = {
|
|
|
|
|
'id': vm.get('UID', None),
|
|
|
|
|
'name': vm.get('UNAME', None),
|
|
|
|
|
'gname': vm.get('GNAME', None)
|
|
|
|
|
}
|
|
|
|
|
self.name = vm.get('NAME', None)
|
|
|
|
|
self.status = vm.get('STATE', None)
|
|
|
|
|
if self.status:
|
|
|
|
|
self.status = VMState(int(self.status)).name.lower()
|
|
|
|
|
|
|
|
|
|
template = vm['TEMPLATE']
|
|
|
|
|
|
|
|
|
|
|
2020-03-03 07:55:30 +00:00
|
|
|
|
def main():
|
|
|
|
|
with RPCClient(opnserver) as rpc_client:
|
|
|
|
|
success, response, *_ = rpc_client.one.vmpool.infoextended(
|
|
|
|
|
session_string , VmFilterFlag.AllResources.value, START_ID, END_ID, VMState.ACTIVE.value
|
|
|
|
|
)
|
|
|
|
|
if success:
|
|
|
|
|
vms = json.loads(json.dumps(parse(response)))['VM_POOL']['VM']
|
|
|
|
|
for entry in vm_list.entries:
|
2020-04-08 05:18:56 +00:00
|
|
|
|
temp_uname = entry.uid
|
2020-03-03 07:55:30 +00:00
|
|
|
|
for i, vm in enumerate(vms):
|
|
|
|
|
vm_user = vm['UNAME']
|
|
|
|
|
vm_id = vm['ID']
|
|
|
|
|
vm_port = vm['TEMPLATE']['GRAPHICS'].get('PORT')
|
2022-05-09 14:53:51 +00:00
|
|
|
|
vm_host = vm['HISTORY_RECORDS']['HISTORY']['HOSTNAME']
|
2020-03-03 07:55:30 +00:00
|
|
|
|
if vm['UNAME'] == temp_uname:
|
2022-05-09 14:53:51 +00:00
|
|
|
|
print(entry.uid, vm_id, vm_port, vm_host)
|
2020-03-03 07:55:30 +00:00
|
|
|
|
setconn(entry.uid, vm_id, vm_port, vm_host)
|
2022-05-09 14:53:51 +00:00
|
|
|
|
|
2020-03-03 07:55:30 +00:00
|
|
|
|
else:
|
|
|
|
|
print(response)
|
|
|
|
|
|
2022-05-09 14:53:51 +00:00
|
|
|
|
with RPCClient(opnserver) as rpc_client2:
|
|
|
|
|
success, response, *_ = rpc_client2.one.vmpool.infoextended(
|
|
|
|
|
session_string , VmFilterFlag.AllResources.value, START_ID, END_ID, VMState.DONE.value
|
|
|
|
|
)
|
|
|
|
|
if success:
|
|
|
|
|
vms2 = json.loads(json.dumps(parse(response)))['VM_POOL']['VM']
|
|
|
|
|
for entry in vm_list.entries:
|
|
|
|
|
temp_uname = entry.uid
|
|
|
|
|
for i, tvm in enumerate(vms2):
|
|
|
|
|
vm_user = tvm['UNAME']
|
|
|
|
|
vm_id = tvm['ID']
|
|
|
|
|
if tvm['UNAME'] == temp_uname:
|
|
|
|
|
print("terminated VM : ", entry.uid, vm_id)
|
|
|
|
|
delconn(entry.uid, vm_id)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
print(response)
|
2020-03-03 07:55:30 +00:00
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|
|
|
|
|
|
2022-05-09 14:53:51 +00:00
|
|
|
|
|