├── .gitignore ├── .gitreview ├── .stestr.conf ├── .zuul.yaml ├── CONTRIBUTING.rst ├── LICENSE ├── README.rst ├── doc ├── requirements.txt └── source │ ├── _images │ ├── numa-aware-vswitches-1.png │ ├── numa-aware-vswitches-2.png │ ├── numa-aware-vswitches-3.png │ ├── numa-aware-vswitches-4.png │ └── numa-aware-vswitches-5.png │ ├── _media │ ├── rocky │ │ ├── reshape-provider-tree.seqdiag │ │ └── reshape-provider-tree.svg │ ├── stein │ │ ├── reshape-provider-tree.seqdiag │ │ └── reshape-provider-tree.svg │ ├── train │ │ ├── nova-cyborg-interaction.seqdiag │ │ └── nova-cyborg-interaction.svg │ └── ussuri │ │ ├── nova-cyborg-interaction.seqdiag │ │ └── nova-cyborg-interaction.svg │ ├── conf.py │ ├── index.rst │ ├── priorities │ ├── readme.rst │ ├── redirect.py │ └── specs │ ├── 2023.1 │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── 2023.2 │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── 2024.1 │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── 2024.2 │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── 2025.1 │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── 2025.2 │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── abandoned │ ├── backlog │ ├── approved │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── juno │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── kilo │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── liberty │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── mitaka │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── newton │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── ocata │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── pike │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── queens │ ├── approved │ ├── implemented │ ├── index.rst │ └── redirects │ ├── rocky │ ├── approved │ ├── implemented │ ├── index.rst │ └── redirects │ ├── stein │ ├── approved │ ├── implemented │ ├── index.rst │ └── redirects │ ├── train │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── ussuri │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── victoria │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── wallaby │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── xena │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ ├── yoga │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst │ └── zed │ ├── approved │ ├── implemented │ ├── index.rst │ ├── redirects │ └── template.rst ├── priorities ├── 2023.1-priorities.rst ├── 2023.2-priorities.rst ├── 2024.1-priorities.rst ├── 2024.2-priorities.rst ├── 2025.1-priorities.rst ├── 2025.2-priorities.rst ├── kilo-priorities.rst ├── liberty-priorities.rst ├── mitaka-priorities.rst ├── newton-priorities.rst ├── ocata-priorities.rst ├── pike-priorities.rst ├── priority-blueprints-to-review.yaml ├── queens-priorities.rst ├── rocky-priorities.rst ├── stein-priorities.rst ├── train-priorities.rst ├── ussuri-priorities.rst ├── victoria-priorities.rst ├── wallaby-priorities.rst ├── xena-priorities.rst ├── yoga-priorities.rst └── zed-priorities.rst ├── specs ├── 2023.1-template.rst ├── 2023.1 │ ├── approved │ │ ├── assisted-volume-extend.rst │ │ ├── ephemeral-encryption-libvirt.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── ironic-shards.rst │ │ ├── ironic-vnc-console.rst │ │ ├── libvirt-maxphysaddr-support.rst │ │ ├── libvirt-virtiofs-attach-manila-shares.rst │ │ ├── per-process-healthchecks.rst │ │ ├── policy-service-role-default.rst │ │ ├── privsep-usage-review.rst │ │ └── virtiofs-scaphandre.rst │ ├── implemented │ │ ├── allowing-target-state-for-evacuate.rst │ │ ├── fqdn-in-hostname.rst │ │ ├── libvirt-cpu-state-mgmt.rst │ │ ├── nova-support-spice-compression-algorithm.rst │ │ ├── pci-device-tracking-in-placement.rst │ │ └── stable-compute-uuid.rst │ └── redirects ├── 2023.2-template.rst ├── 2023.2 │ ├── approved │ │ ├── assisted-volume-extend.rst │ │ ├── ephemeral-encryption-libvirt.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── ironic-shards.rst │ │ ├── libvirt-virtiofs-attach-manila-shares.rst │ │ ├── policy-service-role-default.rst │ │ ├── support-napatech-linkvirtualization-smartnic.rst │ │ ├── virtio-packedring-configuration-support.rst │ │ └── virtiofs-scaphandre.rst │ ├── implemented │ │ ├── cleanup-dangling-volume-attachments.rst │ │ ├── compute-object-ids.rst │ │ ├── libvirt-maxphysaddr-support.rst │ │ └── unified-limits-nova-tool-and-docs.rst │ └── redirects ├── 2024.1-template.rst ├── 2024.1 │ ├── approved │ │ ├── assisted-volume-extend.rst │ │ ├── ephemeral-encryption-libvirt.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── libvirt-virtiofs-attach-manila-shares.rst │ │ ├── pci-passthrough-groups.rst │ │ └── per-process-healthchecks.rst │ ├── implemented │ │ ├── enforce-remote-console-session-timeout.rst │ │ ├── ironic-shards.rst │ │ ├── libvirt-dev-alias.rst │ │ ├── libvirt-maxphysaddr-support.rst │ │ ├── libvirt-mdev-live-migrate.rst │ │ ├── list-requested-az.rst │ │ └── virtio-packedring-configuration-support.rst │ └── redirects ├── 2024.2-template.rst ├── 2024.2 │ ├── approved │ │ ├── amd-sev-es-libvirt-support.rst │ │ ├── assisted-volume-extend.rst │ │ ├── ephemeral-encryption-libvirt.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── libvirt-spice-direct-consoles.rst │ │ ├── libvirt-virtiofs-attach-manila-shares.rst │ │ ├── per-process-healthchecks.rst │ │ └── unified-limits-nova-unset-limits.rst │ ├── implemented │ │ ├── libvirt-stateless-firmware.rst │ │ └── openapi.rst │ └── redirects ├── 2025.1-template.rst ├── 2025.1 │ ├── approved │ │ ├── amd-sev-es-libvirt-support.rst │ │ ├── per-process-healthchecks.rst │ │ └── vtpm-live-migration.rst │ ├── implemented │ │ ├── enable-vfio-devices-with-kernel-variant-drivers.rst │ │ ├── image-properties-in-server-show.rst │ │ ├── libvirt-spice-direct-consoles.rst │ │ ├── libvirt-virtiofs-attach-manila-shares.rst │ │ ├── migrate-vfio-devices-using-kernel-variant-drivers.rst │ │ ├── openapi.rst │ │ ├── show-scheduler-hints-in-server-details.rst │ │ └── unified-limits-nova-unset-limits.rst │ └── redirects ├── 2025.2-template.rst ├── 2025.2 │ ├── approved │ │ ├── 2025.2-template.rst │ │ ├── one-time-use-devices.rst │ │ ├── remove-os-volumes_boot-api.rst │ │ └── vtpm-live-migration.rst │ ├── implemented │ │ └── 2025.2-template.rst │ └── redirects ├── abandoned │ ├── flavor-class.rst │ ├── index.rst │ ├── instance-tasks.rst │ ├── parallel-scheduler.rst │ ├── redirects │ └── same-instances-scheduling.rst ├── backlog-template.rst ├── backlog │ ├── approved │ │ └── robustify-compute-hostnames.rst │ └── redirects ├── juno-template.rst ├── juno │ ├── .gitignore │ ├── approved │ │ ├── add-all-in-list-operator-to-extra-spec-ops.rst │ │ ├── add-virtio-scsi-bus-for-bdm.rst │ │ ├── allocation-ratio-to-resource-tracker.rst │ │ ├── clean-logs.rst │ │ ├── cold-migration-with-target.rst │ │ ├── db2-database.rst │ │ ├── ec2-volume-and-snapshot-tags.rst │ │ ├── encryption-with-barbican.rst │ │ ├── enforce-unique-instance-uuid-in-db.rst │ │ ├── input-output-based-numa-scheduling.rst │ │ ├── io-ops-weight.rst │ │ ├── libvirt-driver-class-refactor.rst │ │ ├── libvirt-sheepdog-backed-instances.rst │ │ ├── libvirt-start-lxc-from-block-devices.rst │ │ ├── log-request-id-mappings.rst │ │ ├── lvm-ephemeral-storage-encryption.rst │ │ ├── make-resource-tracker-use-objects.rst │ │ ├── migrate-libvirt-volumes.rst │ │ ├── nova-pagination.rst │ │ ├── persistent-resource-claim.rst │ │ ├── quiesced-image-snapshots-with-qemu-guest-agent.rst │ │ ├── restrict-image-isolation-with-defined-keys.rst │ │ ├── return-all-servers-during-multiple-create.rst │ │ ├── selecting-subnet-when-creating-vm.rst │ │ ├── server-count-api.rst │ │ ├── standardize-nova-image.rst │ │ ├── string-field-max-length.rst │ │ ├── support-console-log-migration.rst │ │ ├── tag-instances.rst │ │ ├── use-libvirt-storage-pools.rst │ │ ├── vif-vhostuser.rst │ │ ├── virt-driver-cpu-pinning.rst │ │ ├── virt-driver-large-pages.rst │ │ ├── vmware-driver-ova-support.rst │ │ ├── vmware-ephemeral-disk-support.rst │ │ ├── vmware-spbm-support.rst │ │ ├── vmware-vsan-support.rst │ │ ├── websocket-proxy-to-host-security.rst │ │ ├── xenapi-set-ipxe-url-as-img-metadata.rst │ │ └── xenapi-vcpu-topology.rst │ ├── implemented │ │ ├── add-differencing-vhdx-resize-support.rst │ │ ├── add-ironic-driver.rst │ │ ├── allow-image-to-be-specified-during-rescue.rst │ │ ├── backportable-db-migrations-juno.rst │ │ ├── better-support-for-multiple-networks.rst │ │ ├── compute-manager-objects-juno.rst │ │ ├── config-drive-image-property.rst │ │ ├── convert_ec2_api_to_use_nova_objects.rst │ │ ├── cross-service-request-id.rst │ │ ├── deprecate-baremetal-driver.rst │ │ ├── enabled-qemu-memballoon-stats.rst │ │ ├── extensible-resource-tracking.rst │ │ ├── find-host-and-evacuate-instance.rst │ │ ├── hyper-v-console-log.rst │ │ ├── hyper-v-soft-reboot.rst │ │ ├── i18n-enablement.rst │ │ ├── instance-network-info-hook.rst │ │ ├── juno-slaveification.rst │ │ ├── libvirt-disk-discard-option.rst │ │ ├── libvirt-domain-listing-speedup.rst │ │ ├── libvirt-driver-domain-metadata.rst │ │ ├── libvirt-lxc-user-namespaces.rst │ │ ├── libvirt-volume-snap-network-disk.rst │ │ ├── move-prep-resize-to-conductor.rst │ │ ├── nfv-multiple-if-1-net.rst │ │ ├── object-subclassing.rst │ │ ├── on-demand-compute-update.rst │ │ ├── pci-passthrough-sriov.rst │ │ ├── per-aggregate-filters.rst │ │ ├── rbd-clone-image-handler.rst │ │ ├── refactor-network-api.rst │ │ ├── remove-cast-to-schedule-run-instance.rst │ │ ├── rescue-attach-all-disks.rst │ │ ├── return-status-for-hypervisor-node.rst │ │ ├── scheduler-lib.rst │ │ ├── serial-ports.rst │ │ ├── server-group-quotas.rst │ │ ├── servers-list-support-multi-status.rst │ │ ├── support-cinderclient-v2.rst │ │ ├── use-oslo-vmware.rst │ │ ├── user-defined-shutdown.rst │ │ ├── v2-on-v3-api.rst │ │ ├── v3-api-schema.rst │ │ ├── v3-diagnostics.rst │ │ ├── virt-driver-numa-placement.rst │ │ ├── virt-driver-vcpu-topology.rst │ │ ├── virt-objects-juno.rst │ │ ├── vmware-hot-plug.rst │ │ └── vmware-spawn-refactor.rst │ └── redirects ├── kilo-template.rst ├── kilo │ ├── approved │ │ ├── consolidate-console-api.rst │ │ ├── db2-database.rst │ │ ├── ec2-volume-and-snapshot-tags.rst │ │ ├── get-lock-status-of-instance.rst │ │ ├── i18n-enablement.rst │ │ ├── isolate-scheduler-db-filters.rst │ │ ├── libvirt-hardware-policy-from-libosinfo.rst │ │ ├── libvirt-storpool-volume-attach.rst │ │ ├── lock-free-quota-management.rst │ │ ├── make-resource-tracker-use-objects.rst │ │ ├── metadata-service-network-info.rst │ │ ├── multi-attach-volume.rst │ │ ├── nested-quota-driver-api.rst │ │ ├── nova-api-policy.rst │ │ ├── online-schema-changes.rst │ │ ├── remove-glanceclient-wrapper.rst │ │ ├── request-spec-object.rst │ │ ├── resource-objects.rst │ │ ├── sched-select-destinations-use-request-spec-object.rst │ │ ├── soft-affinity-for-server-group.rst │ │ ├── stop-dmcrypt-on-suspend.rst │ │ ├── tag-instances.rst │ │ ├── use-configdrive-with-ironic.rst │ │ ├── use-libvirt-storage-pools.rst │ │ ├── validate-migrations-and-model.rst │ │ ├── validate-tenant-user-with-keystone.rst │ │ ├── vif-type-tap.rst │ │ ├── vmware-ephemeral-disk-support.rst │ │ └── websocket-proxy-to-host-security.rst │ ├── implemented │ │ ├── add-all-in-list-operator-to-extra-spec-ops.rst │ │ ├── api-microversions.rst │ │ ├── cells-instance-mapping.rst │ │ ├── cells-v2-mapping.rst │ │ ├── detach-service-from-computenode.rst │ │ ├── ec2-api-required-additions.rst │ │ ├── encryption-with-barbican.rst │ │ ├── enforce-unique-instance-uuid-in-db.rst │ │ ├── flavor-from-sysmeta-to-blob.rst │ │ ├── hyper-v-generation-2-vms.rst │ │ ├── hyper-v-smbfs-volume-support.rst │ │ ├── input-output-based-numa-scheduling.rst │ │ ├── io-ops-weight.rst │ │ ├── iscsi-live-migration-different-target.rst │ │ ├── isolate-scheduler-db-aggregates.rst │ │ ├── keypair-x509-certificates.rst │ │ ├── libvirt-kvm-systemz.rst │ │ ├── libvirt-smbfs-volume-support.rst │ │ ├── libvirt_vif_vhostuser.rst │ │ ├── nova-pagination.rst │ │ ├── opencontrail-nova-vif-plugin.rst │ │ ├── pass-flavor-capabilities-to-ironic-virt-driver.rst │ │ ├── pcs-support.rst │ │ ├── qemu-built-in-iscsi-initiator.rst │ │ ├── quiesced-image-snapshots-with-qemu-guest-agent.rst │ │ ├── quobyte-nova-driver.rst │ │ ├── relax-resource-name-restrictions.rst │ │ ├── support-other-iscsi-transports-besides-tcp.rst │ │ ├── v2-on-v3-api.rst │ │ ├── virt-driver-cpu-pinning.rst │ │ ├── virt-driver-large-pages.rst │ │ ├── vmware-driver-ova-support.rst │ │ ├── vmware-spbm-support.rst │ │ └── vmware-vsan-support.rst │ └── redirects ├── liberty-template.rst ├── liberty │ ├── approved │ │ ├── add-buildrequest-obj.rst │ │ ├── add-id-to-security-groups.rst │ │ ├── add-vif-net-id-in-vif-list.rst │ │ ├── add_exceeded_max_retries_exception.rst │ │ ├── cells-db-connection-switching.rst │ │ ├── cells-scheduling-interaction.rst │ │ ├── check-destination-on-migrations.rst │ │ ├── cleanup-scheduled-at.rst │ │ ├── convert-consoles-to-objects.rst │ │ ├── flavor-cell-api.rst │ │ ├── host-state-level-locking.rst │ │ ├── hyper-v-cluster.rst │ │ ├── hyper-v-vnuma-enable.rst │ │ ├── hyper-v-vtpm-devices.rst │ │ ├── hyperv-fibre-channel.rst │ │ ├── hyperv-storage-qos.rst │ │ ├── implementation-of-remote-fs-driver-based-on-rsync-for-libvirt.rst │ │ ├── inject-nmi.rst │ │ ├── libvirt-hardware-policy-from-libosinfo.rst │ │ ├── linux_net_refactor.rst │ │ ├── mem-bw.rst │ │ ├── migration-fix-resource-tracking.rst │ │ ├── multi-attach-volume.rst │ │ ├── nested-quota-driver-api.rst │ │ ├── nova-api-json-home.rst │ │ ├── nova-api-remove-v3.rst │ │ ├── oslo_db-enginefacade.rst │ │ ├── pci-passthrough-whitelist-regex.rst │ │ ├── persist-request-spec.rst │ │ ├── refresh-quotas-usage.rst │ │ ├── resource-objects.rst │ │ ├── service-group-using-tooz.rst │ │ ├── servicegroup-api-control-plane.rst │ │ ├── soft-affinity-for-server-group.rst │ │ ├── stop-dmcrypt-on-suspend.rst │ │ ├── tag-instances.rst │ │ ├── user-data-modification.rst │ │ ├── virt-driver-cpu-pinning.rst │ │ ├── volume-snapshot-improvements.rst │ │ └── wrap-neutronclient.rst │ ├── implemented │ │ ├── add-locking-information-in-server-get-response.rst │ │ ├── adding-python34-support-to-nova.rst │ │ ├── admin-query-any-keypair.rst │ │ ├── allocation-ratio-to-resource-tracker.rst │ │ ├── allow-ip6-search-for-non-admin.rst │ │ ├── api-relax-validation.rst │ │ ├── cells-host-mapping.rst │ │ ├── cells-instance-migration.rst │ │ ├── check-flavor-type-before-add-tenant.rst │ │ ├── consolidate-console-api.rst │ │ ├── db2-database.rst │ │ ├── libvirt-macvtap-vif.rst │ │ ├── libvirt-set-admin-password.rst │ │ ├── libvirt-virtiomq.rst │ │ ├── make-resource-tracker-use-objects.rst │ │ ├── mark-host-down.rst │ │ ├── metadata-service-network-info.rst │ │ ├── nova-api-policy.rst │ │ ├── nova-rootwrap-daemon-mode.rst │ │ ├── novaclient-api-microversions.rst │ │ ├── online-schema-changes.rst │ │ ├── rename-parallels-to-virtuozzo.rst │ │ ├── request-spec-object.rst │ │ ├── robustify_evacuate.rst │ │ ├── service-version-number.rst │ │ ├── show-reserved-status-in-os-fixed-ips-api.rst │ │ ├── use-os-brick-library.rst │ │ ├── vif-driver-ib-passthrough.rst │ │ ├── vif-type-tap.rst │ │ ├── vmware-limits.rst │ │ └── vmware-webmks-console.rst │ └── redirects ├── mitaka-template.rst ├── mitaka │ ├── approved │ │ ├── cells-instance-table.rst │ │ ├── cells-scheduling-interaction.rst │ │ ├── compute-node-metrics-list.rst │ │ ├── detach-boot-volume.rst │ │ ├── distribute-pci-allocations.rst │ │ ├── expose-host-capabilities.rst │ │ ├── expose-quiesce-unquiesce-api.rst │ │ ├── flavor-cell-api.rst │ │ ├── host-state-level-locking.rst │ │ ├── hyper-v-cluster.rst │ │ ├── hyper-v-uefi-secureboot.rst │ │ ├── hyper-v-vnuma-enable.rst │ │ ├── hyper-v-vtpm-devices.rst │ │ ├── hyperv-fibre-channel.rst │ │ ├── hyperv-storage-qos.rst │ │ ├── ips-add-mac-and-type.rst │ │ ├── ironic-multiple-compute-hosts.rst │ │ ├── ironic-networks-support.rst │ │ ├── libvirt-vzstorage-volume-support.rst │ │ ├── mem-bw.rst │ │ ├── migrate-libvirt-volumes.rst │ │ ├── multi-attach-volume.rst │ │ ├── nested-quota-driver-api.rst │ │ ├── nova-api-hypervsor-cpu-info.rst │ │ ├── os-vif-library.rst │ │ ├── pci-passthrough-whitelist-regex.rst │ │ ├── pci-stats-generate.rst │ │ ├── purge-deleted-instances-cmd.rst │ │ ├── refresh-quotas-usage.rst │ │ ├── resource-objects.rst │ │ ├── resource-providers.rst │ │ ├── runtime-image-type.rst │ │ ├── servicegroup-api-control-plane.rst │ │ ├── sriov-pf-passthrough-neutron-port.rst │ │ ├── stop-dmcrypt-on-suspend.rst │ │ ├── tag-instances.rst │ │ ├── use-glance-v2-api.rst │ │ ├── use-libvirt-storage-pools.rst │ │ ├── user-data-modification.rst │ │ ├── virt-device-role-tagging.rst │ │ ├── virt-image-props-boot-override.rst │ │ ├── virt-rescue-stable-disk-devices.rst │ │ ├── vmware-vvol-support.rst │ │ ├── volume-snapshot-improvements.rst │ │ └── websocket-proxy-to-host-security.rst │ ├── implemented │ │ ├── abort-live-migration.rst │ │ ├── add-os-win-library.rst │ │ ├── add-project-id-in-os-server-groups-api.rst │ │ ├── boot-from-uefi.rst │ │ ├── cells-db-connection-switching.rst │ │ ├── centralize-config-options.rst │ │ ├── check-destination-on-migrations.rst │ │ ├── cinder-backend-report-discard.rst │ │ ├── get-valid-server-state.rst │ │ ├── image-verification.rst │ │ ├── instance-crash-dump.rst │ │ ├── internal-dns-resolution.rst │ │ ├── libvirt-aio-mode.rst │ │ ├── libvirt-hardware-policy-from-libosinfo.rst │ │ ├── libvirt-real-time.rst │ │ ├── live-migration-progress-report.rst │ │ ├── making_live_migration_api_friendly.rst │ │ ├── no-more-soft-delete.rst │ │ ├── optional-shared-storage-flag-in-evacuate-api.rst │ │ ├── os-instance-actions-read-deleted-instances.rst │ │ ├── oslo_db-enginefacade.rst │ │ ├── pause-vm-during-live-migration.rst │ │ ├── persist-request-spec.rst │ │ ├── rbd-instance-snapshots.rst │ │ ├── request-spec-object-mitaka.rst │ │ ├── resource-classes.rst │ │ ├── service-status-notification.rst │ │ ├── service-version-behavior.rst │ │ ├── soft-affinity-for-server-group.rst │ │ ├── split-network-plane-for-live-migration.rst │ │ ├── sriov-physical-function-passthrough.rst │ │ ├── user-settable-server-description.rst │ │ ├── versioned-notification-api.rst │ │ ├── virt-driver-cpu-thread-pinning.rst │ │ ├── vmware-limits.rst │ │ ├── vmware-opaque-network-support.rst │ │ └── volume-ops-when-shelved.rst │ └── redirects ├── newton-template.rst ├── newton │ ├── approved │ │ ├── add-pagination-and-change-since-for-migration-list.rst │ │ ├── cells-quota-api-db.rst │ │ ├── cells-scheduling-interaction.rst │ │ ├── compute-node-metrics-list.rst │ │ ├── console-log-offset.rst │ │ ├── convert-consoles-to-objects.rst │ │ ├── detach-boot-volume.rst │ │ ├── flavor-root-disk-none.rst │ │ ├── host-state-level-locking.rst │ │ ├── hyper-v-cluster.rst │ │ ├── hyper-v-uefi-secureboot.rst │ │ ├── hyper-v-vnuma-enable.rst │ │ ├── hyperv-storage-qos.rst │ │ ├── hypervisor-notification.rst │ │ ├── improve-sched-logging.rst │ │ ├── keypair-notification.rst │ │ ├── libvirt-virtlogd.rst │ │ ├── live-migrate-rescued-instances.rst │ │ ├── lowercase-metadata-keys.rst │ │ ├── memory-bw.rst │ │ ├── multi-attach-volume.rst │ │ ├── pagination-add-changes-since-for-instance-action-list.rst │ │ ├── pci-passthrough-whitelist-regex.rst │ │ ├── remove-compute-compute-communication.rst │ │ ├── stop-dmcrypt-on-suspend.rst │ │ ├── user-data-modification.rst │ │ ├── validate-project-with-keystone.rst │ │ ├── virt-image-props-boot-override.rst │ │ ├── virt-rescue-stable-disk-devices.rst │ │ ├── vmware-vvol-support.rst │ │ └── websocket-proxy-to-host-security.rst │ ├── implemented │ │ ├── add-buildrequest-obj.rst │ │ ├── api-no-more-extensions.rst │ │ ├── async-live-migration-rest-check.rst │ │ ├── auto-live-migration-completion.rst │ │ ├── cells-aggregate-api-db.rst │ │ ├── cells-cell0.rst │ │ ├── cells-instance-groups-api-db.rst │ │ ├── cells-keypairs-api-db.rst │ │ ├── cells-mq-connection-switching.rst │ │ ├── check-destination-on-migrations-newton.rst │ │ ├── compute-node-inventory-newton.rst │ │ ├── deprecate-api-proxies.rst │ │ ├── discoverable-policy-cli.rst │ │ ├── fix-console-auth-tokens.rst │ │ ├── flavor-cell-api.rst │ │ ├── generic-resource-pools.rst │ │ ├── get-me-a-network.rst │ │ ├── hyperv-fibre-channel.rst │ │ ├── ironic-multiple-compute-hosts.rst │ │ ├── ironic-networks-support.rst │ │ ├── keypairs-pagination.rst │ │ ├── libvirt-instance-storage.rst │ │ ├── libvirt-vzstorage-volume-support.rst │ │ ├── modern-microversions.rst │ │ ├── neutron-routed-networks.rst │ │ ├── nova-api-hypervsor-cpu-info.rst │ │ ├── os-vif-library.rst │ │ ├── pagination-for-hypervisor.rst │ │ ├── policy-in-code.rst │ │ ├── prep-for-network-aware-scheduling.rst │ │ ├── refresh-quotas-usage.rst │ │ ├── resource-providers-allocations.rst │ │ ├── resource-providers.rst │ │ ├── response-for-invalid-status.rst │ │ ├── sriov-pf-passthrough-neutron-port.rst │ │ ├── support-neutron-security-group.rst │ │ ├── support-perf-event.rst │ │ ├── tag-instances.rst │ │ ├── use-castellan-key-manager.rst │ │ ├── use-glance-v2-api.rst │ │ ├── user-id-based-policy-enforcement.rst │ │ ├── vendordata-reboot.rst │ │ ├── versioned-notification-transformation-newton.rst │ │ ├── virt-device-role-tagging.rst │ │ └── xenapi-independent-nova.rst │ └── redirects ├── ocata-template.rst ├── ocata │ ├── approved │ │ ├── cells-count-resources-to-check-quota-in-api.rst │ │ ├── cells-quota-api-db.rst │ │ ├── cold-migration-with-target-ocata.rst │ │ ├── detach-boot-volume.rst │ │ ├── flavor-root-disk-none.rst │ │ ├── libvirt-emulator-threads-policy.rst │ │ ├── nested-resource-providers.rst │ │ ├── powervm-nova-compute-driver.rst │ │ ├── prep-for-network-aware-scheduling-ocata.rst │ │ ├── restore-vm-diagnostics.rst │ │ ├── support-tag-instance-when-boot.rst │ │ ├── validate-project-with-keystone.rst │ │ ├── virt-device-tagged-attach-detach.rst │ │ └── websocket-proxy-to-host-security.rst │ ├── implemented │ │ ├── add-os-xenapi-library.rst │ │ ├── add-swap-volume-notifications.rst │ │ ├── add-whitelist-for-server-list-filter-sort-parameters.rst │ │ ├── cells-scheduling-interaction.rst │ │ ├── consistent-query-parameters-validation.rst │ │ ├── custom-resource-classes.rst │ │ ├── deprecate-image-meta-proxy-api.rst │ │ ├── fix-tag-attribute-disappearing.rst │ │ ├── flavor-notifications.rst │ │ ├── hyper-v-uefi-secureboot.rst │ │ ├── hyper-v-vnuma-enable.rst │ │ ├── hyperv-storage-qos.rst │ │ ├── ironic-portgroups-support.rst │ │ ├── libvirt-virtlogd.rst │ │ ├── paginate-simple-tenant-usage.rst │ │ ├── pci-passthrough-whitelist-regex.rst │ │ ├── resource-providers-get-by-request.rst │ │ ├── resource-providers-scheduler-db-filters.rst │ │ ├── return-uuid-from-os-aggregates-api.rst │ │ ├── sriov-pf-passthrough-neutron-port-vlan.rst │ │ ├── use-service-tokens.rst │ │ └── vendordata-reboot-ocata.rst │ └── redirects ├── pike-template.rst ├── pike │ ├── approved │ │ ├── cinder-new-attach-apis.rst │ │ ├── cold-migration-with-target-pike.rst │ │ ├── convert-consoles-to-objects.rst │ │ ├── enable-sriov-nic-features.rst │ │ ├── libvirt-qemu-native-luks.rst │ │ ├── list-instances-using-searchlight.rst │ │ ├── list-show-all-server-migration-types.rst │ │ ├── live-migrate-rescued-instances.rst │ │ ├── live-migration-force-after-timeout.rst │ │ ├── live-migration-per-instance-timeout.rst │ │ ├── nested-resource-providers.rst │ │ ├── nova-validate-certificates.rst │ │ ├── prep-for-network-aware-scheduling-pike.rst │ │ ├── scaleio-ephemeral-storage-backend.rst │ │ ├── use-service-catalog-for-endpoints.rst │ │ └── websocket-proxy-to-host-security.rst │ ├── implemented │ │ ├── cells-count-resources-to-check-quota-in-api.rst │ │ ├── cells-quota-api-db.rst │ │ ├── custom-resource-classes-in-flavors.rst │ │ ├── delete-inventories-placement-api.rst │ │ ├── deprecate-multinic-proxy-api.rst │ │ ├── deprecate-os-hosts.rst │ │ ├── fix-quota-classes-api.rst │ │ ├── instance-flavor-api.rst │ │ ├── libvirt-emulator-threads-policy.rst │ │ ├── netronome-smartnic-enablement.rst │ │ ├── nova-support-attached-volume-extend.rst │ │ ├── oslo-middleware-request-id.rst │ │ ├── placement-allocation-requests.rst │ │ ├── placement-claims.rst │ │ ├── placement-project-user.rst │ │ ├── placement-put-resource-class.rst │ │ ├── policy-docs.rst │ │ ├── powervm-nova-compute-driver.rst │ │ ├── remove-create-image-location-header-response.rst │ │ ├── remove-nova-cert.rst │ │ ├── reserve-numa-with-pci.rst │ │ ├── resource-provider-traits.rst │ │ ├── restore-vm-diagnostics.rst │ │ ├── send-tag-notification.rst │ │ ├── service-hyper-uuid-in-api.rst │ │ ├── support-tag-instance-when-boot.rst │ │ ├── use-service-tokens.rst │ │ ├── validate-project-with-keystone.rst │ │ ├── veritas-hyperscale-libvirt-volume-driver.rst │ │ └── virt-device-tagged-attach-detach.rst │ └── redirects ├── queens-template.rst ├── queens │ ├── approved │ │ ├── add-zvm-driver-queens.rst │ │ ├── convert-consoles-to-objects.rst │ │ ├── enable-sriov-nic-features.rst │ │ ├── granular-resource-requests.rst │ │ ├── list-show-all-server-migration-types.rst │ │ ├── local-disk-serial-numbers.rst │ │ ├── nested-resource-providers.rst │ │ ├── neutron-new-port-binding-api.rst │ │ ├── nova-validate-certificates.rst │ │ └── scaleio-ephemeral-storage-backend.rst │ ├── implemented │ │ ├── add-pagination-and-change-since-for-migration-list.rst │ │ ├── add-support-for-vgpu.rst │ │ ├── add-trait-support-in-allocation-candidates.rst │ │ ├── allocation-candidates-limit.rst │ │ ├── api-extensions-policy-removal.rst │ │ ├── cinder-new-attach-apis.rst │ │ ├── cold-migration-with-target-queens.rst │ │ ├── deprecate-file-injection.rst │ │ ├── flavor-description.rst │ │ ├── improve-filter-instances-by-ip-performance.rst │ │ ├── ironic-driver-traits.rst │ │ ├── libvirt-qemu-native-luks.rst │ │ ├── migration-allocations.rst │ │ ├── multi-attach-volume.rst │ │ ├── pagination-add-changes-since-for-instance-action-list.rst │ │ ├── placement-cache-headers.rst │ │ ├── post-allocations.rst │ │ ├── powervm-nova-it-compute-driver.rst │ │ ├── rebuild-keypair-reset.rst │ │ ├── remove-configurable-hide-server-address-feature.rst │ │ ├── request-traits-in-nova.rst │ │ ├── return-alternate-hosts.rst │ │ ├── return-selection-objects.rst │ │ ├── service-create-destroy-notification.rst │ │ ├── share-pci-between-numa-nodes.rst │ │ ├── symmetric-allocations.rst │ │ ├── use-ksa-adapter-for-endpoints.rst │ │ └── websocket-proxy-to-host-security.rst │ └── redirects ├── rocky-template.rst ├── rocky │ ├── approved │ │ ├── bandwidth-resource-provider.rst │ │ ├── enable-sriov-nic-features.rst │ │ ├── handling-down-cell.rst │ │ ├── list-show-all-server-migration-types.rst │ │ ├── local-disk-serial-numbers.rst │ │ ├── multiple-fixed-ips-network-information.rst │ │ ├── numa-aware-live-migration.rst │ │ ├── reshape-provider-tree.rst │ │ ├── servers-ips-non-unique-network-names.rst │ │ ├── vgpu-rocky.rst │ │ ├── vmware-live-migration.rst │ │ └── volume-multiattach-enhancements.rst │ ├── implemented │ │ ├── abort-live-migration-in-queued-status.rst │ │ ├── add-consumer-generation.rst │ │ ├── add-extra-specs-to-flavor-list.rst │ │ ├── add-host-to-instance-action-events.rst │ │ ├── add-zvm-driver-rocky.rst │ │ ├── alloc-candidates-member-of.rst │ │ ├── allow-reserved-equal-total-inventory.rst │ │ ├── cell-disable.rst │ │ ├── complex-anti-affinity-policies.rst │ │ ├── convert-consoles-to-objects.rst │ │ ├── enhanced-kvm-storage-qos.rst │ │ ├── generation-from-create-provider.rst │ │ ├── glance-image-traits.rst │ │ ├── granular-resource-requests.rst │ │ ├── libvirt-file-backed-memory.rst │ │ ├── libvirt-virtio-set-queue-sizes.rst │ │ ├── nested-resource-providers-allocation-candidates.rst │ │ ├── neutron-new-port-binding-api.rst │ │ ├── nova-validate-certificates.rst │ │ ├── numa-aware-vswitches.rst │ │ ├── optional-placement-database.rst │ │ ├── overhead-pin-set.rst │ │ ├── placement-aggregate-generation.rst │ │ ├── placement-api-error-handling.rst │ │ ├── placement-forbidden-traits.rst │ │ ├── placement-mirror-host-aggregates.rst │ │ ├── placement-req-filter.rst │ │ ├── placement-return-all-resources.rst │ │ ├── report-cpu-features-as-traits.rst │ │ ├── sriov-trusted-vfs.rst │ │ ├── traits-on-list-resource-providers.rst │ │ └── update-provider-tree.rst │ └── redirects ├── stein-template.rst ├── stein │ ├── approved │ │ ├── add-emulated-virtual-tpm.rst │ │ ├── amd-sev-libvirt-support.rst │ │ ├── count-quota-usage-from-placement.rst │ │ ├── cpu-model-selection.rst │ │ ├── cross-cell-resize.rst │ │ ├── detach-boot-volume.rst │ │ ├── enable-rebuild-for-instances-in-cell0.rst │ │ ├── introduce-pending-vm-state.rst │ │ ├── libvirt-neutron-sriov-livemigration.rst │ │ ├── local-disk-serial-numbers.rst │ │ ├── negative-aggregate-membership.rst │ │ ├── numa-aware-live-migration.rst │ │ ├── placement-any-traits-in-allocation_candidates-query.rst │ │ ├── placement-mixing-required-traits-with-any-traits.rst │ │ ├── reshape-provider-tree.rst │ │ ├── show-server-numa-topology.rst │ │ ├── vgpu-stein.rst │ │ └── volume-backed-server-rebuild.rst │ ├── implemented │ │ ├── alloc-candidates-in-tree.rst │ │ ├── bandwidth-resource-provider.rst │ │ ├── boot-instance-specific-storage-backend.rst │ │ ├── conf-max-attach-volumes.rst │ │ ├── expose-virtual-device-tags-in-rest-api.rst │ │ ├── flavor-extra-spec-image-property-validation.rst │ │ ├── generic-os-vif-offloads.rst │ │ ├── handling-down-cell.rst │ │ ├── initial-allocation-ratios.rst │ │ ├── ironic-conductor-groups.rst │ │ ├── live-migration-force-after-timeout.rst │ │ ├── per-aggregate-scheduling-weight.rst │ │ ├── per-instance-libvirt-sysinfo-serial.rst │ │ ├── remove-force-flag-from-live-migrate-and-evacuate.rst │ │ ├── show-server-group.rst │ │ ├── support-hpet-on-guest.rst │ │ ├── support-to-query-nova-resources-filter-by-changes-before.rst │ │ ├── vmware-live-migration.rst │ │ └── vrouter-hw-offloads.rst │ └── redirects ├── train-template.rst ├── train │ ├── approved │ │ ├── add-emulated-virtual-tpm.rst │ │ ├── add-user-id-field-to-the-migrations-table.rst │ │ ├── allow-secure-boot-for-qemu-kvm-guests.rst │ │ ├── cpu-selection-with-hypervisor-consideration.rst │ │ ├── cross-cell-resize.rst │ │ ├── detach-boot-volume.rst │ │ ├── enable-rebuild-for-instances-in-cell0.rst │ │ ├── expose-auto-converge-post-copy.rst │ │ ├── flavor-extra-spec-image-property-validation-extended.rst │ │ ├── image-metadata-prefiltering.rst │ │ ├── introduce-pending-vm-state.rst │ │ ├── nova-cyborg-interaction.rst │ │ ├── openstacksdk-in-nova.rst │ │ ├── policy-default-refresh.rst │ │ ├── provider-config-file.rst │ │ ├── vm-boot-with-unaddressed-port.rst │ │ └── volume-backed-server-rebuild.rst │ ├── implemented │ │ ├── add-host-and-hypervisor-hostname-flag-to-create-server.rst │ │ ├── add-locked-reason.rst │ │ ├── amd-sev-libvirt-support.rst │ │ ├── api-consistency-cleanup.rst │ │ ├── count-quota-usage-from-placement.rst │ │ ├── cpu-model-selection.rst │ │ ├── cpu-resources.rst │ │ ├── libvirt-neutron-sriov-livemigration.rst │ │ ├── libvirt-pmu-configuration.rst │ │ ├── nova-support-instance-power-update.rst │ │ ├── numa-aware-live-migration.rst │ │ ├── placement-req-filter-forbidden-aggregates.rst │ │ ├── pre-filter-disabled-computes.rst │ │ ├── request-filter-image-types.rst │ │ ├── show-server-numa-topology.rst │ │ ├── support-delete-on-termination-in-server-attach-volume.rst │ │ ├── support-move-ops-with-qos-ports.rst │ │ ├── support-specifying-az-when-restore-shelved-server.rst │ │ ├── use-placement-in-tree.rst │ │ └── virtual-persistent-memory.rst │ └── redirects ├── ussuri-template.rst ├── ussuri │ ├── approved │ │ ├── add-emulated-virtual-tpm.rst │ │ ├── allow-secure-boot-for-qemu-kvm-guests.rst │ │ ├── nova-audit.rst │ │ ├── nova-support-webvnc-with-password-authentication.rst │ │ ├── numa-topology-with-rps.rst │ │ ├── openstacksdk-in-nova.rst │ │ ├── provider-config-file.rst │ │ ├── support-glance-multiple-backend.rst │ │ ├── support-live-migration-with-virtual-persistent-memory.rst │ │ ├── support-volume-local-cache.rst │ │ ├── unified-limits-nova.rst │ │ └── use-pcpu-vcpu-in-one-instance.rst │ ├── implemented │ │ ├── action-event-fault-details.rst │ │ ├── add-user-id-field-to-the-migrations-table.rst │ │ ├── cross-cell-resize.rst │ │ ├── destroy-instance-with-datavolume.rst │ │ ├── flavor-extra-spec-validators.rst │ │ ├── image-metadata-prefiltering.rst │ │ ├── image-precache-support.rst │ │ ├── non-admin-filter-instance-by-az.rst │ │ ├── nova-cyborg-interaction.rst │ │ ├── policy-defaults-refresh.rst │ │ ├── support-move-ops-with-qos-ports-ussuri.rst │ │ ├── vgpu-multiple-types.rst │ │ ├── virt-bfv-instance-rescue.rst │ │ ├── virt-rescue-stable-disk-devices.rst │ │ └── vm-scoped-sriov-numa-affinity.rst │ └── redirects ├── victoria-template.rst ├── victoria │ ├── approved │ │ ├── nova-audit.rst │ │ ├── nova-support-webvnc-with-password-authentication.rst │ │ ├── numa-topology-with-rps.rst │ │ ├── routed-networks-scheduling.rst │ │ ├── support-volume-local-cache.rst │ │ └── unified-limits-nova.rst │ ├── implemented │ │ ├── add-emulated-virtual-tpm.rst │ │ ├── nova-image-download-via-rbd.rst │ │ ├── provider-config-file.rst │ │ ├── rbd-glance-multistore.rst │ │ ├── sriov-interface-attach-detach.rst │ │ └── use-pcpu-vcpu-in-one-instance.rst │ └── redirects ├── wallaby-template.rst ├── wallaby │ ├── approved │ │ ├── configurable-instance-hostnames.rst │ │ ├── cyborg-vgpu-support.rst │ │ ├── ephemeral-encryption-libvirt.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── nova-support-webvnc-with-password-authentication.rst │ │ ├── remove-tenant-id.rst │ │ └── sriov-smartnic-support.rst │ ├── implemented │ │ ├── allow-secure-boot-for-qemu-kvm-guests.rst │ │ ├── libvirt-default-machine-type.rst │ │ ├── libvirt-driver-ip-metadata.rst │ │ ├── libvirt-vdpa-support.rst │ │ ├── modernize-os-hypervisors-api.rst │ │ ├── pci-socket-affinity.rst │ │ ├── port-scoped-sriov-numa-affinity.rst │ │ ├── routed-networks-scheduling.rst │ │ └── support-interface-attach-with-qos-ports.rst │ └── redirects ├── xena-template.rst ├── xena │ ├── approved │ │ ├── allow-migrate-pmem-data.rst │ │ ├── allow-special-characters-in-keypair-name.rst │ │ ├── cpu-selection-with-hypervisor-consideration.rst │ │ ├── cyborg-admin-user-client.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── libvirt-device-bus-model-update.rst │ │ ├── nova-audit.rst │ │ ├── qos-minimum-guaranteed-packet-rate.rst │ │ ├── remove-tenant-id.rst │ │ ├── rework-security-group-retrieving.rst │ │ ├── unified-limits-nova.rst │ │ └── vm-boot-with-unaddressed-port.rst │ ├── implemented │ │ ├── add-attachmentid-to-responses-of-the-os-volume-attachments-api.rst │ │ ├── configurable-instance-hostnames.rst │ │ ├── generic-mdevs.rst │ │ ├── nova-manage-refresh-connection-info.rst │ │ └── sriov-smartnic-support.rst │ └── redirects ├── yoga-template.rst ├── yoga │ ├── approved │ │ ├── allow-project-admin-list-hypervisors.rst │ │ ├── cpu-selection-with-hypervisor-consideration.rst │ │ ├── ephemeral-encryption-libvirt.rst │ │ ├── ephemeral-storage-encryption.rst │ │ ├── libvirt-virtiofs-attach-manila-shares.rst │ │ ├── per-process-healthchecks.rst │ │ ├── remove-tenant-id.rst │ │ ├── soft-delete-instance-actions.rst │ │ └── volume-backed-server-rebuild.rst │ ├── implemented │ │ ├── boot-vm-with-unaddressed-port.rst │ │ ├── integration-with-off-path-network-backends.rst │ │ ├── libvirt-device-bus-model-update.rst │ │ ├── nova-support-lightos-driver.rst │ │ ├── pick-guest-arch-based-on-host-arch-in-libvirt-driver.rst │ │ ├── qos-minimum-guaranteed-packet-rate.rst │ │ └── unified-limits-nova.rst │ └── redirects ├── zed-template.rst └── zed │ ├── approved │ ├── allow-project-admin-list-hypervisors.rst │ ├── ephemeral-encryption-libvirt.rst │ ├── ephemeral-storage-encryption.rst │ ├── libvirt-virtiofs-attach-manila-shares.rst │ ├── owner-nova-trait-usage.rst │ ├── pci-device-tracking-in-placement.rst │ ├── remove-tenant-id.rst │ └── update-userdata.rst │ ├── implemented │ ├── keypair-generation-removal.rst │ ├── libvirt-viommu-device.rst │ ├── unshelve-to-host.rst │ └── volume-backed-server-rebuild.rst │ └── redirects ├── test-requirements.txt ├── tests ├── __init__.py ├── test_directories.py └── test_titles.py ├── tools ├── abandon_spec.py ├── count_blueprints.py ├── fast-specs.sh ├── lib.py ├── move_implemented_specs.py └── move_spec.py └── tox.ini /.gitignore: -------------------------------------------------------------------------------- 1 | AUTHORS 2 | ChangeLog 3 | build 4 | .tox 5 | .venv 6 | *.egg* 7 | *.swp 8 | *.swo 9 | *.pyc 10 | .stestr/ 11 | .idea 12 | -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=review.opendev.org 3 | port=29418 4 | project=openstack/nova-specs.git 5 | -------------------------------------------------------------------------------- /.stestr.conf: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | test_path=./tests 3 | top_dir=./ 4 | 5 | -------------------------------------------------------------------------------- /.zuul.yaml: -------------------------------------------------------------------------------- 1 | - project: 2 | templates: 3 | - openstack-specs-jobs 4 | check: 5 | jobs: 6 | - openstack-tox-pep8 7 | gate: 8 | jobs: 9 | - openstack-tox-pep8 10 | -------------------------------------------------------------------------------- /CONTRIBUTING.rst: -------------------------------------------------------------------------------- 1 | The source repository for this project can be found at: 2 | 3 | https://opendev.org/openstack/nova-specs 4 | 5 | Pull requests submitted through GitHub are not monitored. 6 | 7 | To start contributing to OpenStack, follow the steps in the contribution guide 8 | to set up and use Gerrit: 9 | 10 | https://docs.openstack.org/contributors/code-and-documentation/quick-start.html 11 | 12 | This repository is for doing design review on feature proposal in Nova. 13 | Please refer to `this document `_ 14 | for more information. 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This work is licensed under a Creative Commons Attribution 3.0 Unported License. 2 | 3 | http://creativecommons.org/licenses/by/3.0/legalcode 4 | -------------------------------------------------------------------------------- /doc/requirements.txt: -------------------------------------------------------------------------------- 1 | # NOTE(gibi): Sphinx 4.4.0 made _`[1]` type of refs global 2 | # and that breaks the spec builds 3 | sphinx>=2.0.0,!=2.1.0,!=4.4.0 # BSD 4 | openstackdocstheme>=2.2.1 # Apache-2.0 5 | yasfb>=0.8.0 # BSD 6 | -------------------------------------------------------------------------------- /doc/source/_images/numa-aware-vswitches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/nova-specs/4b8f26f46e7c5e8c714516719cff66df519d2d19/doc/source/_images/numa-aware-vswitches-1.png -------------------------------------------------------------------------------- /doc/source/_images/numa-aware-vswitches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/nova-specs/4b8f26f46e7c5e8c714516719cff66df519d2d19/doc/source/_images/numa-aware-vswitches-2.png -------------------------------------------------------------------------------- /doc/source/_images/numa-aware-vswitches-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/nova-specs/4b8f26f46e7c5e8c714516719cff66df519d2d19/doc/source/_images/numa-aware-vswitches-3.png -------------------------------------------------------------------------------- /doc/source/_images/numa-aware-vswitches-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/nova-specs/4b8f26f46e7c5e8c714516719cff66df519d2d19/doc/source/_images/numa-aware-vswitches-4.png -------------------------------------------------------------------------------- /doc/source/_images/numa-aware-vswitches-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/nova-specs/4b8f26f46e7c5e8c714516719cff66df519d2d19/doc/source/_images/numa-aware-vswitches-5.png -------------------------------------------------------------------------------- /doc/source/_media/rocky/reshape-provider-tree.seqdiag: -------------------------------------------------------------------------------- 1 | seqdiag { 2 | edge_length = 200; 3 | span_height = 15; 4 | activation = none; 5 | default_note_color = white; 6 | 'Resource Tracker'; 'Report Client'; Placement; 'Virt Driver'; 7 | 'Resource Tracker' -> 'Virt Driver' [label = "update_provider_tree(provider_tree, nodename, allocations=None)"]; 8 | 'Resource Tracker' <- 'Virt Driver' [label = "raise ReshapeNeeded", color = red]; 9 | 'Resource Tracker' -> 'Report Client' [label = "get_allocations_for_provider_tree()", color = red]; 10 | 'Report Client' -> Placement [label = "GET /resource_providers/{uuid}/allocations", color = red]; 11 | 'Report Client' <-- Placement [label = "HTTP 200", color = red]; 12 | 'Report Client' -> 'Report Client' [label = "get_allocations_for_consumer(context, consumer)", color = red]; 13 | 'Report Client' -> Placement [label = "GET /allocations/{consumer_uuid}", color = red]; 14 | 'Report Client' <-- Placement [label = "HTTP 200", color = red]; 15 | 'Resource Tracker' <-- 'Report Client' [label = "{allocations by consumer}", color = red]; 16 | 'Resource Tracker' -> 'Virt Driver' [label = "update_provider_tree(provider_tree, nodename, allocations=allocations)", color = red]; 17 | 'Resource Tracker' <-- 'Virt Driver'; 18 | 'Resource Tracker' -> 'Report Client' [label = "update_from_provider_tree( 19 | context, new_tree, 20 | allocations)"]; 21 | 'Report Client' -> Placement [label = "POST /resource_providers 22 | (create new providers)"]; 23 | 'Report Client' <-- Placement [label = "HTTP 200"]; 24 | 'Report Client' -> Placement [label = "POST /resource_providers/{uuid}/aggregates|traits 25 | (fix up aggregates, traits, etc.)"]; 26 | 'Report Client' <-- Placement [label = "HTTP 200"]; 27 | 'Report Client' -> Placement [label = "POST /reshaper {transformation payload}"]; 28 | Placement --> Placement [label = "create/modify/ 29 | delete 30 | inventories"]; 31 | Placement --> Placement [label = "create/modify/ 32 | delete 33 | allocations", color = red]; 34 | 'Report Client' <-- Placement [label = "HTTP 204"]; 35 | 'Resource Tracker' <-- 'Report Client' 36 | } 37 | -------------------------------------------------------------------------------- /doc/source/_media/stein/reshape-provider-tree.seqdiag: -------------------------------------------------------------------------------- 1 | seqdiag { 2 | edge_length = 200; 3 | span_height = 15; 4 | activation = none; 5 | default_note_color = white; 6 | 'Resource Tracker'; 'Report Client'; Placement; 'Virt Driver'; 7 | 'Resource Tracker' -> 'Virt Driver' [label = "update_provider_tree(provider_tree, nodename, allocations=None)"]; 8 | 'Resource Tracker' <- 'Virt Driver' [label = "raise ReshapeNeeded", color = red]; 9 | 'Resource Tracker' -> 'Report Client' [label = "get_allocations_for_provider_tree()", color = red]; 10 | 'Report Client' -> Placement [label = "GET /resource_providers/{uuid}/allocations", color = red]; 11 | 'Report Client' <-- Placement [label = "HTTP 200", color = red]; 12 | 'Report Client' -> 'Report Client' [label = "get_allocations_for_consumer(context, consumer)", color = red]; 13 | 'Report Client' -> Placement [label = "GET /allocations/{consumer_uuid}", color = red]; 14 | 'Report Client' <-- Placement [label = "HTTP 200", color = red]; 15 | 'Resource Tracker' <-- 'Report Client' [label = "{allocations by consumer}", color = red]; 16 | 'Resource Tracker' -> 'Virt Driver' [label = "update_provider_tree(provider_tree, nodename, allocations=allocations)", color = red]; 17 | 'Resource Tracker' <-- 'Virt Driver'; 18 | 'Resource Tracker' -> 'Report Client' [label = "update_from_provider_tree( 19 | context, new_tree, 20 | allocations)"]; 21 | 'Report Client' -> Placement [label = "POST /resource_providers 22 | (create new providers)"]; 23 | 'Report Client' <-- Placement [label = "HTTP 200"]; 24 | 'Report Client' -> Placement [label = "POST /resource_providers/{uuid}/aggregates|traits 25 | (fix up aggregates, traits, etc.)"]; 26 | 'Report Client' <-- Placement [label = "HTTP 200"]; 27 | 'Report Client' -> Placement [label = "POST /reshaper {transformation payload}"]; 28 | Placement --> Placement [label = "create/modify/ 29 | delete 30 | inventories"]; 31 | Placement --> Placement [label = "create/modify/ 32 | delete 33 | allocations", color = red]; 34 | 'Report Client' <-- Placement [label = "HTTP 204"]; 35 | 'Resource Tracker' <-- 'Report Client' 36 | } 37 | -------------------------------------------------------------------------------- /doc/source/_media/train/nova-cyborg-interaction.seqdiag: -------------------------------------------------------------------------------- 1 | seqdiag { 2 | edge_length = 200; 3 | span_height = 15; 4 | activation = none; 5 | default_note_color = white; 6 | 'Nova Controller'; 'Placement'; 'Cyborg'; 'Nova Compute'; 7 | 8 | 'Nova Controller' -> 'Cyborg' [label = 9 | "GET /v2/device_profiles?name=mydp"]; 10 | 'Nova Controller' <- 'Cyborg' [label = 11 | '{"device_profiles": $device_profile}']; 12 | 'Nova Controller' -> 'Nova Controller' [label= 13 | 'Merge request groups into request_spec']; 14 | 'Nova Controller' -> 'Placement' [label= 15 | 'Get /allocation_candidates']; 16 | 'Nova Controller' -> 'Placement' [label= 17 | 'allocation candidates with nested RPs']; 18 | 'Nova Controller' -> 'Nova Controller' [label= 19 | 'Select a candidate']; 20 | 'Nova Controller' -> 'Nova Compute' [label= 21 | 'build_and_run_instances()']; 22 | 'Nova Compute' -> 'Cyborg' [label= 23 | 'POST /v2/accelerator_requests']; 24 | 'Nova Compute' <- 'Cyborg' [label= 25 | '{"arqs": [$arq, ...]']; 26 | 'Nova Compute' -> 'Cyborg' [label= 27 | 'PATCH /v2/accelerator_requests']; 28 | 'Nova Compute' <- 'Cyborg' [label= 29 | '{"arqs": [$arq, ...]']; 30 | 'Cyborg' -> 'Nova Controller' [label= 31 | 'POST /os-server-external-events']; 32 | 'Nova Compute' -> 'Nova Compute' [label= 33 | 'Wait for notification from Cyborg']; 34 | 'Nova Compute' -> 'Cyborg' [label= 35 | 'GET /v2/accelerator_requests? 36 | instance=$uuid&bind_state=resolved']; 37 | 'Nova Compute' <- 'Cyborg' [label= 38 | '{"arqs": [$arq, ....]}']; 39 | } 40 | -------------------------------------------------------------------------------- /doc/source/_media/ussuri/nova-cyborg-interaction.seqdiag: -------------------------------------------------------------------------------- 1 | seqdiag { 2 | edge_length = 200; 3 | span_height = 15; 4 | activation = none; 5 | default_note_color = white; 6 | 'Nova Controller'; 'Placement'; 'Cyborg'; 'Nova Compute'; 7 | 8 | 'Nova Controller' -> 'Cyborg' [label = 9 | "GET /v2/device_profiles?name=mydp"]; 10 | 'Nova Controller' <- 'Cyborg' [label = 11 | '{"device_profiles": $device_profile}']; 12 | 'Nova Controller' -> 'Nova Controller' [label= 13 | 'Merge request groups into request_spec']; 14 | 'Nova Controller' -> 'Placement' [label= 15 | 'Get /allocation_candidates']; 16 | 'Nova Controller' <- 'Placement' [label= 17 | 'allocation candidates with nested RPs']; 18 | 'Nova Controller' -> 'Nova Controller' [label= 19 | 'Select a candidate']; 20 | 'Nova Controller' -> 'Nova Compute' [label= 21 | 'build_and_run_instances()']; 22 | 'Nova Compute' -> 'Cyborg' [label= 23 | 'POST /v2/accelerator_requests']; 24 | 'Nova Compute' <- 'Cyborg' [label= 25 | '{"arqs": [$arq, ...]']; 26 | 'Nova Compute' -> 'Cyborg' [label= 27 | 'PATCH /v2/accelerator_requests']; 28 | 'Nova Compute' <- 'Cyborg' [label= 29 | '{"arqs": [$arq, ...]']; 30 | 'Cyborg' -> 'Nova Controller' [label= 31 | 'POST /os-server-external-events']; 32 | 'Nova Compute' -> 'Nova Compute' [label= 33 | 'Wait for notification from Cyborg']; 34 | 'Nova Compute' -> 'Cyborg' [label= 35 | 'GET /v2/accelerator_requests? 36 | instance=$uuid&bind_state=resolved']; 37 | 'Nova Compute' <- 'Cyborg' [label= 38 | '{"arqs": [$arq, ....]}']; 39 | } 40 | -------------------------------------------------------------------------------- /doc/source/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import datetime 4 | import sys 5 | import os 6 | 7 | # If extensions (or modules to document with autodoc) are in another directory, 8 | # add these directories to sys.path here. If the directory is relative to the 9 | # documentation root, use os.path.abspath to make it absolute, like shown here. 10 | sys.path.insert(0, os.path.abspath('.')) 11 | 12 | # -- General configuration ---------------------------------------------------- 13 | 14 | # Add any Sphinx extension module names here, as strings. They can be 15 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. 16 | extensions = [ 17 | 'redirect', 18 | 'sphinx.ext.todo', 19 | 'openstackdocstheme', 20 | 'yasfb', 21 | ] 22 | 23 | todo_include_todos = True 24 | 25 | # The master toctree document. 26 | master_doc = 'index' 27 | 28 | # General information about the project. 29 | project = 'Nova Specs' 30 | copyright = '%s, OpenStack Nova Team' % datetime.date.today().year 31 | 32 | # The name of the Pygments (syntax highlighting) style to use. 33 | pygments_style = 'native' 34 | 35 | # A list of ignored prefixes for module index sorting. 36 | modindex_common_prefix = ['nova-specs.'] 37 | 38 | version = '' 39 | release = '' 40 | 41 | # -- Options for HTML output -------------------------------------------------- 42 | 43 | # The theme to use for HTML and HTML Help pages. See the documentation for 44 | # a list of builtin themes. 45 | html_theme = 'openstackdocs' 46 | 47 | # If false, no module index is generated. 48 | html_domain_indices = False 49 | 50 | # If false, no index is generated. 51 | html_use_index = False 52 | 53 | 54 | # -- openstackdocstheme configuration ----------------------------------------- 55 | 56 | openstackdocs_repo_name = 'openstack/nova-specs' 57 | openstackdocs_bug_project = 'nova' 58 | openstackdocs_bug_tag = 'specs' 59 | openstackdocs_auto_name = False 60 | openstackdocs_auto_version = False 61 | 62 | # -- yasfb configuration ------------------------------------------------------ 63 | 64 | feed_base_url = 'https://specs.openstack.org/openstack/nova-specs' 65 | feed_author = 'OpenStack Nova Team' 66 | -------------------------------------------------------------------------------- /doc/source/index.rst: -------------------------------------------------------------------------------- 1 | .. nova-specs documentation master file 2 | 3 | ============================ 4 | OpenStack Nova Project Plans 5 | ============================ 6 | 7 | Priorities 8 | ========== 9 | 10 | During each design summit, we agree what the whole community wants to focus 11 | on for the upcoming release. This is the output of those discussions: 12 | 13 | .. toctree:: 14 | :glob: 15 | :maxdepth: 1 16 | 17 | priorities/2025.2-priorities 18 | priorities/2025.1-priorities 19 | priorities/2024.2-priorities 20 | priorities/2024.1-priorities 21 | priorities/2023.2-priorities 22 | priorities/2023.1-priorities 23 | priorities/zed-priorities 24 | priorities/yoga-priorities 25 | priorities/xena-priorities 26 | priorities/wallaby-priorities 27 | priorities/victoria-priorities 28 | priorities/ussuri-priorities 29 | priorities/train-priorities 30 | priorities/stein-priorities 31 | priorities/rocky-priorities 32 | priorities/queens-priorities 33 | priorities/pike-priorities 34 | priorities/ocata-priorities 35 | priorities/newton-priorities 36 | priorities/mitaka-priorities 37 | priorities/liberty-priorities 38 | priorities/kilo-priorities 39 | 40 | Specifications 41 | ============== 42 | 43 | Here you can find the specs, and spec template, for each release: 44 | 45 | .. toctree:: 46 | :glob: 47 | :maxdepth: 1 48 | 49 | specs/2025.2/index 50 | specs/2025.1/index 51 | specs/2024.2/index 52 | specs/2024.1/index 53 | specs/2023.2/index 54 | specs/2023.1/index 55 | specs/zed/index 56 | specs/yoga/index 57 | specs/xena/index 58 | specs/wallaby/index 59 | specs/victoria/index 60 | specs/ussuri/index 61 | specs/train/index 62 | specs/stein/index 63 | specs/rocky/index 64 | specs/queens/index 65 | specs/pike/index 66 | specs/ocata/index 67 | specs/newton/index 68 | specs/mitaka/index 69 | specs/liberty/index 70 | specs/kilo/index 71 | specs/juno/index 72 | 73 | There are also some approved backlog specifications that are looking for owners: 74 | 75 | .. toctree:: 76 | :glob: 77 | :maxdepth: 1 78 | 79 | specs/backlog/index 80 | 81 | Abandoned specs live here: 82 | 83 | .. toctree:: 84 | :glob: 85 | :maxdepth: 1 86 | 87 | specs/abandoned/index 88 | 89 | Process 90 | ======= 91 | 92 | Documentation for nova-specs process: 93 | 94 | .. toctree:: 95 | :maxdepth: 1 96 | 97 | How to submit a spec 98 | 99 | For more details, look at spec template for the specific release, and see the 100 | wiki page on Blueprints: https://wiki.openstack.org/wiki/Blueprints 101 | 102 | Indices and tables 103 | ================== 104 | 105 | * :ref:`search` 106 | -------------------------------------------------------------------------------- /doc/source/priorities: -------------------------------------------------------------------------------- 1 | ../../priorities/ -------------------------------------------------------------------------------- /doc/source/readme.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../README.rst 2 | -------------------------------------------------------------------------------- /doc/source/redirect.py: -------------------------------------------------------------------------------- 1 | # A simple sphinx plugin which creates HTML redirections from old names 2 | # to new names. It does this by looking for files named "redirect" in 3 | # the documentation source and using the contents to create simple HTML 4 | # redirection pages for changed filenames. 5 | 6 | import os.path 7 | 8 | from sphinx.util import logging 9 | 10 | LOG = logging.getLogger(__name__) 11 | 12 | 13 | def process_redirect_file(app, path, ent): 14 | parent_path = path.replace( 15 | str(app.builder.srcdir), str(app.builder.outdir)) 16 | with open(os.path.join(path, ent)) as redirects: 17 | for line in redirects.readlines(): 18 | from_path, to_path = line.rstrip().split(' ') 19 | from_path = from_path.replace('.rst', '.html') 20 | to_path = to_path.replace('.rst', '.html') 21 | 22 | redirected_filename = os.path.join(parent_path, from_path) 23 | redirected_directory = os.path.dirname(redirected_filename) 24 | if not os.path.exists(redirected_directory): 25 | os.makedirs(redirected_directory) 26 | with open(redirected_filename, 'w') as f: 27 | f.write('' 29 | % to_path) 30 | 31 | 32 | def emit_redirects(app, exc): 33 | LOG.info('scanning %s for redirects...', app.builder.srcdir) 34 | 35 | def process_directory(path): 36 | for ent in os.listdir(path): 37 | p = os.path.join(path, ent) 38 | if os.path.isdir(p): 39 | process_directory(p) 40 | elif ent == 'redirects': 41 | LOG.info(' found redirects at %s' % p) 42 | process_redirect_file(app, path, ent) 43 | 44 | process_directory(app.builder.srcdir) 45 | LOG.info('...done') 46 | 47 | 48 | def setup(app): 49 | app.connect('build-finished', emit_redirects) 50 | -------------------------------------------------------------------------------- /doc/source/specs/2023.1/approved: -------------------------------------------------------------------------------- 1 | ../../../../specs/2023.1/approved/ -------------------------------------------------------------------------------- /doc/source/specs/2023.1/implemented: -------------------------------------------------------------------------------- 1 | ../../../../specs/2023.1/implemented/ -------------------------------------------------------------------------------- /doc/source/specs/2023.1/index.rst: -------------------------------------------------------------------------------- 1 | =================================== 2 | Nova 2023.1 Antelope Specifications 3 | =================================== 4 | 5 | Template: 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | Specification Template (2023.1 Antelope release)