Comment faire pour copier des fichiers entre deux nœuds à l'aide de ansible
J'ai besoin de copier le fichier de forme de machine A machine B alors que mon contrôle de la machine à partir de laquelle je lance tous mes ansible tâches sur la machine C(ordinateur local)
J'ai essayé ce qui suit:
Utiliser la commande scp dans le shell module de ansible
hosts: machine2
user: user2
tasks:
- name: Copy file from machine1 to machine2
shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1
Cette approche va juste sur et sur ne se termine jamais.
utilisation de fetch & copie des modules
hosts: machine1
user: user1
tasks:
- name: copy file from machine1 to local
fetch: src=/path-of-file/file1 dest=/path-of-file/file1
hosts: machine2
user: user2
tasks:
- name: copy file from local to machine2
copy: src=/path-of-file/file1 dest=/path-of-file/file1
Cette approche me lance une erreur comme suit:
error while accessing the file /Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>, error was: [Errno 102] Operation not supported on socket: u'/Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>'
Toute suggestion serait utile.
- 1.Cette fonctionnalité est particulièrement pratique pour enregistrer les raccordements au réseau, lorsque le contrôle de la machine pourrait être de plus en plus loin; 2.Devrait être corrigé par github.com/ansible/ansible/pull/16756 jctanner fusionné commettre 0d94d39 en ansible:devel sur Sep 23, 2016
Vous devez vous connecter pour publier un commentaire.
De copie à distance à des fichiers à distance, vous pouvez utiliser le synchroniser module '
delegate_to: source-server
ce mot-clé:Ce playbook pouvez exécuter à partir de votre machineC.
config.ssh.insert_key = false
à force de Les utiliser l'UN insecure_key pour accéder à toutes les machines. Mais maintenant, j'ai même pas obtenir un message d'erreur (on attend toujours). Aussi le bug github.com/ansible/ansible/issues/7250 dit qu'il n'est pas possible de copier de la télécommande à distance.mode=push
(oudelegate_to: serverB
, mais pas les deux).mode=push
doit être utilisé, mais dans cette situationdelegate_to: serverB
ne peut pas être utilisé, car cela rendraitserverB
la source et la destination.synchronize
module. Il a été source de confusion dans la doc officielle du serveur qui a été la src ou de la destination. Merci!serverB
dans cette commande? Depuis cela n'a été déléguée àserverA
et pas d'info surserverB
?serverA
etserverB
notation. La documentation officielle n'était pas assez clair comme @JohnnyQ mentionné. J'ai été en mesure d'utiliser votre exemple 1:1 de synchronisation. I. e.: 1 synchroniser à la n des hôtes dans une série (sans faire de plusieurs pièces de théâtre) plutôt que le comportement par défaut de faire la synchronisation de tous les hôtes. Pour plus de détails: stackoverflow.com/questions/46352179/...Comme ant31 l'a déjà souligné, vous pouvez utiliser le
synchroniser
module pour cela. Par défaut, le module de transfert de fichiers entre la machine de contrôle et l'actuel hôte distant (inventory_host
), mais qui peut être modifié à l'aide de la tâchedelegate_to
paramètre (il est important de noter que c'est un paramètre de la tâche, pas du module).Vous pouvez placer la tâche sur
ServerA
ouServerB
, mais vous devez ajuster la direction du transfert en conséquence (à l'aide de lamode
paramètre desynchronize
).La passation de la tâche sur
ServerB
Cette utilise la valeur par défaut
mode: push
, de sorte que le fichier est transféré de la délégué (ServerA
) à la distance actuelle (ServerB
).Cela peut sembler étrange, étant donné que la tâche a été placé sur
ServerB
(viahosts: ServerB
). Cependant, on doit garder à l'esprit que la tâche est en fait exécuté sur la déléguée de l'hôte, qui dans ce cas estServerA
. Afin de pousser (à partir deServerA
àServerB
) est en effet la bonne direction. Rappelez-vous aussi que nous ne pouvons pas simplement choisir de ne pas déléguer à tout, car cela signifierait que le transfert se passe entre le de contrôle de la machine etServerB
.La passation de la tâche sur
ServerA
Il utilise
mode: pull
pour inverser la direction de transfert. Encore une fois, gardez à l'esprit que la tâche est exécutée surServerB
, de sorte que le tirant est le bon choix.Warning: Identity file /Users/myuser/.ssh/id_servers not accessible
.command: hostname
réussit et des rapports en vertu de la inventory_hostname le nom d'hôte distant. toutes les utilisations ci-dessus delegate_to de cours. Merci à tous ceux qui peuvent aider ici!pull
etpush
semblent le mauvais sens? par exemple, si vous êtes à la copie de A à B, et que la tâche est en cours d'exécution sur B, sûrement, c'est pull, de ne pas pousser? (Une requête pas une critique, car il y a des commentaires sur GitHub, ce qui suggère ce module est assez "hacky")J'ai été en mesure de résoudre ce à l'aide de local_action de scp à un fichier de machineA à machineC et ensuite de copier le fichier à machineB.
Si vous avez besoin de synchroniser des fichiers entre deux nœuds distants via ansible vous pouvez utiliser ceci:
quand sur
remote_server
vous devez démarrage rsync en mode démon. Exemple Simple:Un moyen simple de copie utilisée module de transférer le fichier à partir d'un serveur à un autre
Voici playbook
Si vous voulez faire du rsync et l'utilisation de l'utilisateur personnalisés et personnalisé clé ssh, vous devez écrire cette touche dans les options de rsync.
Vous pouvez utiliser
deletgate
avecscp
trop:En raison de
delegate
la commande est exécutée sur le serveur et ilscp
's le fichier lui-même.