2017-11-26 16:48:51 +00:00
|
|
|
import time
|
|
|
|
from proxmoxer import ProxmoxAPI
|
|
|
|
|
|
|
|
|
|
|
|
def connect_proxmox(host, user, password):
|
|
|
|
try:
|
|
|
|
proxmox = ProxmoxAPI(host, user=user, password=password, verify_ssl=False)
|
|
|
|
except:
|
|
|
|
print("Unable to connect to Proxmox!")
|
|
|
|
raise
|
|
|
|
return proxmox
|
|
|
|
|
|
|
|
|
|
|
|
def get_vms_for_user(proxmox, user):
|
|
|
|
return proxmox.pools(user).get()['members']
|
|
|
|
|
|
|
|
|
|
|
|
def get_node_least_mem(proxmox):
|
|
|
|
nodes = proxmox.nodes.get()
|
|
|
|
sorted_nodes = sorted(nodes, key=lambda x: x['mem'])
|
|
|
|
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']
|
|
|
|
|
|
|
|
|
2017-11-30 06:30:11 +00:00
|
|
|
def get_vm(proxmox, vmid):
|
|
|
|
node = proxmox.nodes(get_vm_node(proxmox, vmid))
|
|
|
|
return node.qemu(vmid).status.current.get()
|
|
|
|
|
|
|
|
|
2017-11-26 16:48:51 +00:00
|
|
|
def get_vm_config(proxmox, vmid):
|
|
|
|
node = proxmox.nodes(get_vm_node(proxmox, vmid))
|
|
|
|
return node.qemu(vmid).config.get()
|
|
|
|
|
|
|
|
|
|
|
|
def get_vm_mac(proxmox, vmid, config=None, interface='net0'):
|
|
|
|
if not config:
|
|
|
|
config = get_vm_config(proxmox, vmid)
|
|
|
|
mac = config[interface].split(',')
|
|
|
|
if 'virtio' in mac[0]:
|
|
|
|
mac = mac[0].split('=')[1]
|
|
|
|
else:
|
|
|
|
mac = mac[1].split('=')[1]
|
|
|
|
return mac
|
|
|
|
|
|
|
|
|
|
|
|
def get_vm_disk_size(proxmox, vmid, config=None, name='virtio0'):
|
|
|
|
if not config:
|
|
|
|
config = get_vm_config(proxmox, vmid)
|
|
|
|
disk_size = config[name].split(',')
|
|
|
|
if 'size' in disk_size[0]:
|
|
|
|
disk_size = disk_size[0].split('=')[1]
|
|
|
|
else:
|
|
|
|
disk_size = disk_size[1].split('=')[1]
|
|
|
|
return disk_size
|
|
|
|
|
|
|
|
|
|
|
|
def create_vm(proxmox, starrs, user, name, cores, memory, disk):
|
|
|
|
node = proxmox.nodes(get_node_least_mem(proxmox))
|
|
|
|
vmid = get_free_vmid(proxmox)
|
|
|
|
node.qemu.create(vmid=vmid, name=name, cores=cores, memory=memory, storage='ceph', virtio0='ceph:10', net0='virtio,bridge=vmbr0', pool=user)
|
|
|
|
time.sleep(3)
|
|
|
|
mac = get_vm_mac(proxmox, vmid)
|
2017-11-26 17:01:30 +00:00
|
|
|
return vmid, mac
|
2017-11-26 16:48:51 +00:00
|
|
|
|
2017-11-26 17:01:30 +00:00
|
|
|
def delete_vm(proxmox, starrs, vmid):
|
2017-11-26 16:48:51 +00:00
|
|
|
print(vmid)
|
|
|
|
print(get_vm_node(proxmox, vmid))
|
|
|
|
node = proxmox.nodes(get_vm_node(proxmox, vmid))
|
|
|
|
node.qemu(vmid).delete()
|