]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/GuestDiskReassign.js
4601f795eb13b9d0a279a067f586b124d509e2d5
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',
126 reference
: 'moveFormPanel',
134 xtype
: 'displayfield',
136 fieldLabel
: gettext('Source'),
138 name
: get => get('isQemu') ? 'disk' : 'volume',
144 xtype
: 'vmComboSelector',
145 reference
: 'targetVMID',
148 fieldLabel
: gettext('Target'),
150 value
: '{targetVMID}',
153 model
: 'PVEResources',
156 cbind
: {}, // for nested cbinds
161 value
: get => get('isQemu') ? 'qemu' : 'lxc',
178 property
: 'template',
183 listeners
: { change
: 'onTargetVMChange' },
186 xtype
: 'pveControllerSelector',
187 reference
: 'diskSelector',
199 disabled
: '{isQemu}',
203 xtype
: 'pmxDisplayEditField',
205 editable
: get => !get('disk').match(/^unused\d+/),
206 value
: get => get('disk').match(/^unused\d+/) ? 'unused' : 'mp',
211 fieldLabel
: gettext('Add as'),
215 xtype
: 'proxmoxKVComboBox',
217 reference
: 'mpTypeCombo',
223 ['mp', gettext('Mount Point')],
224 ['unused', gettext('Unused')],
226 listeners
: { change
: 'onMpTypeChange' },
230 xtype
: 'proxmoxintegerfield',
232 reference
: 'mpIdSelector',
236 validateOnChange
: true,
239 maxValue
: '{mpMaxCount}',
241 validator: function(value
) {
242 let view
= this.up('window');
243 let type
= view
.getViewModel().get('mpType');
244 if (Ext
.isDefined(view
.VMConfig
[`${type}${value}`])) {
245 return "Mount point is already in use.";
256 initComponent: function() {
260 throw "no node name specified";
264 throw "no VM ID specified";
268 throw "no type specified";