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 boot_order = $(this).data('boot_order');
|
||||
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.innerHTML = `${i + 1}. `;
|
||||
options.append(text);
|
||||
var entry = document.createElement('select');
|
||||
entry.setAttribute("id", `boot-order-${i + 1}`);
|
||||
for (j = 0; j < boot_order.length; j++) {
|
||||
entry.appendChild(new Option(boot_order[j], boot_order[j]));
|
||||
for (j = 0; j < boot_order.order.length; j++) {
|
||||
entry.appendChild(new Option(boot_order.order[j].device, boot_order.order[j].device));
|
||||
}
|
||||
entry.selectedIndex = i;
|
||||
entry.setAttribute('style', 'width: 85px');
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<ul class="nav nav-list">
|
||||
<li class="nav-header">Boot Order</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 }}">
|
||||
<i class="fas fa-cog"></i>
|
||||
</button>
|
||||
|
|
|
@ -122,43 +122,61 @@ class VM:
|
|||
proxmox = connect_proxmox()
|
||||
boot_order_lookup = {'a': 'Floppy', 'c': 'Hard Disk', 'd': 'CD-ROM', 'n': 'Network'}
|
||||
raw_boot_order = self.config.get('boot', 'cdn')
|
||||
boot_order = []
|
||||
boot_order = {'legacy': False, 'order': []}
|
||||
try:
|
||||
# If proxmox version supports 'order=' format
|
||||
if float(proxmox.nodes(self.node).version.get()['release']) >= 6.3:
|
||||
# Currently using 'order=' format
|
||||
if raw_boot_order.startswith('order='):
|
||||
# Add enabled boot devices
|
||||
for order in raw_boot_order[6:].split(';'):
|
||||
boot_order.append(order)
|
||||
# Add disabled boot devices
|
||||
for device in self.cdroms + [disk[0] for disk in self.disks] + [net[0] for net in self.interfaces]:
|
||||
if device not in boot_order:
|
||||
boot_order.append(device)
|
||||
# Currently using legacy format
|
||||
# Propose updating to the new format
|
||||
else:
|
||||
if raw_boot_order.startswith('legacy='):
|
||||
raw_boot_order = raw_boot_order[7:]
|
||||
# Arrange boot devices according to current format
|
||||
for order in raw_boot_order:
|
||||
if order == 'c':
|
||||
disks = [disk[0] for disk in self.disks]
|
||||
if self.config.get('bootdisk'):
|
||||
boot_order.append(self.config['bootdisk'])
|
||||
disks.remove(self.config['bootdisk'])
|
||||
boot_order.extend(disks)
|
||||
elif order == 'd':
|
||||
boot_order.extend(self.cdroms)
|
||||
elif order == 'n':
|
||||
boot_order.extend([net[0] for net in self.interfaces])
|
||||
# Proxmox version does not support 'order=' format
|
||||
else:
|
||||
if float(proxmox.nodes(self.node).version.get()['release']) < 6.3:
|
||||
boot_order['legacy'] = True
|
||||
for order in raw_boot_order:
|
||||
boot_order.append(boot_order_lookup[order])
|
||||
boot_order['order'].append({'device': boot_order_lookup[order]})
|
||||
return boot_order
|
||||
# Currently using 'order=' format
|
||||
if raw_boot_order.startswith('order='):
|
||||
# Add enabled boot devices
|
||||
for order in raw_boot_order[6:].split(';'):
|
||||
boot_order['order'].append(
|
||||
{'device': order, 'description': self.config.get(order), 'enabled': True}
|
||||
)
|
||||
# Add disabled boot devices
|
||||
enabled_devices = [order['device'] for order in boot_order['order']]
|
||||
for device in (
|
||||
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
|
||||
# Propose updating to the new format
|
||||
else:
|
||||
if raw_boot_order.startswith('legacy='):
|
||||
raw_boot_order = raw_boot_order[7:]
|
||||
# Arrange boot devices according to current format
|
||||
devices = []
|
||||
for order in raw_boot_order:
|
||||
if order == 'c':
|
||||
disks = [disk[0] for disk in self.disks]
|
||||
if self.config.get('bootdisk'):
|
||||
boot_order.append(self.config['bootdisk'])
|
||||
disks.remove(self.config['bootdisk'])
|
||||
devices.extend(disks)
|
||||
elif order == 'd':
|
||||
devices.extend(self.cdroms)
|
||||
elif order == 'n':
|
||||
devices.extend([net[0] for net in self.interfaces])
|
||||
boot_order['order'].extend(
|
||||
{'device': device, 'description': self.config.get(device), 'enabled': True}
|
||||
for device in devices
|
||||
)
|
||||
return boot_order
|
||||
except:
|
||||
return []
|
||||
return boot_order
|
||||
return {'legacy': False, 'order': []}
|
||||
|
||||
@lazy_property
|
||||
def boot_order_json(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue