Ansible Copy

Ansible fournit la fonctionnalité de copie des fichiers et des répertoires à l’aide des modules copy et fetch. Le module copy est polyvalent.

Le module copy est utilisé pour copier des fichiers et des dossiers de la machine locale vers les serveurs distants. Et le module fetch pour copier les données de la machine distante vers la machine locale.

Si vous voulez copier des fichiers après les avoir substitués avec des variables, comme des fichiers de configuration avec des changements d’IP, ou vous pouvez utiliser le module template également. Vous pouvez effectuer beaucoup de tâches compliquées avec ce module.

Copier des fichiers du local au distant

Le module de copie est utilisé pour vérifier le fichier défini dans le paramètre src, sur la machine locale. Et ensuite, il va copier les données vers le chemin de la machine distante spécifié dans le destpath.

Dans l’exemple ci-dessous, nous allons copier le fichier sample.txt dans le répertoire home de la machine locale, vers la destination est le répertoire /tmp sur le serveur distant. Tant que nous ne spécifions pas de permission pour le fichier, la permission par défaut pour le fichier distant est définie comme -rw-rw-r-(0664).

Cas 1 : Si le fichier est déjà présent sur le serveur distant, mais que le contenu du fichier source est différent, alors le fichier de destination sera modifié. Vous pouvez contrôler cela en définissant le paramètre force. Par défaut, il est défini sur « yes ». Il modifie donc le fichier par défaut.

Si vous ne voulez pas que le fichier soit modifié, si le fichier source est différent, alors vous pouvez le définir sur Non. La tâche suivante copiera le fichier si le fichier n’existe pas sur le serveur distant.

Cas 2 : Si le fichier n’a pas été trouvé sur la machine locale, l’Ansible jette une erreur.

Par exemple : fatal : : FAILED!=> {« changed » : false, « failed » : true, « msg » : « impossible de trouver ‘~/sample.txt’ dans les chemins attendus. »}

Copier des répertoires du local au distant

Vous pouvez également copier des dossiers ou des répertoires en utilisant le module Ansible copy. Si le chemin ‘src’ est un répertoire, alors il sera copié de manière récursive. Ou le répertoire entier sera copié.

Il existe deux variantes différentes pour cette tâche. Selon que vous avez le caractère ‘/’ à l’extrémité du chemin ‘src’ ou non.

La première méthode créera un répertoire sur le serveur distant, avec le nom défini dans le paramètre src. Ensuite, elle copiera et collera le contenu du dossier source dans ce répertoire.

Si vous voulez ce comportement, alors elle ne donne pas le ‘/’ après le chemin dans le paramètre src.

Dans l’exemple ci-dessous, il va d’abord créer un répertoire nommé copy_dir_ex dans le /tmp du serveur distant.

Copier des fichiers entre répertoires sur une machine distante

Ansible copy vous permet de copier les fichiers d’un répertoire à un autre sur la même machine distante. Mais cela ne concerne que les fichiers, pas les répertoires. Vous pouvez utiliser le paramètre remote_src pour faire savoir à Ansible vos intentions.

Le code ci-dessous copiera /tmp/test.txt dans le répertoire personnel de l’utilisateur (/home//).