X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=www%2Fmanager6%2Fwindow%2FClone.js;h=e94cd92dccd0adcdb2081f9603ef9291fddd0f28;hb=7be0f644b3612a9e72463ad581af04f0364a2cd4;hp=0df7825ef03b19670d9d99b1890eb9ea0b9e8fcc;hpb=f1e2b5ddc4fc3fa3f0d5a24a06a0e3f2520a6d5b;p=pve-manager.git diff --git a/www/manager6/window/Clone.js b/www/manager6/window/Clone.js index 0df7825e..e94cd92d 100644 --- a/www/manager6/window/Clone.js +++ b/www/manager6/window/Clone.js @@ -11,36 +11,37 @@ Ext.define('PVE.window.Clone', { xclass: 'Ext.app.ViewController', control: { 'panel[reference=cloneform]': { - validitychange: 'disableSubmit' - } + validitychange: 'disableSubmit', + }, }, disableSubmit: function(form) { this.lookupReference('submitBtn').setDisabled(!form.isValid()); - } + }, }, statics: { // display a snapshot selector only if needed - wrap: function(nodename, vmid, isTemplate) { + wrap: function(nodename, vmid, isTemplate, guestType) { Proxmox.Utils.API2Request({ - url: '/nodes/' + nodename + '/qemu/' + vmid +'/snapshot', + url: '/nodes/' + nodename + '/' + guestType + '/' + vmid +'/snapshot', failure: function(response, opts) { Ext.Msg.alert('Error', response.htmlStatus); }, success: function(response, opts) { var snapshotList = response.result.data; - var hasSnapshots = snapshotList.length === 1 && - snapshotList[0].name === 'current' ? false : true; + var hasSnapshots = !(snapshotList.length === 1 && + snapshotList[0].name === 'current'); Ext.create('PVE.window.Clone', { nodename: nodename, + guestType: guestType, vmid: vmid, isTemplate: isTemplate, - hasSnapshots: hasSnapshots + hasSnapshots: hasSnapshots, }).show(); - } + }, }); - } + }, }, create_clone: function(values) { @@ -57,7 +58,11 @@ Ext.define('PVE.window.Clone', { } if (values.name) { - params.name = values.name; + if (me.guestType === 'lxc') { + params.hostname = values.name; + } else { + params.name = values.name; + } } if (values.target) { @@ -68,7 +73,7 @@ Ext.define('PVE.window.Clone', { params.full = 1; if (values.hdstorage) { params.storage = values.hdstorage; - if (values.diskformat) { + if (values.diskformat && me.guestType !== 'lxc') { params.format = values.diskformat; } } @@ -76,7 +81,7 @@ Ext.define('PVE.window.Clone', { Proxmox.Utils.API2Request({ params: params, - url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + '/clone', + url: '/nodes/' + me.nodename + '/' + me.guestType + '/' + me.vmid + '/clone', waitMsgTarget: me, method: 'POST', failure: function(response, opts) { @@ -84,9 +89,8 @@ Ext.define('PVE.window.Clone', { }, success: function(response, options) { me.close(); - } + }, }); - }, // disable the Storage selector when clone mode is linked clone @@ -112,7 +116,7 @@ Ext.define('PVE.window.Clone', { Proxmox.Utils.API2Request({ waitMsgTarget: me, - url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + '/feature', + url: '/nodes/' + me.nodename + '/' + me.guestType + '/' + me.vmid + '/feature', params: params, method: 'GET', failure: function(response, opts) { @@ -124,11 +128,11 @@ Ext.define('PVE.window.Clone', { me.lookupReference('targetsel').allowedNodes = res.nodes; me.lookupReference('targetsel').validate(); - } + }, }); }, - initComponent : function() { + initComponent: function() { var me = this; if (!me.nodename) { @@ -143,7 +147,14 @@ Ext.define('PVE.window.Clone', { me.snapname = 'current'; } - var titletext = me.isTemplate ? "Template" : "VM"; + if (!me.guestType) { + throw "no Guest Type specified"; + } + + var titletext = me.guestType === 'lxc' ? 'CT' : 'VM'; + if (me.isTemplate) { + titletext += ' Template'; + } me.title = "Clone " + titletext + " " + me.vmid; var col1 = []; @@ -160,8 +171,8 @@ Ext.define('PVE.window.Clone', { listeners: { change: function(f, value) { me.lookupReference('hdstorage').setTargetNode(value); - } - } + }, + }, }); var modelist = [['copy', gettext('Full Clone')]]; @@ -172,24 +183,24 @@ Ext.define('PVE.window.Clone', { col1.push({ xtype: 'pveGuestIDSelector', name: 'newvmid', - guestType: 'qemu', + guestType: me.guestType, value: '', loadNextFreeID: true, - validateExists: false + validateExists: false, }, { xtype: 'textfield', name: 'name', allowBlank: true, - fieldLabel: gettext('Name') + fieldLabel: me.guestType === 'lxc' ? gettext('Hostname') : gettext('Name'), }, { xtype: 'pvePoolSelector', fieldLabel: gettext('Resource Pool'), name: 'pool', value: '', - allowBlank: true - } + allowBlank: true, + }, ); col2.push({ @@ -200,13 +211,13 @@ Ext.define('PVE.window.Clone', { allowBlank: false, hidden: !me.isTemplate, value: me.isTemplate ? 'clone' : 'copy', - comboItems: modelist, - listeners: { - change: function(t, value) { - me.updateVisibility(); - me.verifyFeature(); - } - } + comboItems: modelist, + listeners: { + change: function(t, value) { + me.updateVisibility(); + me.verifyFeature(); + }, + }, }, { xtype: 'PVE.form.SnapshotSelector', @@ -214,16 +225,17 @@ Ext.define('PVE.window.Clone', { reference: 'snapshotsel', fieldLabel: gettext('Snapshot'), nodename: me.nodename, + guestType: me.guestType, vmid: me.vmid, - hidden: me.isTemplate || !me.hasSnapshots ? true : false, + hidden: !!(me.isTemplate || !me.hasSnapshots), disabled: false, allowBlank: false, - value : me.snapname, + value: me.snapname, listeners: { change: function(f, value) { me.verifyFeature(); - } - } + }, + }, }, { xtype: 'pveDiskStorageSelector', @@ -234,36 +246,35 @@ Ext.define('PVE.window.Clone', { hideSelection: true, storageLabel: gettext('Target Storage'), allowBlank: true, - storageContent: 'images', + storageContent: me.guestType === 'qemu' ? 'images' : 'rootdir', emptyText: gettext('Same as source'), - disabled: me.isTemplate ? true : false // because default mode is clone for templates + disabled: !!me.isTemplate, // because default mode is clone for templates }); var formPanel = Ext.create('Ext.form.Panel', { bodyPadding: 10, reference: 'cloneform', border: false, - layout: 'column', + layout: 'hbox', defaultType: 'container', - columns: 2, fieldDefaults: { labelWidth: 100, - anchor: '100%' + anchor: '100%', }, items: [ { - columnWidth: 0.5, + flex: 1, padding: '0 10 0 0', layout: 'anchor', - items: col1 + items: col1, }, { - columnWidth: 0.5, + flex: 1, padding: '0 0 0 10', layout: 'anchor', - items: col2 - } - ] + items: col2, + }, + ], }); Ext.apply(me, { @@ -272,11 +283,11 @@ Ext.define('PVE.window.Clone', { height: 250, border: false, layout: 'fit', - buttons: [ { + buttons: [{ xtype: 'proxmoxHelpButton', listenToGlobalEvent: false, hidden: false, - onlineHelp: me.onlineHelp + onlineHelp: me.onlineHelp, }, '->', { @@ -288,13 +299,13 @@ Ext.define('PVE.window.Clone', { if (cloneForm.isValid()) { me.create_clone(cloneForm.getValues()); } - } - } ], - items: [ formPanel ] + }, + }], + items: [formPanel], }); me.callParent(); me.verifyFeature(); - } + }, });