# Installing on Ansible Openstack Train

## Installing Trilio Datamover-API container

The installation of the Datamover-API, short dmapi, requires to create a new container, in which all necessary packages and the Trilio dmapi code are loaded.

### Create the dmapi container on Controller nodes

Create lxc container for hosting dmapi service on controller nodes with below commands.

```
## On Ubuntu
lxc-create -t ubuntu -n controller_dmapi       #Create the controller_dmapi container 

## On CentOS
lxc-create -t centos -n controller_dmapi       #Create the controller_dmapi container

lxc-start -n controller_dmapi                  #Start the controller_dmapi container
```

### Prepare the dmapi container for installation

Add nova user and required directory on container controller\_dmapi.

```
lxc-attach -n controller_dmapi      # Login to container
mkdir /etc/nova                     # create require /etc/nova directory
useradd nova                        # create nova user
id nova                             # check user added on container and aslo confirm the group nova added on container
```

Add required packages on container controller\_dmapi.

```
## On Ubuntu
sudo apt-get install software-properties-common
sudo add-apt-repository cloud-archive:train
sudo apt-get install python3-dev
sudo apt-get install curl
sudo apt-get install python3-nova

## On CentOs
yum install centos-release-openstack-train
yum install python-devel
yum install python-nova
```

Copy nova.conf file from nova-api container to /etc/nova directory in dmapi container.\
Run the below command on controller nodes:

```
cp /var/lib/lxc/controller_nova_api_container/rootfs/etc/nova/nova.conf /var/lib/lxc/controller_dmapi/rootfs/etc/nova/
```

Create a new interface with specific ip for dmapi container.

Edit /var/lib/lxc/controller\_dmapi/config and add below section as per network bridge available on the controller node.

```
lxc.net.1.type = veth
lxc.net.1.name = ens4
lxc.net.1.link = br-mgmt
lxc.net.1.hwaddr = 00:16:3e:de:52:31
lxc.net.1.flags = up
lxc.net.1.mtu = 1500
lxc.net.1.ipv4.address = 172.26.0.104/22
```

Restart the container with the below commands.

```
lxc-stop -n controller_dmapi
lxc-start -n controller_dmapi
```

### Install the dmapi service

Download and run the tvault-installation script inside the container.

```
wget https://<ipaddress-of-triliovault-controller>/tvault-contego-install.sh --no-check-certificate
chmod +x tvault-contego-install.sh
```

The script to be executed inside dmapi container, after the following changes have been done:\
Comment the 2 lines below and add a line below NOVA\_VERSION = 20, as nova-manage doesn't work in Ansible Openstack.

```
# NOVA_VERSION=`nova-manage version | awk -F. &#39;{print $1}&#39;`
# NOVA_VERSION_ROCKY=`nova-manage version`
NOVA_VERSION = 20
```

Run the script

```
./tvault-contego-install.sh --install
```

### Verify the installation and set necessary configuration

Verify in dmapi.conf domain name for the nova service user under keystone section.\
Check field values for `project_domain_name`and `user_domain_name` and update those if not in keystone section

```
[keystone_authtoken]
 memcached_servers =
 signing_dir =
 cafile =
 project_domain_name = Default
 project_name = service
 user_domain_name = Default
 password = ************
 username = nova
 auth_url = http://172.26.0.3:5000
 auth_type = password
 user_domain_id = default
 project_domain_id = default
 auth_uri =
 memcached_servers =
```

If SSL is enabled then add the following section in dmapi.conf:

```
[oslo_messaging_rabbit]
ssl = True
rpc_conn_pool_size = 30
```

Verify below entries are there in keystone policy.json file

{% hint style="info" %}
file path : /var/lib/lxc/controller\_keystone\_container/rootfs/etc/keystone
{% endhint %}

```
"cloud_admin": "rule:admin_required and (is_admin_project:True or domain_id:CLOUD_DOMAIN_ID or project_id:SERVICE_PROJECT_ID)"
```

Once verified above checks, start the dmapi service.

```
service tvault-datamover-api start
service tvault-datamover-api status
```

## Install Trilio Datamover on Compute nodes

### Prepare the installation

Activate the virtual environment on the compute node.

```
source /openstack/venvs/nova-20.0.3.dev2/bin/activate
```

After activating the virtual environment, find out the location of compute.filters file.

```
(nova-20.0.3.dev2) root@compute:~# find / -name compute.filters
/openstack/venvs/nova-20.0.3.dev2/etc/nova/rootwrap.d/compute.filters
```

Download the installation script.

```
wget https://<ipaddress-of-triliovault-controller>/tvault-contego-install.sh --no-check-certificate
chmod +x tvault-contego-install.sh
```

Modify install script to use the same location for creating trilio filters.

```
1797              elif [ "$value" == 2 ]; then
1798                  NOVA_COMPUTE_FILTERS_FILE="/openstack/venvs/nova-20.0.3.dev2/etc/nova/rootwrap.d/compute.filters"
1799                  create_filter_file /openstack/venvs/nova-20.0.3.dev2/etc/nova/rootwrap.d/trilio.filters
```

Also comment the 2 lines below and add a line below NOVA\_VERSION = 20, as nova-manage doesn't work in Ansible Openstack.

```
# NOVA_VERSION=`nova-manage version | awk -F. &#39;{print $1}&#39;`
# NOVA_VERSION_ROCKY=`nova-manage version`
NOVA_VERSION = 20
```

### Install the Trilio datamover service

Run install script and if you get prompt while installing, choose the default selection.

{% hint style="info" %}
If non-default values are selected, it will overwrite the current configuration and will impact nova-compute service.
{% endhint %}

```
./tvault-contego-install.sh --install
```

Make sure ExecStart value look like below in /etc/systemd/system/tvault-contego.service file.

```
ExecStart=/openstack/venvs/nova-20.0.3.dev2/bin/python3 /usr/bin/tvault-contego --config-file=/etc/nova/nova.conf --config-file=/etc/tvault-contego/tvault-contego.conf
```

Use below commands to restart and verify the service.

```
systemctl daemon-reload
service tvault-contego start
service tvault-contego status
```

Use below command and check if nfs/s3 storage is mounted or not.

```
df -h
```

## Install Horizon Plugin into Horizon service

List running containers on controller nodes and login to horizon container using the below command.

```
lxc-ls
 lxc-attach -n <name of horizon container>
```

Install curl package on the Horizon container if not present.

```
## On Ubuntu
apt-get install curl

## On CentOS
yum install curl
```

Activate virtual environment on horizon container

```
source /openstack/venvs/horizon-20.0.3.dev2/bin/activate
```

Download script to install horizon plugin on horizon container and run install script

```
wget https://<ipaddress-of-triliovault-controller>/tvault-horizon-plugin-install.sh --no-check-certificate
chmod +x tvault-horizon-plugin-install.sh
./tvault-horizon-plugin-install.sh
```

Install script will ask for the dashboard folder, provide below path

```
/openstack/venvs/horizon-20.0.3.dev2/lib/python3.6/site-packages/
```

Verify installation using below commands

```
pip list | grep tvault
```

## Haproxy configuration on controller nodes

Refer to the keystone haproxy settings for dmapi haproxy.

{% hint style="info" %}
Haproxy config file can be found here: `/etc/haproxy/haproxy.cfg`
{% endhint %}

A sample configuration is shown below.

```
frontend datamover_service-front-1
        bind trainubuntu.triliodata.demo:8784 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        option httplog
        option forwardfor except 127.0.0.0/8
        option http-server-close
        reqadd X-Forwarded-Proto:\ https
        mode http
        default_backend datamover_service-back

frontend datamover_service-front-2
        bind 172.26.0.3:8784
        option httplog
        option forwardfor except 127.0.0.0/8
        option http-server-close
        mode http
        default_backend datamover_service-back


backend datamover_service-back
        mode http
        balance leastconn
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
        option httplog
        option httpchk HEAD / HTTP/1.0\r\nUser-agent:\ osa-haproxy-healthcheck
        server controller_dmapi  172.26.0.104:8784 check port 8784 inter 12000 rise 1 fall 1
```

Check the syntax of the file and restart the service.

```
haproxy -c -f /etc/haproxy/haproxy.conf
systemctl restart haproxy
```
