Dans cette étape, vous apprendrez à utiliser l'un des modules Ansible les plus fondamentaux : ansible.builtin.copy
. Ce module est utilisé pour transférer des fichiers de votre nœud de contrôle (la VM LabEx) vers un emplacement spécifié sur vos hôtes gérés. Dans notre cas, l'hôte géré sera localhost
lui-même. Au-delà de la simple copie, le module copy
vous permet de contrôler précisément les attributs du fichier, tels que son propriétaire, son groupe et son mode de permission, ce qui est essentiel pour une configuration système correcte.
Tout d'abord, mettons en place notre environnement de projet. Tout notre travail sera effectué dans le répertoire ~/project
.
-
Naviguez vers le répertoire du projet et créez un sous-répertoire pour nos fichiers sources. C'est une pratique courante pour garder votre projet organisé.
Installez le paquet ansible-core
.
sudo dnf install -y ansible-core
Ensuite, naviguez vers le répertoire du projet et créez un sous-répertoire pour nos fichiers sources.
cd ~/project
mkdir files
-
Ensuite, créez un fichier texte simple que nous allons copier. Nous utiliserons une commande cat
avec un "here document" pour créer le fichier info.txt
dans le répertoire files
.
cat << EOF > ~/project/files/info.txt
This file was deployed by Ansible.
It contains important system information.
EOF
-
Maintenant, créez un fichier d'inventaire Ansible. L'inventaire indique à Ansible quels hôtes gérer. Pour ce laboratoire, nous allons gérer la machine locale. Créez un fichier nommé inventory.ini
.
cat << EOF > ~/project/inventory.ini
localhost ansible_connection=local
EOF
Dans cet inventaire, localhost
est l'hôte que nous ciblons. La variable ansible_connection=local
indique à Ansible d'exécuter les tâches directement sur le nœud de contrôle, sans utiliser SSH.
-
Créez votre premier playbook Ansible. Ce playbook contiendra les instructions pour copier le fichier. Utilisez nano
ou cat
pour créer un fichier nommé copy_file.yml
.
nano ~/project/copy_file.yml
Ajoutez le contenu suivant au fichier. Ce playbook définit une tâche : copier info.txt
dans le répertoire /tmp/
et définir ses attributs.
---
- name: Deploy a static file to localhost
hosts: localhost
tasks:
- name: Copy info.txt and set attributes
ansible.builtin.copy:
src: files/info.txt
dest: /tmp/info.txt
owner: labex
group: labex
mode: "0640"
Décomposons les paramètres de la tâche copy
:
src: files/info.txt
: Le chemin du fichier source sur le nœud de contrôle, relatif à l'emplacement du playbook.
dest: /tmp/info.txt
: Le chemin absolu où le fichier sera placé sur l'hôte géré.
owner: labex
: Définit le propriétaire du fichier sur l'utilisateur labex
.
group: labex
: Définit le groupe du fichier sur le groupe labex
.
mode: '0640'
: Définit les permissions du fichier. 0640
signifie que le propriétaire peut lire/écrire, le groupe peut lire, et les autres n'ont aucune permission.
-
Exécutez le playbook en utilisant la commande ansible-playbook
. L'indicateur -i
spécifie notre fichier d'inventaire.
ansible-playbook -i inventory.ini copy_file.yml
Vous devriez voir une sortie indiquant l'exécution réussie du playbook, similaire à ceci :
PLAY [Deploy a static file to localhost] ***************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy info.txt and set attributes] ****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Enfin, vérifiez que le fichier a été copié correctement et qu'il possède les bons attributs. Utilisez la commande ls -l
pour vérifier les permissions, le propriétaire et le groupe.
ls -l /tmp/info.txt
La sortie devrait indiquer que labex
est le propriétaire et le groupe, et que les permissions sont -rw-r-----
.
-rw-r----- 1 labex labex 72 Jul 10 14:30 /tmp/info.txt
Vous pouvez également afficher le contenu du fichier pour vous assurer qu'il a été copié entièrement.
cat /tmp/info.txt
This file was deployed by Ansible.
It contains important system information.