pve-manager/www/manager6/qemu/SevEdit.js
Philipp Giersfeld 3497c01420 Add configuration options for AMD SEV-SNP
Expand input panel with AMD SEV-SNP selection, and relevant optional
parameters similar to existing options for AMD SEV(-ES).

Further, upon selecting AMD SEV-SNP, issue a warning that EFI disks
are not included when using SEV-SNP.

Signed-off-by: Philipp Giersfeld <philipp.giersfeld@canarybit.eu>
Tested-by: Markus Frank <m.frank@proxmox.com>
Reviewed-by: Markus Frank <m.frank@proxmox.com>
2025-04-04 18:45:24 +02:00

157 lines
3.4 KiB
JavaScript

Ext.define('PVE.qemu.SevInputPanel', {
extend: 'Proxmox.panel.InputPanel',
xtype: 'pveSevInputPanel',
onlineHelp: 'qm_memory', // TODO: change to 'qm_memory_encryption' one available
viewModel: {
data: {
type: '__default__',
},
formulas: {
sevEnabled: get => get('type') === 'std' || get('type') === 'es' || get('type') === 'snp',
snpEnabled: get => get('type') === 'snp',
},
},
onGetValues: function(values) {
if (values.delete === 'type') {
values.delete = 'amd-sev';
return values;
}
if (!values.debug) {
values["no-debug"] = 1;
}
if (!values.smt && values.type === 'snp') {
values["allow-smt"] = 0;
}
if (!values["key-sharing"] && values.type !== 'snp') {
values["no-key-sharing"] = 1;
}
delete values.debug;
delete values.smt;
delete values["key-sharing"];
let ret = {};
ret['amd-sev'] = PVE.Parser.printPropertyString(values, 'type');
return ret;
},
setValues: function(values) {
if (PVE.Parser.parseBoolean(values["no-debug"])) {
values.debug = 0;
}
values.smt = PVE.Parser.parseBoolean(values["allow-smt"], 1);
if (PVE.Parser.parseBoolean(values["no-key-sharing"])) {
values["key-sharing"] = 0;
}
this.callParent(arguments);
},
items: [{
xtype: 'proxmoxKVComboBox',
fieldLabel: gettext('AMD SEV Type'),
labelWidth: 150,
name: 'type',
value: '__default__',
comboItems: [
['__default__', Proxmox.Utils.defaultText + ' (' + Proxmox.Utils.disabledText + ')'],
['std', 'AMD SEV'],
['es', 'AMD SEV-ES (highly experimental)'],
['snp', 'AMD SEV-SNP (highly experimental)'],
],
bind: {
value: '{type}',
},
},
{
xtype: 'displayfield',
userCls: 'pmx-hint',
value: gettext('WARNING: When using SEV-SNP no EFI disk is loaded as pflash.'),
bind: {
hidden: '{!snpEnabled}',
},
},
{
xtype: 'displayfield',
userCls: 'pmx-hint',
value: gettext('Note: SEV-SNP requires host kernel version 6.11 or higher.'),
bind: {
hidden: '{!snpEnabled}',
},
}],
advancedItems: [
{
xtype: 'proxmoxcheckbox',
fieldLabel: gettext('Allow Debugging'),
labelWidth: 150,
name: 'debug',
value: 1,
bind: {
hidden: '{!sevEnabled}',
disabled: '{!sevEnabled}',
},
},
{
xtype: 'proxmoxcheckbox',
fieldLabel: gettext('Allow Key-Sharing'),
labelWidth: 150,
name: 'key-sharing',
value: 1,
bind: {
hidden: '{!sevEnabled || snpEnabled}',
disabled: '{!sevEnabled || snpEnabled}',
},
},
{
xtype: 'proxmoxcheckbox',
fieldLabel: gettext('Allow SMT'),
labelWidth: 150,
name: 'smt',
value: 1,
bind: {
hidden: '{!snpEnabled}',
disabled: '{!snpEnabled}',
},
},
{
xtype: 'proxmoxcheckbox',
fieldLabel: gettext('Enable Kernel Hashes'),
labelWidth: 150,
name: 'kernel-hashes',
deleteDefaultValue: false,
bind: {
hidden: '{!sevEnabled}',
disabled: '{!sevEnabled}',
},
},
],
});
Ext.define('PVE.qemu.SevEdit', {
extend: 'Proxmox.window.Edit',
subject: 'AMD Secure Encrypted Virtualization (SEV)',
items: {
xtype: 'pveSevInputPanel',
},
width: 400,
initComponent: function() {
let me = this;
me.callParent();
me.load({
success: function(response) {
let conf = response.result.data;
let amd_sev = conf['amd-sev'] || '__default__';
me.setValues(PVE.Parser.parsePropertyString(amd_sev, 'type'));
},
});
},
});