Aller au contenu

Modules Ansible

Les modules sont les unités de travail d’Ansible, chacun conçu pour une tâche spécifique, comme gérer des paquets, fichiers, services ou configurations cloud. Ansible propose plus de 1000 modules intégrés.

Types de modules

  • Système : user, group, file pour gérer les fichiers et utilisateurs.
  • Paquets : apt, yum, dnf pour installer des logiciels.
  • Services : service, systemd pour gérer les services.
  • Cloud : aws_s3, azure_rm_virtualmachine pour le cloud.
  • Réseau : ios_config, nxos_config pour les équipements réseau.

Utiliser un module

Exemple avec le module apt :

- name: Installer Apache
  apt:
    name: apache2
    state: present
    update_cache: yes
  become: yes

Explorer les modules

Pour lister tous les modules :

ansible-doc -l

Pour voir la documentation d’un module :

ansible-doc apt

Exemple : Module file

Créez un répertoire :

- name: Créer un répertoire
  file:
    path: /var/www/myapp
    state: directory
    mode: '0755'
    owner: www-data
    group: www-data

Exemple : Module command

Exécutez une commande shell :

- name: Vérifier uptime
  command: uptime
  register: result
- name: Afficher résultat
  debug:
    msg: "{{ result.stdout }}"

Modules idempotents

La plupart des modules sont idempotents, c’est-à-dire qu’ils ne modifient l’état que si nécessaire. Par exemple, le module apt n’installe un paquet que s’il n’est pas déjà présent.

Collections

Depuis Ansible 2.10, les modules sont souvent regroupés dans des collections. Exemple :

ansible-galaxy collection install community.general

Utilisez un module de la collection community.general :

- name: Exécuter une commande complexe
  community.general.cmd:
    cmd: echo "Hello Ansible"

Créer un module personnalisé

Vous pouvez écrire vos propres modules en Python. Structure de base :

#!/usr/bin/python
from ansible.module_utils.basic import AnsibleModule

def main():
    module = AnsibleModule(
        argument_spec=dict(
            name=dict(type='str', required=True)
        )
    )
    module.exit_json(changed=False, msg=f"Hello {module.params['name']}")

if __name__ == '__main__':
    main()

Placez ce fichier dans library/ et utilisez-le dans un playbook :

- name: Utiliser module personnalisé
  my_module:
    name: AnsibleWiki

Bonnes pratiques

  • Préférez les modules aux commandes shell (command, shell) pour l’idempotence.
  • Consultez la documentation des modules pour connaître tous les paramètres.
  • Testez les modules dans un environnement de test avant production.

Ressources