mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-02-14 22:11:51 +00:00
78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
from flask import current_app as app
|
|
from proxmoxer import ProxmoxAPI
|
|
|
|
from proxstar import logging
|
|
from proxstar.db import get_ignored_pools, get_user_usage_limits
|
|
from proxstar.ldapdb import is_user
|
|
|
|
|
|
def connect_proxmox():
|
|
for host in app.config['PROXMOX_HOSTS']:
|
|
try:
|
|
proxmox = ProxmoxAPI(
|
|
host,
|
|
user=app.config['PROXMOX_USER'],
|
|
password=app.config['PROXMOX_PASS'],
|
|
verify_ssl=False)
|
|
version = proxmox.version.get()
|
|
return proxmox
|
|
except:
|
|
if app.config['PROXMOX_HOSTS'].index(host) == (
|
|
len(app.config['PROXMOX_HOSTS']) - 1):
|
|
logging.error(
|
|
'unable to connect to any of the given Proxmox servers')
|
|
raise
|
|
|
|
|
|
def connect_proxmox_ssh():
|
|
for host in app.config['PROXMOX_HOSTS']:
|
|
try:
|
|
proxmox = ProxmoxAPI(
|
|
host,
|
|
user=app.config['PROXMOX_SSH_USER'],
|
|
private_key_file='proxmox_ssh_key',
|
|
password=app.config['PROXMOX_SSH_KEY_PASS'],
|
|
backend='ssh_paramiko')
|
|
version = proxmox.version.get()
|
|
return proxmox
|
|
except:
|
|
if app.config['PROXMOX_HOSTS'].index(host) == (
|
|
len(app.config['PROXMOX_HOSTS']) - 1):
|
|
logging.error(
|
|
'unable to connect to any of the given Proxmox servers')
|
|
raise
|
|
|
|
|
|
def get_node_least_mem(proxmox):
|
|
nodes = proxmox.nodes.get()
|
|
sorted_nodes = sorted(
|
|
nodes, key=lambda x: ('mem' not in x, x.get('mem', None)))
|
|
return sorted_nodes[0]['node']
|
|
|
|
|
|
def get_free_vmid(proxmox):
|
|
return proxmox.cluster.nextid.get()
|
|
|
|
|
|
def get_vm_node(proxmox, vmid):
|
|
for vm in proxmox.cluster.resources.get(type='vm'):
|
|
if vm['vmid'] == int(vmid):
|
|
return vm['node']
|
|
|
|
|
|
def get_isos(proxmox, storage):
|
|
isos = []
|
|
for iso in proxmox.nodes('proxmox01').storage(storage).content.get():
|
|
isos.append(iso['volid'].split('/')[1])
|
|
return isos
|
|
|
|
|
|
def get_pools(proxmox, db):
|
|
ignored_pools = get_ignored_pools(db)
|
|
pools = []
|
|
for pool in proxmox.pools.get():
|
|
poolid = pool['poolid']
|
|
if poolid not in ignored_pools and is_user(poolid):
|
|
pools.append(poolid)
|
|
pools = sorted(pools)
|
|
return pools
|