Module Ansible Copy

AnsibleBeginner
Pratiquer maintenant

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 Ansible copy, 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 chemin src se 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!