]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/window/Restore.js
ui: guest import: add field for scsi controller
[pve-manager.git] / www / manager6 / window / Restore.js
index 51f7d0637dd746a7e9d6070c6f60c9cdfb8e3a0e..36aecc39230b10c4a3b5fc78005a7ce7dca52440 100644 (file)
@@ -47,8 +47,16 @@ Ext.define('PVE.window.Restore', {
            if (values.storage) {
                params.storage = values.storage;
            }
-           if (values.bwlimit !== undefined) {
-               params.bwlimit = values.bwlimit;
+
+           ['bwlimit', 'cores', 'name', 'memory', 'sockets'].forEach(opt => {
+               if ((values[opt] ?? '') !== '') {
+                   params[opt] = values[opt];
+               }
+           });
+
+           if (params.name && view.vmtype === 'lxc') {
+               params.hostname = params.name;
+               delete params.name;
            }
 
            let confirmMsg;
@@ -84,7 +92,13 @@ Ext.define('PVE.window.Restore', {
            };
 
            if (view.vmid) {
-               confirmMsg += '. ' + gettext('This will permanently erase current VM data.');
+               confirmMsg += `. ${Ext.String.format(
+                   gettext('This will permanently erase current {0} data.'),
+                   view.vmtype === 'lxc' ? 'CT' : 'VM',
+               )}`;
+               if (view.vmtype === 'lxc') {
+                   confirmMsg += `<br>${gettext('Mount point volumes are also erased.')}`;
+               }
                Ext.Msg.confirm(gettext('Confirm'), confirmMsg, function(btn) {
                    if (btn === 'yes') {
                        executeRestore();
@@ -107,14 +121,25 @@ Ext.define('PVE.window.Restore', {
                },
                failure: response => Ext.Msg.alert('Error', response.htmlStatus),
                success: function(response, options) {
-                   let allStoragesAvailable = response.result.data.split('\n').every(line => {
-                       let match = line.match(/^#qmdump#map:(\S+):(\S+):(\S*):(\S*):$/);
-                       if (!match) {
-                           return true;
+                   let allStoragesAvailable = true;
+
+                   response.result.data.split('\n').forEach(line => {
+                       let [_, key, value] = line.match(/^([^:]+):\s*(\S+)\s*$/) ?? [];
+
+                       if (!key) {
+                           return;
+                       }
+
+                       if (key === '#qmdump#map') {
+                           let match = value.match(/^(\S+):(\S+):(\S*):(\S*):$/) ?? [];
+                           // if a /dev/XYZ disk was backed up, ther is no storage hint
+                           allStoragesAvailable &&= !!match[3] && !!PVE.data.ResourceStore.getById(
+                               `storage/${view.nodename}/${match[3]}`);
+                       } else if (key === 'name' || key === 'hostname') {
+                           view.lookupReference('nameField').setEmptyText(value);
+                       } else if (key === 'memory' || key === 'cores' || key === 'sockets') {
+                           view.lookupReference(`${key}Field`).setEmptyText(value);
                        }
-                       // if a /dev/XYZ disk was backed up, ther is no storage hint
-                       return !!match[3] && !!PVE.data.ResourceStore.getById(
-                           `storage/${view.nodename}/${match[3]}`);
                    });
 
                    if (!allStoragesAvailable) {
@@ -274,6 +299,61 @@ Ext.define('PVE.window.Restore', {
            });
        }
 
+       items.push({
+           xtype: 'fieldset',
+           title: `${gettext('Override Settings')}:`,
+           layout: 'hbox',
+           defaults: {
+               border: false,
+               layout: 'anchor',
+               flex: 1,
+           },
+           items: [
+               {
+                   padding: '0 10 0 0',
+                   items: [{
+                       xtype: 'textfield',
+                       fieldLabel: me.vmtype === 'lxc' ? gettext('Hostname') : gettext('Name'),
+                       name: 'name',
+                       vtype: 'DnsName',
+                       reference: 'nameField',
+                       allowBlank: true,
+                   }, {
+                       xtype: 'proxmoxintegerfield',
+                       fieldLabel: gettext('Cores'),
+                       name: 'cores',
+                       reference: 'coresField',
+                       minValue: 1,
+                       maxValue: 128,
+                       allowBlank: true,
+                   }],
+               },
+               {
+                   padding: '0 0 0 10',
+                   items: [
+                   {
+                       xtype: 'pveMemoryField',
+                       fieldLabel: gettext('Memory'),
+                       name: 'memory',
+                       reference: 'memoryField',
+                       value: '',
+                       allowBlank: true,
+                   },
+                   {
+                       xtype: 'proxmoxintegerfield',
+                       fieldLabel: gettext('Sockets'),
+                       name: 'sockets',
+                       reference: 'socketsField',
+                       minValue: 1,
+                       maxValue: 4,
+                       allowBlank: true,
+                       hidden: me.vmtype !== 'qemu',
+                       disabled: me.vmtype !== 'qemu',
+                   }],
+               },
+           ],
+       });
+
        let title = gettext('Restore') + ": " + (me.vmtype === 'lxc' ? 'CT' : 'VM');
        if (me.vmid) {
            title = `${gettext('Overwrite')} ${title} ${me.vmid}`;