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,filepour gérer les fichiers et utilisateurs. - Paquets :
apt,yum,dnfpour installer des logiciels. - Services :
service,systemdpour gérer les services. - Cloud :
aws_s3,azure_rm_virtualmachinepour le cloud. - Réseau :
ios_config,nxos_configpour 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.