ICM / devops / Actualización Ansible 2.14

Actualización Ansible 2.14

8 noviembre 2022 | Marc Carbó

A finales de septiembre y principios de octubre ansible sacó la actualización 2.14 de su software de orquestación y aquí os venimos a comentar los cambios más significativos que se incluyen en esta nueva versión.

Antes hagamos un breve recordatorio de que es Ansible. Ansible es un software libre pensado para la configuración y administración de servidores virtuales, físicos, routers, switces y un largo etcétera. Gestiona los “nodos” (objeto de la configuración) a través del protocolo SSH y solo requiere que el nodo tenga Python instalado para poder funcionar. Dispone de módulos que trabajan sobre JSON y usa nativamente YAML para describir las configuraciones de los sistemas.

Estos son los nuevos módulos implementados en ansible.

En esta nueva versión de ansible, la 2.14, se han incorporado 3 nuevos plugins de uso los cuales son:

Ansible.builtin.uri -> Este módulo nos permite hacer peticiones a URI en específico. Interactúa con los servicios web usando los protocolos HTTP o HTTPS y los métodos de autenticación soportados son Digest, Basic, WSSP HTTP. Podemos especificar credenciales de acceso y el resultado que nos debería devolver la petición ya se GET o POST.

Ansible.builtin.url -> Podemos realizar peticiones a URL en concreto y nos devuelve el resultado de esta para que la podamos usar, pero a diferencia del plugin anterior no se puede incorporar como una task sino que se usa con un plugin de jinja2 llamado lookup.

Ansible.builtin.urn -> La finalidad de este módulo es únicamente la de comprobar si la información que le hemos pasado es una urn o no. Su uso es de test.

Repositorio Ansible Galaxy

Además, ansible cuenta con ayuda de creadores que comparten sus roles, playbooks… en definitiva sus colecciones con la comunidad y los suben al repositorio de ansible llamado Galaxy. Si quisiéramos usar alguna colección creada por otro usuario podríamos descargarlo usando el comando “ansible-galaxy collection install”. Este comando es muy importante ya que también permite instalar colecciones de forma manual especificando el path, pero, aún siendo una instalación local, lleva a cabo peticiones a los servidores de Galaxy. Para solventar este pequeño inconveniente han añadido el flag “–offline” al comando para evitar que se lleve a cabo dicha petición.

Nuevas funcionalidades en ansible 2.14

Por otro lado, la comunidad se involucra con el crecimiento de ansible y les dan ideas para mejorar el funcionamiento de sus módulos. Gracias a la comunidad han mejorado el módulo blockinfile permitiendo que en los filtros de las expresiones regulares especificadas en el insertbefore o insertafter hagan búsquedas en todo el fichero en vez de línea por línea, siempre que se añada el flag (?m) al inicio del patrón. Para entenderlo, esta nueva funcionalidad permite que la expresión regular pueda hacer match en cualquier combinación de líneas del fichero, sin esta opción solo hace la comprobación línea a línea.

También se ha renombrado el módulo systemd por systemd_service para hacer más entendible cual es el uso del módulo, pero systemd se ha mantenido como un alias para que pueda seguir usándose como en versiones anteriores.

Ahora han implementado la lazy evaluation para los jinja2. Esta mejora permite que las expresiones de jinja2 no se resuelvan hasta que sea requerido, permitiendo evitar los problemas nacidos de las variables no definidas como condicionales de una task.

En esta nueva versión ansible pone como requisito que la versión mínima de Python instalada para su uso ha de ser la 3.9 y tiene soporte para la 3.11 y con esto en mente se han encontrado con una dificultad en la versión 2.9 de paramiko, la implementación de Python que usa el protocolo SSHv2, es decir, el método que usa Python para realizar conexiones SSH. La versión 2.9 de paramiko no permite realizar las conexiones con host antiguos que no soporte RSA2 y/o la extensión de protocolo server-sig-algs.

Se han solventado una multiplicidad de bugs como añadir las dependencias de PyYAML >= 5.1 en ansible-core para ser compatible con las versiones superiores de la 3.8 de Python; corregir un mal funcionamiento de la strategy linear cuando las task se ejecutaban en un orden incorrecto y en una mala ejecución de los handlers; también han arreglado un bug en el ansible-doc ya que no lista correctamente los plugins. Estos son solo unos ejemplos remarcables. Si queréis más información podéis consultar el link siguiente Ansible-Core–2.14-Changelog.

Para ir finalizando vamos a dejar un listado de los variables que se han quitado en esta versión:

  • Dentro del PlayIterator se ha quitado PlayIterator.ITERATING_* y PlayIterator.FAILED_*.
  • En el fichero de configuración se han quitado ALLOW_WORLD_READABLE_TMPFILES, COMMAND_WARNINGS, PLUGIN_FILTERS_CFG.ini.0., NETWORK_GROUP_MODULES.env.0, options.display_skipped_hosts.env.0, DISPLAY_SKIPPED_HOSTS.env.0 y DEFAULT_LIBVIRT_LXC_NOSECLABEL.env.0.
  • En variables de entono DISPLAY_SKIPPED_HOSTS, LIBVIRT_LXC_NOSECLABEL y NETWORK_GROUP_MODULES
  • En el módulo apt_key se ha quitado el parámetro key.
  • En el módulo command/Shell se ha quitado el parámetro warn.
  • En el módulo get_url se ha quitado el parámetro sha256sum
  • En el módulo import_playbook se ha quitad las funcionalidades que permitían la inserción de parámetros adicionales

Todas estas variables ya se han eliminado ya que llevaban tiempo estando en estado deprecated.

Añadidos, cambios, corrección de bugs, quitar variables inservibles esto es solo la muestra que el equipo de Ansible está trabajando día a día para mejorarlo.