How to Copy files between remote hosts in ansible

  • 0

How to copy files between remote servers in Ansible ?. ez a cikk célja. Minden cikk, amit elmentem és elolvastam, csak javaslatokat adott, de semmi gyakorlatiasat. Egyszerűen csak ansible rsync-t akartam csinálni. Szerettem volna végrehajtani rsync a távoli hosztok között és másolni a fájlokat a távoli hosztok között.

Szóval itt van a példaorientált cikk. Ebben a bejegyzésben a két fő lehetőséget fogjuk megvitatni, amelyek a fájlok távoli kiszolgálók közötti vagy távoli távoliak közötti másolására rendelkezésre állnak.

Amikor fájlokat akarunk másolni egyik állomásról egy másikra, általában az első dolog, ami eszünkbe jut, az SCP és az ansible rendelkezik egy dedikált modullal az azonos nevű COPY

Ha egy fájlt akarunk másolni egy Ansible Control Masterről távoli állomásokra, a COPY (scp) modul csak jó lenne. De valami többre van szükségünk, ha a fájlokat a távoli hosztok között akarjuk másolni, vagy a távoliakról távoliakra szeretnénk másolni a fájlokat.

Az ansible néhány modulját fogjuk használni, mint a copy, fetch, synchronize, hogy teljesítsük az ansible-ban a fájlok hosztok közötti másolásának követelményét.

Míg már tisztában vagyunk azzal, hogy mire használják az Ansible Copy modult.

Itt van az Ansible Fetch és Ansible Synchronize egyszerű bemutatása.

Az Ansible Fetch arra szolgál, hogy a fájlokat a távoli szerverről a vezérlő gépre húzza.

Az Ansible Synchronize arra szolgál, hogy a fájlokat távoli szerverek (vagy) célállomás között másolja. Ez inkább az RSYNC végrehajtására hasonlít az Ansible segítségével.

Tartalomjegyzék

Az index

  1. A terv / A követelmény
  2. Módszer1: Fájlok másolása távoli hosztok között a fetch modul segítségével
  3. Módszer2: Fájl másolása távoli hosztok között a synchronize modul segítségével
    1. Synchronize Push
    2. Synchronize Pull
  4. A végrehajtás kimenete
  5. Hivatkozások és egyéb kapcsolódó cikkek.

A terv / A követelmény

A kezdéshez határozzunk meg magunknak néhány követelményt, hogy, tudjunk kapcsolódni és egy oldalon állni.

Létezik két szerverünk, melyek neve a következő

  1. mwiappi01
  2. mwiapp02

A követelmény egy fájl másolása az mwiapp01-ről az mwiapp02-re. Mielőtt folytatnánk, Ez a beállításunk infrastruktúra-diagramja.

Ne tévessze össze a Master név. Ez csak egy vezérlőgép. Ne feledjük, hogy az Ansible ügynök nélküli. így nincs master és slave.

Módszer1: Másolás app01-ből app02-be a fetch modul segítségével

Ehhez a módszerhez NINCS szükség SSH hitelesítésre a távoli csomópontok között

Ez a legjobb és legegyszerűbb lehetőség a fájlok átvitelére a távoli csomópontok között Ha nincs engedélyezve az SSH kulcs alapú hitelesítés a távoli csomópontok között. Bár, ez nem a legrövidebb út (vagy) beeline. Jól működik ott, ahol az elsődleges célunk a munka elvégzése, bármi legyen is a megközelítés.

Ez a módszer kétlépcsős folyamat, amikor erről a módszerről van szó.

1. lépés: A fájl lekérése a távoli szerverről (forrás) az ansible masterre

2. lépés: A fájl áthelyezése (másolása) az ansible masterről a távoli szerverre ( célállomás)

A master itt úgy működik, mint egy puffer, ahol a fájlokat ideiglenesen tárolják, majd átviszik.

Lássuk a következő playbookot, amely mindkét fent említett feladatot elvégzi.

--- - 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: A fájl másolása a masterből az mwiapp02-be copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}}"

itt a "when" -t használjuk a feltételes alapú végrehajtás végrehajtásához, a inventory_hostname pedig az ansible beépített változója, amely az aktuális végrehajtás távoli hostnevére mutat.

Néha szükség lehet a ansible_hostname használatára a inventory_hostname

Az Ansible-t alapvetően arra utasítjuk, hogy a Fetch feladatot csak a mwiapp01 szerveren hajtsa végre, a copy feladatot pedig csak akkor, ha a mwiapp02 az aktuális távoli végrehajtási host.

2. módszer: Másolás az app01-ről az app02-re a szinkronizáló modul segítségével

SSH kulcs alapú hitelesítésnek engedélyezve kell lennie a távoli hosztok között

A szinkronizáló modul problémamentes működéséhez az SSH kulcs alapú hitelesítést engedélyezni kell a távoli csomópontok között. Ellenkező esetben a szinkronizálási feladat elakad, és ezzel együtt az Ansible játéka is.

Más szóval, a távoli csomópontoknak képesnek kell lenniük arra, hogy bejelentkezzenek egymáshoz anélkül, hogy a jelszót kézzel kellene megadniuk. Ezt többnyire SSH kulcs segítségével érjük el.

Mint korábban említettük. Az Ansible Synchronize inkább az Ansible RSYNC. a Linux tipikus rsync funkciója.

Hogy megtudjuk, hogyan engedélyezhetjük a kulcsalapú hitelesítést pillanatok alatt, olvassuk el a következő cikket

SSH kulcsalapú hitelesítés engedélyezése az Ansible segítségével

Ha már készen vagyunk az SSH kulcsalapú hitelesítéssel. Készen állunk a játékra. ( playbook).

A Synchronize modul segítségével kétféle módszerrel másolhatunk fájlokat

  1. Synchronize Pull
  2. Synchronize Push

Megfontoljuk a következő playbookot, amely a Synchronize Pull és a Synchronize Push módszerrel egyaránt a mwiapp01-ből a mwiapp02-be másolja a fájlt

Synchronize Pull

Targeted to: Forráskiszolgáló (mwiapp01)

Delegálva és végrehajtva: Célkiszolgáló (mwiapp02)

Magyarázat: Mivel a célkiszolgálón kerül végrehajtásra, ahová a fájlnak érkeznie kell. A feladat a fájl áthúzása az Origin (vagy) forráskiszolgálóról.

Itt a playbook, amely a delegálás segítségével a célkiszolgálón mwiapp02 végrehajtásra kerül és pulls a fájlt az mwiapp01-ről az mwiapp02-re

---- név: Sync Pull task - Executed on the Destination host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: A fájl másolása a mwiapp01-ből a mwiapp02-be a Pull módszer segítségével címkék: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}}" mode: pull delegate_to: "{{groups}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"

Azt hihetnénk, hogy a playbook úgy van beállítva, hogy az első szerveren fusson, mivel a hosts direktíva az első szervert célozza meg. hosts: "{{group}}" mwiapp01

De észre kell vennünk, hogy valójában a második kiszolgálón mwiapp02 hajtjuk végre a feladatot a delegate_to

Azért, hogy ezt jobban megértsük, nézzük meg a következő képernyőrekordot.

Synchronize Push

Targeted to: Célkiszolgáló (mwiapp02)

Delegálva és végrehajtva:

Magyarázat: Forráskiszolgáló (mwiapp01)

Magyarázat: Mivel a végrehajtás a forráskiszolgálón történik, ahol a fájl már jelen van. A feladat a fájlt a célkiszolgálóra tolja

Itt a playbook, amely a forráskiszolgálón mwiapp01 és pushes a fájlt 01-ről 02-re hajtja végre

- név: Sync Push task - Executed on source host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: A fájl másolása a mwiapp01-ről a mwiapp02-re Method Push címkékkel: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}}" mode: push delegate_to: "{{groups}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"

Azt hihetnénk, hogy a playbook a második szerveren van beállítva végrehajtásra, mivel a hosts direktíva az első szervert célozza meg. hosts: "{{group}}" mwiapp02

De észre kell vennünk, hogy valójában az első mwiapp01 szerveren hajtjuk végre ezt a feladatot a delegate_to

A Playbook két host alapú task listából áll. Az első a Synchronize Pull segítségével fut a mwiapp02és a második a Synchronize Push segítségével a mwiapp01

A playbook érthető ( könnyen érthető). Úgy érzem van néhány furcsa sor, ami több magyarázatra szorul, mint például "{{groups}}"

Az “app” nevű host csoport első elemét (vagy) szerverét ábrázolja, mint egy tömböt

Remélem a következő kép egyértelművé teszi.

A másik két fontos sor a fájlban a következő

  • mód Ez a Synchronize modelljét ábrázolja. Vagy Synchronize pull vagy Synchronize push
  • delegate_to Megmondja az ansible-nak, hogy a feladatot (vagy) parancsot valójában hol kell végrehajtani.

Remélem, mostanra már talán megértetted. A delegate_to és a hosts az ansible-playbookban lévő mode-val együtt, együttesen teszik lehetővé a távoli csomópontok közötti távoli végrehajtást (vagy) másolást.

Végrehajtás kimenete

Az előző képernyőképen 3 parancsot hajtottunk végre. Az első és az utolsó egy Ansible ad-hoc parancs a /tmpkönyvtár alatti mwiapp02kiszolgáló

fájl elérhetőségének ellenőrzésére mwiapp02kiszolgáló

--limit használatával csak egy kiszolgálón hajtjuk végre a parancsot, bár mi a hostgroupot használjuk, amely két kiszolgálót tartalmaz.

sikeresen másoltunk egy fájlt az mwiapp01-ről az mwiapp02-re a Fetch és a Synchronize modulok használatával.

Következtetés

Ebben a bejegyzésben sikeresen megtanultuk és végrehajtottuk, hogyan másolhatunk fájlokat távoli hosztok között az ansible copy és fetch modulok használatával. Megtanultunk két módszert a fájlok másolására a hosztok között az ansible segítségével.

Remélem, hasznosnak találja ezt a cikket.

  1. Ansible Copy modul hivatkozás
  2. Ansible Fetch modul hivatkozás
  3. Ansible Synchronize modul hivatkozás
  4. How to Copy or Exchange SSH Key between multiple hosts – Ansible
  5. How to exchange the IP and update /etc/hosts file in multiple hosts – Ansible

Hope this article helps. Ha tetszett ez a cikk, kérjük, ossza meg