]>
git.proxmox.com Git - pve-manager.git/blob - www/manager/qemu/Clone.js
1 Ext
.define('PVE.window.Clone', {
2 extend
: 'Ext.window.Window',
8 create_clone: function(values
) {
11 var params
= { newid
: values
.newvmid
};
13 if (values
.snapname
&& values
.snapname
!== 'current') {
14 params
.snapname
= values
.snapname
;
18 params
.pool
= values
.pool
;
22 params
.name
= values
.name
;
26 params
.target
= values
.target
;
29 if (values
.clonemode
=== 'copy') {
32 params
.storage
= values
.storage
;
33 if (values
.diskformat
) {
34 params
.format
= values
.diskformat
;
39 PVE
.Utils
.API2Request({
41 url
: '/nodes/' + me
.nodename
+ '/qemu/' + me
.vmid
+ '/clone',
44 failure: function(response
, opts
) {
45 Ext
.Msg
.alert('Error', response
.htmlStatus
);
47 success: function(response
, options
) {
54 updateVisibility: function() {
57 var clonemode
= me
.kv1
.getValue();
58 var storage
= me
.hdstoragesel
.getValue();
59 var rec
= me
.hdstoragesel
.store
.getById(storage
);
61 me
.hdstoragesel
.setDisabled(clonemode
=== 'clone');
63 if (!rec
|| clonemode
=== 'clone') {
64 me
.formatsel
.setDisabled(true);
68 if (rec
.data
.type
=== 'lvm' ||
69 rec
.data
.type
=== 'lvmthin' ||
70 rec
.data
.type
=== 'rbd' ||
71 rec
.data
.type
=== 'iscsi' ||
72 rec
.data
.type
=== 'sheepdog' ||
73 rec
.data
.type
=== 'zfs' ||
74 rec
.data
.type
=== 'zfspool'
76 me
.formatsel
.setValue('raw');
77 me
.formatsel
.setDisabled(true);
79 me
.formatsel
.setDisabled(false);
83 verifyFeature: function() {
86 var snapname
= me
.snapshotSel
.getValue();
87 var clonemode
= me
.kv1
.getValue();
89 var params
= { feature
: clonemode
};
90 if (snapname
!== 'current') {
91 params
.snapname
= snapname
;
94 PVE
.Utils
.API2Request({
96 url
: '/nodes/' + me
.nodename
+ '/qemu/' + me
.vmid
+ '/feature',
99 failure: function(response
, opts
) {
100 me
.submitBtn
.setDisabled(false);
101 Ext
.Msg
.alert('Error', response
.htmlStatus
);
103 success: function(response
, options
) {
104 var res
= response
.result
.data
;
105 me
.submitBtn
.setDisabled(res
.hasFeature
!== 1);
107 me
.targetSel
.allowedNodes
= res
.nodes
;
108 me
.targetSel
.validate();
113 initComponent : function() {
114 /*jslint confusion: true */
118 throw "no node name specified";
122 throw "no VM ID specified";
126 me
.snapname
= 'current';
132 me
.targetSel
= Ext
.create('PVE.form.NodeSelector', {
134 fieldLabel
: gettext('Target node'),
137 onlineValidator
: true
140 col1
.push(me
.targetSel
);
142 var modelist
= [['copy', gettext('Full Clone')]];
144 modelist
.push(['clone', gettext('Linked Clone')]);
147 me
.kv1
= Ext
.create('PVE.form.KVComboBox', {
148 fieldLabel
: gettext('Mode'),
151 value
: me
.isTemplate
? 'clone' : 'copy',
155 me
.mon(me
.kv1
, 'change', function(t
, value
) {
156 me
.updateVisibility();
162 me
.snapshotSel
= Ext
.create('PVE.form.SnapshotSelector', {
164 fieldLabel
: gettext('Snapshot'),
165 nodename
: me
.nodename
,
167 hidden
: me
.isTemplate
? true : false,
172 change: function(f
, value
) {
178 col2
.push(me
.snapshotSel
);
182 xtype
: 'pveVMIDSelector',
185 loadNextFreeVMID
: true,
186 validateExists
: false
192 fieldLabel
: gettext('Name')
196 me
.hdstoragesel
= Ext
.create('PVE.form.StorageSelector', {
198 nodename
: me
.nodename
,
199 fieldLabel
: gettext('Target Storage'),
200 storageContent
: 'images',
201 autoSelect
: me
.insideWizard
,
203 disabled
: me
.isTemplate
? true : false, // because default mode is clone for templates
206 change: function(f
, value
) {
207 me
.updateVisibility();
213 me
.targetSel
.on('change', function(f
, value
) {
214 me
.hdstoragesel
.setTargetNode(value
);
217 me
.formatsel
= Ext
.create('PVE.form.DiskFormatSelector', {
219 fieldLabel
: gettext('Format'),
227 xtype
: 'pvePoolSelector',
228 fieldLabel
: gettext('Resource Pool'),
234 col2
.push(me
.hdstoragesel
);
235 col2
.push(me
.formatsel
);
237 me
.formPanel
= Ext
.create('Ext.form.Panel', {
241 defaultType
: 'container',
263 var form
= me
.formPanel
.getForm();
265 var titletext
= me
.isTemplate
? "Template" : "VM";
266 me
.title
= "Clone " + titletext
+ " " + me
.vmid
;
268 me
.submitBtn
= Ext
.create('Ext.Button', {
269 text
: gettext('Clone'),
271 handler: function() {
272 if (form
.isValid()) {
273 var values
= form
.getValues();
274 me
.create_clone(values
);
285 buttons
: [ me
.submitBtn
],
286 items
: [ me
.formPanel
]