mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-03-09 15:40:09 +00:00
Update format of VM boot order JSON
Change format of the VM boot order JSON. This new format allows the UI to mimic the Proxmox boot order selection system. The new format is as follows { 'legacy': False, 'order': [ { 'device': 'virtio0', 'description': 'local-lvm:vm-102-disk-0,size=8G', 'enabled': True }, ... ] }
This commit is contained in:
parent
6da1095d1c
commit
085f5c09d8
3 changed files with 55 additions and 37 deletions
|
@ -816,14 +816,14 @@ $("#edit-boot-order").click(function(){
|
||||||
const vmname = $(this).data('vmname');
|
const vmname = $(this).data('vmname');
|
||||||
const boot_order = $(this).data('boot_order');
|
const boot_order = $(this).data('boot_order');
|
||||||
var options = document.createElement('div');
|
var options = document.createElement('div');
|
||||||
for (i = 0; i < boot_order.length; i++) {
|
for (i = 0; i < boot_order.order.length; i++) {
|
||||||
text = document.createElement('span');
|
text = document.createElement('span');
|
||||||
text.innerHTML = `${i + 1}. `;
|
text.innerHTML = `${i + 1}. `;
|
||||||
options.append(text);
|
options.append(text);
|
||||||
var entry = document.createElement('select');
|
var entry = document.createElement('select');
|
||||||
entry.setAttribute("id", `boot-order-${i + 1}`);
|
entry.setAttribute("id", `boot-order-${i + 1}`);
|
||||||
for (j = 0; j < boot_order.length; j++) {
|
for (j = 0; j < boot_order.order.length; j++) {
|
||||||
entry.appendChild(new Option(boot_order[j], boot_order[j]));
|
entry.appendChild(new Option(boot_order.order[j].device, boot_order.order[j].device));
|
||||||
}
|
}
|
||||||
entry.selectedIndex = i;
|
entry.selectedIndex = i;
|
||||||
entry.setAttribute('style', 'width: 85px');
|
entry.setAttribute('style', 'width: 85px');
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<ul class="nav nav-list">
|
<ul class="nav nav-list">
|
||||||
<li class="nav-header">Boot Order</li>
|
<li class="nav-header">Boot Order</li>
|
||||||
<li>
|
<li>
|
||||||
{{ vm.boot_order|join(', ') }}
|
{{ vm.boot_order['order']|map(attribute='device')|join(', ') }}
|
||||||
<button class="btn btn-default proxstar-vmbtn" id="edit-boot-order" data-vmid="{{ vm.id }}" data-vmname="{{ vm.name }}" data-boot_order="{{ vm.boot_order_json }}">
|
<button class="btn btn-default proxstar-vmbtn" id="edit-boot-order" data-vmid="{{ vm.id }}" data-vmname="{{ vm.name }}" data-boot_order="{{ vm.boot_order_json }}">
|
||||||
<i class="fas fa-cog"></i>
|
<i class="fas fa-cog"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -122,43 +122,61 @@ class VM:
|
||||||
proxmox = connect_proxmox()
|
proxmox = connect_proxmox()
|
||||||
boot_order_lookup = {'a': 'Floppy', 'c': 'Hard Disk', 'd': 'CD-ROM', 'n': 'Network'}
|
boot_order_lookup = {'a': 'Floppy', 'c': 'Hard Disk', 'd': 'CD-ROM', 'n': 'Network'}
|
||||||
raw_boot_order = self.config.get('boot', 'cdn')
|
raw_boot_order = self.config.get('boot', 'cdn')
|
||||||
boot_order = []
|
boot_order = {'legacy': False, 'order': []}
|
||||||
try:
|
try:
|
||||||
# If proxmox version supports 'order=' format
|
# Proxmox version does not support 'order=' format
|
||||||
if float(proxmox.nodes(self.node).version.get()['release']) >= 6.3:
|
if float(proxmox.nodes(self.node).version.get()['release']) < 6.3:
|
||||||
|
boot_order['legacy'] = True
|
||||||
|
for order in raw_boot_order:
|
||||||
|
boot_order['order'].append({'device': boot_order_lookup[order]})
|
||||||
|
return boot_order
|
||||||
# Currently using 'order=' format
|
# Currently using 'order=' format
|
||||||
if raw_boot_order.startswith('order='):
|
if raw_boot_order.startswith('order='):
|
||||||
# Add enabled boot devices
|
# Add enabled boot devices
|
||||||
for order in raw_boot_order[6:].split(';'):
|
for order in raw_boot_order[6:].split(';'):
|
||||||
boot_order.append(order)
|
boot_order['order'].append(
|
||||||
|
{'device': order, 'description': self.config.get(order), 'enabled': True}
|
||||||
|
)
|
||||||
# Add disabled boot devices
|
# Add disabled boot devices
|
||||||
for device in self.cdroms + [disk[0] for disk in self.disks] + [net[0] for net in self.interfaces]:
|
enabled_devices = [order['device'] for order in boot_order['order']]
|
||||||
if device not in boot_order:
|
for device in (
|
||||||
boot_order.append(device)
|
self.cdroms
|
||||||
|
+ [disk[0] for disk in self.disks]
|
||||||
|
+ [net[0] for net in self.interfaces]
|
||||||
|
):
|
||||||
|
if device not in enabled_devices:
|
||||||
|
boot_order['order'].append(
|
||||||
|
{
|
||||||
|
'device': device,
|
||||||
|
'description': self.config.get(device),
|
||||||
|
'enabled': False,
|
||||||
|
}
|
||||||
|
)
|
||||||
# Currently using legacy format
|
# Currently using legacy format
|
||||||
# Propose updating to the new format
|
# Propose updating to the new format
|
||||||
else:
|
else:
|
||||||
if raw_boot_order.startswith('legacy='):
|
if raw_boot_order.startswith('legacy='):
|
||||||
raw_boot_order = raw_boot_order[7:]
|
raw_boot_order = raw_boot_order[7:]
|
||||||
# Arrange boot devices according to current format
|
# Arrange boot devices according to current format
|
||||||
|
devices = []
|
||||||
for order in raw_boot_order:
|
for order in raw_boot_order:
|
||||||
if order == 'c':
|
if order == 'c':
|
||||||
disks = [disk[0] for disk in self.disks]
|
disks = [disk[0] for disk in self.disks]
|
||||||
if self.config.get('bootdisk'):
|
if self.config.get('bootdisk'):
|
||||||
boot_order.append(self.config['bootdisk'])
|
boot_order.append(self.config['bootdisk'])
|
||||||
disks.remove(self.config['bootdisk'])
|
disks.remove(self.config['bootdisk'])
|
||||||
boot_order.extend(disks)
|
devices.extend(disks)
|
||||||
elif order == 'd':
|
elif order == 'd':
|
||||||
boot_order.extend(self.cdroms)
|
devices.extend(self.cdroms)
|
||||||
elif order == 'n':
|
elif order == 'n':
|
||||||
boot_order.extend([net[0] for net in self.interfaces])
|
devices.extend([net[0] for net in self.interfaces])
|
||||||
# Proxmox version does not support 'order=' format
|
boot_order['order'].extend(
|
||||||
else:
|
{'device': device, 'description': self.config.get(device), 'enabled': True}
|
||||||
for order in raw_boot_order:
|
for device in devices
|
||||||
boot_order.append(boot_order_lookup[order])
|
)
|
||||||
except:
|
|
||||||
return []
|
|
||||||
return boot_order
|
return boot_order
|
||||||
|
except:
|
||||||
|
return {'legacy': False, 'order': []}
|
||||||
|
|
||||||
@lazy_property
|
@lazy_property
|
||||||
def boot_order_json(self):
|
def boot_order_json(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue