Ext.define('PVE.window.Snapshot', {
extend: 'Proxmox.window.Edit',
+ viewModel: {
+ data: {
+ type: undefined,
+ isCreate: undefined,
+ running: false,
+ guestAgentEnabled: false,
+ },
+ formulas: {
+ runningWithoutGuestAgent: (get) => get('type') === 'qemu' && get('running') && !get('guestAgentEnabled'),
+ shouldWarnAboutFS: (get) => get('isCreate') && get('runningWithoutGuestAgent') && get('!vmstate.checked'),
+ },
+ },
+
onGetValues: function(values) {
let me = this;
return values;
},
- initComponent : function() {
+ initComponent: function() {
var me = this;
+ var vm = me.getViewModel();
if (!me.nodename) {
throw "no node name specified";
throw "no type specified";
}
+ vm.set('type', me.type);
+ vm.set('running', me.running);
+ vm.set('isCreate', me.isCreate);
+
+ if (me.type === 'qemu' && me.isCreate) {
+ Proxmox.Utils.API2Request({
+ url: `/nodes/${me.nodename}/${me.type}/${me.vmid}/config`,
+ params: { 'current': '1' },
+ method: 'GET',
+ success: function(response, options) {
+ let res = response.result.data;
+ let enabled = PVE.Parser.parsePropertyString(res.agent, 'enabled');
+ vm.set('guestAgentEnabled', !!PVE.Parser.parseBoolean(enabled.enabled));
+ },
+ });
+ }
+
me.items = [
{
xtype: me.isCreate ? 'textfield' : 'displayfield',
value: me.snapname,
fieldLabel: gettext('Name'),
vtype: 'ConfigId',
- allowBlank: false
+ allowBlank: false,
},
{
xtype: 'displayfield',
disabled: me.isCreate,
name: 'snaptime',
renderer: PVE.Utils.render_timestamp_human_readable,
- fieldLabel: gettext('Timestamp')
+ fieldLabel: gettext('Timestamp'),
},
{
xtype: 'proxmoxcheckbox',
hidden: me.type !== 'qemu' || !me.isCreate || !me.running,
disabled: me.type !== 'qemu' || !me.isCreate || !me.running,
name: 'vmstate',
+ reference: 'vmstate',
uncheckedValue: 0,
defaultValue: 0,
checked: 1,
- fieldLabel: gettext('Include RAM')
+ fieldLabel: gettext('Include RAM'),
},
{
xtype: 'textareafield',
grow: true,
editable: !me.viewonly,
name: 'description',
- fieldLabel: gettext('Description')
+ fieldLabel: gettext('Description'),
+ },
+ {
+ xtype: 'displayfield',
+ userCls: 'pmx-hint',
+ name: 'fswarning',
+ hidden: true,
+ value: gettext('It is recommended to either include the RAM or use the QEMU Guest Agent when taking a snapshot of a running VM to avoid inconsistencies.'),
+ bind: {
+ hidden: '{!shouldWarnAboutFS}',
+ },
},
{
title: gettext('Settings'),
model: 'KeyValue',
sorters: [
{
- property : 'key',
- direction: 'ASC'
- }
- ]
+ property: 'key',
+ direction: 'ASC',
+ },
+ ],
},
columns: [
{
header: gettext('Value'),
flex: 1,
dataIndex: 'value',
- }
- ]
- }
+ },
+ ],
+ },
];
me.url = `/nodes/${me.nodename}/${me.type}/${me.vmid}/snapshot`;
if (me.isCreate) {
subject = (me.type === 'qemu' ? 'VM' : 'CT') + me.vmid + ' ' + gettext('Snapshot');
me.method = 'POST';
- me.showProgress = true;
+ me.showTaskViewer = true;
} else {
subject = `${gettext('Snapshot')} ${me.snapname}`;
me.url += `/${me.snapname}/config`;
summarystore.fireEvent('refresh', summarystore);
me.setValues(response.result.data);
- }
+ },
});
- }
+ },
});