]>
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 this.getView().getViewModel().set('mpType', value
.getValue());
76 this.getView().lookup('mpIdSelector').validate();
79 onTargetVMChange: function(f
, vmid
) {
81 let view
= me
.getView();
82 let diskSelector
= view
.lookup('diskSelector');
84 diskSelector
.setVMConfig(null);
89 let type
= view
.qemu
? 'qemu' : 'lxc';
91 let url
= `/nodes/${view.nodename}/${type}/${vmid}/config`;
92 Proxmox
.Utils
.API2Request({
95 failure
: response
=> Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
),
96 success: function(response
, options
) {
98 diskSelector
.setVMConfig(response
.result
.data
);
99 diskSelector
.setDisabled(false);
101 let mpIdSelector
= view
.lookup('mpIdSelector');
102 let mpType
= view
.lookup('mpType');
104 view
.VMConfig
= response
.result
.data
;
106 mpIdSelector
.setValue(
107 PVE
.Utils
.nextFreeMP(
108 view
.getViewModel().get('mpType'),
113 mpType
.setDisabled(false);
114 mpIdSelector
.setDisabled(false);
115 mpIdSelector
.validate();
122 defaultFocus
: 'sourceDisk',
125 xtype
: 'displayfield',
127 fieldLabel
: gettext('Source'),
129 name
: get => get('isQemu') ? 'disk' : 'volume',
135 xtype
: 'vmComboSelector',
136 reference
: 'targetVMID',
139 fieldLabel
: gettext('Target Guest'),
141 value
: '{targetVMID}',
144 model
: 'PVEResources',
147 cbind
: {}, // for nested cbinds
152 value
: get => get('isQemu') ? 'qemu' : 'lxc',
169 property
: 'template',
174 listeners
: { change
: 'onTargetVMChange' },
177 xtype
: 'pveControllerSelector',
178 reference
: 'diskSelector',
190 disabled
: '{isQemu}',
194 xtype
: 'pmxDisplayEditField',
196 editable
: get => !get('disk').match(/^unused\d+/),
197 value
: get => get('disk').match(/^unused\d+/) ? 'unused' : 'mp',
202 fieldLabel
: gettext('Add as'),
206 xtype
: 'proxmoxKVComboBox',
208 reference
: 'mpTypeCombo',
214 ['mp', gettext('Mount Point')],
215 ['unused', gettext('Unused')],
217 listeners
: { change
: 'onMpTypeChange' },
221 xtype
: 'proxmoxintegerfield',
223 reference
: 'mpIdSelector',
227 validateOnChange
: true,
230 maxValue
: '{mpMaxCount}',
232 validator: function(value
) {
233 let view
= this.up('window');
234 let type
= view
.getViewModel().get('mpType');
235 if (Ext
.isDefined(view
.VMConfig
[`${type}${value}`])) {
236 return "Mount point is already in use.";
245 initComponent: function() {
249 throw "no node name specified";
253 throw "no VM ID specified";
257 throw "no type specified";