nova/nova/conf
Adam Spiers 8e5d6767bb Enable booting of libvirt guests with AMD SEV memory encryption
Track compute node inventory for the new MEM_ENCRYPTION_CONTEXT
resource class (added in os-resource-classes 0.4.0) which represents
the number of guests a compute node can host concurrently with memory
encrypted at the hardware level.

This serves as a "master switch" for enabling SEV functionality, since
all the code which takes advantage of the presence of this inventory
in order to boot SEV-enabled guests is already in place, but none of
it gets used until the inventory is non-zero.

A discrete inventory is required because on AMD SEV-capable hardware,
the memory controller has a fixed number of slots for holding
encryption keys, one per guest.  Typical early hardware only has 15
slots, thereby limiting the number of SEV guests which can be run
concurrently to 15.  nova needs to track how many slots are available
and used in order to avoid attempting to exceed that limit in the
hardware.

Work is in progress to allow QEMU and libvirt to expose the number of
slots available on SEV hardware; however until this is finished and
released, it will not be possible for nova to programatically detect
the correct value with which to populate the MEM_ENCRYPTION_CONTEXT
inventory.  So as a stop-gap, populate the inventory using the value
manually provided by the cloud operator in a new configuration option
CONF.libvirt.num_memory_encrypted_guests.

Since this commit effectively enables SEV, also add all the relevant
documentation as planned in the AMD SEV spec[0]:

- Add operation.boot-encrypted-vm to the KVM hypervisor feature matrix.

- Update the KVM section of the Configuration Guide.

- Update the flavors section of the User Guide.

- Add a release note.

[0] http://specs.openstack.org/openstack/nova-specs/specs/train/approved/amd-sev-libvirt-support.html#documentation-impact

blueprint: amd-sev-libvirt-support
Change-Id: I659cb77f12a38a4d2fb118530ebb9de88d2ed30d
2019-09-10 13:59:02 +01:00
..
__init__.py conf: Remove cells v1 options, group 2019-05-29 17:14:13 +01:00
api.py Update api-ref location 2019-07-22 19:17:28 +02:00
availability_zone.py Fix default_availability_zone docs 2017-05-31 14:24:07 +01:00
base.py Ensure config regexes match the entire string 2019-02-13 08:16:45 -05:00
cache.py conf: Make list->dict conversion more specific 2016-09-14 12:10:29 +00:00
cinder.py Address nits from I9e30a24a4c0640f282f507d0a96640d3cdefe43c 2019-02-14 14:16:14 +00:00
compute.py Docs and functional test for max_local_block_devices 2019-08-23 12:12:08 -04:00
conductor.py conf: Remove '[conductor] topic' opt 2018-03-12 13:26:08 +00:00
configdrive.py conf: Rename 'configuration drive' to 'config drive' 2019-06-20 18:23:14 +01:00
console.py conf: remove *_topic config opts 2017-07-17 21:27:02 -07:00
consoleauth.py Remove nova-consoleauth 2019-07-05 15:04:47 +00:00
database.py Add useful error log when _determine_version_cap raises DBNotAllowed 2019-08-07 13:13:06 -04:00
devices.py conf: Resolve Sphinx errors 2018-07-02 14:00:12 +01:00
ephemeral_storage.py Parse algorithm from cipher for ephemeral disk encryption 2017-04-26 11:19:43 -04:00
glance.py Fix typo in enable_certificate_validation config option help 2018-06-04 14:50:45 -04:00
guestfs.py conf: Resolve Sphinx errors 2018-07-02 14:00:12 +01:00
hyperv.py hacking: Resolve W605 (invalid escape sequence) 2019-06-24 14:24:06 -05:00
ironic.py Merge "Remove [ironic]api_endpoint option" 2019-05-03 21:08:38 +00:00
key_manager.py Add secret=true to fixed_key configuration parameter 2018-12-03 14:39:51 -05:00
keystone.py Use ksa adapter for keystone conf & requests 2017-11-30 22:33:01 +00:00
libvirt.py Enable booting of libvirt guests with AMD SEV memory encryption 2019-09-10 13:59:02 +01:00
mks.py Use URIOpt 2017-07-18 00:38:24 +00:00
netconf.py conf: Move additional nova-net opts to 'network' 2017-10-26 14:01:18 +00:00
network.py hacking: Resolve W503 (line break occurred before a binary operator) 2019-06-24 14:24:06 -05:00
neutron.py Remove deprecated [neutron]/url option 2019-08-21 17:55:56 +00:00
notifications.py Change the default of notification_format to unversioned 2019-06-04 10:36:45 +02:00
novnc.py Conf options: updated flags for novnc 2016-08-01 15:00:07 -05:00
opts.py conf: Make list->dict conversion more specific 2016-09-14 12:10:29 +00:00
osapi_v21.py Remove config opts for extension black/white list 2017-04-06 08:47:06 +00:00
paths.py Make nova build reproducible 2018-03-09 13:12:39 +01:00
pci.py conf: Call out where pci.alias should be set 2019-02-28 10:44:42 +00:00
placement.py Delete the placement code 2019-04-28 20:06:15 +00:00
powervm.py Powervm configuration cleanup 2018-06-13 11:48:30 -05:00
quota.py Follow up for counting quota usage from placement 2019-05-31 21:23:58 +00:00
rdp.py Use URIOpt 2017-07-18 00:38:24 +00:00
remote_debug.py Use HostAddressOpt for opts that accept IP and hostnames 2017-04-03 16:40:36 +05:30
rpc.py Sync COMPUTE_STATUS_DISABLED from API 2019-07-02 18:57:38 -04:00
scheduler.py Merge "Clean up NumInstancesFilter related docs" 2019-06-19 03:21:25 +00:00
serial_console.py hacking: Resolve W605 (invalid escape sequence) 2019-06-24 14:24:06 -05:00
service.py conf: Deprecate 'network_manager' 2018-06-22 15:04:48 +01:00
service_token.py Service token is not experimental 2017-11-21 17:36:32 +00:00
servicegroup.py conf: Use new-style choice values 2018-09-12 09:45:06 -06:00
spice.py conf: Resolve Sphinx errors 2018-07-02 14:00:12 +01:00
upgrade_levels.py Remove nova-consoleauth 2019-07-05 15:04:47 +00:00
utils.py Get auth from context for glance endpoint 2017-11-21 10:26:42 -06:00
vendordata.py Use a service account to make vendordata requests. 2017-01-26 13:39:46 +00:00
vmware.py Switch some GitHub URLs to point to opendev.org 2019-08-19 21:08:27 +01:00
vnc.py Deprecate the nova-xvpvncproxy service 2018-10-15 10:03:13 +01:00
workarounds.py Remove nova-consoleauth 2019-07-05 15:04:47 +00:00
wsgi.py Add missing ws seperator between words 2018-11-26 23:42:18 +00:00
xenserver.py Fix nits in choices documentation 2018-10-05 20:07:19 +00:00
xvp.py flake8: Specify 'nova' as name of app 2017-03-16 13:48:51 -07:00
zvm.py z/VM Driver: Spawn and destroy function of z/VM driver 2018-07-16 11:35:11 +08:00