]>
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();
125 reference
: 'moveFormPanel',
133 xtype
: 'displayfield',
135 fieldLabel
: gettext('Source'),
137 name
: get => get('isQemu') ? 'disk' : 'volume',
143 xtype
: 'vmComboSelector',
144 reference
: 'targetVMID',
147 fieldLabel
: gettext('Target'),
149 value
: '{targetVMID}',
152 model
: 'PVEResources',
155 cbind
: {}, // for nested cbinds
160 value
: get => get('isQemu') ? 'qemu' : 'lxc',
177 property
: 'template',
182 listeners
: { change
: 'onTargetVMChange' },
185 xtype
: 'pveControllerSelector',
186 reference
: 'diskSelector',
198 disabled
: '{isQemu}',
202 xtype
: 'pmxDisplayEditField',
204 editable
: get => !get('disk').match(/^unused\d+/),
205 value
: get => get('disk').match(/^unused\d+/) ? 'unused' : 'mp',
210 fieldLabel
: gettext('Add as'),
214 xtype
: 'proxmoxKVComboBox',
216 reference
: 'mpTypeCombo',
222 ['mp', gettext('Mount Point')],
223 ['unused', gettext('Unused')],
225 listeners
: { change
: 'onMpTypeChange' },
229 xtype
: 'proxmoxintegerfield',
231 reference
: 'mpIdSelector',
235 validateOnChange
: true,
238 maxValue
: '{mpMaxCount}',
240 validator: function(value
) {
241 let view
= this.up('window');
242 let type
= view
.getViewModel().get('mpType');
243 if (Ext
.isDefined(view
.VMConfig
[`${type}${value}`])) {
244 return "Mount point is already in use.";
255 initComponent: function() {
259 throw "no node name specified";
263 throw "no VM ID specified";
267 throw "no type specified";