]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/form/ControllerSelector.js
guest import: allow setting VLAN-tag
[pve-manager.git] / www / manager6 / form / ControllerSelector.js
CommitLineData
711c07d1
DM
1Ext.define('PVE.form.ControllerSelector', {
2 extend: 'Ext.form.FieldContainer',
42902182 3 alias: 'widget.pveControllerSelector',
711c07d1 4
48eb9401 5 withVirtIO: true,
7b14d77a 6 withUnused: false,
711c07d1 7
711c07d1
DM
8 vmconfig: {}, // used to check for existing devices
9
ecfd8bcd
TL
10 setToFree: function(controllers, busField, deviceIDField) {
11 let me = this;
2aa645da
DC
12 let freeId = PVE.Utils.nextFreeDisk(controllers, me.vmconfig);
13
14 if (freeId !== undefined) {
1eb7b17f 15 busField?.setValue(freeId.controller);
2aa645da 16 deviceIDField.setValue(freeId.id);
ecfd8bcd 17 }
7d749da0
DC
18 },
19
20 updateVMConfig: function(vmconfig) {
21 let me = this;
22 me.vmconfig = Ext.apply({}, vmconfig);
2aa645da 23
7d749da0 24 me.down('field[name=deviceid]').validate();
ecfd8bcd
TL
25 },
26
711c07d1 27 setVMConfig: function(vmconfig, autoSelect) {
ecfd8bcd 28 let me = this;
711c07d1
DM
29
30 me.vmconfig = Ext.apply({}, vmconfig);
7206af4b 31
ecfd8bcd
TL
32 let bussel = me.down('field[name=controller]');
33 let deviceid = me.down('field[name=deviceid]');
0e09929d 34
2aa645da 35 let clist;
7206af4b 36 if (autoSelect === 'cdrom') {
7206af4b 37 if (!Ext.isDefined(me.vmconfig.ide2)) {
0e09929d
EK
38 bussel.setValue('ide');
39 deviceid.setValue(2);
7206af4b 40 return;
711c07d1 41 }
c7139315 42 clist = ['ide', 'scsi', 'sata'];
8058410f 43 } else {
ecfd8bcd 44 // in most cases we want to add a disk to the same controller we previously used
2aa645da 45 clist = PVE.Utils.sortByPreviousUsage(me.vmconfig);
7206af4b 46 }
711c07d1 47
ecfd8bcd
TL
48 me.setToFree(clist, bussel, deviceid);
49
0e09929d 50 deviceid.validate();
711c07d1
DM
51 },
52
7d749da0
DC
53 getConfId: function() {
54 let me = this;
55 let controller = me.getComponent('controller').getValue() || 'ide';
56 let id = me.getComponent('deviceid').getValue() || 0;
57
58 return `${controller}${id}`;
59 },
60
711c07d1 61 initComponent: function() {
1a3e2e9f 62 let me = this;
711c07d1
DM
63
64 Ext.apply(me, {
65 fieldLabel: gettext('Bus/Device'),
66 layout: 'hbox',
711c07d1 67 defaults: {
f6710aac 68 hideLabel: true,
711c07d1
DM
69 },
70 items: [
71 {
42902182 72 xtype: 'pveBusSelector',
711c07d1 73 name: 'controller',
7d749da0 74 itemId: 'controller',
39c06c69 75 value: PVE.qemu.OSDefaults.generic.busType,
48eb9401 76 withVirtIO: me.withVirtIO,
7b14d77a 77 withUnused: me.withUnused,
711c07d1 78 allowBlank: false,
a1fe04b6 79 flex: 2,
711c07d1
DM
80 listeners: {
81 change: function(t, value) {
369e3ecd 82 if (!value) {
711c07d1
DM
83 return;
84 }
ecfd8bcd 85 let field = me.down('field[name=deviceid]');
1eb7b17f 86 me.setToFree([value], undefined, field);
3d0b402b 87 field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value] - 1);
711c07d1 88 field.validate();
f6710aac
TL
89 },
90 },
711c07d1
DM
91 },
92 {
bf96f60d 93 xtype: 'proxmoxintegerfield',
711c07d1 94 name: 'deviceid',
7d749da0 95 itemId: 'deviceid',
711c07d1 96 minValue: 0,
3d0b402b 97 maxValue: PVE.Utils.diskControllerMaxIDs.ide - 1,
711c07d1 98 value: '0',
a1fe04b6 99 flex: 1,
bf96f60d 100 allowBlank: false,
711c07d1 101 validator: function(value) {
711c07d1 102 if (!me.rendered) {
ecfd8bcd 103 return undefined;
711c07d1 104 }
ecfd8bcd
TL
105 let controller = me.down('field[name=controller]').getValue();
106 let confid = controller + value;
711c07d1
DM
107 if (Ext.isDefined(me.vmconfig[confid])) {
108 return "This device is already in use.";
109 }
110 return true;
f6710aac
TL
111 },
112 },
113 ],
711c07d1
DM
114 });
115
116 me.callParent();
3e6105c0
DC
117
118 if (me.selectFree) {
119 me.setVMConfig(me.vmconfig);
120 }
f6710aac 121 },
711c07d1 122});