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.genera
l
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 lis
t
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
- Ansible best practices: using project-local collections and roles
- Introduction to Ansible collections Ansible collections, The future of Ansible content delivery. By Abhijeet Kasurde and Ganesh Nalawade
- Collections signal major shift in Ansible ecosystem
Imagen destadaca de publicación “Books” por shutterhacks bajo licencia CC BY 2.0