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
- A terv / A követelmény
- Módszer1: Fájlok másolása távoli hosztok között a fetch modul segítségével
- Módszer2: Fájl másolása távoli hosztok között a synchronize modul segítségével
- Synchronize Push
- Synchronize Pull
- A végrehajtás kimenete
- 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ő
- mwiappi01
- 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 ainventory_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
- Synchronize Pull
- 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 /tmp
könyvtár alatti mwiapp02
kiszolgáló
fájl elérhetőségének ellenőrzésére
mwiapp02
kiszolgá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.
- Ansible Copy modul hivatkozás
- Ansible Fetch modul hivatkozás
- Ansible Synchronize modul hivatkozás
- How to Copy or Exchange SSH Key between multiple hosts – Ansible
- 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