# openstack/nova architecture

> Architecture diagram of the GitHub repository openstack/nova, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-08). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openstack/nova
- Repository: https://github.com/openstack/nova

## Overview

Nova is OpenStack’s compute fabric controller. A client submits compute API requests; Nova’s compute and conductor services coordinate instance operations, scheduling, and placement, then interact with networking, storage, and a hypervisor or bare-metal driver. The graph preserves those domain stages and major documented compute backends. Evidence is limited to the README and SOURCE INDEX references: some runtime handoffs are therefore shown as dashed, unverified links rather than asserted call chains.

Main entry points: [`nova/compute/api.py`](https://github.com/openstack/nova/blob/master/nova/compute/api.py) (Instance operations), [`nova/conductor/manager.py`](https://github.com/openstack/nova/blob/master/nova/conductor/manager.py) (Conductor tasks), [`nova/virt/driver.py`](https://github.com/openstack/nova/blob/master/nova/virt/driver.py) (Virtualization drivers), [`nova/scheduler/manager.py`](https://github.com/openstack/nova/blob/master/nova/scheduler/manager.py) (Host scheduling)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_compute_api["Compute API routes<br/>[routes.py]"]
  node_api_handlers["Compute handlers"]
end

subgraph group_compute["Compute lifecycle"]
  node_compute_core["Instance operations<br/>[api.py]"]
  node_conductor["Conductor tasks<br/>[manager.py]"]
  node_compute_service["Compute service<br/>[manager.py]"]
end

subgraph group_placement["Scheduling and placement"]
  node_scheduler["Host scheduling<br/>[manager.py]"]
  node_host_manager["Host selection<br/>[host_manager.py]"]
  node_placement_client["Placement client<br/>[report.py]"]
end

subgraph group_infra["Infrastructure integrations"]
  node_virt_driver["Virtualization drivers<br/>[driver.py]"]
  node_libvirt["Libvirt backend<br/>[driver.py]"]
  node_vmware["VMware backend<br/>[driver.py]"]
  node_ironic["Bare-metal backend<br/>[driver.py]"]
  node_network["Neutron networking<br/>[neutron.py]"]
  node_volume["Cinder volumes<br/>[cinder.py]"]
  node_image["Glance images<br/>[glance.py]"]
  node_cyborg["Accelerator integration<br/>[cyborg.py]"]
end

subgraph group_shared["State and messaging"]
  node_objects["Domain objects<br/>[base.py]"]
  node_database[("Nova database<br/>[api.py]")]
  node_rpc["RPC messaging<br/>[rpc.py]"]
end

node_client(("Cloud client"))

node_client -->|"requests compute"| node_compute_api
node_compute_api -->|"routes requests"| node_api_handlers
node_api_handlers -.->|"invokes operations"| node_compute_core
node_compute_core -->|"delegates tasks"| node_conductor
node_conductor -.->|"requests scheduling"| node_scheduler
node_scheduler -->|"selects hosts"| node_host_manager
node_scheduler -->|"reports allocations"| node_placement_client
node_conductor -.->|"dispatches compute"| node_compute_service
node_compute_service -.->|"uses driver interface"| node_virt_driver
node_virt_driver -.->|"implements backend"| node_libvirt
node_virt_driver -.->|"implements backend"| node_vmware
node_virt_driver -.->|"implements backend"| node_ironic
node_compute_core -->|"coordinates networking"| node_network
node_compute_core -.->|"coordinates volumes"| node_volume
node_compute_core -.->|"uses images"| node_image
node_compute_core -->|"integrates accelerators"| node_cyborg
node_compute_core -.->|"uses domain objects"| node_objects
node_objects -->|"persists records"| node_database
node_conductor -.->|"uses messaging"| node_rpc

click node_compute_api "https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/routes.py"
click node_api_handlers "https://github.com/openstack/nova/tree/master/nova/api/openstack/compute"
click node_compute_core "https://github.com/openstack/nova/blob/master/nova/compute/api.py"
click node_conductor "https://github.com/openstack/nova/blob/master/nova/conductor/manager.py"
click node_scheduler "https://github.com/openstack/nova/blob/master/nova/scheduler/manager.py"
click node_host_manager "https://github.com/openstack/nova/blob/master/nova/scheduler/host_manager.py"
click node_placement_client "https://github.com/openstack/nova/blob/master/nova/scheduler/client/report.py"
click node_compute_service "https://github.com/openstack/nova/blob/master/nova/compute/manager.py"
click node_virt_driver "https://github.com/openstack/nova/blob/master/nova/virt/driver.py"
click node_libvirt "https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py"
click node_vmware "https://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/driver.py"
click node_ironic "https://github.com/openstack/nova/blob/master/nova/virt/ironic/driver.py"
click node_network "https://github.com/openstack/nova/blob/master/nova/network/neutron.py"
click node_volume "https://github.com/openstack/nova/blob/master/nova/volume/cinder.py"
click node_image "https://github.com/openstack/nova/blob/master/nova/image/glance.py"
click node_cyborg "https://github.com/openstack/nova/blob/master/nova/accelerator/cyborg.py"
click node_objects "https://github.com/openstack/nova/blob/master/nova/objects/base.py"
click node_database "https://github.com/openstack/nova/blob/master/nova/db/main/api.py"
click node_rpc "https://github.com/openstack/nova/blob/master/nova/rpc.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_compute_api,node_api_handlers,node_client toneBlue
class node_compute_core,node_conductor,node_compute_service toneAmber
class node_scheduler,node_host_manager,node_placement_client toneMint
class node_virt_driver,node_libvirt,node_vmware,node_ironic,node_network,node_volume,node_image,node_cyborg toneRose
class node_objects,node_database,node_rpc toneIndigo
```

## Components

### API and access

- [Compute API routes](https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/routes.py): `nova/api/openstack/compute/routes.py`
- [Compute handlers](https://github.com/openstack/nova/tree/master/nova/api/openstack/compute): `nova/api/openstack/compute`

### Compute lifecycle

- [Instance operations](https://github.com/openstack/nova/blob/master/nova/compute/api.py): `nova/compute/api.py`
- [Conductor tasks](https://github.com/openstack/nova/blob/master/nova/conductor/manager.py): `nova/conductor/manager.py`
- [Compute service](https://github.com/openstack/nova/blob/master/nova/compute/manager.py): `nova/compute/manager.py`

### Scheduling and placement

- [Host scheduling](https://github.com/openstack/nova/blob/master/nova/scheduler/manager.py): `nova/scheduler/manager.py`
- [Host selection](https://github.com/openstack/nova/blob/master/nova/scheduler/host_manager.py): `nova/scheduler/host_manager.py`
- [Placement client](https://github.com/openstack/nova/blob/master/nova/scheduler/client/report.py): `nova/scheduler/client/report.py`

### Infrastructure integrations

- [Virtualization drivers](https://github.com/openstack/nova/blob/master/nova/virt/driver.py): `nova/virt/driver.py`
- [Libvirt backend](https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py): `nova/virt/libvirt/driver.py`
- [VMware backend](https://github.com/openstack/nova/blob/master/nova/virt/vmwareapi/driver.py): `nova/virt/vmwareapi/driver.py`
- [Bare-metal backend](https://github.com/openstack/nova/blob/master/nova/virt/ironic/driver.py): `nova/virt/ironic/driver.py`
- [Neutron networking](https://github.com/openstack/nova/blob/master/nova/network/neutron.py): `nova/network/neutron.py`
- [Cinder volumes](https://github.com/openstack/nova/blob/master/nova/volume/cinder.py): `nova/volume/cinder.py`
- [Glance images](https://github.com/openstack/nova/blob/master/nova/image/glance.py): `nova/image/glance.py`
- [Accelerator integration](https://github.com/openstack/nova/blob/master/nova/accelerator/cyborg.py): `nova/accelerator/cyborg.py`

### State and messaging

- [Domain objects](https://github.com/openstack/nova/blob/master/nova/objects/base.py): `nova/objects/base.py`
- [Nova database](https://github.com/openstack/nova/blob/master/nova/db/main/api.py): `nova/db/main/api.py`
- [RPC messaging](https://github.com/openstack/nova/blob/master/nova/rpc.py): `nova/rpc.py`

### Other components

- **Cloud client**

## Connections

- Cloud client → Compute API routes: requests compute
- Compute API routes → Compute handlers: routes requests (evidence: `nova/api/openstack/compute/routes.py`)
- Compute handlers → Instance operations: invokes operations (evidence: `nova/api/openstack/compute/services.py`)
- Instance operations → Conductor tasks: delegates tasks (evidence: `nova/compute/api.py`)
- Conductor tasks → Host scheduling: requests scheduling
- Host scheduling → Host selection: selects hosts (evidence: `nova/scheduler/manager.py`)
- Host scheduling → Placement client: reports allocations (evidence: `nova/scheduler/manager.py`)
- Conductor tasks → Compute service: dispatches compute
- Compute service → Virtualization drivers: uses driver interface
- Virtualization drivers → Libvirt backend: implements backend
- Virtualization drivers → VMware backend: implements backend
- Virtualization drivers → Bare-metal backend: implements backend
- Instance operations → Neutron networking: coordinates networking (evidence: `nova/compute/api.py`)
- Instance operations → Cinder volumes: coordinates volumes
- Instance operations → Glance images: uses images (evidence: `nova/compute/api.py`)
- Instance operations → Accelerator integration: integrates accelerators (evidence: `nova/compute/api.py`)
- Instance operations → Domain objects: uses domain objects
- Domain objects → Nova database: persists records (evidence: `nova/objects/service.py`)
- Conductor tasks → RPC messaging: uses messaging (evidence: `nova/conductor/manager.py`)
