Introduction
Dans ce laboratoire (lab), vous allez explorer le module Ansible Copy, qui vous permet de copier des fichiers et des répertoires sur des hôtes distants. Le module Copy offre un moyen flexible et efficace de transférer des fichiers dans le cadre de vos tâches d'automatisation Ansible.
Copier un fichier sur un hôte distant
Dans cette étape, vous allez copier un fichier de la machine de contrôle sur un hôte distant en utilisant le module Ansible Copy.
Tout d'abord, créez un nouveau fichier de playbook Ansible appelé /home/labex/project/copy-module-playbook.yaml et ouvrez-le dans un éditeur de texte.
Ajoutez le contenu suivant au fichier de playbook :
- hosts: localhost
tasks:
- name: Copy a file to remote host
copy:
src: /home/labex/file.txt
dest: /home/labex/project/file.txt
copy: Utilise le module Ansiblecopy, qui est utilisé pour copier des fichiers du nœud de contrôle (hôte local) sur un hôte distant.src: Spécifie le chemin du fichier source, indiquant le chemin du fichier à copier sur l'hôte local.dest: Spécifie le chemin du fichier de destination, indiquant où le fichier doit être copié sur l'hôte distant.
Grâce à cette tâche de playbook, le fichier /home/labex/file.txt sera copié vers le chemin /home/labex/project/file.txt sur l'hôte distant. Le module Ansible copy facilite le processus de copie de fichiers de manière efficace.
Ensuite, créez un fichier appelé file.txt dans le répertoire /home/labex.
echo "This is the content of the file." > /home/labex/file.txt
Ensuite, exécutez le playbook en utilisant la commande suivante :
ansible-playbook copy-module-playbook.yaml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a file to remote host] **********************************************
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 file.txt existe dans le chemin de destination spécifié sur l'hôte distant.
cat /home/labex/project/file.txt
Exemple de sortie :
This is the content of the file.
Ici, "This is the content of the file." est identique au contenu du fichier /home/labex/file.txt, ce qui signifie que le fichier /home/labex/file.txt a été copié avec succès vers /home/labex/project/file.txt.
Copier un répertoire sur un hôte distant
Dans cette étape, vous allez copier un répertoire de la machine de contrôle sur un hôte distant en utilisant le module Ansible Copy.
Tout d'abord, modifiez le fichier de playbook existant en supprimant tout le contenu et en ajoutant le contenu suivant au fichier de playbook :
- hosts: localhost
tasks:
- name: Copy a directory to remote host
copy:
src: /home/labex/directory
dest: /home/labex/project/
Avec le type de l'étape 1, si src est défini sur un répertoire, cette tâche de playbook copie le répertoire /home/labex/directory vers le chemin /home/labex/project/ sur l'hôte distant.
Ensuite, créez un répertoire appelé directory dans le répertoire /home/labex et créez un fichier appelé file2.txt dans le répertoire directory.
mkdir /home/labex/directory
touch /home/labex/directory/file2.txt
Ensuite, exécutez le playbook en utilisant la commande suivante :
ansible-playbook copy-module-playbook.yaml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a directory to remote host] *****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Enfin, vérifiez que le répertoire directory et son contenu existent dans le chemin de destination spécifié sur l'hôte distant.
tree /home/labex/project
Sortie attendue :
/home/labex/project
├── copy-module-playbook.yaml
├── directory
│ └── file2.txt
└── file.txt
1 directory, 3 files
Vous pouvez voir que le répertoire directory et le fichier file2.txt ont été copiés avec succès dans le répertoire /home/labex/project sur l'hôte cible.
Conserver les attributs de fichier
Dans cette étape, vous allez apprendre à conserver les attributs de fichier, tels que les permissions et les horodatages, lors de l'utilisation du module Ansible Copy.
Tout d'abord, modifiez le fichier de playbook existant en supprimant tout le contenu et en ajoutant le contenu suivant au fichier de playbook :
- hosts: localhost
tasks:
- name: Preserve file attributes
copy:
src: /home/labex/file.txt
dest: /tmp/file.txt
mode: preserve
mode: preserve: Ce paramètre conserve le mode (les permissions) du fichier source lors du processus de copie, garantissant que le fichier de destination conserve les mêmes permissions que le fichier source.
Grâce à cette tâche de playbook, le fichier /home/labex/file.txt sera copié vers /tmp/file.txt sur l'hôte distant, tout en conservant les attributs de fichier tels que les permissions.
Ensuite, exécutez le playbook en utilisant la commande suivante :
ansible-playbook copy-module-playbook.yaml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Preserve file 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 file.txt est copié dans le chemin de destination spécifié sur l'hôte distant tout en conservant ses attributs.
Utilisez ll pour afficher les détails de /home/labex/file.txt :
ll /home/labex/file.txt
Exemple de sortie :
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
Utilisez ll pour afficher les détails de /tmp/file.txt :
ll /tmp/file.txt
Exemple de sortie :
-rw-rw-r-- 1 labex labex 33 Mar 9 09:00 /tmp/file.txt
Ce playbook Ansible peut être utilisé pour conserver les modèles de permission (bits de permission) et les informations sur le propriétaire lors du processus de copie.
Gérer les autorisations
Dans cette étape, vous allez explorer comment gérer les permissions de fichier lors de l'utilisation du module Ansible Copy. Vous apprendrez à définir des permissions spécifiques pour le fichier copié sur l'hôte distant.
Tout d'abord, modifiez le fichier de playbook existant en supprimant tout le contenu et en ajoutant le contenu suivant au fichier de playbook :
- hosts: localhost
tasks:
- name: Handle permissions
copy:
src: /home/labex/file.txt
dest: /tmp/file1.txt
mode: "0644"
mode: Remplacez"0644"par le mode de permission souhaité pour le fichier. Consultez la documentation de chmod pour plus d'informations sur les modes de permission.
Grâce à cette tâche de playbook, le fichier /home/labex/file.txt sera copié vers /tmp/file1.txt sur l'hôte distant, avec les permissions spécifiées de 0644.
Ensuite, exécutez le playbook en utilisant la commande suivante :
ansible-playbook copy-module-playbook.yaml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Handle permissions] ******************************************************
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 file1.txt est copié dans le chemin de destination spécifié sur l'hôte distant avec les permissions définies.
Utilisez ll pour afficher les détails de /home/labex/file.txt :
ll /home/labex/file.txt
Exemple de sortie :
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
Utilisez ll pour afficher les détails de /tmp/file1.txt :
ll /tmp/file1.txt
Exemple de sortie :
-rw-r--r-- 1 labex labex 33 Mar 9 09:11 /tmp/file1.txt
Ce playbook Ansible peut être utilisé pour définir des permissions spécifiques, telles que la lecture, l'écriture et l'exécution, pour le fichier sur l'hôte distant.
Copie idempotente
Dans cette étape, vous allez rendre l'opération de copie idempotente en utilisant le module Ansible Copy. Vous vous assurerez que le fichier n'est copié que s'il n'existe pas sur l'hôte distant ou si le fichier source a été modifié.
Tout d'abord, modifiez le fichier de playbook existant en supprimant tout le contenu et en ajoutant le contenu suivant au fichier de playbook :
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes: Ce paramètre spécifie que le cheminsrcse trouve sur l'hôte distant, permettant à Ansible de transférer des fichiers de l'hôte distant vers un autre emplacement.
Grâce à cette tâche de playbook, le fichier /home/labex/file.txt situé sur l'hôte distant sera copié vers /tmp/file2.txt sur l'hôte distant uniquement s'il n'existe pas ou si le fichier source a été modifié.
Ensuite, vérifiez si le fichier /tmp/file2.txt existe.
ll /tmp/file2.txt
Exemple de sortie :
ls: cannot access '/tmp/file2.txt': No such file or directory
Ensuite, exécutez le playbook en utilisant la commande suivante :
ansible-playbook copy-module-playbook.yaml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
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 file2.txt est copié dans le chemin de destination spécifié sur l'hôte distant uniquement s'il n'existe pas ou si le fichier source a été modifié.
ll /tmp/file2.txt
Exemple de sortie :
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
À ce stade, exécutez le playbook à nouveau.
ansible-playbook copy-module-playbook.yaml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Notez que changed=1 devient changed=0, ce qui prouve que ce playbook Ansible peut détecter que le fichier ne sera copié que s'il n'existe pas sur l'hôte distant ou si le fichier source a été modifié.
Résumé
Félicitations! Vous avez réussi le laboratoire (lab) sur le module Ansible Copy. Vous avez appris à utiliser le module Copy pour copier des fichiers et des répertoires sur des hôtes distants, conserver les attributs de fichier, gérer les permissions et garantir l'idempotence.
Le module Copy est un outil puissant pour transférer des fichiers dans vos tâches d'automatisation Ansible. Il propose divers paramètres pour personnaliser l'opération de copie en fonction de vos besoins.
Maintenant que vous comprenez bien le module Copy, vous pouvez exploiter ses capacités dans vos playbooks Ansible pour gérer efficacement les transferts et la synchronisation de fichiers dans votre infrastructure. Bonne copie avec Ansible!


