]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/window/Clone.js
ui: bulk migrate: cleanupl, reduce and modernize code
[pve-manager.git] / www / manager6 / window / Clone.js
index 0df7825ef03b19670d9d99b1890eb9ea0b9e8fcc..e94cd92dccd0adcdb2081f9603ef9291fddd0f28 100644 (file)
@@ -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();
-    }
+    },
 });