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-server
la palabra clave ' ':Este libro de jugadas puede ejecutarse desde su máquina C.
fuente
config.ssh.insert_key = false
para 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=push
debe usar, pero en esta situacióndelegate_to: serverB
no se puede usar, porque ese seríaserverB
el origen y el destino.Como ya señaló ant31, puede usar el
synchronize
mó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_to
pará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
ServerA
oServerB
, pero debe ajustar la dirección de la transferencia en consecuencia (utilizando elmode
parámetro desynchronize
).Colocando la tarea en
ServerB
Esto 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 (deServerA
aServerB
) 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
ServerA
Esto se usa
mode: pull
para 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_server
esté 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
deletgate
conscp
:Porque
delegate
el comando se ejecuta en el otro servidor yscp
es el archivo para sí mismo.fuente