Compute service on Controller node
https://docs.openstack.org/nova/2025.1/install/controller-install-ubuntu.html
The compute service in Openstack is called Nova. It runs on both the controller node(s) and the compute nodes (hypervisors)
Install and configure Nova on controller
Prepare database
sudo mysql
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
Create service user, role and service
. admin-openrc
openstack user create --domain default --password-prompt nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute
Create service endpoints
openstack endpoint create --region <REGION> compute public http://<FQDN>:8774/v2.1
openstack endpoint create --region <REGION> compute admin http://<FQDN>:8774/v2.1
openstack endpoint create --region <REGION> compute internal http://<FQDN>:8774/v2.1
Install packages and configure
sudo apt install nova-api nova-conductor nova-novncproxy nova-scheduler
Edit the config file with the following
/etc/nova/nova.conf
[DEFAULT]
log_dir = /var/log/nova
lock_path = /var/lock/nova
state_path = /var/lib/nova
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
my_ip = 10.0.0.11
[api]
auth_strategy = keystone
[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[cinder]
[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[glance]
api_servers = http://controller:9292
[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = <REGION>
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = PLACEMENT_PASS
[service_user]
send_service_user_token = true
auth_url = http://controller:5000/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
[cells]
enable = False
[os_region_name]
openstack =
Note that we also include configuration for the
neutronnetworking service which is not yet installed.
Populate databases
Populate nova-api database
sudo nova-manage api_db sync
Register the cell0 database
sudo nova-manage cell_v2 map_cell0
Create the cell1 cell
sudo nova-manage cell_v2 create_cell --name=cell1 --verbose
Populate nova database
sudo nova-manage db sync
This last command gave an error, this happened when I tried to use a config file with only the provided details above. When I instead used the default config file edited with the details above things worked..
Verify nova cell0 and cell1 are registered
sudo nova-manage cell_v2 list_cells
Restart services
Restart services
sudo service nova-api restart
sudo service nova-scheduler restart
sudo service nova-conductor restart
sudo service nova-novncproxy restart
Continue with compute nodes
At this point the controller portion of the Nova service should be good
Update cells database
Run a discovery of new compute hosts
When adding a new compute host we might face that the host is missing as a Hypervisor even though it's connected to and listed as a compute host in the controller

The hypervisor list is built from the cells database and needs to be updated when a host is to be added
We could also configure an automatic discovery on a given interval in the
/etc/nova/nova.conffile Set the following:ini [scheduler] discover_hosts_in_cells_interval = 300
To run the discovery we'll run the following nova-manage command on the controller
sudo nova-manage cell_v2 discover_hosts --verbose

