]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/ControllerSelector.js
89ecdf4af4baa414aefd71081888336d47d6f1c4
1 Ext
.define('PVE.form.ControllerSelector', {
2 extend
: 'Ext.form.FieldContainer',
3 alias
: 'widget.pveControllerSelector',
7 vmconfig
: {}, // used to check for existing devices
9 sortByPreviousUsage: function(vmconfig
, controllerList
) {
10 let usedControllers
= {};
11 for (const type
of Object
.keys(PVE
.Utils
.diskControllerMaxIDs
)) {
12 usedControllers
[type
] = 0;
15 for (const property
of Object
.keys(vmconfig
)) {
16 if (property
.match(PVE
.Utils
.bus_match
) && !vmconfig
[property
].match(/media=cdrom/)) {
17 const foundController
= property
.match(PVE
.Utils
.bus_match
)[1];
18 usedControllers
[foundController
]++;
22 var sortPriority
= PVE
.qemu
.OSDefaults
.getDefaults(vmconfig
.ostype
).busPriority
;
24 var sortedList
= Ext
.clone(controllerList
);
25 sortedList
.sort(function(a
, b
) {
26 if (usedControllers
[b
] == usedControllers
[a
]) {
27 return sortPriority
[b
] - sortPriority
[a
];
29 return usedControllers
[b
] - usedControllers
[a
];
35 setVMConfig: function(vmconfig
, autoSelect
) {
38 me
.vmconfig
= Ext
.apply({}, vmconfig
);
40 var clist
= ['ide', 'virtio', 'scsi', 'sata'];
41 var bussel
= me
.down('field[name=controller]');
42 var deviceid
= me
.down('field[name=deviceid]');
44 if (autoSelect
=== 'cdrom') {
45 if (!Ext
.isDefined(me
.vmconfig
.ide2
)) {
46 bussel
.setValue('ide');
50 clist
= ['ide', 'scsi', 'sata'];
52 // in most cases we want to add a disk to the same controller
54 clist
= me
.sortByPreviousUsage(me
.vmconfig
, clist
);
58 for (const controller
of clist
) {
59 bussel
.setValue(controller
);
60 for (let i
= 0; i
< PVE
.Utils
.diskControllerMaxIDs
[controller
]; i
++) {
61 let confid
= controller
+ i
.toString();
62 if (!Ext
.isDefined(me
.vmconfig
[confid
])) {
64 break clist_loop
; // we found the desired controller/id combo
71 initComponent: function() {
75 fieldLabel
: gettext('Bus/Device'),
82 xtype
: 'pveBusSelector',
84 value
: PVE
.qemu
.OSDefaults
.generic
.busType
,
85 noVirtIO
: me
.noVirtIO
,
89 change: function(t
, value
) {
93 var field
= me
.down('field[name=deviceid]');
94 field
.setMaxValue(PVE
.Utils
.diskControllerMaxIDs
[value
]);
100 xtype
: 'proxmoxintegerfield',
103 maxValue
: PVE
.Utils
.diskControllerMaxIDs
.ide
,
107 validator: function(value
) {
108 /*jslint confusion: true */
112 var field
= me
.down('field[name=controller]');
113 var controller
= field
.getValue();
114 var confid
= controller
+ value
;
115 if (Ext
.isDefined(me
.vmconfig
[confid
])) {
116 return "This device is already in use.";