# OpenStack UI Plugin

### Overview

Integration with the Openstack interface is our second plugin alongside the oVirt/RHV virtualization family. Thanks to it, you can perform most of the basic operations without logging into the Storware Backup & Recovery dashboard.

After installation (which is described at the end of this article) you will see a new tab "Backup & Recovery" in the OpenStack menu. This consists of several sub-tabs that allow you to perform basic actions such as backup, restore or create a new schedule.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-bf23fa59d42bf4e903fc98cea06d0e3ad1aefa63%2Fintegration-plugins-openstack-menu.png?alt=media)

#### Dashboard

Divided into a few sections, it makes it possible to view and set the most vital options related to management, monitoring, and reporting.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-94d5eac1d231fd3c6c96832a972b72d6cb6d0ee0%2Fintegration-plugins-openstack-dashboard.png?alt=media)

#### Reporting

Reporting allow users to view statistics, especially for backup and restore tasks. They also provide the possibility to view what has happened lately in the Storware Backup & Recovery environment.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-1eb6701d1ec8d1de00c6f983326404bc52e4b3cc%2Fintegration-plugins-openstack-reporting.png?alt=media)

### Virtual Environments

#### Instances

This tab shows all inventoried instances in your OpenStack environment.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-244965fd883553c8846e8b878c9d3ad688ca1ff2%2Fintegration-plugins-openstack-virtual-environments.png?alt=media)

Besides, you can also perform basic backup operations.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-c3b2d26dd7a0fa00f4cd69ba4060355b690c9513%2Fintegration-plugins-openstack-virtual-environments-backup.png?alt=media)

#### Backup SLAs

Our plugin also allows you to create or manage backup policies

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-90764612821c973fc7419f08a6d3497501f2eb74%2Fintegration-plugins-openstack-backup-sla-policies.png?alt=media)

and schedules.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-81d7a6b4e704693297dc451d4577d12c8e1f7c2f%2Fintegration-plugins-openstack-backup-sla-schedules.png?alt=media)

#### Mounted Backups

Finally, you can also browse your mounted backups from the OpenStack dashboard. You only need to enter the backup details using the menu on the right.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-74da77d5574b2fd759ce1daa8c0394c401decc43%2Fintegration-plugins-openstack-mounted-backups.png?alt=media)

From here we can see the basic information about the backup and start browsing the files using the "Browse" button on the right.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-64c0494b98b4d705a6d5d9721c654d8bc43562a7%2Fintegration-plugins-openstack-mounted-backups-1.png?alt=media)

Just select a folder or file and then click on the "download selected" button to have the files on your computer.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-7d145cb27d4c650c6fad7a62cc4052516e63abe0%2Fintegration-plugins-openstack-mounted-backups-2.png?alt=media)

### Task Console

Basic information about current tasks performed by Storware Backup & Recovery.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-a07e2170c9a9ae9438c296960beac994a265dac2%2Fintegration-plugins-openstack-task-console.png?alt=media)

### Settings

#### Mailing

It allows you to create a mailing list that can be used for sending group report e-mails.

![](https://3557270342-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2FOE03dnjP5f5aF1buzl%2Fuploads%2Fgit-blob-8b996959bf1b57a3308340503f4c191bb4643848%2Fintegration-plugins-openstack-mailing.png?alt=media)

## OpenStack general integration setup

{% hint style="info" %}
You can find minimum requirements for OpenStack UI Plugin in [Support Matrix](https://docs.storware.eu/70/overview/support-matrix#integration-plugins)
{% endhint %}

You can find the add-on in the [GitHub repository](https://github.com/Storware/openstack-horizon-ui-vprotect-extensions). Extract the provided archive onto your Horizon host and execute `python install.py STORWARE_API_URL USER PASSWORD`

**Example:** `python install.py http://localhost:8080/api admin vprotect`.

{% hint style="info" %}
**Note:** you need to restart your Horizon HTTP server after this
{% endhint %}

The above-mentioned script will copy the plug-in files to the following folders:

* `/usr/share/openstack-dashboard/openstack_dashboard/dashboards/vprotect` - plugin files
* `/usr/share/openstack-dashboard/openstack_dashboard/enabled` - file to enable the plugin

In order to **uninstall** it, remove the `vprotect` subfolder and `enabled/_50_vprotect.py` file and restart your Horizon HTTP server.

### Integrate Storware Backup & Recovery dashboard plugin to OpenStack (LXC)

**Requirements:**

* git, python3-yaml packages
* internet connection

1. Check the name of the horizon container:

   ```
   lxc-ls -f | grep horizon

   example:

   [root@aio1 ~]# lxc-ls -f | grep horizon  aio1_horizon_container-b2daccaa RUNNING 1 onboot, openstack 10.255.255.213, 172.29.239.229 - false
   ```
2. Enter horizon container:

   ```
   [root@aio1 ~]# lxc-attach aio1_horizon_container-b2daccaa
   ```
3. Install requirements packages:

   ```
   root@aio1-horizon-container-b2daccaa:~# apt install python3-yaml git -y
   ```
4. Clone from github installations files:

   ```
   root@aio1-horizon-container-b2daccaa:~# git clone https://github.com/Storware/openstack-horizon-ui-vprotect-extensions
   ```
5. Change owner of the plugin directory to horizon:horizon

   ```
   root@aio1-horizon-container-b2daccaa:~# chown -R horizon:horizon openstack-horizon-ui-vprotect-extensions
   ```
6. Enter plugin directory:

   ```
   root@aio1-horizon-container-b2daccaa:~# cd openstack-horizon-ui-vprotect-extensions
   ```
7. Optionally you can ping Storware Backup & Recovery server by ping

   ```
   root@aio1-horizon-container-b2daccaa:~# ping storware-server-IP-ADDRESS
   ```
8. Next, install the plugin

   ```
   root@aio1-horizon-container-b2daccaa:~# python3 install.py http://storware-ip:8080/api admin_user admin_password
   ```

   When the installation process is completed, plugin files should be placed in /usr/share/openstack-dashboard/openstack\_dashboard directory. If your path to the dashboard directory is different, create symbolic links from plugin install directories to non-standard directories.

   **Example:**

   ```
   root@aio1-horizon-container-b2daccaa:~# ln -s /usr/share/openstack-dashboard/openstack_dashboard/dashboards/vprotect /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/openstack_dashboard/dashboards/

   root@aio1-horizon-container-b2daccaa:~#  ln -s /usr/share/openstack-dashboard/static/vprotect /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/static/

   root@aio1-horizon-container-b2daccaa:~#  ln -s /usr/share/openstack-dashboard/openstack_dashboard/enabled/_50_vprotect.py /openstack/venvs/horizon-23.1.0.dev42/lib/python3.8/dist-packages/openstack_dashboard/enabled/
   ```
9. Edit /etc/apache2/sites-available/openstack-dashboard.conf file:

   * Add alias for static files

   ```
   Alias /dashboard/static /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/static/
   ```

   * Directory tag informs you, where dashboards directories should be placed.
   * Second Directory tag informs where static directory from plugin should be placed.

   **Example**: configuration file should look like this:

   ```
   # Ansible managed

   # If horizon is being served via SSL from this web server,
   # then we must redirect HTTP requests to HTTPS.

   # If horizon is being served via SSL via a load balancer, we
   # need to listen via HTTP on this web server. If SSL is not
   # enabled, then the same applies.
   <VirtualHost 172.29.239.229:80>
   ServerName aio1-horizon-container-b2daccaa.openstack.local
   LogLevel info
   ErrorLog syslog:daemon
   CustomLog "|/usr/bin/env logger -p [daemon.info](http://daemon.info/) -t apache2" "%h %l %u \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
   Options +FollowSymLinks
   RequestHeader set X-Forwarded-Proto "https"

   WSGIScriptAlias / /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/openstack_dashboard/wsgi.py
   WSGIDaemonProcess horizon user=horizon group=horizon processes=1 threads=1 python-path=/openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/site-packages

   WSGIProcessGroup horizon
   WSGIApplicationGroup %{GLOBAL}

   <Directory /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/openstack_dashboard>
   <Files wsgi.py >
   <IfVersion < 2.4>
   Order allow,deny
   Allow from all
   </IfVersion>
   <IfVersion >= 2.4>
   Require all granted
   </IfVersion>
   </Files>
   </Directory>

   Alias /static /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/static/
   Alias /dashboard/static /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/static/

   <Directory /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/static/>
   Options -FollowSymlinks
   <IfVersion < 2.4>
   AllowOverride None
   Order allow,deny
   Allow from all
   </IfVersion>
   <IfVersion >= 2.4>
   Require all granted
   </IfVersion>
   </Directory>
   </VirtualHost>
   Edit /openstack/venvs/horizon-23.1.0.dev65/lib/python3.8/dist-packages/openstack_dashboard/urls.py and add in urlPatterns following line
   url(r'^dashboard/', horizon.base._wrapped_include(horizon.urls))
   Your urls.py should looks like:
   """
   URL patterns for the OpenStack Dashboard.
   """

   from django.conf import settings
   from django.conf.urls import include
   from django.conf.urls.static import static
   from django.conf.urls import url
   from django.contrib.staticfiles.urls import staticfiles_urlpatterns
   from django.views import defaults

   import horizon
   import horizon.base
   from horizon.browsers import views as browsers_views
   from horizon.decorators import require_auth

   from openstack_dashboard.api import rest
   from openstack_dashboard import views

   urlpatterns = [
   url(r'^$', views.splash, name='splash'),
   url(r'^api/', include(rest.urls)),
   url(r'^header/', views.ExtensibleHeaderView.as_view()),
   url(r'', horizon.base._wrapped_include(horizon.urls)),
   **url(r'^dashboard/', horizon.base._wrapped_include(horizon.urls)),**
   ]

   # add URL for ngdetails
   ```
10. Restart httpd service

    ```
    /etc/init.d/apache2 restart
    ```
11. After refreshing the dashboard site, you should see Storware Backup & Recovery tab in the Openstack menu.

### Installing Horizon Plugin in a Juju Deployment

This guide provides detailed instructions for installing the Horizon plugin in a Juju-deployed OpenStack environment.

**Prerequisites**

Before you begin, make sure you have the following:

* Access to the Juju controller and the model where the OpenStack services are deployed.
* The IP address of the Storware Backup & Recovery server

**Installation**

1. SSH into the leader unit of the `openstack-dashboard` application:

   ```
   juju ssh openstack-dashboard/leader
   ```
2. Clone the Horizon plugin repository from GitHub:

   ```
   git clone https://github.com/Storware/openstack-horizon-ui-vprotect-extensions
   ```
3. Change into the cloned directory:

   ```
   cd openstack-horizon-ui-vprotect-extensions
   ```
4. Install the required Python packages using `pip`:

   ```
   pip3 install -r requirements.txt
   ```
5. Run the plugin installer script with the following command:

   ```
   python3 install.py http://SBR_SERVER_IP:8080/api admin vPr0tect
   ```

   * Replace `http://SBR_SERVER_IP:8080` with the actual address of your Storware Backup & Recovery server.
   * `admin` is the username.
   * `vPr0tect` is the password.
6. Navigate to the static files directory of the OpenStack Dashboard:

   ```
   cd /usr/share/openstack-dashboard/openstack_dashboard/static/
   ```
7. Create a symbolic link to the Storware Backup & Recovery static files:

   ```
   ln -s /var/lib/openstack-dashboard/static/vprotect/ vprotect
   ```
8. Check if the following aliases are present in the Apache configuration file:

   ```
   nano /etc/apache2/conf-enabled/openstack-dashboard.conf
   ```

   Ensure the file contains the following aliases:

   ```
   Alias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/dashboards
   Alias /dashboard/static /var/lib/openstack-dashboard/static/
   Alias /static /var/lib/openstack-dashboard/static/
   Alias /horizon/static /var/lib/openstack-dashboard/static/
   ```
9. Edit the default Apache site configuration to add a rewrite rule:

   ```
   vi /etc/apache2/sites-available/000-default.conf
   ```

   Add the following lines under `DocumentRoot /var/www`:

   ```
   RewriteEngine on
   RewriteRule ^/dashboard/vprotect/(.*)$ http://%{HTTP_HOST}/horizon/vprotect/$1 [R=301,L]
   ```

{% hint style="info" %}

```
**Note:** This rewrite rule may need adjustment based on your HAProxy/ReverseProxy setup.
```

{% endhint %}

10. Edit the `urls.py` file to include a specific path:

    ```
    vi /usr/lib/python3/dist-packages/openstack_dashboard/urls.py
    ```
11. Add the following line to the `urlpatterns` section:

    ```python
    re_path(r'^horizon/', horizon.base._wrapped_include(horizon.urls)),
    ```
12. Restart the Apache service to apply the changes:

    ```
    sudo service apache2 restart
    ```

The Horizon plugin should now be installed and configured in your Juju-deployed OpenStack environment. Verify that the plugin appears in the OpenStack Dashboard and is functioning correctly.
