Chapter 2. Customizing the dashboard


By default, the Red Hat OpenStack Platform (RHOSP) dashboard (horizon) uses the Red Hat Common User Experience (RCUE) theme, which is stored inside the horizon container. But you can create your theme based on this RCUE theme and change the following dashboard elements:

  • Logo
  • Site colors
  • Stylesheets
  • HTML title
  • Site branding link
  • Help URL
Note

To ensure continued support for modified RHOSP container images, the resulting images must comply with the Red Hat Container Support Policy.

2.1. Obtaining the horizon container image

To obtain a copy of the horizon container image, pull the image either into the undercloud or a separate client system that is running podman.

Procedure

  • Pull the horizon container image:

    $ sudo podman pull registry.redhat.io/rhosp-rhel9/openstack-horizon:17.1
    Copy to Clipboard Toggle word wrap

    You can use this image as a basis for a modified image.

2.2. Obtaining the RCUE theme

The horizon container image uses the Red Hat Common User Experience (RCUE) theme by default. You can use this theme as a basis for your own theme and extract a copy from the container image.

Procedure

  1. Create a directory for your theme:

    $ mkdir ~/horizon-themes
    $ cd ~/horizon-themes
    Copy to Clipboard Toggle word wrap
  2. Start a container that executes a null loop. For example, run the following command:

    $ sudo podman run --rm -d --name horizon-temp registry.redhat.io/rhosp-rhel9/openstack-horizon /usr/bin/sleep infinity
    Copy to Clipboard Toggle word wrap
  3. Copy the RCUE theme from the container to your local directory:

    $ sudo podman cp horizon-temp:/usr/share/openstack-dashboard/openstack_dashboard/themes/rcue .
    Copy to Clipboard Toggle word wrap
  4. Terminate the container:

    $ sudo podman kill horizon-temp
    Copy to Clipboard Toggle word wrap

    Result: You now have a local copy of the RCUE theme.

2.3. Creating your own theme based on RCUE

To use the Red Hat Common User Experience (RCUE) theme as a basis, copy the entire RCUE theme directory rcue to a new location. This procedure uses mytheme as an example name.

Procedure

  • Copy the theme:

    $ cp -r rcue mytheme
    Copy to Clipboard Toggle word wrap

To change the colors, graphics, fonts, and other elements of a theme, edit the files in mytheme. When you edit this theme, check for all instances of rcue including paths, files, and directories to ensure that you change them to the new mytheme name.

To enable your theme in the dashboard container, you must create a file to override the AVAILABLE_THEMES parameter.

Procedure

  1. Create a new file called _12_mytheme_theme.py in the horizon-themes directory and add the following content:

    AVAILABLE_THEMES = [('mytheme', 'My Custom Theme', 'themes/mytheme')]
    Copy to Clipboard Toggle word wrap

    The 12 in the file name ensures this file is loaded after the default RCUE theme configuration file, which uses 11, to override its settings.

  2. Optional: You can also set custom parameters in the _12_mytheme_theme.py file. Use the following examples as a guide:

    SITE_BRANDING

    Set the HTML title that appears at the top of the browser window.

    SITE_BRANDING = "Example, Inc. Cloud"
    Copy to Clipboard Toggle word wrap
    SITE_BRANDING_LINK

    Changes the hyperlink of the theme logo, which normally redirects to horizon:user_home by default.

    SITE_BRANDING_LINK = "http://example.com"
    Copy to Clipboard Toggle word wrap

2.5. Generating a modified horizon image

When your custom theme is ready, you can create a new container image that uses your theme.

Procedure

  1. Use a Dockerfile to generate a new container image using the original horizon image as a basis, as shown in the following example:

    FROM registry.redhat.io/rhosp-rhel9/openstack-horizon
    MAINTAINER Acme
    LABEL name="rhosp-rhel9/openstack-horizon-mytheme" vendor="Acme" version="0" release="1"
    COPY mytheme /usr/share/openstack-dashboard/openstack_dashboard/themes/mytheme
    COPY _12_mytheme_theme.py /etc/openstack-dashboard/local_settings.d/_12_mytheme_theme.py
    RUN sudo chown apache:apache /etc/openstack-dashboard/local_settings.d/_12_mytheme_theme.py
    Copy to Clipboard Toggle word wrap
  2. Save this file in your horizon-themes directory as Dockerfile.
  3. Use the Dockerfile to generate the new image:

    $ sudo podman build . -t "172.24.10.10:8787/rhosp-rhel9/openstack-horizon:0-5" --log-level debug
    Copy to Clipboard Toggle word wrap

    The -t option names and tags the resulting image. It uses the following syntax:

    [LOCATION]/[NAME]:[TAG]
    Copy to Clipboard Toggle word wrap
    LOCATION
    This is usually the location of the container registry that the overcloud eventually uses to pull images. In this instance, you push this image to the container registry of the undercloud, so set this to the undercloud IP and port.
    NAME
    For consistency, this is usually the same name as the original container image followed by the name of your theme. In this instance, it is rhosp-rhel9/openstack-horizon-mytheme.
    TAG
    The tag for the image. Red Hat uses the version and release labels as a basis for this tag. If you generate a new version of this image, increment the release, for example,0-2.
  4. Push the image to the container registry of the undercloud:

    $ sudo openstack tripleo container image push --local 172.24.10.10:8787/rhosp-rhel9/openstack-horizon:0-5
    Copy to Clipboard Toggle word wrap
  5. Verify that the image has uploaded to the local registry:

      [stack@director horizon-themes]$ curl http://172.24.10.10:8787/v2/_catalog | jq .repositories[] | grep -i hori
      "rhosp-rhel9/openstack-horizon"
      [stack@director horizon-themes]$
    
      [stack@director ~]$ sudo openstack tripleo container image list | grep hor
      | docker://director.ctlplane.localdomain:8787/rhosp-rhel9/openstack-horizon:16.0-84
      | docker://director.ctlplane.localdomain:8787/rhosp-rhel9/openstack-horizon:0-5  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,Uploaded
      [stack@director ~]$
    Copy to Clipboard Toggle word wrap
Important

If you update or upgrade Red Hat OpenStack Platform, you must reapply the theme to the new horizon image and push a new version of the modified image to the undercloud.

To use the container image that you modified with your overcloud deployment, edit the environment file that contains the list of container image locations. This environment file is usually named overcloud-images.yaml.

Procedure

  1. Edit the DockerHorizonConfigImage and DockerHorizonImage parameters to point to your modified container image:

    parameter_defaults:
      ...
      ContainerHorizonConfigImage: 192.168.24.1:8787/rhosp-rhel9/openstack-horizon-mytheme:0-1
      ContainerHorizonImage: 192.168.24.1:8787/rhosp-rhel9/openstack-horizon-mytheme:0-1
      ...
    Copy to Clipboard Toggle word wrap
  2. Save this new version of the overcloud-images.yaml file.

2.7. Editing puppet parameters

Director provides a set of dashboard parameters that you can modify with environment files.

Procedure

  • Use the ExtraConfig parameter to set Puppet hieradata. For example, the default help URL points to https://access.redhat.com/documentation/en/red-hat-openstack-platform. To modify this URL, use the following environment file content and replace the URL:

    parameter_defaults:
      ExtraConfig:
        horizon::help_url: "http://openstack.example.com"
    Copy to Clipboard Toggle word wrap

Additional resources

You can customize the list of available share protocols in the Manila UI plugin for OpenStack Dashboard (horizon) by using the ExtraConfig parameter in a custom environment file. Modify the ExtraConfig parameter to integrate the puppet parameter that you can use to customize the dashboard options for the Shared File Systems service (manila).

Procedure

  1. Log in to the undercloud host as the stack user.
  2. Source the stackrc undercloud credentials file:

    $ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. Create or open a YAML environment file to configure the share protocols that you want to be available to cloud users in the dashboard :

    Example

    $ vi /home/stack/templates/<share_protocols>.yaml
    Copy to Clipboard Toggle word wrap
    • Replace <share_protocols> with the name of your file.
  4. Configure the puppet parameter that you can use to customize the options for the Shared File Systems service:

    parameter_defaults:
      ControllerExtraConfig:
        horizon::dashboards::manila::manila_options:
    Copy to Clipboard Toggle word wrap
    Note

    If you use a custom role, use the [role_name]ExtraConfig parameter instead of the ControllerExtraConfig parameter. Replace [role_name] with the name of your custom role.

  5. Configure the list of enabled_share_protocols with the protocols you want to use, for example, the CephFS protocol:

    parameter_defaults:
      ControllerExtraConfig:
        horizon::dashboards::manila::manila_options:
          enabled_share_protocols: ['CEPHFS']
    Copy to Clipboard Toggle word wrap
  6. Add your <share_protocols>.yaml file to the stack with your other environment files, and then deploy the overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
    -e [your environment files] \
    -e /home/stack/templates/<share_protocols>.yaml
    Copy to Clipboard Toggle word wrap

Procedure

  • To deploy the overcloud with your dashboard customizations, include the following environment files in the openstack overcloud deploy command:

    • The environment file with your modified container image locations.
    • The environment file with additional dashboard modifications.
    • Any other environment files that are relevant to your overcloud configuration.

      $ openstack overcloud deploy --templates \
          -e /home/stack/templates/overcloud-images.yaml \
          -e /home/stack/templates/help_url.yaml \
          [OTHER OPTIONS]
      Copy to Clipboard Toggle word wrap
Back to top
Red Hat logoGithubredditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust. Explore our recent updates.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Theme

© 2025 Red Hat