# Install and configure controller node for Ubuntu

This section describes how to install and configure the Compute service, code-named nova, on the controller node.

## Prerequisites

Before you install and configure the Compute service, you must create databases, service credentials, and API endpoints.

1. To create the databases, complete these steps:

   - Use the database access client to connect to the database server as the `root` user:

         # mysql

   - Create the `nova_api`, `nova`, and `nova_cell0` databases:

         MariaDB [(none)]> CREATE DATABASE nova_api;
         MariaDB [(none)]> CREATE DATABASE nova;
         MariaDB [(none)]> CREATE DATABASE nova_cell0;

   - Grant proper access to the databases:

         MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
           IDENTIFIED BY 'NOVA_DBPASS';
         MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
           IDENTIFIED BY 'NOVA_DBPASS';

         MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
           IDENTIFIED BY 'NOVA_DBPASS';
         MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
           IDENTIFIED BY 'NOVA_DBPASS';

         MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
           IDENTIFIED BY 'NOVA_DBPASS';
         MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
           IDENTIFIED BY 'NOVA_DBPASS';

     Replace `NOVA_DBPASS` with a suitable password.

   - Exit the database access client.

2. Source the `admin` credentials to gain access to admin-only CLI commands:

       $ . admin-openrc

3. Create the Compute service credentials:

   - Create the `nova` user:

         $ openstack user create --domain default --password-prompt nova

         User Password:
         Repeat User Password:
         +---------------------+----------------------------------+
         | Field               | Value                            |
         +---------------------+----------------------------------+
         | domain_id           | default                          |
         | enabled             | True                             |
         | id                  | 8a7dbf5279404537b1c7b86c033620fe |
         | name                | nova                             |
         | options             | {}                               |
         | password_expires_at | None                             |
         +---------------------+----------------------------------+

   - Add the `admin` role to the `nova` user:

         $ openstack role add --project service --user nova admin

     Note

     This command provides no output.

   - Create the `nova` service entity:

         $ openstack service create --name nova \
           --description "OpenStack Compute" compute

         +-------------+----------------------------------+
         | Field       | Value                            |
         +-------------+----------------------------------+
         | description | OpenStack Compute                |
         | enabled     | True                             |
         | id          | 060d59eac51b4594815603d75a00aba2 |
         | name        | nova                             |
         | type        | compute                          |
         +-------------+----------------------------------+

4. Create the Compute API service endpoints:

       $ openstack endpoint create --region RegionOne \
         compute public http://controller:8774/v2.1

       +--------------+-------------------------------------------+
       | Field        | Value                                     |
       +--------------+-------------------------------------------+
       | enabled      | True                                      |
       | id           | 3c1caa473bfe4390a11e7177894bcc7b          |
       | interface    | public                                    |
       | region       | RegionOne                                 |
       | region_id    | RegionOne                                 |
       | service_id   | 060d59eac51b4594815603d75a00aba2          |
       | service_name | nova                                      |
       | service_type | compute                                   |
       | url          | http://controller:8774/v2.1               |
       +--------------+-------------------------------------------+

       $ openstack endpoint create --region RegionOne \
         compute internal http://controller:8774/v2.1

       +--------------+-------------------------------------------+
       | Field        | Value                                     |
       +--------------+-------------------------------------------+
       | enabled      | True                                      |
       | id           | e3c918de680746a586eac1f2d9bc10ab          |
       | interface    | internal                                  |
       | region       | RegionOne                                 |
       | region_id    | RegionOne                                 |
       | service_id   | 060d59eac51b4594815603d75a00aba2          |
       | service_name | nova                                      |
       | service_type | compute                                   |
       | url          | http://controller:8774/v2.1               |
       +--------------+-------------------------------------------+

       $ openstack endpoint create --region RegionOne \
         compute admin http://controller:8774/v2.1

       +--------------+-------------------------------------------+
       | Field        | Value                                     |
       +--------------+-------------------------------------------+
       | enabled      | True                                      |
       | id           | 38f7af91666a47cfb97b4dc790b94424          |
       | interface    | admin                                     |
       | region       | RegionOne                                 |
       | region_id    | RegionOne                                 |
       | service_id   | 060d59eac51b4594815603d75a00aba2          |
       | service_name | nova                                      |
       | service_type | compute                                   |
       | url          | http://controller:8774/v2.1               |
       +--------------+-------------------------------------------+

5. Install Placement service and configure user and endpoints:

   - Refer to the Placement service install guide for more information.

## Install and configure components

Note

Default configuration files vary by distribution. You might need to add these sections and options rather than modifying existing sections and options. Also, an ellipsis (`...`) in the configuration snippets indicates potential default configuration options that you should retain.

1. Install the packages:

       # apt install nova-api nova-conductor nova-novncproxy nova-scheduler

2. Edit the `/etc/nova/nova.conf` file and complete the following actions:

   - In the `[api_database]` and `[database]` sections, configure database access:

         [api_database]
         # ...
         connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

         [database]
         # ...
         connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

     Replace `NOVA_DBPASS` with the password you chose for the Compute databases.

   - In the `[DEFAULT]` section, configure `RabbitMQ` message queue access (RabbitMQ should be already installed and configured):

         [DEFAULT]
         # ...
         transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/

     Replace `RABBIT_PASS` with the password you chose for the `openstack` account in `RabbitMQ`.

   - In the `[keystone_authtoken]` section, configure Identity service access:

         [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

     Replace `NOVA_PASS` with the password you chose for the `nova` user in the Identity service.

     Note

     Comment out or remove any other options in the `[keystone_authtoken]` section.

   - In the `[service_user]` section, configure service user tokens:

         [service_user]
         send_service_user_token = true
         auth_url = https://controller/identity
         auth_type = password
         project_domain_name = Default
         project_name = service
         user_domain_name = Default
         username = nova
         password = NOVA_PASS

     Replace `NOVA_PASS` with the password you chose for the `nova` user in the Identity service.

   - In the `[DEFAULT]` section, configure the `my_ip` option to use the management interface IP address of the controller node:

         [DEFAULT]
         # ...
         my_ip = 10.0.0.11

   - Configure the `[neutron]` section of /etc/nova/nova.conf. Refer to the Networking service install guide for more information.

   - In the `[vnc]` section, configure the VNC proxy to use the management interface IP address of the controller node:

         [vnc]
         enabled = true
         # ...
         server_listen = $my_ip
         server_proxyclient_address = $my_ip

   - In the `[glance]` section, configure the location of the Image service API:

         [glance]
         # ...
         api_servers = http://controller:9292

   - In the `[oslo_concurrency]` section, configure the lock path:

         [oslo_concurrency]
         # ...
         lock_path = /var/lib/nova/tmp

   - Due to a packaging bug, remove the `log_dir` option from the `[DEFAULT]` section.

   - In the `[placement]` section, configure access to the Placement service:

         [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

     Replace `PLACEMENT_PASS` with the password you choose for the `placement` service user created when installing Placement. Comment out or remove any other options in the `[placement]` section.

3. Populate the `nova-api` database:

       # su -s /bin/sh -c "nova-manage api_db sync" nova

   Note

   Ignore any deprecation messages in this output.

4. Register the `cell0` database:

       # su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

5. Create the `cell1` cell:

       # su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

6. Populate the nova database:

       # su -s /bin/sh -c "nova-manage db sync" nova

7. Verify nova cell0 and cell1 are registered correctly:

       # su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
       +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
       |  Name |                 UUID                 |                   Transport URL                    |                     Database Connection                      | Disabled |
       +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
       | cell0 | 00000000-0000-0000-0000-000000000000 |                       none:/                       | mysql+pymysql://nova:****@controller/nova_cell0?charset=utf8 |  False   |
       | cell1 | f690f4fd-2bc5-4f15-8145-db561a7b9d3d | rabbit://openstack:****@controller:5672/nova_cell1 | mysql+pymysql://nova:****@controller/nova_cell1?charset=utf8 |  False   |
       +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+

## Finalize installation

- Restart the Compute services:

      # systemctl restart nova-api
      # systemctl restart nova-scheduler
      # systemctl restart nova-conductor
      # systemctl restart nova-novncproxy

this page last updated: 2026-08-20 01:33:50

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.

found an error? report a bug