How to Install Tripleo(Openstack on Openstack) UnderCloud on CentOS 7

Undercloud is a single node OpenStack installation deployed either in a Virtual machine or in bare metal server. The objective of undercloud is to install, test, manage and update its overcloud servers (Controller, Compute & Storage nodes). In Red Hat terminology undercloud is known as “Director“. Undercloud basically contains all the images that is required to deployed Overcloud Controller, Computes, Swift and Storage.

Overcloud is the actual functional cloud for any organization where all the Virtual Machines are created on compute nodes and handle all the workloads. In other words we can say overcloud provides the openstack services like Nova, Keystone , Horizon, Neutron, cinder, Glance, Heat & Ceilometer Services.

In this article we will demonstrate how to install TripleO undercloud or Director on CentOS 7 VM.

Following are the minimum system requirements for undercloud:

  • 16 GB RAM
  • 1 Quad Core CPU
  • 80 GB disk Space
  • 2 Nics
  • CentOS 7.x / RHEL 7.x

Below are my lab setup details:

  • CentOS 7 VM (Minimal Installation) is hosted inside the KVM hypervisor.
  • Two Interfaces are attached to VM (Provisioning & NAT)
  • Provisioning Network:
  • NAT Network:
  • IP Address on eth0 is and IP Address on eth1 is

To successfully install undercloud inside a virtual machine, you have to enabled Nested Virtualization in KVM hypervisor, if you not sure how to enable it, refer the below:

Let’s jump into the CentOS 7 VM and follow the below Steps:

Step:1) Set the Hostname and update /etc/hosts file

Run the hostnamectl command to set the hostname,

[root@localhost ~]# hostnamectl set-hostname ""
[root@localhost ~]# exec bash
[root@undercloud ~]#

Add the following entries using the beneath command:

[root@undercloud ~]# echo "" >> /etc/hosts

Update your system using below yum command and reboot once.

[root@undercloud ~]# yum update -y && reboot

Step:2) Create non-root user (stack)

Run the beneath commands one after the another to create stack user and assign sudo rights to it. We will install undercloud using stack user only.

[root@undercloud ~]# useradd stack
[root@undercloud ~]# echo "enter_password_here" | passwd --stdin stack
[root@undercloud ~]# echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack
stack ALL=(root) NOPASSWD:ALL
[root@undercloud ~]# chmod 0440 /etc/sudoers.d/stack
[root@undercloud ~]# su - stack
[stack@undercloud ~]$

Step:3) Enable required repositories for undercloud

Execute the below commands to enable and configured required repositories for undercloud installation.

[stack@undercloud ~]$ wget
[stack@undercloud ~]$ rpm -ivh python2-tripleo-repos-0.0.1-0.20190328140951.a7bc8dc.el7.noarch.rpm
[stack@undercloud ~]$ sudo -E tripleo-repos -b rocky current
[stack@undercloud ~]$ sudo yum -y install yum-plugin-priorities
[stack@undercloud ~]$ sudo yum install epel-release -y

Note : We can check the latest version of python2-tripleo-repos from RDO repository

Step:4) Install TripleO CLI package using yum command

[stack@undercloud ~]$ sudo yum install python-tripleoclient -y

Step:5) Copy & edit “undercloud.conf” sample file that suits to your env

[stack@undercloud ~]$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf

Now edit ‘undercloud.conf‘ that suits to your environment, In my case I am adding the following content under “Default” Section

[stack@undercloud ~]$ vi undercloud.conf
local_ip =
undercloud_public_vip =
undercloud_admin_vip =
local_interface = eth1
masquerade_network =
dhcp_start =
dhcp_end =
network_cidr =
network_gateway =
inspection_iprange =,
generate_service_certificate = true
certificate_generation_ca = local

Save and exit the file.

Step:6) Start undercloud installation using openstack command

Now start undercloud installation using below openstack command,

[stack@undercloud ~]$ openstack undercloud install

Once the installation is completed successfully, we will get the output something like below


Verify the OpenStack Service list

[stack@undercloud ~]$ source stackrc
(undercloud) [stack@undercloud ~]$ openstack service list
| ID                               | Name             | Type                    |
| 19f1261745004b31bc77dcb17a5ed4f5 | heat-cfn         | cloudformation          |
| 1bdd5dfbc36f444ebe62580d71f1a7ec | heat             | orchestration           |
| 2b39423f188b412d85bed43f112b35d7 | zaqar-websocket  | messaging-websocket     |
| 46f64d65be874718a1b2c123f588371b | keystone         | identity                |
| 605261da43d64395b72acc5309a22096 | mistral          | workflowv2              |
| 6f50fb704b224c1abc3c2a1a163eb73a | neutron          | network                 |
| 7110b7d7711a4aa1af6a3c13566be28f | zaqar            | messaging               |
| 7e41468745724ecfa8ed339137e8b700 | placement        | placement               |
| 853efa8a8acf403b827617725c3b7322 | ironic-inspector | baremetal-introspection |
| a5522e5df77343b99a0e47812323a17b | swift            | object-store            |
| b9bbb1a771704b57a0833d738bfb86e5 | glance           | image                   |
| d50fdfa25fb64c3e865c172754452ab1 | ironic           | baremetal               |
| e2ea283690c742d3a98bd1eae6f9b830 | nova             | compute                 |
(undercloud) [stack@undercloud ~]$

This confirms that undercloud has been installed successfully. In the next article we will demonstrate how to import overcloud images in under cloud and how to create inventory file for overcloud servers and then we will see how we can deploy overcloud servers via undercloud.

Read More on: How to deploy TripleO Overcloud (Controller , Compute) on CentOS 7 VMs

In case this article helps you to understand how to install undercloud on CentOS 7 VM, please do share your feedback and comments.

Share on:

I am a Cloud Consultant with over 15 years of experience in Linux, Kubernetes, cloud technologies (AWS, Azure, OpenStack), automation (Ansible, Terraform), and DevOps. I hold certifications like RHCA, CKA, CKAD, CKS, AWS, and Azure.

43 thoughts on “How to Install Tripleo(Openstack on Openstack) UnderCloud on CentOS 7”

  1. For Step Number 3 :
    Change name and baseURL for the repository with the following :

    It worked for me ! thanks

  2. Hi Pradeep,
    I run into this issue
    [stack@undercloud ~]$ sudo -E tripleo-repos -b rocky current
    WARNING: –centos-mirror was deprecated in favour of –mirror
    Loaded plugins: fastestmirror, langpacks, priorities
    Loading mirror speeds from cached hostfile
    * base:
    * extras:
    * updates:
    Package yum-plugin-priorities-1.1.31-50.el7.noarch already installed and latest version
    Nothing to do
    Traceback (most recent call last):
    File “/bin/tripleo-repos”, line 10, in
    File “/usr/lib/python2.7/site-packages/tripleo_repos/”, line 349, in main
    _install_repos(args, base_path)
    File “/usr/lib/python2.7/site-packages/tripleo_repos/”, line 287, in _install_repos
    content = _get_repo(base_path + ‘current/delorean.repo’, args)
    File “/usr/lib/python2.7/site-packages/tripleo_repos/”, line 143, in _get_repo
    r = requests.get(path)
    File “/usr/lib/python2.7/site-packages/requests/”, line 68, in get
    return request(‘get’, url, **kwargs)
    File “/usr/lib/python2.7/site-packages/requests/”, line 50, in request
    response = session.request(method=method, url=url, **kwargs)
    File “/usr/lib/python2.7/site-packages/requests/”, line 464, in request
    resp = self.send(prep, **send_kwargs)
    File “/usr/lib/python2.7/site-packages/requests/”, line 576, in send
    r = adapter.send(request, **kwargs)
    File “/usr/lib/python2.7/site-packages/requests/”, line 431, in send
    raise SSLError(e, request=request)
    requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)

    Since this is just a Lab test to install openstack undercloud/overcloud process, Is there anyway I can make the SSL verify =False to bypass this error? Please advise. Thanks

    • Hi , I would suggest you to update your system first(Director/Undercloud), using yum update command and reboot it and then give a try of above command

  3. Hi Pradeep,

    I am facing issue in the last step. Can you please help

    #openstack undercloud install
    Exception: Error inspecting image: docker://
    time=”2019-05-29T16:59:22+05:30″ level=fatal msg=”pinging docker registry returned: Get x509: certificate is valid for *,, not”

    Traceback (most recent call last):
    File “/usr/lib/python2.7/site-packages/tripleoclient/v1/”, line 1159, in _standalone_deploy
    File “/usr/lib/python2.7/site-packages/tripleoclient/v1/”, line 759, in _deploy_tripleo_heat_templates
    self._prepare_container_images(env, roles_data)
    File “/usr/lib/python2.7/site-packages/tripleoclient/v1/”, line 706, in _prepare_container_images
    env, roles_data, dry_run=True)
    File “/usr/lib/python2.7/site-packages/tripleo_common/image/”, line 178, in container_images_prepare_multi
    File “/usr/lib/python2.7/site-packages/tripleo_common/image/”, line 273, in container_images_prepare
    images, tag_from_label)
    File “/usr/lib/python2.7/site-packages/tripleo_common/image/”, line 452, in discover_image_tags
    File “/usr/lib/python2.7/site-packages/concurrent/futures/”, line 605, in result_iterator
    yield future.result()
    File “/usr/lib/python2.7/site-packages/concurrent/futures/”, line 429, in result
    return self.__get_result()
    File “/usr/lib/python2.7/site-packages/concurrent/futures/”, line 62, in run
    result = self.fn(*self.args, **self.kwargs)
    File “/usr/lib/python2.7/site-packages/tripleo_common/image/”, line 556, in discover_tag_from_inspect
    i = DockerImageUploader._inspect(image_url.geturl(), insecure)
    File “/usr/lib/python2.7/site-packages/tenacity/”, line 241, in wrapped_f
    return, *args, **kw)
    File “/usr/lib/python2.7/site-packages/tenacity/”, line 330, in call
    File “/usr/lib/python2.7/site-packages/tenacity/”, line 297, in iter
    raise retry_exc.reraise()
    File “/usr/lib/python2.7/site-packages/tenacity/”, line 136, in reraise
    raise self.last_attempt.result()
    File “/usr/lib/python2.7/site-packages/concurrent/futures/”, line 422, in result
    return self.__get_result()
    File “/usr/lib/python2.7/site-packages/tenacity/”, line 333, in call
    result = fn(*args, **kwargs)
    File “/usr/lib/python2.7/site-packages/tripleo_common/image/”, line 383, in _inspect
    (image, err))
    ImageUploaderException: Error inspecting image: docker://
    time=”2019-05-29T16:59:22+05:30″ level=fatal msg=”pinging docker registry returned: Get x509: certificate is valid for *,, not”

  4. Hi , after successfully installation of undercloud.i m not able to see the openstack status list commant while in openstack service list is visble.can you expalin why ????

  5. Hi Pradeep,
    For (TripleOdeployment Laptop Configuration -corei5/32GBRam/1 TB drive is that ok ?), Installed on centos7(Hostname is kvm-hypervisor) & KVM.
    But unable to configure network- Provisioning Network & Nat network)

    Can you please help???

    • Hi Priya,

      Create an xml file of external and provisioning network and use following commands enable and start the network
      # virsh net-define /tmp/provisioning.xml
      # virsh net-autostart provisioning
      # virsh net-start provisioning

  6. Hi Pradeep,

    I am facing an error “Restart ryslogd service after logging conf change”.

    TASK [Restart rsyslogd service after logging conf change] ******************************************************
    fatal: [undercloud]: FAILED! => {“msg”: “The conditional check ‘logconfig|changed’ failed. The error was: template error while templating string: no filter named ‘changed’. String: {% if logconfig|changed %} True {% else %} False {% endif %}\n\nThe error appears to be in ‘/home/stack/undercloud-ansible-y3VB7b/Undercloud/host_prep_tasks.yaml’: line 657, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n register: logconfig\n – name: Restart rsyslogd service after logging conf change\n ^ here\n”}

    NO MORE HOSTS LEFT *********************************************************************************************

    PLAY RECAP *****************************************************************************************************
    undercloud : ok=184 changed=53 unreachable=0 failed=1 skipped=164 rescued=0 ignored=1

    Nikhil Kapoor

  7. I also faced below error, and I found the this is due to syntax error in YAML. I have made the changes and it work fine for me.
    Change “- logconfig|changed” to “- logconfig is changed” in below files

    “msg”: “The conditional check ‘logconfig|changed’ failed

    • /usr/share/openstack-tripleo-heat-templates/docker/services/swift-proxy.yaml

      >> Change “is” with “|” test : cause: it’s due to the | test operator being deprecated in Ansible 2.5 and removed in 2.9 (I’m using 2.9 here). 2.5 seems to work ok.

      Apart from that I also applied following fix:

  8. Hello Pardeep, thanks for you updating this post!
    Would you mind to help on this error?
    [stack@undercloud ~]$ openstack undercloud install

    Exception: Deployment failed
    Traceback (most recent call last):
    File “/usr/lib/python2.7/site-packages/tripleoclient/v1/”, line 1323, in _standalone_deploy
    raise exceptions.DeploymentError(‘Deployment failed’)
    DeploymentError: Deployment failed
    Install artifact is located at /home/stack/undercloud-install-20200412122510.tar.bzip2


    Deployment Failed!

    ERROR: Heat log files: /var/log/heat-launcher/undercloud_deploy-ed5RrO


    reset failed: reset: standard error: Inappropriate ioctl for device

    Many thanks!



Leave a Comment