Colecciones de Ansible

Las colecciones son un cambio estructural en el desarrollo, manutención y distribución de Ansible, por medio del cual se envían fuera del core de Ansible gran parte de los módulos que tradicionalmente estaban en él. Si bien este cambio inició en la versión 2.8 no fue hasta la versión 2.10 que logró un soporte completo.

En la opinión de Jeff Geerling la introducción de colecciones es una señal de un cambio importante en el ecosistema de Ansible que toca sentido sobre el futuro del proyecto y cómo se relacionan quienes lo desarrollan, implementan e integran. Ya que impacta la arquitectura del proyecto. Por lo que también podemos considerar que se trata de un periodo de transición con efectos temporales y permanentes.

Desde la perspectiva de su desarrollo se pasa de un repositorio git gigante a varios repositorios. Los módulos que anteriormente estaban en el repositorio principal ahora están en repositorios independientes, en las ahora colecciones.

En teoría este cambio puede brindar condiciones, según la perspectiva del proyecto, para una manutención sin menos fricción entre el core, los módulos y complementos.

Finalmente, estos cambios, implican para quienes utilizan Ansible la necesidad de habilitar las colecciones en las que se basan sus libros de jugadas.

Niveles de instalación

  • Globalmente: en e directorio /usr/share/ansible/collections
  • Por usuaria: ~/.ansible/collections
  • Adyacente al contenido, por ejemplo, por proyecto y que podemos definir en nuestro archivo de configuración ansible.cfg

Orden de precedencia

  • playbooks/collections
  • ~/.ansible/collections
  • /usr/share/ansible/collections

Instalación, creación y distribución de colecciones con ansible-galaxy

Adyacente al contenido

ansible-galaxy collection install community.general -p

Por usuaria

ansible-galaxy collection install community.general

Global

sudo ansible-galaxy collection install community.general -p /usr/share/ansible/collections/

Antes y ahora

Antes

- name: Añadir los repositorios backports
  apt_repository:
    repo: "deb http://deb.debian.org/debian buster-backports main"
    state: present

El módulo apt_repository se encuentra en ansible-base

Ahora

- name: Añadir los repositorios backports
  ansible.builtin.apt_repository:
    repo: "deb http://deb.debian.org/debian buster-backports main"
    state: present

El módulo apt_repository se encuentra en la colección ansible.builtin

Listado de las colecciones

Por medio del parametro list tenemos como resultado un listado de las colecciones, sus ubicaciones y versiones.

ansible-galaxy collection list

Recomendaciones

Una recomendación para lograr un balance entre la complejidad y la usabilidad es partir del enfoque de proyectos. En el que cada proyecto tenemos nuestros libros de jugadas, roles y colecciones. Contrario a mantener globalmente los roles y colecciones. Para ello definimos los paths de los roles y colecciones en el ansible.cfg del proyecto en cuestión.

collections_paths = ./
roles_path = ./roles

La segunda recomendación es la definición de colecciones en requirements.yml

collections:
  - name: community.general
    version: 2.4.0
    source: https://galaxy.ansible.com

Referencias

Imagen destadaca de publicación “Books” por shutterhacks bajo licencia CC BY 2.0