X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=www%2Fmanager6%2Fqemu%2FCloudInit.js;h=77ff93d4124c7fccaadd60726d062694312f3c96;hb=refs%2Fheads%2Fmaster;hp=c6ff4626925a7854408520d2a8430c0bdfd9b655;hpb=3bbce3b8cd50643c1379be5c764bcf3024416a0b;p=pve-manager.git diff --git a/www/manager6/qemu/CloudInit.js b/www/manager6/qemu/CloudInit.js index c6ff4626..49519726 100644 --- a/www/manager6/qemu/CloudInit.js +++ b/www/manager6/qemu/CloudInit.js @@ -10,20 +10,20 @@ Ext.define('PVE.qemu.CloudInit', { disabled: true, dangerous: true, confirmMsg: function(rec) { - var me = this.up('grid'); + let view = this.up('grid'); var warn = gettext('Are you sure you want to remove entry {0}'); var entry = rec.data.key; var msg = Ext.String.format(warn, "'" - + me.renderKey(entry, {}, rec) + "'"); + + view.renderKey(entry, {}, rec) + "'"); return msg; }, enableFn: function(record) { - var me = this.up('grid'); + let view = this.up('grid'); var caps = Ext.state.Manager.get('GuiCap'); - if (me.rows[record.data.key].never_delete || - !caps.vms['VM.Config.Network']) { + let caps_ci = caps.vms['VM.Config.Network'] || caps.vms['VM.Config.Cloudinit']; + if (view.rows[record.data.key].never_delete || !caps_ci) { return false; } @@ -33,9 +33,9 @@ Ext.define('PVE.qemu.CloudInit', { return true; }, handler: function() { - var me = this.up('grid'); - var records = me.getSelection(); - if (!records || !records.length) { + let view = this.up('grid'); + let records = view.getSelection(); + if (!records || !records.length) { return; } @@ -46,34 +46,34 @@ Ext.define('PVE.qemu.CloudInit', { } var params = {}; - params['delete'] = id; + params.delete = id; Proxmox.Utils.API2Request({ - url: me.baseurl + '/config', - waitMsgTarget: me, + url: view.baseurl + '/config', + waitMsgTarget: view, method: 'PUT', params: params, failure: function(response, opts) { Ext.Msg.alert('Error', response.htmlStatus); }, callback: function() { - me.reload(); - } + view.reload(); + }, }); }, - text: gettext('Remove') + text: gettext('Remove'), }, { xtype: 'proxmoxButton', disabled: true, enableFn: function(rec) { - let me = this.up('pveCiPanel'); - return !!me.rows[rec.data.key].editor; + let view = this.up('pveCiPanel'); + return !!view.rows[rec.data.key].editor; }, handler: function() { - var me = this.up('grid'); - me.run_editor(); + let view = this.up('grid'); + view.run_editor(); }, - text: gettext('Edit') + text: gettext('Edit'), }, '-', { @@ -81,43 +81,43 @@ Ext.define('PVE.qemu.CloudInit', { itemId: 'savebtn', text: gettext('Regenerate Image'), handler: function() { - var me = this.up('grid'); + let view = this.up('grid'); var eject_params = {}; var insert_params = {}; - var disk = PVE.Parser.parseQemuDrive(me.ciDriveId, me.ciDrive); + let disk = PVE.Parser.parseQemuDrive(view.ciDriveId, view.ciDrive); var storage = ''; - var stormatch = disk.file.match(/^([^\:]+)\:/); + var stormatch = disk.file.match(/^([^:]+):/); if (stormatch) { storage = stormatch[1]; } - eject_params[me.ciDriveId] = 'none,media=cdrom'; - insert_params[me.ciDriveId] = storage + ':cloudinit'; + eject_params[view.ciDriveId] = 'none,media=cdrom'; + insert_params[view.ciDriveId] = storage + ':cloudinit'; var failure = function(response, opts) { Ext.Msg.alert('Error', response.htmlStatus); }; Proxmox.Utils.API2Request({ - url: me.baseurl + '/config', - waitMsgTarget: me, + url: view.baseurl + '/config', + waitMsgTarget: view, method: 'PUT', params: eject_params, failure: failure, callback: function() { Proxmox.Utils.API2Request({ - url: me.baseurl + '/config', - waitMsgTarget: me, + url: view.baseurl + '/config', + waitMsgTarget: view, method: 'PUT', params: insert_params, failure: failure, callback: function() { - me.reload(); - } + view.reload(); + }, }); - } + }, }); - } - } + }, + }, ], border: false, @@ -164,14 +164,14 @@ Ext.define('PVE.qemu.CloudInit', { }, listeners: { - activate: function () { + activate: function() { var me = this; me.rstore.startUpdate(); }, itemdblclick: function() { var me = this; me.run_editor(); - } + }, }, initComponent: function() { @@ -188,10 +188,11 @@ Ext.define('PVE.qemu.CloudInit', { } var caps = Ext.state.Manager.get('GuiCap'); me.baseurl = '/api2/extjs/nodes/' + nodename + '/qemu/' + vmid; - me.url = me.baseurl + '/pending'; + me.url = me.baseurl + '/pending'; me.editorConfig.url = me.baseurl + '/config'; me.editorConfig.pveSelNode = me.pveSelNode; + let caps_ci = caps.vms['VM.Config.Cloudinit'] || caps.vms['VM.Config.Network']; /* editor is string and object */ me.rows = { ciuser: { @@ -199,7 +200,7 @@ Ext.define('PVE.qemu.CloudInit', { iconCls: 'fa fa-user', never_delete: true, defaultValue: '', - editor: caps.vms['VM.Config.Options'] ? { + editor: caps_ci ? { xtype: 'proxmoxWindowEdit', subject: gettext('User'), items: [ @@ -208,19 +209,19 @@ Ext.define('PVE.qemu.CloudInit', { deleteEmpty: true, emptyText: Proxmox.Utils.defaultText, fieldLabel: gettext('User'), - name: 'ciuser' - } - ] + name: 'ciuser', + }, + ], } : undefined, renderer: function(value) { - return value || Proxmox.Utils.defaultText; - } + return Ext.String.htmlEncode(value || Proxmox.Utils.defaultText); + }, }, cipassword: { header: gettext('Password'), iconCls: 'fa fa-unlock', defaultValue: '', - editor: caps.vms['VM.Config.Options'] ? { + editor: caps_ci ? { xtype: 'proxmoxWindowEdit', subject: gettext('Password'), items: [ @@ -230,32 +231,32 @@ Ext.define('PVE.qemu.CloudInit', { deleteEmpty: true, emptyText: Proxmox.Utils.noneText, fieldLabel: gettext('Password'), - name: 'cipassword' - } - ] + name: 'cipassword', + }, + ], } : undefined, renderer: function(value) { - return value || Proxmox.Utils.noneText; - } + return Ext.String.htmlEncode(value || Proxmox.Utils.noneText); + }, }, searchdomain: { header: gettext('DNS domain'), iconCls: 'fa fa-globe', - editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined, + editor: caps_ci ? 'PVE.lxc.DNSEdit' : undefined, never_delete: true, - defaultValue: gettext('use host settings') + defaultValue: gettext('use host settings'), }, nameserver: { header: gettext('DNS servers'), iconCls: 'fa fa-globe', - editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined, + editor: caps_ci ? 'PVE.lxc.DNSEdit' : undefined, never_delete: true, - defaultValue: gettext('use host settings') + defaultValue: gettext('use host settings'), }, sshkeys: { header: gettext('SSH public key'), iconCls: 'fa fa-key', - editor: caps.vms['VM.Config.Network'] ? 'PVE.qemu.SSHKeyEdit' : undefined, + editor: caps_ci ? 'PVE.qemu.SSHKeyEdit' : undefined, never_delete: true, renderer: function(value) { value = decodeURIComponent(value); @@ -263,13 +264,10 @@ Ext.define('PVE.qemu.CloudInit', { var text = []; keys.forEach(function(key) { if (key.length) { - // First erase all quoted strings (eg. command="foo" - var v = key.replace(/"(?:\\.|[^"\\])*"/g, ''); - // Now try to detect the comment: - var res = v.match(/^\s*(\S+\s+)?(?:ssh-(?:dss|rsa|ed25519)|ecdsa-sha2-nistp\d+)\s+\S+\s+(.*?)\s*$/, ''); + let res = PVE.Parser.parseSSHKey(key); if (res) { - key = Ext.String.htmlEncode(res[2]); - if (res[1]) { + key = Ext.String.htmlEncode(res.comment); + if (res.options) { key += ' (' + gettext('with options') + ')'; } text.push(key); @@ -286,8 +284,26 @@ Ext.define('PVE.qemu.CloudInit', { return Proxmox.Utils.noneText; } }, - defaultValue: '' - } + defaultValue: '', + }, + ciupgrade: { + header: gettext('Upgrade packages'), + iconCls: 'fa fa-archive', + renderer: Proxmox.Utils.format_boolean, + defaultValue: 1, + editor: { + xtype: 'proxmoxWindowEdit', + subject: gettext('Upgrade packages on boot'), + items: { + xtype: 'proxmoxcheckbox', + name: 'ciupgrade', + uncheckedValue: 0, + value: 1, // serves as default value, using defaultValue is not enough + fieldLabel: gettext('Upgrade packages'), + labelWidth: 140, + }, + }, + }, }; var i; var ipconfig_renderer = function(value, md, record, ri, ci, store, pending) { @@ -305,21 +321,21 @@ Ext.define('PVE.qemu.CloudInit', { me.rows['net' + i.toString()] = { multiKey: ['ipconfig' + i.toString(), 'net' + i.toString()], header: gettext('IP Config') + ' (net' + i.toString() +')', - editor: caps.vms['VM.Config.Network'] ? 'PVE.qemu.IPConfigEdit' : undefined, + editor: caps_ci ? 'PVE.qemu.IPConfigEdit' : undefined, iconCls: 'fa fa-exchange', - renderer: ipconfig_renderer + renderer: ipconfig_renderer, }; me.rows['ipconfig' + i.toString()] = { - visible: false + visible: false, }; } PVE.Utils.forEachBus(['ide', 'scsi', 'sata'], function(type, id) { me.rows[type+id] = { - visible: false + visible: false, }; }); me.callParent(); me.mon(me.rstore, 'load', me.set_button_status, me); - } + }, });