|
|
|
> Procedimiento redactado para la utilización de la versión [v3.2.0](https://github.com/UdelaRInterior/ansible-role-matrix-synapse/releases/tag/v.3.2.0) y superiores del role *udelarinterior.matrix_synapse*
|
|
|
|
|
|
|
|
Las instancias de servidores Matrix Synapse y Element web chat aprovisionadas inicialmente a través del *role* **udelarinterior.matrix_synapse**, son también fácilmente actualizables a través de él.
|
|
|
|
|
|
|
|
Aunque el *role* emplea el método de instalación complejo (*from source*) para obtener la versión más reciente del servidor, también contempla la idempotencia y manejo de estados suficiente como para ser utilizado en un conveniente procedimiento de actualización de servidores y/o clientes web de mensajería Matrix.
|
|
|
|
|
|
|
|
El siguiente procedimiento explica los pasos a seguir para actualizar las instancias manejadas desde el proyecto Ansible [config](https://git.interior.edu.uy/adminsys/config), pero es análogo a cualquier instancia aprovisionada mediante el mencionado *role*.
|
|
|
|
|
|
|
|
## Pasos previos
|
|
|
|
|
|
|
|
Debemos asegurarnos que nos encontramos posicionados en la rama `master` del proyecto **config** en su versión mas reciente (*git pull*). Adicionalmnete es necesario cerciorarse que el role **udelarinterior.matrix_synapse** se encuentra en la versión correcta, según lo indicado en el archivo de gestión de dependencias `requirements.yml` o lo que concientemente deseemos.
|
|
|
|
|
|
|
|
**Antes de proceder es estrictamente necesario chequear la versión de Synapse de la que se parte**, puedes hacerlo de dos formas:
|
|
|
|
- ingresando a nuestro servidor y consultar por la versión del paquete `matrix_synapse` (recordar que la instalación se realiza en un virtualenv) o,
|
|
|
|
- previamente habilitando el [endpoint de administración](https://github.com/UdelaRInterior/ansible-role-matrix-synapse/blob/master/defaults/main.yml#L43) (correr el role para que se aplique el cambio) y accediendo a `https://<<FQDN_de_la_instancia>>:8448/_synapse/admin/v1/server_version`
|
|
|
|
|
|
|
|
A su vez hay que leer las [notas oficiales de actualización]( https://github.com/matrix-org/synapse/blob/master/UPGRADE.rst), de modo de asegurar que no es necesario ningún paso manual intermedio. **Solo en este caso** es posible llevar adelante la actualización a través del gestor de paquetes *pip* sin correr riesgos. Recuerda que estarás accionando contra un servidor en producción.
|
|
|
|
|
|
|
|
## Actualización del servidor Matrix Synapse
|
|
|
|
|
|
|
|
Para indicar si basta con que el servidor Synapse se encuentre instalado en cada ejecución del *role*, o si por el contrario debe actualizarse a la última versión disponible, el role contempla la variable `synapse_pip_state`. El valor `present` indica que basta con que se encuentre instalado, independientemente de que versión se trate. Con el valor `latest`, se fuerza a que la versión instalada corresponda a la más reciente descargable desde los repositorios de paquetes Python (https://pypi.org/).
|
|
|
|
|
|
|
|
Siendo deseable que un paquete se actualice únicamente cuando el desarrollador/operador es consciente de ello, lo recomendable es mantener siempre en las *host_vars* de la instancia el valor de esta variable en `present`, y modificarlo únicamente al momento de ejecutar una actualización. Esto lo logramos sobrescribiendo el valor de la variable al momento de lanzar el pĺaybook de la siguiente manera:
|
|
|
|
```
|
|
|
|
ansible-playbook -i hosts_prod --limit <<FQDN de la instancia a actualizar>> --tags matrix_synapse site.yml --extra-vars "synapse_pip_state=latest"
|
|
|
|
```
|
|
|
|
*Notar que se hace el uso del tag `matrix_synapse` para acotar al mínimo las tareas a ejecutar*
|
|
|
|
|
|
|
|
|
|
|
|
## Actualización del cliente web Element
|
|
|
|
|
|
|
|
A diferencia del servidor Synapse, no hay riesgos al actualizar la aplicación web Element, ya que se trata de un sitio estático (sirve solo HTML, CSS y Javascript) que se renderiza en el navegador del cliente.
|
|
|
|
|
|
|
|
En este caso sí deseamos que quede registro en código de la versión aprovisionada en el servidor en producción, ya que podemos representarlo en un estado inmutable. Contamos con la variable `element_version` para indicar explícitamente la versión de Element a aprovisionar. Las versiones disponibles (junto al detalle de cambios introducidos por ellas) puede chequearse en los [lanzamientos (*releases*) de su repositorio en GitHub](https://github.com/vector-im/element-web/releases).
|
|
|
|
|
|
|
|
Por tanto modificaremos `element_version` en las *host_vars* correspondientes al servidor deseado, con la nueva versión a aprovisionar. Por ejemplo para la versión `1.9.8`, modificamos el código de la siguiente manera:
|
|
|
|
```yaml
|
|
|
|
element_version: '1.9.8'
|
|
|
|
```
|
|
|
|
|
|
|
|
Solo resta ejecutar el *playbook* de la siguiente manera:
|
|
|
|
```
|
|
|
|
ansible-playbook -i hosts_prod --limit <<FQDN de la instancia a actualizar>> --tags matrix_synapse site.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
Si todo fue bien, registramos los cambios al código como un nuevo *commit* del repositorio y lo subimos rápidamente para mantener la consistencia del mismo.
|
|
|
|
Si por el contrario algo fue mal, siempre podremos revertir `element_version` a su valor anterior, volver a ejecutar el *playbook* y recuperar el estado anterior del cliente web. |
|
|
\ No newline at end of file |