Je dois copier la machine de formulaire A sur la machine B alors que ma machine de contrôle à partir de laquelle j'exécute toutes mes tâches ansible est la machine C (machine locale)
J'ai essayé ce qui suit:
Utilisez la commande scp dans le module shell d'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 continue et ne s'arrête jamais.
utiliser des modules d'extraction et de copie
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.
Réponses:
Pour copier des fichiers distants vers distants, vous pouvez utiliser le module de synchronisation avec
delegate_to: source-server
le mot-clé ' ':Ce playbook peut fonctionner à partir de votre machine C.
la source
config.ssh.insert_key = false
Vagrant pour forcer Vagrant à utiliser la clé ONE insecure_key pour accéder à toutes les machines. Mais maintenant, je n'obtiens même pas de message d'erreur (cela attend indéfiniment). Le bogue github.com/ansible/ansible/issues/7250 indique également qu'il n'est pas possible de copier d'une télécommande à une autre.mode=push
(oudelegate_to: serverB
, mais pas les deux).mode=push
devrait être utilisé, mais dans cette situationdelegate_to: serverB
ne peut pas être utilisé, car cela feraitserverB
la source et la destination.Comme ant31 l'a déjà souligné, vous pouvez utiliser le
synchronize
module pour cela. Par défaut, le module transfère des fichiers entre la machine de contrôle et l'hôte distant actuel (inventory_host
), mais cela peut être modifié en utilisant ledelegate_to
paramètre de la tâche (il est important de noter qu'il s'agit d'un paramètre de la tâche , pas du module).Vous pouvez placer la tâche sur l'un
ServerA
ou l' autreServerB
, mais vous devez ajuster la direction du transfert en conséquence (en utilisant lemode
paramètre desynchronize
).Placer la tâche sur
ServerB
Cela utilise la valeur par défaut
mode: push
, de sorte que le fichier est transféré du délégué (ServerA
) vers le remote (ServerB
) actuel .Cela peut sembler étrange, car la tâche a été placée sur
ServerB
(viahosts: ServerB
). Cependant, il faut garder à l'esprit que la tâche est réellement exécutée sur l'hôte délégué , ce qui dans ce cas l'estServerA
. Donc pousser (deServerA
versServerB
) est en effet la bonne direction. Rappelez-vous également que nous ne pouvons pas simplement choisir de ne pas déléguer du tout, car cela signifierait que le transfert se produit entre la machine de contrôle etServerB
.Placer la tâche sur
ServerA
Cela permet
mode: pull
d'inverser le sens de transfert. Encore une fois, gardez à l'esprit que la tâche est réellement exécutéeServerB
, donc tirer est le bon choix.la source
Warning: Identity file /Users/myuser/.ssh/id_servers not accessible
.Si vous avez besoin de synchroniser des fichiers entre deux nœuds distants via ansible, vous pouvez utiliser ceci:
quand
remote_server
vous devez démarrer rsync avec le mode démon. Exemple simple:la source
J'ai pu résoudre ce problème en utilisant local_action pour scp vers un fichier de machineA vers machineC, puis en copiant le fichier vers machineB.
la source
Un moyen simple d'utiliser le module de copie pour transférer le fichier d'un serveur à un autre
Voici le playbook
la source
Si vous voulez faire rsync et utiliser un utilisateur personnalisé et une clé ssh personnalisée, vous devez écrire cette clé dans les options rsync.
la source
Vous pouvez également utiliser
deletgate
avecscp
:En raison de
delegate
la commande est exécutée sur l'autre serveur et c'estscp
le fichier à lui-même.la source