diff --git a/proxstar/static/js/script.js b/proxstar/static/js/script.js
index 154bcb1..719afb0 100644
--- a/proxstar/static/js/script.js
+++ b/proxstar/static/js/script.js
@@ -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');
diff --git a/proxstar/templates/vm_details.html b/proxstar/templates/vm_details.html
index bfcc95b..9e54a15 100644
--- a/proxstar/templates/vm_details.html
+++ b/proxstar/templates/vm_details.html
@@ -12,7 +12,7 @@
Boot Order
- {{ vm.boot_order|join(', ') }}
+ {{ vm.boot_order['order']|map(attribute='device')|join(', ') }}
diff --git a/proxstar/vm.py b/proxstar/vm.py
index cacde81..cfec1f3 100644
--- a/proxstar/vm.py
+++ b/proxstar/vm.py
@@ -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):