Ansible : Collections

De Justine's wiki
Aller à la navigation Aller à la recherche

https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#using-collections-in-a-playbook

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

  1. Ou depuis un tarball

ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections

  1. Depuis git

ansible-galaxy collection install git+https://github.com/organization/repo_name.git,devel

  1. 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.