Saya perlu menyalin file dari mesin A ke mesin B sedangkan mesin kontrol saya dari mana saya menjalankan semua tugas yang mungkin saya adalah mesin C (mesin lokal)
Saya telah mencoba yang berikut ini:
Gunakan perintah scp dalam modul shell dari ansible
hosts: machine2
user: user2
tasks:
- name: Copy file from machine1 to machine2
shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1
Pendekatan ini terus berjalan dan tidak pernah berakhir.
gunakan modul ambil & salin
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
Pendekatan ini memberi saya kesalahan sebagai berikut:
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>'
Setiap saran akan membantu.
Jawaban:
Untuk menyalin file dari jarak jauh, Anda dapat menggunakan modul sinkronisasi dengan
delegate_to: source-server
kata kunci ' ':Playbook ini dapat dijalankan dari mesin AndaC.
sumber
config.ssh.insert_key = false
untuk memaksa Vagrant menggunakan SATU insecure_key untuk mengakses semua mesin. Tapi sekarang saya bahkan tidak mendapatkan pesan kesalahan (menunggu selamanya). Juga bug github.com/ansible/ansible/issues/7250 mengatakan bahwa tidak mungkin menyalin dari jarak jauh ke jarak jauh.mode=push
(ataudelegate_to: serverB
, tetapi tidak keduanya).mode=push
harus digunakan, tetapi dalam situasidelegate_to: serverB
ini tidak dapat digunakan, karena itu akan membuatserverB
sumber dan tujuan.Seperti yang telah ditunjukkan oleh ant31, Anda dapat menggunakan
synchronize
modul untuk ini. Secara default, modul mentransfer file antara mesin kontrol dan host jarak jauh saat ini (inventory_host
), namun hal itu dapat diubah menggunakandelegate_to
parameter tugas (penting untuk diperhatikan bahwa ini adalah parameter tugas , bukan modul).Anda dapat menempatkan tugas di salah satu
ServerA
atauServerB
, tetapi Anda harus menyesuaikan arah transfer yang sesuai (menggunakanmode
parametersynchronize
).Menempatkan tugas di
ServerB
Ini menggunakan default
mode: push
, sehingga file ditransfer dari delegate (ServerA
) ke remote (ServerB
) saat ini.Ini mungkin terdengar aneh, karena tugas telah ditempatkan pada
ServerB
(melaluihosts: ServerB
). Namun, harus diingat bahwa tugas sebenarnya dijalankan pada host yang didelegasikan , yang dalam hal ini adalahServerA
. Jadi mendorong (dariServerA
keServerB
) memang arah yang benar. Juga ingat bahwa kita tidak bisa begitu saja memilih untuk tidak mendelegasikan sama sekali, karena itu berarti transfer terjadi antara mesin kontrol danServerB
.Menempatkan tugas di
ServerA
Ini digunakan
mode: pull
untuk membalikkan arah transfer. Sekali lagi, perlu diingat bahwa tugas sebenarnya dijalankanServerB
, jadi menarik adalah pilihan yang tepat.sumber
Warning: Identity file /Users/myuser/.ssh/id_servers not accessible
.Saya dapat menyelesaikan ini menggunakan local_action ke scp ke file dari machineA ke machineC dan kemudian menyalin file ke machineB.
sumber
Jika Anda perlu menyinkronkan file antara dua node jarak jauh melalui ansible, Anda dapat menggunakan ini:
saat di
remote_server
Anda perlu memulai rsync dengan mode daemon. Contoh sederhana:sumber
Cara sederhana untuk menggunakan modul salin untuk mentransfer file dari satu server ke server lain
Ini playbook
sumber
Jika Anda ingin melakukan rsync dan menggunakan pengguna kustom dan kunci ssh kustom, Anda perlu menulis kunci ini di opsi rsync.
sumber
Anda juga dapat menggunakan
deletgate
denganscp
:Karena
delegate
perintah dijalankan di server lain dan ituscp
adalah file itu sendiri.sumber