# Installing on TripleO Train

## 1. Prepare for deployment

### 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

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

### 1.2] Clone triliovault-cfg-scripts repository

The following steps are to be done on 'undercloud' node on an already installed RHOSP environment.\
The overcloud-deploy command has to be run successfully already and the overcloud should be available.

{% hint style="warning" %}
All commands need to be run as user 'stack' on undercloud node
{% endhint %}

The following command clones the triliovault-cfg-scripts github repository.

```
cd /home/stack
git clone -b hotfix-13-TVO/4.1 https://github.com/trilioData/triliovault-cfg-scripts.git
cd triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/
```

{% hint style="warning" %}
Please note that the Trilio Appliance needs to get updated to hf3 as well.
{% endhint %}

### 1.3] If backup target type is 'Ceph based S3' with SSL:

If your backup target is ceph S3 with SSL and SSL certificates are self signed or authorized by private CA, then user needs to provide CA chain certificate to validate the SSL requests. For that, user needs to rename his ca chain cert file to 's3-cert.pem' and copy it into directory - 'triliovault-cfg-scripts/redhat-director-scripts/redhat-director-scripts/\<RHOSP\_RELEASE\_\_\_Directory/puppet/trilio/files'

```
cp s3-cert.pem /home/stack/triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/puppet/trilio/files/
```

## 2] Upload Trilio puppet module

```
cd /home/stack/triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/scripts/
chmod +x *.sh
./upload_puppet_module.sh

## Output of above command looks like following.
Creating tarball...
Tarball created.
Creating heat environment file: /home/stack/.tripleo/environments/puppet-modules-url.yaml
Uploading file to swift: /tmp/puppet-modules-8Qjya2X/puppet-modules.tar.gz
+-----------------------+---------------------+----------------------------------+
| object                | container           | etag                             |
+-----------------------+---------------------+----------------------------------+
| puppet-modules.tar.gz | overcloud-artifacts | 368951f6a4d39cfe53b5781797b133ad |
+-----------------------+---------------------+----------------------------------+

## Above command creates following file.
ls -ll /home/stack/.tripleo/environments/puppet-modules-url.yaml

```

## **3] Update overcloud roles data file to include Trilio services**

Trilio contains multiple services. Add these services to your roles\_data.yaml.

{% hint style="info" %}
In the case of uncustomized roles\_data.yaml can the default file be found on the undercloud at:

`/usr/share/openstack-tripleo-heat-templates/roles_data.yaml`
{% endhint %}

Add the following services to the roles\_data.yaml

{% hint style="warning" %}
All commands need to be run as user 'stack'
{% endhint %}

### 3.1] Add Trilio Datamover Api Service to role data file

This service needs to share the same role as the **`keystone`** and **`database`** service.\
In case of the pre-defined roles will these services run on the role **`Controller`**.\
In case of custom defined roles, it is necessary to use the same role where 'OS::TripleO::Services::Keystone' service installed.

Add the following line to the identified role:

```
'OS::TripleO::Services::TrilioDatamoverApi'
```

### 3.2] Add Trilio Datamover Service to role data file

This service needs to share the same role as the **`nova-compute`** service.\
In case of the pre-defined roles will the **`nova-compute`** service run on the role **`Compute`**.\
In case of custom defined roles, it is necessary to use the role the **`nova-compute`** service is using.

Add the following line to the identified role:

```
'OS::TripleO::Services::TrilioDatamover' 
```

## 4] Prepare Trilio container images

{% hint style="warning" %}
All commands need to be run as user 'stack'
{% endhint %}

{% hint style="info" %}
Refer to the below-mentioned value of the respective placeholder in this document.\
**HOTFIX-TAG-VERSION :** 4.1.94-hotfix-12-tripleo
{% endhint %}

Trilio containers are pushed to 'Dockerhub'.\
Registry URL: 'docker.io'.\
Container pull URLs are given below.

#### CentOS7

```
Trilio Datamover container:       docker.io/trilio/tripleo-train-centos7-trilio-datamover:<HOTFIX-TAG-VERSION>
Trilio Datamover Api Container:   docker.io/trilio/tripleo-train-centos7-trilio-datamover-api:<HOTFIX-TAG-VERSION>
Trilio horizon plugin:            docker.io/trilio/tripleo-train-centos7-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>
```

#### CentOS8

```
Trilio Datamover container:        docker.io/trilio/tripleo-train-centos8-trilio-datamover:<HOTFIX-TAG-VERSION>
Trilio Datamover Api Container:   docker.io/trilio/tripleo-train-centos8-trilio-datamover-api:<HOTFIX-TAG-VERSION>
Trilio horizon plugin:            docker.io/trilio/tripleo-train-centos8-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>
```

There are two registry methods available in TripleO Openstack Platform.

1. Remote Registry
2. Local Registry

### 4.1] Remote Registry

Follow this section when 'Remote Registry' is used.

For this method it is not necessary to pull the containers in advance.\
It is only necessary to populate the trilio\_env.yaml file with the Trilio container URLs from Dockerhub registry.

Populate the trilio\_env.yaml with container URLs for:

* Trilio Datamover container
* Trilio Datamover api container
* Trilio Horizon Plugin

{% hint style="info" %}
trilio\_env.yaml will be available in\
\_\_`triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/environments`
{% endhint %}

```
# For TripleO Train Centos7
$ grep 'Image' trilio_env.yaml
   DockerTrilioDatamoverImage: docker.io/trilio/tripleo-train-centos7-trilio-datamover:<HOTFIX-TAG-VERSION>
   DockerTrilioDmApiImage: docker.io/trilio/tripleo-train-centos7-trilio-datamover-api:<HOTFIX-TAG-VERSION>
   DockerHorizonImage: docker.io/trilio/tripleo-train-centos7-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>

# For Tripleo Train Centos8
$ grep 'Image' trilio_env.yaml
   DockerTrilioDatamoverImage: docker.io/trilio/tripleo-train-centos8-trilio-datamover:<HOTFIX-TAG-VERSION>
   DockerTrilioDmApiImage: docker.io/trilio/tripleo-train-centos8-trilio-datamover-api:<HOTFIX-TAG-VERSION>
   ContainerHorizonImage: docker.io/trilio/tripleo-train-centos8-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>

```

### 4.2] Local Registry

Follow this section when 'local registry' is used on the undercloud.

Run the following script. Script pulls the triliovault containers and updates the triliovault environment file with URLs.

{% hint style="info" %}
Acceptable values for the below two parameters:

**OS\_platform**: \[centos7, centos8]

**container\_tool\_available\_on\_undercloud**: \[docker, podman]
{% endhint %}

```
cd /home/stack/triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/scripts/

sudo ./prepare_trilio_images.sh <undercloud_registry_hostname_or_ip> <OS_platform> <4.1-TRIPLEO-CONTAINER> <container_tool_available_on_undercloud>

## To get undercloud registry hostname/ip, we have two approaches. Use either one.
1. openstack tripleo container image list

2. find your 'containers-prepare-parameter.yaml' (from overcloud deploy command) and search for 'push_destination'
cat /home/stack/containers-prepare-parameter.yaml | grep push_destination
 - push_destination: "undercloud.ctlplane.ooo.prod1:8787"

Here, 'undercloud.ctlplane.ooo.prod1' is undercloud registry hostname. Use it in our command like following example.

# Command Example:
sudo ./prepare_trilio_images.sh undercloud.ctlplane.ooo.prod1 centos7 4.1.94-hotfix-1-tripleo podman

## Verify changes
# For TripleO Train Centos7
$ grep 'Image' ../environments/trilio_env.yaml
   DockerTrilioDatamoverImage: prod1-undercloud.demo:8787/trilio/tripleo-train-centos7-trilio-datamover:<HOTFIX-TAG-VERSION>
   DockerTrilioDmApiImage: prod1-undercloud.demo:8787/trilio/tripleo-train-centos7-trilio-datamover-api:<HOTFIX-TAG-VERSION>
   DockerHorizonImage: prod1-undercloud.demo:8787/trilio/tripleo-train-centos7-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>

# For Tripleo Train Centos8
$ grep 'Image' trilio_env.yaml
   DockerTrilioDatamoverImage: prod1-undercloud.demo:8787/trilio/tripleo-train-centos8-trilio-datamover:<HOTFIX-TAG-VERSION>
   DockerTrilioDmApiImage: prod1-undercloud.demo:8787/trilio/tripleo-train-centos8-trilio-datamover-api:<HOTFIX-TAG-VERSION>
   ContainerHorizonImage: prod1-undercloud.demo:8787/trilio/tripleo-train-centos8-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>
```

The changes can be verified using the following commands.

```
## For Centos7 Train

(undercloud) [stack@undercloud redhat-director-scripts/tripleo-train]$ openstack tripleo container image list | grep trilio
| docker://undercloud.ctlplane.localdomain:8787/trilio/tripleo-train-centos7-trilio-datamover:<HOTFIX-TAG-VERSION>                       |                        |
| docker://undercloud.ctlplane.localdomain:8787/trilio/tripleo-train-centos7-trilio-datamover-api:<HOTFIX-TAG-VERSION>                  |                   |
| docker://undercloud.ctlplane.localdomain:8787/trilio/tripleo-train-centos7-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>                  |

-----------------------------------------------------------------------------------------------------
## For Centos8 Train
(undercloud) [stack@undercloud redhat-director-scripts/tripleo-train]$ openstack tripleo container image list | grep trilio
| docker://undercloud.ctlplane.localdomain:8787/trilio/tripleo-train-centos8-trilio-datamover:<HOTFIX-TAG-VERSION>                       |                        |
| docker://undercloud.ctlplane.localdomain:8787/trilio/tripleo-train-centos8-trilio-datamover-api:<HOTFIX-TAG-VERSION>                  |                   |
| docker://undercloud.ctlplane.localdomain:8787/trilio/tripleo-train-centos8-trilio-horizon-plugin:<HOTFIX-TAG-VERSION>                 |

```

## 5] Fill in triliovault environment details

Fill triliovault details in file - '/home/stack/triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/environments/trilio\_env.yaml', triliovault environment file is self explanatory. Fill details of backup target, verify image urls and other details.

## 6] Install Trilio on Overcloud

Use the following heat environment file and roles data file in overcloud deploy command

1. trilio\_env.yaml: This environment file contains Trilio backup target details and Trilio container image locations
2. roles\_data.yaml: This file contains overcloud roles data with Trilio roles added.
3. Use the correct trilio endpoint map file as per your keystone endpoint configuration.\
   \- Instead of `tls-endpoints-public-dns.yaml` this file, use ‘environments/trilio\_env\_tls\_endpoints\_public\_dns.yaml’\
   \- Instead of `tls-endpoints-public-ip.yaml` this file, use ‘environments/trilio\_env\_tls\_endpoints\_public\_ip.yaml’\
   \- Instead of `tls-everywhere-endpoints-dns.yaml` this file, use ‘environments/trilio\_env\_tls\_everywhere\_dns.yaml’

Deploy command with triliovault environment file looks like following.

```
openstack overcloud deploy --templates \
  -e /home/stack/templates/node-info.yaml \
  -e /home/stack/templates/overcloud_images.yaml \
  -e /home/stack/triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/environments/trilio_env.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-tls.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/inject-trust-anchor.yaml \
  -e /home/stack/triliovault-cfg-scripts/redhat-director-scripts/tripleo-train/environments/trilio_env_tls_endpoints_public_dns.yaml \
  --ntp-server 192.168.1.34 \
  --libvirt-type qemu \
  --log-file overcloud_deploy.log \
  -r /usr/share/openstack-tripleo-heat-templates/roles_data.yaml
```

## 7] Verify deployment

{% hint style="danger" %}
If the containers are in restarting state or not listed by the following command then your deployment is not done correctly. Please recheck if you followed the complete documentation.
{% endhint %}

### 7.1] On Controller node

Make sure Trilio dmapi and horizon containers are in a running state and no other Trilio container is deployed on controller nodes.\
When the role for these containers is not "controller" check on respective nodes according to configured roles\_data.yaml.

```
[root@overcloud-controller-0 heat-admin]# podman ps | grep trilio
26fcb9194566  rhosptrainqa.ctlplane.localdomain:8787/trilio/trilio-datamover-api:<HOTFIX-TAG-VERSION>        kolla_start           5 days ago  Up 5 days ago         trilio_dmapi
094971d0f5a9  rhosptrainqa.ctlplane.localdomain:8787/trilio/trilio-horizon-plugin:<HOTFIX-TAG-VERSION>       kolla_start           5 days ago  Up 5 days ago         horizon
```

Verify the haproxy configuration under:

```
/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
```

### 7.2] On Compute node

Make sure Trilio datamover container is in running state and no other Trilio container is deployed on compute nodes.

```
[root@overcloud-novacompute-0 heat-admin]# podman ps | grep trilio
b1840444cc59  rhosptrainqa.ctlplane.localdomain:8787/trilio/trilio-datamover:<HOTFIX-TAG-VERSION>                    kolla_start           5 days ago  Up 5 days ago         trilio_datamover
```

### 7.3] On the node with Horizon service

Make sure horizon container is in running state. Please note that 'Horizon' container is replaced with Trilio Horizon container. This container will have latest OpenStack horizon + Trilio's horizon plugin.

```
[root@overcloud-controller-0 heat-admin]# podman ps | grep horizon
094971d0f5a9  rhosptrainqa.ctlplane.localdomain:8787/trilio/trilio-horizon-plugin:<HOTFIX-TAG-VERSION>       kolla_start           5 days ago  Up 5 days ago         horizon
```

## 8] Deplo T4O-4.1 GA Appliance

Please follow [this deployment guide](https://docs.trilio.io/openstack/tvo-4.1/deployment/spinning-up-the-triliovault-vm) to spin up the base Trilio 4.1GA appliance.

## 9] Upgrade to the latest 4.1 HF on the appliance

Trilio supports TripleO Train from 4.1HF5 onwards, so it is recommended to upgrade to the latest available hotfix on 4.1 to make deployment successful.\
Please follow [this upgrade guide](https://docs.trilio.io/openstack/v/tvo-4.1/deployment/upgrade-triliovault/upgrade-triliovault-appliance) to upgrade the appliance to the latest 4.1 Hotfix.

## 10] Configure the Trilio Appliance

Please follow [this guide](https://docs.trilio.io/openstack/tvo-4.1/deployment/configuring-triliovault) to configure the upgraded Trilio 4.1 appliance.
