Commit Graph

20 Commits (0efdbb3660682dc1d6d86f1927752d17611b08f5)

Author SHA1 Message Date
Rico Lin dc05564435 Add traits for viommu model
* Add iommu model trait for viommu model

* Add ``hw_viommu_model`` to request_filter, this will extend the
  transform_image_metadata prefilter to select host with the correct model.

* Provide new compute ``COMPUTE_VIOMMU_MODEL_*`` capablity trait for each model
  it supports in driver.

Implements: blueprint libvirt-viommu-device
Change-Id: I2caa1a9c473a2b11c287061280b4a78edb96f859
9 months ago
Zuul 8860495e6a Merge "scheduler: Add an ephemeral encryption pre filter" 10 months ago
Dan Smith c178d93606 Unify placement client singleton implementations
We have many places where we implement singleton behavior for the
placement client. This unifies them into a single place and
implementation. Not only does this DRY things up, but may cause us
to initialize it fewer times and also allows for emitting a common
set of error messages about expected failures for better

Change-Id: Iab8a791f64323f996e1d6e6d5a7e7a7c34eb4fb3
Related-Bug: #1846820
10 months ago
Lee Yarwood 794d2f98d9 scheduler: Add an ephemeral encryption pre filter
Change-Id: I20b21f39c46895448b172f79a3e4603d124f2c53
10 months ago
Jonathan Race 31ff7ce7e2 driver/secheduler/docs for Adds Pick guest CPU architecture based on
host arch in libvirt driver support

This is split 2 of 3 for the architecture emulation feature.

This implements emulated multi-architecture support through qemu
within OpenStack Nova.

Additional config variable check to pull host architecture into
hw_architecture field for emulation checks to be made.

Adds a custom function that simply performs a check for
hw_emulation_architecture field being set, allowing for core code to
function as normal while enabling a simple check to enable emulated
architectures to follow the same path as all multi-arch support
already established for physical nodes but instead levaraging qemu
which allows for the overall emulation.

Added check for domain xml unit test to strip arch from the os tag,
as it is not required uefi checks, and only leveraged for emulation

Added additional test cases test_driver validating emulation
functionality with checking hw_emulation_architecture against the
os_arch/hw_architecture field. Added required os-traits and settings
for scheduler request_filter.

Added RISCV64 to architecture enum for better support in driver.

Implements: blueprint pick-guest-arch-based-on-host-arch-in-libvirt-driver
Closes-Bug: 1863728
Change-Id: Ia070a29186c6123cf51e1b17373c2dc69676ae7c
Signed-off-by: Jonathan Race <>
1 year ago
Dmitrii Shcherbakov c487c730d0 Filter computes without remote-managed ports early
Add a pre-filter for requests that contain VNIC_TYPE_REMOTE_MANAGED
ports in them: hosts that do not have either the relevant compute
driver capability COMPUTE_REMOTE_MANAGED_PORTS or PCI device pools
with "remote_managed" devices are filtered out early. Presence of
devices actually available for allocation is checked at a later
point by the PciPassthroughFilter.

Change-Id: I168d3ccc914f25a3d4255c9b319ee6b91a2f66e2
Implements: blueprint integration-with-off-path-network-backends
1 year ago
Sylvain Bauza 5c35a5905e FUP: Catch and reraise routed nets exception
Based on review feedback, we prefer to have the exception for
routed networks to not be prefilter-specific and just reraise
with the right exception type in the prefilter.

Change-Id: I9ccbbf3be8efc65fe7f480ad545fb5fc70767988
2 years ago
Sylvain Bauza a1673d3118 Add a routed networks scheduler pre-filter
As explained in the spec, in order to support routed networks, we need
to add a new scheduler pre-filter with a specific conf option
so we can then look at the nova aggregates related to the segments.

Since this pre-filter is called every time we verify the scheduler,
that means that when we move instances, we should be also be able
to only support hosts that are in the same related aggregate.

NOTE(sbauza) : We're just setting admin_api variable in the
integrated helpers as it's used by _get_provider_uuid_by_host()

Implements: blueprint routed-networks-scheduling

Co-Authored-By: Matt Riedemann <>
Co-Authored-By: Balazs Gibizer <>

Change-Id: I667f56612d7f63834863476694cb1f4c71a58302
2 years ago
Balazs Gibizer c3804efd42 Refactor ResourceRequest constructor
This refactor changes ResourceRequest __init__ to make only an empty
request and moves the ResourceReqeust creation from a RequestSpec to a
static factory method. This is a preparation to introduce another
factory method later that will generate a ResourceRequest from a single
ResourceGroup instead of a full RequestSpec.

Blueprint: support-interface-attach-with-qos-ports

Change-Id: Idd58298a6b01775f962b9bf0a0835f762c8e0ed2
2 years ago
Stephen Finucane 21fecc7060 trivial: Remove log translations
We neither need nor want these translated so remove them. A couple of
logs with unnecessary brackets or weird indentation were identified in
the process, and these are also modified. Note that exceptions must
still be translated. Refer to [1] for more details.


Change-Id: I4573a7c5f3a7b5716a15fbd15ad9336807843a03
Signed-off-by: Stephen Finucane <>
3 years ago
Sundar Nadathur f002274c6a Enable and use COMPUTE_ACCELERATORS trait.
For description, see

Change-Id: I324adf88e54ce09c13ca2dbe638905769806d81b
Blueprint: nova-cyborg-interaction
3 years ago
Sean Mooney d1c4f13d7c Add transform_image_metadata request filter
Add a table-driven prefilter to transform image metadata into required
traits. This requires a new config option to make the filter optional.

Change-Id: I257ff81e23cdae6f2b62ec3d071b8f8f32d97781
Implements: blueprint image-metadata-prefiltering
Co-Authored-By: Stephen Finucane <>
3 years ago
Eric Fried bcc893a2b0 Use Placement 1.35 (root_required)
Placement microversion 1.35 gives us the root_required queryparam to GET
/allocation_candidates, allowing us to filter out candidates where the
*root* provider has/lacks certain traits, independent of traits
specified in any of the individual request groups.

Use it.

And add affordance for specifying such traits to the RequestSpec.

Which allows us to fix up the couple of request filters that were
hacking traits into the RequestSpec.flavor.

Change-Id: I44f02044ce178e84c23d178e5a23a3aa1208e502
3 years ago
shilpa 1db3b89cae Add a new request filter to isolate aggregates
Added a new request filter 'isolate_aggregates' for filtering of hosts
by isolated aggregates. This filter prepares a list of aggregates that
should be ignored by the placement service. It checks if aggregates has
metadata 'trait:<trait_name>='required' and if these traits <trait_name>
are present in flavor extra specs or image properties of the request
otherwise all those aggregates will be included in the list of isolated

The filter is enabled by a new conf option,

Change-Id: I9ab9d7d65378be564b3731b5227ede8cece71bef
Implements: blueprint placement-req-filter-forbidden-aggregates
4 years ago
Matt Riedemann 168d34c8d1 Add placement request pre-filter compute_status_filter
This adds a new mandatory placement request pre-filter
which is used to exclude compute node resource providers
with the COMPUTE_STATUS_DISABLED trait. The trait is
managed by the nova-compute service when the service's
disabled status changes.

Change I3005b46221ac3c0e559e1072131a7e4846c9867c makes
the compute service sync the trait during the
update_available_resource flow (either on start of the
compute service or during the periodic task run).

Change Ifabbb543aab62b917394eefe48126231df7cd503 makes
the libvirt driver's _set_host_enabled callback reflect
the trait when the hypervisor goes up or down out of band.

Change If32bca070185937ef83f689b7163d965a89ec10a will add
the final piece which is the os-services API calling the
compute service to add/remove the trait when a compute
service is disabled or enabled.

Since this series technically functions without the API
change, the docs and release note are added here.

Part of blueprint pre-filter-disabled-computes

Change-Id: I317cabbe49a337848325f96df79d478fd65811d9
4 years ago
Dan Smith b5142d807b Add extra logging to request filters
This adds a timing decorator to which logs the
filters that we ran and how long they took. This requires a small
calling convention change for these request filters to return
True if they are enabled and/or did anything.

This also sprinkles some debug logging into all the existing filters
to provide contextual information about what they are doing to
make debugging scheduling decisions easier.

Change-Id: Ibf62c5398a95c75fde815309e7a4f82f1bd9649c
4 years ago
Dan Smith 57978de4a8 Add image type request filter
This enables the scheduler, if configured, to limit placement results
to only computes that support the disk_format of the image used
for the request.

Change-Id: I41511365eb2b76c4cad804445766638a92b68378
4 years ago
Dan Smith 96f1071166 Honor availability_zone hint via placement
This adds a request filter that, if enabled, allows us to use placement
to select hosts in the desired availability zone by looking up the uuid
of the associated host aggregate and using that in our query for
allocation candidates. The deployer needs the same sort of mirrored
aggregate setup as the tenant filter, and documentation is added here to
make that clear.

Related to blueprint placement-req-filter

Change-Id: I7eb6de435e10793f5445724d847a8f1bf25ec6e3
5 years ago
Dan Smith 732e202e81 Add require_tenant_aggregate request filter
This adds a require_tenant_aggregate request filter which uses overlaid
nova and placement aggregates to limit placement results during scheduling.
It uses the same `filter_tenant_id` metadata key as the existing scheduler
filter we have today, so people already doing this with that filter will
be able to enable this and get placement to pre-filter those hosts for
them automatically.

This also allows making this filter advisory but not required, and supports
multiple tenants per aggregate, unlike the original filter.

Related to blueprint placement-req-filter

Change-Id: Idb52b2a9af539df653da7a36763cb9a1d0de3d1b
5 years ago
Dan Smith 5f36cafacd Add request filter functionality to scheduler
This adds a pre-placement step where we can call a number of modular
"request filters" to modify the request_spec before we move on to
construct the call to placement to get allocation candidates.

No filters are added at this time, this just adds the infrastructure.

Related to blueprint placement-req-filter

Change-Id: I1535158a0dbd4a8527bb987e085e9391e5b0fde4
5 years ago