]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/qemu/CreateWizard.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / CreateWizard.js
index e0e2e128fc938e8da0fbc4a00822d5cfad3b70c5..375f0c6676d21baf1f4ef8e72e082c4c1a0c723b 100644 (file)
@@ -1,4 +1,3 @@
-/*jslint confusion: true*/
 Ext.define('PVE.qemu.CreateWizard', {
     extend: 'PVE.window.Wizard',
     alias: 'widget.pveQemuCreateWizard',
@@ -6,16 +5,62 @@ Ext.define('PVE.qemu.CreateWizard', {
 
     viewModel: {
        data: {
-           nodename: ''
-       }
+           nodename: '',
+           current: {
+               scsihw: '',
+           },
+       },
+       formulas: {
+           cgroupMode: function(get) {
+               const nodeInfo = PVE.data.ResourceStore.getNodes().find(
+                   node => node.node === get('nodename'),
+               );
+               return nodeInfo ? nodeInfo['cgroup-mode'] : 2;
+           },
+       },
     },
 
     cbindData: {
-       nodename: undefined
+       nodename: undefined,
     },
 
     subject: gettext('Virtual Machine'),
 
+    // fot the special case that we have 2 cdrom drives
+    //
+    // emulates part of the backend bootorder logic, but includes all
+    // cdrom drives since we don't know which one the user put in a bootable iso
+    // and hardcodes the known values (ide0/2, net0)
+    calculateBootOrder: function(values) {
+       // user selected windows + second cdrom
+       if (values.ide0 && values.ide0.match(/media=cdrom/)) {
+           let disk;
+           PVE.Utils.forEachBus(['ide', 'scsi', 'virtio', 'sata'], (type, id) => {
+               let confId = type + id;
+               if (!values[confId]) {
+                   return undefined;
+               }
+               if (values[confId].match(/media=cdrom/)) {
+                   return undefined;
+               }
+               disk = confId;
+               return false; // abort loop
+           });
+
+           let order = [];
+           if (disk) {
+               order.push(disk);
+           }
+           order.push('ide0', 'ide2');
+           if (values.net0) {
+               order.push('net0');
+           }
+
+           return `order=${order.join(';')}`;
+       }
+       return undefined;
+    },
+
     items: [
        {
            xtype: 'inputpanel',
@@ -27,14 +72,14 @@ Ext.define('PVE.qemu.CreateWizard', {
                    name: 'nodename',
                    cbind: {
                        selectCurNode: '{!nodename}',
-                       preferredValue: '{nodename}'
+                       preferredValue: '{nodename}',
                    },
                    bind: {
-                       value: '{nodename}'
+                       value: '{nodename}',
                    },
                    fieldLabel: gettext('Node'),
                    allowBlank: false,
-                   onlineValidator: true
+                   onlineValidator: true,
                },
                {
                    xtype: 'pveGuestIDSelector',
@@ -42,7 +87,7 @@ Ext.define('PVE.qemu.CreateWizard', {
                    guestType: 'qemu',
                    value: '',
                    loadNextFreeID: true,
-                   validateExists: false
+                   validateExists: false,
                },
                {
                    xtype: 'textfield',
@@ -50,8 +95,8 @@ Ext.define('PVE.qemu.CreateWizard', {
                    vtype: 'DnsName',
                    value: '',
                    fieldLabel: gettext('Name'),
-                   allowBlank: true
-               }
+                   allowBlank: true,
+               },
            ],
            column2: [
                {
@@ -59,8 +104,8 @@ Ext.define('PVE.qemu.CreateWizard', {
                    fieldLabel: gettext('Resource Pool'),
                    name: 'pool',
                    value: '',
-                   allowBlank: true
-               }
+                   allowBlank: true,
+               },
            ],
            advancedColumn1: [
                {
@@ -69,16 +114,8 @@ Ext.define('PVE.qemu.CreateWizard', {
                    uncheckedValue: 0,
                    defaultValue: 0,
                    deleteDefaultValue: true,
-                   fieldLabel: gettext('Start at boot')
+                   fieldLabel: gettext('Start at boot'),
                },
-               {
-                   xtype: 'proxmoxcheckbox',
-                   name: 'agent',
-                   uncheckedValue: 0,
-                   defaultValue: 0,
-                   deleteDefaultValue: true,
-                   fieldLabel: gettext('Qemu Agent')
-               }
            ],
            advancedColumn2: [
                {
@@ -87,7 +124,7 @@ Ext.define('PVE.qemu.CreateWizard', {
                    defaultValue: '',
                    emptyText: 'any',
                    labelWidth: 120,
-                   fieldLabel: gettext('Start/Shutdown order')
+                   fieldLabel: gettext('Start/Shutdown order'),
                },
                {
                    xtype: 'textfield',
@@ -95,7 +132,7 @@ Ext.define('PVE.qemu.CreateWizard', {
                    defaultValue: '',
                    emptyText: 'default',
                    labelWidth: 120,
-                   fieldLabel: gettext('Startup delay')
+                   fieldLabel: gettext('Startup delay'),
                },
                {
                    xtype: 'textfield',
@@ -103,11 +140,19 @@ Ext.define('PVE.qemu.CreateWizard', {
                    defaultValue: '',
                    emptyText: 'default',
                    labelWidth: 120,
-                   fieldLabel: gettext('Shutdown timeout')
-               }
+                   fieldLabel: gettext('Shutdown timeout'),
+               },
+           ],
+
+           advancedColumnB: [
+               {
+                   xtype: 'pveTagFieldSet',
+                   name: 'tags',
+                   maxHeight: 150,
+               },
            ],
-           onGetValues: function(values) {
 
+           onGetValues: function(values) {
                ['name', 'pool', 'onboot', 'agent'].forEach(function(field) {
                    if (!values[field]) {
                        delete values[field];
@@ -117,7 +162,7 @@ Ext.define('PVE.qemu.CreateWizard', {
                var res = PVE.Parser.printStartup({
                    order: values.order,
                    up: values.up,
-                   down: values.down
+                   down: values.down,
                });
 
                if (res) {
@@ -129,57 +174,64 @@ Ext.define('PVE.qemu.CreateWizard', {
                delete values.down;
 
                return values;
-           }
+           },
        },
        {
            xtype: 'container',
            layout: 'hbox',
            defaults: {
                flex: 1,
-               padding: '0 10'
+               padding: '0 10',
            },
            title: gettext('OS'),
            items: [
                {
                    xtype: 'pveQemuCDInputPanel',
                    bind: {
-                       nodename: '{nodename}'
+                       nodename: '{nodename}',
                    },
                    confid: 'ide2',
-                   insideWizard: true
+                   insideWizard: true,
                },
                {
                    xtype: 'pveQemuOSTypePanel',
-                   insideWizard: true
-               }
-           ]
+                   insideWizard: true,
+                   bind: {
+                       nodename: '{nodename}',
+                   },
+               },
+           ],
+       },
+       {
+           xtype: 'pveQemuSystemPanel',
+           title: gettext('System'),
+           isCreate: true,
+           insideWizard: true,
        },
        {
-           xtype: 'pveQemuHDInputPanel',
+           xtype: 'pveMultiHDPanel',
            bind: {
-               nodename: '{nodename}'
+               nodename: '{nodename}',
            },
-           title: gettext('Hard Disk'),
-           isCreate: true,
-           insideWizard: true
+           title: gettext('Disks'),
        },
        {
            xtype: 'pveQemuProcessorPanel',
            insideWizard: true,
-           title: gettext('CPU')
+           title: gettext('CPU'),
        },
        {
            xtype: 'pveQemuMemoryPanel',
            insideWizard: true,
-           title: gettext('Memory')
+           title: gettext('Memory'),
        },
        {
            xtype: 'pveQemuNetworkInputPanel',
            bind: {
-               nodename: '{nodename}'
+               nodename: '{nodename}',
            },
            title: gettext('Network'),
-           insideWizard: true
+           insideWizard: true,
        },
        {
            title: gettext('Confirm'),
@@ -190,15 +242,15 @@ Ext.define('PVE.qemu.CreateWizard', {
                    store: {
                        model: 'KeyValue',
                        sorters: [{
-                           property : 'key',
-                           direction: 'ASC'
-                       }]
+                           property: 'key',
+                           direction: 'ASC',
+                       }],
                    },
                    columns: [
-                       {header: 'Key', width: 150, dataIndex: 'key'},
-                       {header: 'Value', flex: 1, dataIndex: 'value'}
-                   ]
-               }
+                       { header: 'Key', width: 150, dataIndex: 'key' },
+                       { header: 'Value', flex: 1, dataIndex: 'value' },
+                   ],
+               },
            ],
            dockedItems: [
                {
@@ -206,13 +258,20 @@ Ext.define('PVE.qemu.CreateWizard', {
                    name: 'start',
                    dock: 'bottom',
                    margin: '5 0 0 0',
-                   boxLabel: gettext('Start after created')
-               }
+                   boxLabel: gettext('Start after created'),
+               },
            ],
            listeners: {
                show: function(panel) {
-                   var kv = this.up('window').getValues();
+                   let wizard = this.up('window');
+                   var kv = wizard.getValues();
                    var data = [];
+
+                   let boot = wizard.calculateBootOrder(kv);
+                   if (boot) {
+                       kv.boot = boot;
+                   }
+
                    Ext.Object.each(kv, function(key, value) {
                        if (key === 'delete') { // ignore
                            return;
@@ -227,34 +286,36 @@ Ext.define('PVE.qemu.CreateWizard', {
                    summarystore.sort();
                    summarystore.resumeEvents();
                    summarystore.fireEvent('refresh');
-
-               }
+               },
            },
            onSubmit: function() {
                var wizard = this.up('window');
                var kv = wizard.getValues();
-               delete kv['delete'];
+               delete kv.delete;
 
                var nodename = kv.nodename;
                delete kv.nodename;
 
+               let boot = wizard.calculateBootOrder(kv);
+               if (boot) {
+                   kv.boot = boot;
+               }
+
                Proxmox.Utils.API2Request({
                    url: '/nodes/' + nodename + '/qemu',
                    waitMsgTarget: wizard,
                    method: 'POST',
                    params: kv,
-                   success: function(response){
+                   success: function(response) {
                        wizard.close();
                    },
                    failure: function(response, opts) {
                        Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-                   }
+                   },
                });
-           }
-       }
-    ]
+           },
+       },
+    ],
 });
 
 
-
-