Cum să copiați fișiere între gazde la distanță în ansible

  • 0

Cum să copiați fișiere între servere la distanță în Ansible?. este scopul acestui articol. Toate articolele pe care le-am citit îmi dădeau sugestii, dar nimic practic. Am vrut pur și simplu să fac ansible rsync. Am vrut să execut rsync între gazde la distanță și să copiez fișiere între gazde la distanță.

Deci, aici este articolul orientat spre exemplu. În acest articol, vom discuta cele două opțiuni majore disponibile pentru a copia fișierele între serverele la distanță sau de la distanță la distanță.

Când vrem să copiem fișiere de la o gazdă la alta, în general, primul lucru care ne vine în minte este SCP și ansible are un modul dedicat pentru același nume COPY

Dacă doriți să copiați un fișier de la un Ansible Control Master la gazde la distanță, modulul COPY (scp) ar fi foarte bine. Dar avem nevoie de ceva mai mult atunci când dorim să copiem fișiere între gazdele la distanță sau să copiem fișiere între gazde la distanță.

Vom folosi unele dintre modulele ansible, cum ar fi copy, fetch, synchronize pentru a îndeplini cerința de copiere a fișierelor între gazde în ansible.

În timp ce suntem deja conștienți pentru ce este utilizat modulul Ansible Copy.

Iată introducerea simplă la Ansible Fetch și Ansible Synchronize.

Ansible Fetch este pentru a extrage fișierele de pe serverul de la distanță către mașina de control.

Ansible Synchronize este utilizat pentru a copia fișierele între serverele de la distanță (sau) gazdele țintă. Acest lucru este mai mult ca efectuarea RSYNC cu ajutorul Ansible.

Tabel de materii

Indexul

  1. Planul / Cerința
  2. Metoda1: Copierea fișierelor între gazde la distanță folosind modulul fetch
  3. Metoda2: Copierea fișierelor între gazde la distanță folosind modulul synchronize
    1. Synchronize Push
    2. Synchronize Pull
  4. Lovitura de execuție
  5. Referințe și alte articole conexe.

Planul / Cerința

Pentru a începe, haideți să definim noi înșine câteva cerințe, astfel încât să putem relaționa și să fim pe aceeași pagină.

Avem două servere numite după cum urmează

  1. mwiappi01
  2. mwiapp02

Cerința este de a copia un fișier de la mwiapp01 la mwiapp02. Înainte de a continua, Aceasta este diagrama de infrastructură a configurației noastre.

Nu vă confundați cu numele Master. Este doar o mașină de control. Amintiți-vă că Ansible este mai puțin agent. deci nu există master și slave.

Metoda1: Copy from app01 to app02 using fetch module

NU este necesară autentificarea SSH între nodurile la distanță pentru această metodă

Aceasta este cea mai bună și mai ușoară opțiune pentru a transfera fișiere între nodurile la distanță Atunci când nu aveți activată autentificarea bazată pe chei SSH între nodurile la distanță. Deși, nu este cea mai scurtă cale (sau) cea mai bună. Funcționează bine atunci când obiectivul nostru principal este de a face treaba, indiferent de abordare.

este un proces în doi pași când vine vorba de această metodă.

Pasul 1: Preluarea fișierului de pe serverul de la distanță (sursă) către ansible master

Pasul 2: Împingerea (copierea) fișierului de pe ansible master pe serverul de la distanță ( destinație)

Aici masterul acționează ca un buffer în care fișierele sunt stocate temporar și apoi transferate.

Considerați următorul playbook care realizează ambele sarcini menționate mai sus.

--- - hosts: app tasks: - name: Fetch the file from the mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}}" - name: Copy the file from master to mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}}"

aici folosim "when" pentru a efectua execuția bazată pe condiționalitate și inventory_hostname este variabila încorporată ansible care va indica numele de gazdă la distanță a execuției curente.

Uneori este posibil să fie nevoie să folosiți ansible_hostname în locul lui inventory_hostname

În principiu, instruim Ansible să execute sarcina Fetch numai pe serverul mwiapp01 și sarcina de copiere numai atunci când mwiapp02 este gazda curentă de execuție la distanță.

Metoda 2: Copierea de la app01 la app02 utilizând modulul de sincronizare

Autentificarea bazată pe chei SSH trebuie să fie activată între gazdele la distanță

Pentru ca modulul Synchronize să funcționeze fără probleme, autentificarea bazată pe chei SSH trebuie să fie activată între nodurile la distanță. în caz contrar, sarcina de sincronizare se va bloca și la fel și jocul Ansible.

Cu alte cuvinte, nodurile la distanță ar trebui să poată să se conecteze unul la celălalt fără a fi nevoie să introducă manual parola. Realizăm acest lucru în cea mai mare parte cu ajutorul cheii SSH.

Cum am spus mai devreme. Ansible Synchronize seamănă mai mult cu Ansible RSYNC. caracteristica tipică rsync a Linux.

Pentru a ști cum să activați autentificarea bazată pe cheie doar în câteva secunde, consultați următorul articol

Activați autentificarea bazată pe cheie SSH folosind Ansible

După ce suntem pregătiți cu autentificarea bazată pe cheie SSH. Suntem gata să jucăm piesa. ( playbook).

Există două metode de copiere a fișierelor folosind modulul Synchronize

  1. Synchronize Pull
  2. Synchronize Push

Considerăm următoarele playbook-uri care copiază fișierul de la mwiapp01 la mwiapp02 folosind atât metoda Synchronize Pull, cât și Synchronize Push

Synchronize Pull

Destinat lui: Source Server (mwiapp01)

Delegated to and Executed on: Serverul de destinație (mwiapp02)

Explicație: Deoarece este executat pe serverul de destinație unde trebuie să ajungă fișierul. Sarcina este de a extrage fișierul de pe serverul de origine (sau) sursă.

Iată playbook-ul care se execută pe serverul de destinație mwiapp02 cu ajutorul delegării și pulls fișierul de pe mwiapp01 pe mwiapp02

---- name: Sync Pull task - Executed on the Destination host "{{groups}}" hosts: "{{groups}}}" utilizator: wlsusr sarcini: - nume: Copierea fișierului de la mwiapp01 la mwiapp02 folosind metoda Pull etichete: sync-pull sincronizare: src: "{{ item }}" dest: "{{ item }}" mod: pull delegate_to: "{{{groups}}"" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"

Ați putea crede că playbook-ul este setat să se execute pe primul server, deoarece directiva hosts vizează primul server. hosts: "{{group}}" mwiapp01

Dar trebuie să observați că, de fapt, executăm această sarcină pe al doilea server mwiapp02 cu ajutorul delegate_to

Vezi următoarea înregistrare de ecran pentru a înțelege mai bine acest lucru.

Synchronize Push

Targeted to: Destination Server (mwiapp02)

Delegated to and Executed on: Serverul sursă (mwiapp01)

Explicație: Deoarece se execută pe serverul sursă, unde fișierul este deja prezent. Sarcina este de a împinge fișierul pe serverul de destinație

Iată playbook-ul care se execută pe serverul sursă mwiapp01 și pushes fișierul de la 01 la 02

- nume: Sync Push task - Executat pe gazda sursă "{{groups}}" hosts: "{{groups}}}" utilizator: wlsusr sarcini: - nume: Copiază fișierul de pe mwiapp01 pe mwiapp02 folosind metoda Push etichete: sync-push sincronizare: src: "{{ item }}" dest: "{{ item }}" mod: push delegate_to: "{{{groups}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"

Ați putea crede că playbook-ul este setat să se execute pe al doilea server, deoarece directiva hosts vizează primul server. hosts: "{{group}}" mwiapp02

Dar trebuie să observați că, de fapt, executăm această sarcină pe primul server mwiapp01 cu ajutorul delegate_to

Cartela de joc este alcătuită din două liste de sarcini bazate pe gazdă. Prima se execută cu ajutorul Synchronize Pull se va executa pe mwiapp02și a doua cu Synchronize Push se va executa pe mwiapp01

Chiar dacă playbook-ul este inteligibil ( ușor de înțeles). Simt că există câteva linii ciudate care au nevoie de mai multe explicații, cum ar fi "{{groups}}"

Reprezintă primul element (sau) server al grupului de gazde numit „app” la fel ca un array

Sper că următoarea imagine va fi mai clară.

Alte două linii importante din fișier sunt următoarele

  • mode Reprezintă modelul Synchronize. Fie Synchronize pull, fie Synchronize push
  • delegate_to Îi spune lui ansible, unde ar trebui să fie executată efectiv sarcina (sau) comanda.

Sperăm că poate ați înțeles până acum. delegate_to și hosts împreună cu mode în ansible-playbook, lucrează împreună pentru a face posibilă execuția (sau) copierea la distanță între noduri la distanță.

Execution Output

În captura de ecran precedentă, am executat 3 comenzi. Prima și ultima este o comandă Ansible ad-hoc pentru a verifica disponibilitatea fișierului din directorul /tmp în mwiapp02server

utilizăm --limit pentru a executa comanda într-un singur server, deși folosim grupul de gazde care conține două servere.

am copiat cu succes un fișier de la mwiapp01 la mwiapp02 folosind ambele module Fetch și Synchronize.

Concluzie

În acest post, am învățat și am executat cu succes cum să copiem fișiere între gazde la distanță folosind modulele ansible copy și fetch. Am învățat două metode de copiere a fișierelor între gazde folosind ansible.

Sperăm că acest articol vă este util.

  1. Referință la modulul Ansible Copy
  2. Referință la modulul Ansible Fetch
  3. Referință la modulul Ansible Synchronize
  4. Cum să copiați sau să schimbați cheia SSH între mai multe gazde – Ansible
  5. Cum să schimbați IP-ul și să actualizați fișierul /etc/hosts în mai multe gazde – Ansible

Sperăm că acest articol vă ajută. Dacă vă place acest articol, vă rugăm să îl distribuiți

.