]>
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',
135 reference
: 'targetVMID',
138 fieldLabel
: gettext('Target Guest'),
140 value
: '{targetVMID}',
143 model
: 'PVEResources',
146 cbind
: {}, // for nested cbinds
150 cbind
: { value
: '{type}' },
154 cbind
: { value
: '{nodename}' },
156 // FIXME: remove, artificial restriction that doesn't gains us anything..
160 cbind
: { value
: '{vmid}' },
163 property
: 'template',
168 listeners
: { change
: 'onTargetVMChange' },
171 xtype
: 'pveControllerSelector',
172 reference
: 'diskSelector',
184 disabled
: '{isQemu}',
188 xtype
: 'pmxDisplayEditField',
190 editable
: get => !get('disk').match(/^unused\d+/),
191 value
: get => get('disk').match(/^unused\d+/) ? 'unused' : 'mp',
196 fieldLabel
: gettext('Add as'),
200 xtype
: 'proxmoxKVComboBox',
207 ['mp', gettext('Mount Point')],
208 ['unused', gettext('Unused')],
210 listeners
: { change
: 'onMpTypeChange' },
214 xtype
: 'proxmoxintegerfield',
216 reference
: 'mpIdSelector',
220 validateOnChange
: true,
223 maxValue
: '{mpMaxCount}',
225 validator: function(value
) {
226 let view
= this.up('window');
227 let type
= view
.getViewModel().get('mpType');
228 if (Ext
.isDefined(view
.VMConfig
[`${type}${value}`])) {
229 return "Mount point is already in use.";
238 initComponent: function() {
242 throw "no node name specified";
246 throw "no VM ID specified";
250 throw "no type specified";