code: func (l VirtualDeviceList) BootOrder(order []string) []types.BaseVirtualMachineBootOptionsBootableDevice {
  	var devices []types.BaseVirtualMachineBootOptionsBootableDevice
  
  	for _, name := range order {
  		if kind, ok := bootableDevices[name]; ok {
  			if name == DeviceTypeNone {
  				// Not covered in the API docs, nor obvious, but this clears the boot order on the VC/ESX side.
  				devices = append(devices, new(types.VirtualMachineBootOptionsBootableDevice))
  				continue
  			}
  
  			for _, device := range l {
  				if l.Type(device) == name {
  					devices = append(devices, kind(device))
  				}
  			}
  			continue
  		}
  
  		if d := l.Find(name); d != nil {
  			if kind, ok := bootableDevices[l.Type(d)]; ok {
  				devices = append(devices, kind(d))
  			}
  		}
  	}
  
  	return devices
  }
docs: // BootOrder returns a list of devices which can be used to set boot order via VirtualMachine.SetBootOptions.
  // The order can be any of "ethernet", "cdrom", "floppy" or "disk" or by specific device name.
  // A value of "-" will clear the existing boot order on the VC/ESX side.