Ansible - Gestion de Fichiers¶
Dans ce chapitre, vous apprendrez à gérer des fichiers avec Ansible.
Objectifs : Dans ce chapitre, vous apprendrez à :
modifier le contenu d'un fichier ;
transmettre des fichiers vers des serveurs cibles ;
télécharger des fichiers à partir de serveurs distants.
ansible, module, fichiers
Connaissances :
Complexité :
Temps de lecture : 23 minutes
Suivant vos besoins, vous devrez utiliser différents modules Ansible pour modifier les fichiers de configuration du système.
ini_file
module¶
Quand vous voulez modifier un fichier ini (section entre les crochers []
et les paires key=value
), le plus facile est d'utiliser le module ini_file
.
Remarque
Des informations plus détaillées sont disponibles ici.
Le module nécessite :
- La valeur de la section
- Le nom de l'option
- La nouvelle valeur
Exemple d'utilisation :
- name: change value on inifile
community.general.ini_file:
dest: /path/to/file.ini
section: SECTIONNAME
option: OPTIONNAME
value: NEWVALUE
Module lineinfile
¶
Pour s'assurer qu'une certaine ligne est présente dans un fichier ou bien si il est nécessaire d'ajouter ou de modifier une ligne, vous utiliserez le module linefile
.
Remarque
Des informations plus détaillées sont disponibles ici.
Dans ce cas, la ligne à modifier sera identifiée en utilisant regexp.
Par exemple, pour s'assurer que la ligne qui commence par SELINUX=
dans le fichier /etc/selinux/config
contient bien la valeur enforcing
:
- ansible.builtin.lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: 'SELINUX=enforcing'
Module copy
¶
Pour copier un fichier à partir du serveur Ansible vers un ou plusieurs hôtes, il est préférable d'utiliser le module copy
.
Remarque
Pour des informations plus détaillées, veuillez consulter ce site.
L'exemple suivant illustre la copie du fichier myflile.conf
d'un endroit à un autre :
- ansible.builtin.copy:
src: /data/ansible/sources/myfile.conf
dest: /etc/myfile.conf
owner: root
group: root
mode: 0644
Module fetch
¶
Pour copier un fichier à partir d'un serveur distant vers le serveur local, il est préférable d'utiliser le module fetch
.
Remarque
Des informations plus détaillées sont disponibles ici.
Ce module effectue l'opération inverse du module copy
:
- ansible.builtin.fetch:
src: /etc/myfile.conf
dest: /data/ansible/backup/myfile-{{ inventory_hostname }}.conf
flat: yes
Module template
¶
Ansible et son module template
utilisent le système de modèles Jinja2 (http://jinja.pocoo.org/docs/) pour générer des fichiers dans la machine cible.
Remarque
Des informations plus détaillées sont disponibles ici.
Par exemple :
- ansible.builtin.template:
src: /data/ansible/templates/monfichier.j2
dest: /etc/myfile.conf
owner: root
group: root
mode: 0644
Il est possible d'ajouter une étape de validation si le service ciblé le permet (par exemple avec apache en utilisant la commande apachectl -t
) :
- template:
src: /data/ansible/templates/vhost.j2
dest: /etc/httpd/sites-available/vhost.conf
owner: root
group: root
mode: 0644
validate: '/usr/sbin/apachectl -t'
Module get_url
¶
Pour tranférer des fichiers à partir d'un site web ou ftp vers un ou plusieurs hôtes, vous pouvez utiliser le module get_url
:
- get_url:
url: http://site.com/archive.zip
dest: /tmp/archive.zip
mode: 0640
checksum: sha256:f772bd36185515581aa9a2e4b38fb97940ff28764900ba708e68286121770e9a
En enregistrant la somme de contrôle on évite les transfers inutiles de fichiers déjà existants dans les répertoires de la destination.