Necesito copiar el archivo de la máquina A a la máquina B, mientras que mi máquina de control desde donde ejecuto todas mis tareas ansible es la máquina C (máquina local)
He probado lo siguiente:
Use el comando scp en el módulo shell 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
Este enfoque sigue y nunca termina.
utilizar módulos de recuperación y copia
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
Este enfoque me arroja un error de la siguiente manera:
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>'
Cualquier sugerencia sería útil.

Respuestas:
Para copiar archivos de remoto a remoto, puede usar el módulo de sincronización con
delegate_to: source-serverla palabra clave ' ':Este libro de jugadas puede ejecutarse desde su máquina C.
fuente
config.ssh.insert_key = falsepara obligar a Vagrant a usar ONE insecure_key para acceder a todas las máquinas. Pero ahora ni siquiera recibo un mensaje de error (espera para siempre). También el error github.com/ansible/ansible/issues/7250 dice que no es posible copiar de un mando a otro.mode=push(odelegate_to: serverB, pero no ambos).mode=pushdebe usar, pero en esta situacióndelegate_to: serverBno se puede usar, porque ese seríaserverBel origen y el destino.Como ya señaló ant31, puede usar el
synchronizemódulo para esto. De forma predeterminada, el módulo transfiere archivos entre la máquina de control y el host remoto actual (inventory_host), sin embargo, eso se puede cambiar usando eldelegate_toparámetro de la tarea (es importante tener en cuenta que este es un parámetro de la tarea , no del módulo).Puede colocar la tarea en
ServerAoServerB, pero debe ajustar la dirección de la transferencia en consecuencia (utilizando elmodeparámetro desynchronize).Colocando la tarea en
ServerBEsto usa el predeterminado
mode: push, por lo que el archivo se transfiere desde el delegado (ServerA) al control remoto actual (ServerB).Esto puede sonar extraño, ya que la tarea se ha colocado en
ServerB(víahosts: ServerB). Sin embargo, hay que tener en cuenta que la tarea se ejecuta realmente en el host delegado , que en este caso esServerA. Entonces empujar (deServerAaServerB) es de hecho la dirección correcta. También recuerde que no podemos simplemente elegir no delegar en absoluto, ya que eso significaría que la transferencia ocurre entre la máquina de control yServerB.Colocando la tarea en
ServerAEsto se usa
mode: pullpara invertir la dirección de transferencia. Nuevamente, tenga en cuenta que la tarea se ejecuta realmenteServerB, por lo que tirar es la opción correcta.fuente
Warning: Identity file /Users/myuser/.ssh/id_servers not accessible.Pude resolver esto usando local_action para scp al archivo de machineA a machineC y luego copiando el archivo a machineB.
fuente
Si necesita sincronizar archivos entre dos nodos remotos a través de ansible, puede usar esto:
cuando
remote_serveresté encendido , debe iniciar rsync con el modo demonio. Ejemplo simple:fuente
Una forma sencilla de utilizar el módulo de copia para transferir el archivo de un servidor a otro
Aquí está el libro de jugadas
fuente
Si desea hacer rsync y usar un usuario personalizado y una clave ssh personalizada, debe escribir esta clave en las opciones de rsync.
fuente
También puedes usar
deletgateconscp:Porque
delegateel comando se ejecuta en el otro servidor yscpes el archivo para sí mismo.fuente