Ansible : Collections
Principe des Collections
Une collection est un format de distribution de données pour Ansible. Elle peut contenir des playbooks, des rôles, des modules, des plugins... Les modules d'Ansible sont en cours de migration dans des collections.
Utilisation
Installer une collection
Le principe est le même que pour un rôle :
<source> ansible-galaxy collection install community.vmware
- Ou depuis un tarball
ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections
- Depuis git
ansible-galaxy collection install git+https://github.com/organization/repo_name.git,devel
- Ce qui donne
Process install dependency map Starting collection install process Installing 'community.vmware:1.2.0' to '/home/adm-pelletreau/.ansible/collections/ansible_collections/community/vmware' </source>
Contenu d'une collection
La structure de base est la suivante :
<source> collection/ ├── docs/ ├── galaxy.yml ├── meta/ │ └── runtime.yml ├── plugins/ │ ├── modules/ │ │ └── module1.py │ ├── inventory/ │ └── .../ ├── README.md ├── roles/ │ ├── role1/ │ ├── role2/ │ └── .../ ├── playbooks/ │ ├── files/ │ ├── vars/ │ ├── templates/ │ └── tasks/ └── tests/ </source>
On peut aussi inclure une collection à côté d'un playbook comme on le fait avec les rôles:
<source> ├── play.yml ├── collections/ │ └── ansible_collections/ │ └── my_namespace/ │ └── my_collection/<collection structure lives here> </source>
Lister les collections installées
<source lang="zsh"> ~ ls ~/.ansible/collections/ansible_collections/ community </source>
Vérifier les collections <source lang="zsh"> ansible-galaxy collection verify my_namespace.my_collection </source> Cette commande permet d'afficher le contenu de la collection.
Utilisation dans un playbook
Une fois installée, la collection peut être utilisée en référencant son Fully Qualified Collection Name (FQCN): <source lang="yaml"> - hosts: all
tasks: - my_namespace.my_collection.mymodule: option1: value
</source> On peut ainsi référencer le contenu de n'importe quelle collection: <source lang="yaml"> - hosts: all
tasks: - import_role: name: my_namespace.my_collection.role1
- my_namespace.mycollection.mymodule: option1: value
- debug: msg: 'Modèle:Lookup("my namespace.my collection.lookup1", 'param1')'
</source>
Mot-clef "collection"
Dans un rôle, ce mot-clef permet de définir un ensemble de collections dans lesquelles Ansible va chercher les tasks (en utilisant le mot-clef "collections" dans le meta/main.yml de la collec. Ainsi même si plus loin dans le rôle je définit d'autre collections ailleurs, les collectgions situées après ce mot-clef seront toujours fouillées en priorité.
Dans un playbook, le principe est le même; sauf que la portée du mot-clef "collections" en début de playbook s'arrête dans le playbook, et pas dans les rôles qu'il utilise.