Jak kopírovat soubory mezi vzdálenými hostiteli v ansible
- 0
Jak kopírovat soubory mezi vzdálenými servery v Ansible ?. je účelem tohoto článku. Každý článek, který jsem prošel a přečetl, mi dával návrhy, ale nic praktického. Chtěl jsem prostě udělat ansible rsync. Chtěl jsem spustit rsync
mezi vzdálenými hostiteli a kopírovat soubory mezi vzdálenými hostiteli.
Takže zde je článek zaměřený na příklady. V tomto příspěvku probereme dvě hlavní možnosti, které jsou k dispozici pro kopírování souborů mezi vzdálenými servery nebo ze vzdáleného na vzdálený.
Když chceme kopírovat soubory z jednoho hostitele na jiného hostitele, obecně nás jako první napadne SCP a ansible má pro stejnojmenný modul vyhrazený COPY
Pokud chcete zkopírovat soubor z řídicí jednotky ansible na vzdálené hostitele, bude vám stačit modul COPY (scp). Když ale chceme kopírovat soubory mezi vzdálenými hostiteli nebo kopírovat soubory mezi vzdálenými hostiteli, potřebujeme něco víc.
Pro splnění požadavku kopírování souborů mezi hostiteli v systému ansible použijeme některé z modulů ansible, jako je copy, fetch, synchronize.
Již víme, k čemu slouží modul Ansible Copy.
Zde je jednoduchý úvod do modulů Ansible Fetch a Ansible Synchronize.
Modul Ansible Fetch slouží ke stažení souborů ze vzdáleného serveru na řídicí počítač.
Modul Ansible Synchronize slouží ke kopírování souborů mezi vzdálenými servery (nebo) cílovými hostiteli. Jedná se spíše o provedení RSYNC pomocí Ansible.
Obsah
Rejstřík
- Plán / Požadavek
- Metoda1: Kopírování souborů mezi vzdálenými hostiteli pomocí modulu fetch
- Metoda2: Kopírování souboru mezi vzdálenými hostiteli pomocí modulu synchronize
- Synchronize Push
- Synchronize Pull
- Výstup provedení
- Reference a další související články.
Plán / Požadavek
Na začátek si sami definujme nějaký požadavek, abychom, mohli navázat a být na stejné vlně.
Máme dva servery pojmenované takto
- mwiappi01
- mwiapp02
Požadavkem je zkopírovat soubor z mwiapp01 do mwiapp02. Než budeme pokračovat, Toto je schéma infrastruktury našeho nastavení.
Nenechte se zmást názvem Master. Jedná se pouze o řídicí stroj. Nezapomeňte, že Ansible je bez agentů. takže neexistuje žádný master a slave.
Metoda1: Kopírování z app01 do app02 pomocí modulu fetch
Pro tuto metodu není vyžadováno žádné ověřování SSH mezi vzdálenými uzly
Jedná se o nejlepší a nejjednodušší možnost přenosu souborů mezi vzdálenými uzly Pokud nemáte povoleno ověřování na základě klíčů SSH mezi vzdálenými uzly. Ačkoli se nejedná o nejkratší cestu (ani) beeline. Funguje dobře tam, kde se primárně soustředíme na dokončení práce, ať už je přístup jakýkoli.
Jde-li o tuto metodu, jedná se o dvoufázový proces.
Krok1: Načtení souboru ze vzdáleného serveru (zdrojového) do hlavního serveru ansible
Krok2: Přesunutí (kopírování) souboru z hlavního serveru ansible na vzdálený server ( cílový)
Zde hlavní server funguje jako vyrovnávací paměť, kam se soubory dočasně uloží a poté přenesou.
Považte následující playbook, který provádí obě tyto výše uvedené úlohy.
--- - hosts: app tasks: - name: Fetch the file from mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}" - name: Zkopíruje soubor z master do mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}"
zde použijeme "when"
k provedení podmíněného spuštění a inventory_hostname
je vestavěná proměnná ansible, která bude ukazovat na aktuální vzdálené jméno hostitele spuštění.
Někdy může být potřeba použít
ansible_hostname
místoinventory_hostname
V podstatě dáváme Ansible pokyn, aby provedla úlohu Fetch pouze na serveru mwiapp01
a úlohu copy pouze tehdy, když je mwiapp02
aktuální hostitel vzdáleného provádění.
Metoda 2: Kopírování z aplikace01 do aplikace02 pomocí modulu synchronize
Mezi vzdálenými hostiteli musí být povoleno ověřování na základě klíčů SSH
Pro bezproblémové fungování modulu Synchronize musí být mezi vzdálenými uzly povoleno ověřování na základě klíčů SSH. Jinak se úloha synchronizace zasekne a s ní i vaše hra Ansible.
Jinými slovy, vzdálené uzly by měly být schopny se k sobě přihlásit, aniž by bylo nutné zadávat heslo ručně. Toho dosáhneme většinou pomocí klíče SSH.
Jak již bylo řečeno. Ansible Synchronize je spíše Ansible RSYNC. typická rsync
funkce systému Linux.
Chcete-li vědět, jak zapnout ověřování na základě klíče během několika sekund, přečtěte si následující článek
Zapnutí ověřování na základě klíče SSH pomocí systému Ansible
Jakmile budeme mít hotové ověřování na základě klíče SSH. Jsme připraveni hrát hru. ( playbook).
Existují dvě metody kopírování souborů pomocí modulu Synchronize
- Synchronize Pull
- Synchronize Push
Zvažte následující playbooky, které kopírují soubor z mwiapp01
do mwiapp02
pomocí metody Synchronize Pull i Synchronize Push
Synchronize Pull
Cíleno na: Zdrojový server (mwiapp01)
Delegováno na a provedeno na: Cílový server (mwiapp02)
Vysvětlení: Jelikož se provádí na cílovém serveru, kam má soubor dorazit. Úkolem je vytáhnout soubor z původního (nebo) zdrojového serveru.
Tady je playbook, který se provede na cílovém serveru mwiapp02
pomocí delegace a pulls
soubor z mwiapp01 na mwiapp02
---- název: Sync Pull task - Executed on Destination host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups}}" register: syncfile run_once: true with_items: -
Mohlo by se zdát, že playbook je nastaven tak, aby se spouštěl na prvním serveru, protože direktiva hosts
je zaměřena na první server. hosts: "{{group}}"
mwiapp01
Musíte si však všimnout, že ve skutečnosti provádíme tuto úlohu na druhém serveru mwiapp02
pomocí delegate_to
Pro lepší pochopení se podívejte na následující záznam na obrazovce.
Synchronize Push
Targeted to: Cílový server (mwiapp02)
Delegováno na a provedeno na: Zdrojový server (mwiapp01)
Vysvětlení: Jelikož se provádí na zdrojovém serveru, kde se soubor již nachází. Úkolem je odeslat soubor na cílový server
Tady je playbook, který se provede na zdrojovém serveru mwiapp01
a pushes
soubor z 01 na 02
- název: Sync Push task - Executed on source host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups}}" register: syncfile with_items: -
Mohlo by se zdát, že playbook je nastaven tak, aby se spouštěl na druhém serveru, protože direktiva hosts
je zaměřena na první server. hosts: "{{group}}"
mwiapp02
Musíte si ale všimnout, že ve skutečnosti tuto úlohu provádíme na prvním serveru mwiapp01
pomocí delegate_to
Seznam úloh Playbook se skládá ze seznamu dvou úloh založených na hostiteli. První spuštěná pomocí Synchronize Pull se spustí na mwiapp02
a druhá pomocí Synchronize Push se spustí na mwiapp01
Přestože je playbook srozumitelný ( snadno pochopitelný). Mám pocit, že jsou zde některé zvláštní řádky, které je třeba více vysvětlit, jako například "{{groups}}"
Představuje první prvek (nebo) server skupiny hostitelů s názvem „app“ stejně jako pole
Doufám, že následující obrázek by to objasnil.
Další dva důležité řádky v souboru jsou následující
- mode Představuje model Synchronize. Buď Synchronize pull, nebo Synchronize push
- delegate_to Říká ansible, kde se má úloha (nebo) příkaz vlastně provést.
Doufám, že už jste to snad pochopili. delegate_to
a hosts
spolu s mode
v ansible-playbook spolupracují, aby umožnily vzdálené provedení (nebo) kopírování mezi vzdálenými uzly.
Výstup provedení
Na předchozím obrázku jsme provedli 3 příkazy. První a poslední je ad-hoc příkaz Ansible pro kontrolu dostupnosti souboru v adresáři /tmp
v mwiapp02
serveru
používáme
--limit
pro provedení příkazu pouze na jednom serveru, ačkoli používáme hostgroup, která obsahuje dva servery.
úspěšně jsme zkopírovali soubor z mwiapp01 na mwiapp02 pomocí modulů Fetch a Synchronize.
Závěr
V tomto příspěvku jsme se úspěšně naučili a provedli kopírování souborů mezi vzdálenými hostiteli pomocí modulů ansible copy a fetch. Naučili jsme se dvě metody kopírování souborů mezi hostiteli pomocí ansible.
Doufám, že pro vás bude tento článek užitečný.
- Odkaz na modul Ansible Copy
- Odkaz na modul Ansible Fetch
- Odkaz na modul Ansible Synchronize
- Jak zkopírovat nebo vyměnit klíč SSH mezi více hostiteli – Ansible
- Jak vyměnit IP a aktualizovat soubor /etc/hosts ve více hostitelích – Ansible
Snad vám tento článek pomůže. Pokud se vám tento článek líbí, sdílejte ho prosím