# Installing on Kolla Ussuri

## 1] Plan for Deployment

{% hint style="info" %}
Please ensure that the Trilio Appliance has been updated to the latest hotfix before continuing the installation.
{% endhint %}

{% hint style="info" %}
Refer to the below-mentioned acceptable values for the placeholders in this document as per the Openstack environment:\
**kolla\_base\_distro :** ubuntu / centos\
**triliovault\_tag :** 4.1.94-hotfix-13-ussuri / 4.1.94-hotfix-12-victoria
{% endhint %}

### 1.1] Select backup target type

Backup target storage is used to store backup images taken by Trilio and details needed for configuration:

Following backup target types are supported by Trilio. Select one of them and get it ready before proceeding to the next step.

a) NFS

Need NFS share path

b) Amazon S3

\- S3 Access Key\
\- Secret Key\
\- Region\
\- Bucket name

c) Other S3 compatible storage (Like, Ceph based S3)

\- S3 Access Key\
\- Secret Key\
\- Region\
\- Endpoint URL (Valid for S3 other than Amazon S3)\
\- Bucket name

## 2] Clone Trilio Deployment Scripts

Clone triliovault-cfg-scripts GitHub repository on Kolla ansible server at '/root' or any other directory of your preference. Afterward, copy the Trilio Ansible role into the Kolla-ansible roles directory

```
git clone -b hotfix-13-TVO/4.1 https://github.com/trilioData/triliovault-cfg-scripts.git
cd triliovault-cfg-scripts/kolla-ansible/

# For Centos and Ubuntu
cp -R ansible/roles/triliovault /usr/local/share/kolla-ansible/ansible/roles/
```

## 3] Hook Trilio deployment scripts to Kolla-ansible deploy scripts

### 3.1] Add Trilio global variables to globals.yml

```
## For Centos and Ubuntu
## Take backup of globals.yml
cp /etc/kolla/globals.yml /opt/

## Append Trilio global variables to globals.yml 
cat ansible/triliovault_globals.yml >> /etc/kolla/globals.yml
```

### 3.2] Add Trilio passwords to kolla passwords.yaml

Append `triliovault_passwords.yml` to `/etc/kolla/passwords.yml`. Passwords are empty. Set these passwords manually in the `/etc/kolla/passwords.yml`.

```shell
## For Centos and Ubuntu
## Take backup of passwords.yml
cp /etc/kolla/passwords.yml /opt/

## Append Trilio global variables to passwords.yml 
cat ansible/triliovault_passwords.yml >> /etc/kolla/passwords.yml

```

Edit `/etc/kolla/passwords.yml`, go to the end of the file and set trilio passwords.

### 3.3] Append Trilio site.yml content to kolla ansible’s site.yml

```shell
## For Centos and Ubuntu
## Take backup of site.yml
cp /usr/local/share/kolla-ansible/ansible/site.yml /opt/

## Append Trilio code to site.yml
cat ansible/triliovault_site.yml >> /usr/local/share/kolla-ansible/ansible/site.yml
```

### 3.4] Append triliovault\_inventory.txt to your cloud’s kolla-ansible inventory file.

```
For example:
If your inventory file name path '/root/multinode' then use following command.

cat ansible/triliovault_inventory.txt >> /root/multinode
```

## 4] Edit globals.yml to set Trilio parameters

Edit `/etc/kolla/globals.yml` file to fill Trilio backup target and build details.\
You will find the Trilio related parameters at the end of `globals.yml` file.\
Details like Trilio build version, backup target type, backup target details, etc need to be filled out.

Following is the list of parameters that the usr needs to edit.

| Parameter                              | Defaults/choices                                                                                 | comments                                                                                                                                                                                                                                                                                                                                |
| -------------------------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| triliovault\_tag                       | ***\<triliovault\_tag>***                                                                        | Container tags. Use ussuri tagged containers for Ussuri and victoria tagged containers for Victoria                                                                                                                                                                                                                                     |
| horizon\_image\_full                   | Keep Default                                                                                     | <p>By default will the Trilio Horizon container not get deployed.</p><p>Uncomment this parameter to deploy Trilio Horizon container instead of Openstack Horizon container.</p>                                                                                                                                                         |
| triliovault\_docker\_username          | triliodocker                                                                                     | <p>default docker user of Trilio<br>(read permission only)</p>                                                                                                                                                                                                                                                                          |
| triliovault\_docker\_password          | triliopassword                                                                                   | password for default docker user of Trilio                                                                                                                                                                                                                                                                                              |
| triliovault\_docker\_registry          | **Default value:** docker.io                                                                     | <p>Edit this value if a different container registry for Trilio containers is to be used.<br>Containers need to be pulled from docker.io and pushed to chosen registry first.</p>                                                                                                                                                       |
| triliovault\_backup\_target            | <ul><li><code>nfs</code></li><li><code>amazon\_s3</code></li><li><code>ceph\_s3</code></li></ul> | <p><code>nfs</code> if the backup target is NFS</p><p><code>amazon\_s3</code> if the backup target is Amazon S3</p><p><code>ceph\_s3</code> if the backup target type is S3 but not amazon S3.</p>                                                                                                                                      |
| triliovault\_nfs\_shares               | \<NFS-IP/FQDN>:/\<NFS path>                                                                      | NFS share path example: ‘192.168.122.101:/nfs/tvault’                                                                                                                                                                                                                                                                                   |
| triliovault\_nfs\_options              | <p><code>'nolock,soft,timeo=180,</code><br><code>intr,lookupcache=none'</code></p>               | <p>These parameter set NFS mount options.<br>Keep default values, unless a special requirement exists.</p>                                                                                                                                                                                                                              |
| triliovault\_s3\_access\_key           | S3 Access Key                                                                                    | Valid for `amazon_s3` and `ceph_s3`                                                                                                                                                                                                                                                                                                     |
| triliovault\_s3\_secret\_key           | S3 Secret Key                                                                                    | Valid for `amazon_s3` and `ceph_s3`                                                                                                                                                                                                                                                                                                     |
| triliovault\_s3\_region\_name          | <ul><li><strong>Default value:</strong> us-east-1</li><li>S3 Region name</li></ul>               | <p>Valid for <code>amazon\_s3</code> and <code>ceph\_s3</code></p><p>If s3 storage doesn't have region parameter keep default</p>                                                                                                                                                                                                       |
| triliovault\_s3\_bucket\_name          | S3 Bucket name                                                                                   | Valid for `amazon_s3` and `ceph_s3`                                                                                                                                                                                                                                                                                                     |
| triliovault\_s3\_endpoint\_url         | S3 Endpoint URL                                                                                  | Valid for `ceph_s3` only                                                                                                                                                                                                                                                                                                                |
| triliovault\_s3\_ssl\_enabled          | <ul><li>True</li><li>False</li></ul>                                                             | <p>Valid for <code>ceph\_s3</code> only</p><p>Set true for SSL enabled S3 endpoint URL</p>                                                                                                                                                                                                                                              |
| triliovault\_s3\_ssl\_cert\_file\_name | s3-cert.pem                                                                                      | <p>Valid for <code>ceph\_s3</code> only with SSL enabled and self signed certificates</p><p>OR issued by a private authority.<br>In this case, copy the <code>ceph s3 ca chain file</code> to<code>/etc/kolla/config/triliovault/</code></p><p>directory on ansible server. Create this directory if it does not exist already.<br></p> |
| triliovault\_copy\_ceph\_s3\_ssl\_cert | <ul><li>True</li><li>False</li></ul>                                                             | <p>Valid for <code>ceph\_s3</code> only</p><p>Set to True when:<br>SSL enabled with self-signed certificates or issued by a private authority.</p>                                                                                                                                                                                      |

In the case of a different registry than docker hub, Trilio containers need to be pulled from docker.io and pushed to preferred registries.

Following are the triliovault container image URLs.\
Replace kolla\_base\_distro and triliovault\_tag variables with their values.

```
docker.io/trilio/<kolla_base_distro>-binary-trilio-datamover-api:<triliovault_tag>
docker.io/trilio/<kolla_base_distro>-binary-trilio-datamover:<triliovault_tag>
docker.io/trilio/<kolla_base_distro>-binary-trilio-horizon-plugin:<triliovault_tag>

```

## 5] Enable Trilio Snapshot mount feature

To enable Trilio's Snapshot mount feature it is necessary to make the Trilio Backup target available to the nova-compute and nova-libvirt containers.

Edit `/usr/local/share/kolla-ansible/ansible/roles/nova-cell/defaults/main.yml` and find `nova_libvirt_default_volumes` variable. Append the Trilio mount bind `/var/trilio:/var/trilio:shared` to the list of already existing volumes.

For a default Kolla installation, will the variable look as follows afterward:

```
nova_libvirt_default_volumes:
  - "{{ node_config_directory }}/nova-libvirt/:{{ container_config_directory }}/:ro"
  - "/etc/localtime:/etc/localtime:ro"
  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
  - "/lib/modules:/lib/modules:ro"
  - "/run/:/run/:shared"
  - "/dev:/dev"
  - "/sys/fs/cgroup:/sys/fs/cgroup"
  - "kolla_logs:/var/log/kolla/"
  - "libvirtd:/var/lib/libvirt"
  - "{{ nova_instance_datadir_volume }}:/var/lib/nova/"
  - "
{% if enable_shared_var_lib_nova_mnt | bool %}/var/lib/nova/mnt:/var/lib/nova/mnt:shared{% endif %}
"
  - "nova_libvirt_qemu:/etc/libvirt/qemu"
  - "{{ kolla_dev_repos_directory ~ '/nova/nova:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/nova' if nova_dev_mode | bool else '' }
  - "/var/trilio:/var/trilio:shared"
```

Next, find the variable `nova_compute_default_volumes` in the same file and append the mount bind `/var/trilio:/var/trilio:shared` to the list.

After the change will the variable look for a default Kolla installation as follows:

```
nova_compute_default_volumes:
  - "{{ node_config_directory }}/nova-compute/:{{ container_config_directory }}/:ro"
  - "/etc/localtime:/etc/localtime:ro"
  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
  - "/lib/modules:/lib/modules:ro"
  - "/run:/run:shared"
  - "/dev:/dev"
  - "kolla_logs:/var/log/kolla/"
  - "
{% if enable_iscsid | bool %}iscsi_info:/etc/iscsi{% endif %}"
  - "libvirtd:/var/lib/libvirt"
  - "{{ nova_instance_datadir_volume }}:/var/lib/nova/"
  - "{% if enable_shared_var_lib_nova_mnt | bool %}/var/lib/nova/mnt:/var/lib/nova/mnt:shared{% endif %}"
  - "{{ kolla_dev_repos_directory ~ '/nova/nova:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/nova' if nova_dev_mode | bool else '' }}"
  - "/var/trilio:/var/trilio:shared"
```

In case of using Ironic compute nodes, one more entry needs to be adjusted in the same file.\
Find the variable `nova_compute_ironic_default_volumes` and append trilio mount `/var/trilio:/var/trilio:shared` to the list.

After the changes the variable will look like the following:

```
nova_compute_ironic_default_volumes:
  - "{{ node_config_directory }}/nova-compute-ironic/:{{ container_config_directory }}/:ro"
  - "/etc/localtime:/etc/localtime:ro"
  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
  - "kolla_logs:/var/log/kolla/"
  - "{{ kolla_dev_repos_directory ~ '/nova/nova:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/nova' if nova_dev_mode | bool else '' }}"
  - "/var/trilio:/var/trilio:shared"
```

## 6] Pull Trilio container images

Pull the Trilio container images from the Dockerhub based on the existing inventory file. In the example is the inventory file named `multinode`.

```
kolla-ansible -i multinode pull --tags triliovault
```

## 7] Deploy Trilio

All that is left, is to run the deploy command using the existing inventory file. In the example is the inventory file named 'multinode'.

This is just an example command. You need to use your cloud deploy command.

```
kolla-ansible -i multinode deploy
```

## 8] Verify Trilio deployment

Verify on the nodes that are supposed to run the Trilio containers, that those are available and healthy.

```
[root@controller ~]# docker ps | grep triliovault_datamover_api
f00781997bc3        trilio/centos-binary-trilio-datamover-api:<triliovualt_tag>    "dumb-init --single-…"   2 minutes ago       Up 2 minutes                            triliovault_datamover_api

[root@compute ~]# docker ps | grep triliovault_datamover
84831db5d215        trilio/centos-binary-trilio-datamover:<triliovualt_tag>     "dumb-init --single-…"   5 minutes ago       Up 4 minutes                            triliovault_datamover

[root@controller ~]# docker ps | grep horizon
f3647e0fff27        trilio/centos-binary-trilio-horizon-plugin:<triliovualt_tag>   "dumb-init --single-…"   8 minutes ago       Up 8 minutes                            horizon
```

## 9] Troubleshooting Tips

### 9.1 ] Check Trilio containers and their startup logs

To see all TriloVault containers running on a specific node use the docker ps command.

```
docker ps -a | grep trilio
```

To check the startup logs use the docker logs \<container name> command.

```
docker logs trilio_datamover_api
docker logs trilio_datamover
```

### 9.2] Trilio Horizon tabs are not visible in Openstack

Verify that the Trilio Appliance is configured. The Horizon tabs are only shown when a configured Trilio appliance is available.

Verify that the Trilio horizon container is installed and in a running state.

```
docker ps | grep horizon
```

### 9.3] Trilio Service logs

* Trilio datamover api service logs on datamover api node

```
/var/log/kolla/triliovault-datamover-api/dmapi.log
```

* Trilio datamover service logs on datamover node

```
/var/log/kolla/triliovault-datamover/tvault-contego.log
```

## 10. Change the nova user id on the Trilio Nodes

`Note: This step needs to be done on Trilio Appliance node. Not on OpenStack node.`

**Pre-requisite**:\
You should have already launched Trilio appliance VM

In Kolla OpenStack distribution, `nova` user id on nova-compute docker container is set to '42436'. The `nova` user id on the Trilio nodes needs to be set the same. Do the following steps on all Trilio nodes:

1. Download the shell script that will change the user id
2. Assign executable permissions
3. Execute the script
4. Verify that `nova` user and group id have changed to '42436'
5. After this step, you can proceed to the 'Configuring Trilio' section.

```
## Download the shell script
$ curl -O https://raw.githubusercontent.com/trilioData/triliovault-cfg-scripts/master/common/nova_userid.sh

## Assign executable permissions
$ chmod +x nova_userid.sh

## Execute the shell script to change 'nova' user and group id to '42436'
$ ./nova_userid.sh

## Ignore any errors and verify that 'nova' user and group id has changed to '42436'
$ id nova
   uid=42436(nova) gid=42436(nova) groups=42436(nova),990(libvirt),36(kvm)
```
