]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/GuestDiskReassign.js
1 Ext
.define('PVE.window.GuestDiskReassign', {
2 extend
: 'Proxmox.window.Edit',
3 mixins
: ['Proxmox.Mixin.CBind'],
19 mpMaxCount
: get => get('mpType') === 'mp'
20 ? PVE
.Utils
.mp_counts
.mps
- 1
21 : PVE
.Utils
.mp_counts
.unused
- 1,
25 cbindData: function() {
30 isQemu
: me
.type
=== 'qemu',
31 nodename
: me
.nodename
,
33 let endpoint
= me
.type
=== 'qemu' ? 'move_disk' : 'move_volume';
34 return `/nodes/${me.nodename}/${me.type}/${me.vmid}/${endpoint}`;
40 title
: get => get('isQemu') ? gettext('Reassign Disk') : gettext('Reassign Volume'),
41 submitText
: get => get('title'),
46 getValues: function() {
48 let values
= me
.formPanel
.getForm().getValues();
52 'target-vmid': values
.targetVmid
,
55 params
[me
.qemu
? 'disk' : 'volume'] = me
.disk
;
58 params
['target-disk'] = `${values.controller}${values.deviceid}`;
60 params
['target-volume'] = `${values.mpType}${values.mpId}`;
66 xclass
: 'Ext.app.ViewController',
68 initViewModel: function(model
) {
69 let view
= this.getView();
70 let mpTypeValue
= view
.disk
.match(/^unused\d+/) ? 'unused' : 'mp';
71 model
.set('mpType', mpTypeValue
);
74 onMpTypeChange: function(value
) {
75 let view
= this.getView();
76 view
.getViewModel().set('mpType', value
.getValue());
77 view
.lookup('mpIdSelector').validate();
80 onTargetVMChange: function(f
, vmid
) {
82 let view
= me
.getView();
83 let diskSelector
= view
.lookup('diskSelector');
85 diskSelector
.setVMConfig(null);
90 let url
= `/nodes/${view.nodename}/${view.type}/${vmid}/config`;
91 Proxmox
.Utils
.API2Request({
94 failure
: response
=> Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
),
95 success: function({ result
}, options
) {
97 diskSelector
.setVMConfig(result
.data
);
98 diskSelector
.setDisabled(false);
100 let mpIdSelector
= view
.lookup('mpIdSelector');
101 let mpType
= view
.lookup('mpType');
103 view
.VMConfig
= result
.data
;
105 mpIdSelector
.setValue(
106 PVE
.Utils
.nextFreeMP(
107 view
.getViewModel().get('mpType'),
112 mpType
.setDisabled(false);
113 mpIdSelector
.setDisabled(false);
114 mpIdSelector
.validate();
121 defaultFocus
: 'sourceDisk',
124 xtype
: 'displayfield',
126 fieldLabel
: gettext('Source'),
128 name
: get => get('isQemu') ? 'disk' : 'volume',
134 xtype
: 'vmComboSelector',
137 fieldLabel
: gettext('Target Guest'),
139 model
: 'PVEResources',
142 cbind
: {}, // for nested cbinds
146 cbind
: { value
: '{type}' },
150 cbind
: { value
: '{nodename}' },
152 // FIXME: remove, artificial restriction that doesn't gains us anything..
156 cbind
: { value
: '{vmid}' },
159 property
: 'template',
164 listeners
: { change
: 'onTargetVMChange' },
167 xtype
: 'pveControllerSelector',
168 reference
: 'diskSelector',
180 disabled
: '{isQemu}',
184 xtype
: 'pmxDisplayEditField',
186 editable
: get => !get('disk').match(/^unused\d+/),
187 value
: get => get('disk').match(/^unused\d+/) ? 'unused' : 'mp',
192 fieldLabel
: gettext('Add as'),
196 xtype
: 'proxmoxKVComboBox',
203 ['mp', gettext('Mount Point')],
204 ['unused', gettext('Unused')],
206 listeners
: { change
: 'onMpTypeChange' },
210 xtype
: 'proxmoxintegerfield',
212 reference
: 'mpIdSelector',
216 validateOnChange
: true,
219 maxValue
: '{mpMaxCount}',
221 validator: function(value
) {
222 let view
= this.up('window');
223 let type
= view
.getViewModel().get('mpType');
224 if (Ext
.isDefined(view
.VMConfig
[`${type}${value}`])) {
225 return "Mount point is already in use.";
234 initComponent: function() {
238 throw "no node name specified";
242 throw "no VM ID specified";
246 throw "no type specified";