15.6. Creating and provisioning a cell

After you deploy the overcloud with a new cell stack, you create and provision the Compute cells.


You must repeat this process for each cell that you create and launch. You can automate the steps in an Ansible playbook. For an example of an Ansible playbook, see the Create the cell and discover Compute nodes section of the OpenStack community documentation. Community documentation is provided as-is and is not officially supported.


  1. Get the IP addresses of the control plane and cell controller.

    $ CTRL_IP=$(openstack server list -f value -c Networks --name overcloud-controller-0 | sed 's/ctlplane=//')
    $ CELL_CTRL_IP=$(openstack server list -f value -c Networks --name cellcontroller-0 | sed 's/ctlplane=//')
  2. Add the cell information to all Controller nodes. This information is used to connect to the cell endpoint from the undercloud. The following example uses the prefix cell1 to specify only the cell systems and exclude the controller systems:

    (undercloud)$ CELL_INTERNALAPI_INFO=$(ssh heat-admin@${CELL_CTRL_IP} \
     egrep cell1.*\.internalapi /etc/hosts)
    (undercloud)$ ansible -i /usr/bin/tripleo-ansible-inventory \
     Controller -b -m lineinfile -a "dest=/etc/hosts line=\"$CELL_INTERNALAPI_INFO\""
  3. Get the message queue endpoint for the controller cell from the transport_url parameter, and the database connection for the controller cell from the database.connection parameter:

    (undercloud)$ CELL_TRANSPORT_URL=$(ssh heat-admin@${CELL_CTRL_IP} \
     sudo crudini --get /var/lib/config-data/nova/etc/nova/nova.conf \
     DEFAULT transport_url)
    (undercloud)$ CELL_MYSQL_VIP=$(ssh heat-admin@${CELL_CTRL_IP} \
     sudo crudini --get /var/lib/config-data/nova/etc/nova/nova.conf \
     database connection | awk -F[@/] '{print $4}'
  4. Log in to one of the global Controller nodes to create the cell:

    $ export CONTAINERCLI='podman'
    $ ssh heat-admin@${CTRL_IP} sudo ${CONTAINERCLI}  \
     exec -i -u root nova_api \
     nova-manage cell_v2 create_cell --name computecell1 \
     --database_connection "{scheme}://{username}:{password}@$CELL_MYSQL_VIP/nova?{query}" \
     --transport-url "$CELL_TRANSPORT_URL"
  5. Check that the cell is created and appears in the cell list.

    $ ssh heat-admin@${CTRL_IP} sudo ${CONTAINERCLI}  \
     exec -i -u root nova_api \
     nova-manage cell_v2 list_cells --verbose
  6. Restart the Compute services on the Controller nodes.

    $ ansible -i /usr/bin/tripleo-ansible-inventory Controller -b -a \
    "systemctl restart tripleo_nova_api tripleo_nova_conductor tripleo_nova_scheduler"
  7. Check that the cell controller services are provisioned.

    (overcloud)$ nova service-list